From 7c1247410093ed6e687ce03fe4e2a6f8eb7bc0be Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 17:06:22 -0600 Subject: [PATCH 1/8] don't import mempool --- client/broadcast.go | 9 +++++++-- client/broadcast_test.go | 33 +++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/client/broadcast.go b/client/broadcast.go index f3573a5c5182..4dcface15c67 100644 --- a/client/broadcast.go +++ b/client/broadcast.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/tendermint/tendermint/mempool" + "github.com/pkg/errors" tmtypes "github.com/tendermint/tendermint/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -55,7 +55,7 @@ func CheckTendermintError(err error, tx tmtypes.Tx) *sdk.TxResponse { txHash := fmt.Sprintf("%X", tx.Hash()) switch { - case strings.Contains(errStr, strings.ToLower(mempool.ErrTxInCache.Error())): + case strings.Contains(errStr, strings.ToLower(ErrTxInCache.Error())): return &sdk.TxResponse{ Code: sdkerrors.ErrTxInMempoolCache.ABCICode(), Codespace: sdkerrors.ErrTxInMempoolCache.Codespace(), @@ -81,6 +81,11 @@ func CheckTendermintError(err error, tx tmtypes.Tx) *sdk.TxResponse { } } +var ( + // ErrTxInCache is returned to the client if we saw tx earlier + ErrTxInCache = errors.New("tx already exists in cache") +) + // BroadcastTxCommit broadcasts transaction bytes to a Tendermint node and // waits for a commit. An error is only returned if there is no RPC node // connection or if broadcasting fails. diff --git a/client/broadcast_test.go b/client/broadcast_test.go index 5ac6e47c24b1..56a675c6cc23 100644 --- a/client/broadcast_test.go +++ b/client/broadcast_test.go @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/tmhash" - "github.com/tendermint/tendermint/mempool" "github.com/tendermint/tendermint/rpc/client/mock" ctypes "github.com/tendermint/tendermint/rpc/core/types" tmtypes "github.com/tendermint/tendermint/types" @@ -40,12 +39,38 @@ func CreateContextWithErrorAndMode(err error, mode string) Context { } } +// ErrTxTooLarge means the tx is too big to be sent in a message to other peers +type ErrTxTooLarge struct { + max int + actual int +} + +func (e ErrTxTooLarge) Error() string { + return fmt.Sprintf("Tx too large. Max size is %d, but got %d", e.max, e.actual) +} + +// ErrMempoolIsFull means Tendermint & an application can't handle that much load +type ErrMempoolIsFull struct { + numTxs int + maxTxs int + + txsBytes int64 + maxTxsBytes int64 +} + +func (e ErrMempoolIsFull) Error() string { + return fmt.Sprintf( + "mempool is full: number of txs %d (max: %d), total txs bytes %d (max: %d)", + e.numTxs, e.maxTxs, + e.txsBytes, e.maxTxsBytes) +} + // Test the correct code is returned when func TestBroadcastError(t *testing.T) { errors := map[error]uint32{ - mempool.ErrTxInCache: sdkerrors.ErrTxInMempoolCache.ABCICode(), - mempool.ErrTxTooLarge{}: sdkerrors.ErrTxTooLarge.ABCICode(), - mempool.ErrMempoolIsFull{}: sdkerrors.ErrMempoolIsFull.ABCICode(), + ErrTxInCache: sdkerrors.ErrTxInMempoolCache.ABCICode(), + ErrTxTooLarge{}: sdkerrors.ErrTxTooLarge.ABCICode(), + ErrMempoolIsFull{}: sdkerrors.ErrMempoolIsFull.ABCICode(), } modes := []string{ From 916aa2eb61a55440916b525cf2f8f166db0bdc46 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 18:31:34 -0600 Subject: [PATCH 2/8] adapt to import tendermint master --- client/broadcast_test.go | 2 +- client/grpc/tmservice/block.go | 2 +- client/grpc/tmservice/status.go | 2 +- client/rpc/rpc_test.go | 2 +- client/rpc/status.go | 6 +- crypto/armor.go | 4 +- crypto/armor_test.go | 4 +- go.mod | 28 +- go.sum | 751 ++++++++++++++++--- libs/armor/armor.go | 39 + libs/flags/tmflags.go | 89 +++ libs/time/time.go | 58 ++ libs/xsalsa20symmetric/symmetric.go | 54 ++ server/rosetta/converter.go | 2 +- server/start.go | 20 +- server/tm_cmds.go | 3 +- simapp/simd/cmd/testnet.go | 2 +- testutil/network/network.go | 2 +- testutil/network/util.go | 26 +- types/result.go | 2 +- types/result_test.go | 2 +- x/auth/tx/query.go | 2 +- x/auth/vesting/types/vesting_account_test.go | 2 +- x/authz/keeper/keeper_test.go | 2 +- x/bank/keeper/keeper_test.go | 2 +- x/evidence/genesis_test.go | 2 +- x/genutil/utils.go | 3 +- x/gov/client/utils/query_test.go | 2 +- 28 files changed, 941 insertions(+), 174 deletions(-) create mode 100644 libs/armor/armor.go create mode 100644 libs/flags/tmflags.go create mode 100644 libs/time/time.go create mode 100644 libs/xsalsa20symmetric/symmetric.go diff --git a/client/broadcast_test.go b/client/broadcast_test.go index 56a675c6cc23..5e60535084c8 100644 --- a/client/broadcast_test.go +++ b/client/broadcast_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/tmhash" "github.com/tendermint/tendermint/rpc/client/mock" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client/flags" diff --git a/client/grpc/tmservice/block.go b/client/grpc/tmservice/block.go index 554156982dda..344f46fb55d3 100644 --- a/client/grpc/tmservice/block.go +++ b/client/grpc/tmservice/block.go @@ -3,7 +3,7 @@ package tmservice import ( "context" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/client" ) diff --git a/client/grpc/tmservice/status.go b/client/grpc/tmservice/status.go index 9e9c3d200943..3363f484b1c0 100644 --- a/client/grpc/tmservice/status.go +++ b/client/grpc/tmservice/status.go @@ -3,7 +3,7 @@ package tmservice import ( "context" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/client" ) diff --git a/client/rpc/rpc_test.go b/client/rpc/rpc_test.go index adb7dac82d21..34eebde868fb 100644 --- a/client/rpc/rpc_test.go +++ b/client/rpc/rpc_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/client/rpc" "github.com/cosmos/cosmos-sdk/codec/legacy" diff --git a/client/rpc/status.go b/client/rpc/status.go index 82f65520245f..10f36feff236 100644 --- a/client/rpc/status.go +++ b/client/rpc/status.go @@ -7,8 +7,7 @@ import ( "github.com/spf13/cobra" "github.com/tendermint/tendermint/libs/bytes" - "github.com/tendermint/tendermint/p2p" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -16,6 +15,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/version" + tmtypes "github.com/tendermint/tendermint/types" ) // ValidatorInfo is info about the node's validator, same as Tendermint, @@ -29,7 +29,7 @@ type validatorInfo struct { // ResultStatus is node's info, same as Tendermint, except that we use our own // PubKey. type resultStatus struct { - NodeInfo p2p.DefaultNodeInfo + NodeInfo tmtypes.NodeInfo SyncInfo ctypes.SyncInfo ValidatorInfo validatorInfo } diff --git a/crypto/armor.go b/crypto/armor.go index 201f1438c05e..b0783a6b47fd 100644 --- a/crypto/armor.go +++ b/crypto/armor.go @@ -4,10 +4,10 @@ import ( "encoding/hex" "fmt" + "github.com/cosmos/cosmos-sdk/libs/armor" + "github.com/cosmos/cosmos-sdk/libs/xsalsa20symmetric" "github.com/tendermint/crypto/bcrypt" "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/armor" - "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" "github.com/cosmos/cosmos-sdk/codec/legacy" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" diff --git a/crypto/armor_test.go b/crypto/armor_test.go index 8c7c0c5257d7..2cd627a936a5 100644 --- a/crypto/armor_test.go +++ b/crypto/armor_test.go @@ -7,11 +7,11 @@ import ( "io" "testing" + "github.com/cosmos/cosmos-sdk/libs/armor" + "github.com/cosmos/cosmos-sdk/libs/xsalsa20symmetric" "github.com/stretchr/testify/require" "github.com/tendermint/crypto/bcrypt" tmcrypto "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/armor" - "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" "github.com/cosmos/cosmos-sdk/codec/legacy" "github.com/cosmos/cosmos-sdk/crypto" diff --git a/go.mod b/go.mod index ebd153d70461..7e18ab607f3f 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ module github.com/cosmos/cosmos-sdk require ( github.com/99designs/keyring v1.1.6 - github.com/armon/go-metrics v0.3.9 + github.com/armon/go-metrics v0.3.10 github.com/bgentry/speakeasy v0.1.0 github.com/btcsuite/btcd v0.22.0-beta github.com/coinbase/rosetta-sdk-go v0.7.0 @@ -25,32 +25,28 @@ require ( github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 github.com/improbable-eng/grpc-web v0.14.1 github.com/jhump/protoreflect v1.9.0 - github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.2 // indirect github.com/magiconair/properties v1.8.5 github.com/mattn/go-isatty v0.0.14 - github.com/onsi/ginkgo v1.16.4 // indirect - github.com/onsi/gomega v1.13.0 // indirect github.com/otiai10/copy v1.6.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.11.0 - github.com/prometheus/common v0.29.0 + github.com/prometheus/client_golang v1.12.1 + github.com/prometheus/common v0.32.1 github.com/rakyll/statik v0.1.7 github.com/regen-network/cosmos-proto v0.3.1 - github.com/rs/zerolog v1.23.0 - github.com/spf13/cast v1.3.1 - github.com/spf13/cobra v1.2.1 + github.com/rs/zerolog v1.26.1 + github.com/spf13/cast v1.4.1 + github.com/spf13/cobra v1.3.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.8.1 + github.com/spf13/viper v1.10.1 github.com/stretchr/testify v1.7.0 github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.16.0 github.com/tendermint/tendermint v0.34.14 - github.com/tendermint/tm-db v0.6.4 - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 - google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 - google.golang.org/grpc v1.42.0 + github.com/tendermint/tm-db v0.6.6 + golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa + google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 gopkg.in/yaml.v2 v2.4.0 ) @@ -66,3 +62,5 @@ replace github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210 // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 replace github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 + +replace github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165 diff --git a/go.sum b/go.sum index f59199018105..24746154cb7e 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,11 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= 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= @@ -10,13 +14,24 @@ 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.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= 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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= 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.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= 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= @@ -25,23 +40,29 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= 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.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= 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= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= +github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -55,55 +76,80 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= 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/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= 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 v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= -github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13 h1:LeNMVg5Z1FX+Qgz8tJUijBLRdcpbFUElz+d1489On98= -github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= +github.com/adlio/schema v1.2.3 h1:GfKThfEsjS9cCz7gaF8zdXv4cpTdUqdljkKGDTbJjys= +github.com/adlio/schema v1.2.3/go.mod h1:nD7ZWmMMbwU12Pqwg+qL0rTvHBrBXfNz+5UQxTfy38M= 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/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= 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/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= 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/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= 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-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.0/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +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= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -111,8 +157,11 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.5.0/go.mod h1:Mc0nLBKI1/FP0Ga4kqMOgBig0eS5QtR107JnMAb1Wuc= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= +github.com/breml/errchkjson v0.2.1/go.mod h1:jZEATw/jF69cL1iy7//Yih8yp/mXp2CBoBr9GJwCAsY= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= @@ -134,15 +183,32 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165 h1:ULEU0DqgcmxKosONdR5dPpwS0lu+sYgAQyKFdhzBK4s= +github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165/go.mod h1:cU7pJ1D3h6gd1jItA5T4QGfw8XcUAoZqYj92WcccQb8= +github.com/celestiaorg/go-leopard v0.1.0 h1:28z2EkvKJIez5J9CEaiiUEC+OxalRLtTGJJ1oScfE1g= +github.com/celestiaorg/go-leopard v0.1.0/go.mod h1:NtO/rjlB8dw2aq7jr06vZFKGvryQcTDXaNHelmPNOAM= +github.com/celestiaorg/merkletree v0.0.0-20210714075610-a84dc3ddbbe4 h1:CJdIpo8n5MFP2MwK0gSRcOVlDlFdQJO1p+FqdxYzmvc= +github.com/celestiaorg/merkletree v0.0.0-20210714075610-a84dc3ddbbe4/go.mod h1:fzuHnhzj1pUygGz+1ZkB3uQbEUL4htqCGJ4Qs2LwMZA= +github.com/celestiaorg/nmt v0.8.0 h1:wtX7GRouLbmBe+ffnc8+cOg2UbWteM+Y1imZuZ/EeqU= +github.com/celestiaorg/nmt v0.8.0/go.mod h1:3bqzTj8xKj0DgQUpOgZzoxvtNkC3MS/hTbQ6dn8SIa0= +github.com/celestiaorg/rsmt2d v0.3.0 h1:c82dh9J3DBcIQu9OND+5HViUKb5NmpKYVvf8z3zjlfA= +github.com/celestiaorg/rsmt2d v0.3.0/go.mod h1:2Frw4GEYUnVu6Mvlo+CUzuC2/8wn+zLwVVtp+muN6vg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 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 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -150,9 +216,14 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +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-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= @@ -160,22 +231,21 @@ github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq github.com/confio/ics23/go v0.6.6 h1:pkOy18YxxJ/r0XFDCnrl4Bjv6h4LkBSpLS6F38mrKL8= github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6 h1:NmTXa/uVnDyp0TY5MKi197+3HWcnYWfnHGyaFthlnGw= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= +github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= 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/iavl v0.17.3 h1:s2N819a2olOmiauVa0WAhoIJq9EhSXE9HDBAoR9k+8Y= @@ -189,17 +259,21 @@ github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9 github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= @@ -231,8 +305,13 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -241,37 +320,51 @@ github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQD github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/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/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.4.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/go-critic/go-critic v0.6.2/go.mod h1:td1s27kfmLpe5G/DPjlnFI7o1UCzePptwU7Az0V5iCM= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= @@ -280,11 +373,26 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= 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= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -294,14 +402,18 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E 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= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +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/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -311,6 +423,7 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -332,11 +445,24 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 h1:ur2rms48b3Ep1dxh7aUV2FZEQ8jEVO2F6ILKx8ofkAg= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.44.0/go.mod h1:aBolpzNkmYogKPynGKdOWDCEc8LlwnxZC6w/SJ1TaEs= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= 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= @@ -347,15 +473,18 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/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= @@ -364,20 +493,35 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf 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-20200507031123-427632fa3b1c/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-20201218002935-b9804c9f04c2/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-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/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/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/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -386,50 +530,72 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= 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/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 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-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -439,33 +605,55 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -473,157 +661,235 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.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/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= 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.2/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.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.5.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/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.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.1.3/go.mod h1:jMzDa13teAuv/KLeqgJw79NDe+1IT0ZO3Mht0vN1Yls= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +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= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= 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/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= 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= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b h1:MKwruh+HeCSKWphkxuzvRzU4QzDkg7yiPkDVV0cDFgI= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k= +github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E= github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= @@ -633,23 +899,30 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/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 v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v0.0.0-20211125173453-6d6d39c5bb8b/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -657,9 +930,9 @@ 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.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= 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= @@ -674,23 +947,35 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 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.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0 h1:3jqPBvKT4OHAbje2Ql7KeaaSicDBCxMYwEJU1zRJceE= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-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.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.15/go.mod h1:NhuWhnlVEM1gT1A4VJHYfy9MuYSxxwHgxWoPsn9llB4= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.12-0.20220101150716-969a394a9451/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.12/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.15/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220103110004-ffaa07af02e3/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -704,52 +989,70 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr 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.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.23.0 h1:UskrK+saS9P9Y789yNNulYKdARjPZuS35B8gJF2x60g= -github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= +github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= 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/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= +github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/securego/gosec/v2 v2.9.6/go.mod h1:EESY9Ywxo/Zc5NyF/qIj6Cop+4PSWM0F0OfGD7FdIXc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.21.12/go.mod h1:BToYZVTlSVlfazpDDYFnsVZLaoRG+g8ufT6fPQLdJzA= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= 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.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/sivchari/containedctx v1.0.1/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +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.8.0 h1:5MmtuhAgYeU6qpa7w7bP0dv6MBYuup0vekhSpSkoq60= +github.com/spf13/afero v1.8.0/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -758,20 +1061,26 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= +github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= +github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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= @@ -781,9 +1090,11 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= @@ -792,49 +1103,94 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14 h1:GCXmlS8Bqd2Ix3TQCpwYLUNHe+Y+QyJsm5YE+S/FkPo= -github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/tendermint/tm-db v0.6.6 h1:EzhaOfR0bdKyATqcd5PNeyeq8r+V4bRPHBfyFdD9kGM= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektra/mockery/v2 v2.10.0/go.mod h1:m/WO2UzWzqgVX3nvqpRQq70I4Z7jbSCRhdmkgtp+Ab4= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vivint/infectious v0.0.0-20200605153912-25a574ae18a3 h1:zMsHhfK9+Wdl1F7sIKLyx3wrOFofpb3rWFbA4HgcK5k= +github.com/vivint/infectious v0.0.0-20200605153912-25a574ae18a3/go.mod h1:R0Gbuw7ElaGSLOZUSwBm/GgVwMd30jWxBDdAyMOeTuc= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yeya24/promlinter v0.1.1-0.20210918184747-d757024714a1/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= 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.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +gitlab.com/NebulousLabs/errors v0.0.0-20171229012116-7ead97ef90b8/go.mod h1:ZkMZ0dpQyWwlENaeZVBiQRjhMEZvk6VTXquzl3FOFP8= +gitlab.com/NebulousLabs/errors v0.0.0-20200929122200-06c536cf6975 h1:L/ENs/Ar1bFzUeKx6m3XjlmBgIUlykX9dzvp5k9NGxc= +gitlab.com/NebulousLabs/errors v0.0.0-20200929122200-06c536cf6975/go.mod h1:ZkMZ0dpQyWwlENaeZVBiQRjhMEZvk6VTXquzl3FOFP8= +gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 h1:dizWJqTWjwyD8KGcMOwgrkqu1JIkofYgKkmDeNE7oAs= +gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40/go.mod h1:rOnSnoRyxMI3fe/7KIbVcsHRGxe30OONv8dEgo+vCfA= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= 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= @@ -844,18 +1200,25 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= 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.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= 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.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -866,17 +1229,32 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U 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-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200109152110-61a87790db17/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce h1:Roh6XWxHFKrPgC/EQhVubSAGQ6Ozk6IdxHSzt1mR0EI= +golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +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-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= @@ -888,6 +1266,7 @@ 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/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/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -914,6 +1293,8 @@ 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/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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -929,6 +1310,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn 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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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= @@ -936,6 +1318,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -963,10 +1346,19 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v 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-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f h1:w6wWR0H+nyVpbSAQbzVEIACVyr/h8l/BEkY6Sokc7Eg= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/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-20211208012354-db4efeb81f4b h1:MWaHNqZy3KTpuTMAGvv+Kw+ylsEpmyJZizz1dqxnu28= +golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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= @@ -978,18 +1370,24 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ 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-20210402161424-2e8d93401602/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-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1001,6 +1399,7 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= @@ -1014,19 +1413,24 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w 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-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/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-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1046,32 +1450,57 @@ golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20210403161142-5e06dd20ab57/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-20210426230700-d19ff857e887/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-20210603081109-ebe580a85c40/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-20210903071746-97244b99971b h1:3Dq0eVHn0uaQJmPO+/aYPI/fRMqdrVDbu7MQcku54gg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/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-20211105183446-c75c47738b0c/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-20211205182925-97ca703d548d/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-20211213223007-03aa0b5f6827/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-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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= @@ -1079,17 +1508,26 @@ 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= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 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-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/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-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/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= @@ -1098,21 +1536,27 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw 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-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/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-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1122,38 +1566,73 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-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-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 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-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/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-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/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-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= 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.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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/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= 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.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1171,16 +1650,30 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q 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.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +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.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= 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.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20181107211654-5fc9ac540362/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= @@ -1189,6 +1682,7 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT 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= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1210,6 +1704,8 @@ 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-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 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= @@ -1219,17 +1715,42 @@ google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6D 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-20210226172003-ab064af71705/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-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-20210828152312-66f60bf46e71 h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs= +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-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/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 h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1249,15 +1770,19 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w= +gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1271,6 +1796,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1287,10 +1813,19 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh 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.2.2/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= +mvdan.cc/gofumpt v0.2.1/go.mod h1:a/rvZPhsNaedOJBzqRD9omnwVwHZsBdJirXHa9Gh9Ig= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= 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 v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= 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= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/libs/armor/armor.go b/libs/armor/armor.go new file mode 100644 index 000000000000..c15d070e67e6 --- /dev/null +++ b/libs/armor/armor.go @@ -0,0 +1,39 @@ +package armor + +import ( + "bytes" + "fmt" + "io/ioutil" + + "golang.org/x/crypto/openpgp/armor" +) + +func EncodeArmor(blockType string, headers map[string]string, data []byte) string { + buf := new(bytes.Buffer) + w, err := armor.Encode(buf, blockType, headers) + if err != nil { + panic(fmt.Errorf("could not encode ascii armor: %s", err)) + } + _, err = w.Write(data) + if err != nil { + panic(fmt.Errorf("could not encode ascii armor: %s", err)) + } + err = w.Close() + if err != nil { + panic(fmt.Errorf("could not encode ascii armor: %s", err)) + } + return buf.String() +} + +func DecodeArmor(armorStr string) (blockType string, headers map[string]string, data []byte, err error) { + buf := bytes.NewBufferString(armorStr) + block, err := armor.Decode(buf) + if err != nil { + return "", nil, nil, err + } + data, err = ioutil.ReadAll(block.Body) + if err != nil { + return "", nil, nil, err + } + return block.Type, block.Header, data, nil +} diff --git a/libs/flags/tmflags.go b/libs/flags/tmflags.go new file mode 100644 index 000000000000..d96ad3f47c0c --- /dev/null +++ b/libs/flags/tmflags.go @@ -0,0 +1,89 @@ +package flags + +import ( + "errors" + "fmt" + "strings" + + "github.com/tendermint/tendermint/libs/log" +) + +const ( + defaultLogLevelKey = "*" +) + +// ParseLogLevel parses complex log level - comma-separated +// list of module:level pairs with an optional *:level pair (* means +// all other modules). +// +// Example: +// ParseLogLevel("consensus:debug,mempool:debug,*:error", log.NewTMLogger(os.Stdout), "info") +func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) (log.Logger, error) { + if lvl == "" { + return nil, errors.New("empty log level") + } + + l := lvl + + // prefix simple one word levels (e.g. "info") with "*" + if !strings.Contains(l, ":") { + l = defaultLogLevelKey + ":" + l + } + + options := make([]log.Option, 0) + + isDefaultLogLevelSet := false + var option log.Option + var err error + + list := strings.Split(l, ",") + for _, item := range list { + moduleAndLevel := strings.Split(item, ":") + + if len(moduleAndLevel) != 2 { + return nil, fmt.Errorf("expected list in a form of \"module:level\" pairs, given pair %s, list %s", item, list) + } + + module := moduleAndLevel[0] + level := moduleAndLevel[1] + + if module == defaultLogLevelKey { + option, err = log.AllowLevel(level) + if err != nil { + return nil, fmt.Errorf("failed to parse default log level (pair %s, list %s): %w", item, l, err) + } + options = append(options, option) + isDefaultLogLevelSet = true + } else { + switch level { + case "debug": + option = log.AllowDebugWith("module", module) + case "info": + option = log.AllowInfoWith("module", module) + case "error": + option = log.AllowErrorWith("module", module) + case "none": + option = log.AllowNoneWith("module", module) + default: + return nil, + fmt.Errorf("expected either \"info\", \"debug\", \"error\" or \"none\" log level, given %s (pair %s, list %s)", + level, + item, + list) + } + options = append(options, option) + + } + } + + // if "*" is not provided, set default global level + if !isDefaultLogLevelSet { + option, err = log.AllowLevel(defaultLogLevelValue) + if err != nil { + return nil, err + } + options = append(options, option) + } + + return log.NewFilter(logger, options...), nil +} diff --git a/libs/time/time.go b/libs/time/time.go new file mode 100644 index 000000000000..022bdf574f8e --- /dev/null +++ b/libs/time/time.go @@ -0,0 +1,58 @@ +package time + +import ( + "sort" + "time" +) + +// Now returns the current time in UTC with no monotonic component. +func Now() time.Time { + return Canonical(time.Now()) +} + +// Canonical returns UTC time with no monotonic component. +// Stripping the monotonic component is for time equality. +// See https://github.com/tendermint/tendermint/pull/2203#discussion_r215064334 +func Canonical(t time.Time) time.Time { + return t.Round(0).UTC() +} + +// WeightedTime for computing a median. +type WeightedTime struct { + Time time.Time + Weight int64 +} + +// NewWeightedTime with time and weight. +func NewWeightedTime(time time.Time, weight int64) *WeightedTime { + return &WeightedTime{ + Time: time, + Weight: weight, + } +} + +// WeightedMedian computes weighted median time for a given array of WeightedTime and the total voting power. +func WeightedMedian(weightedTimes []*WeightedTime, totalVotingPower int64) (res time.Time) { + median := totalVotingPower / 2 + + sort.Slice(weightedTimes, func(i, j int) bool { + if weightedTimes[i] == nil { + return false + } + if weightedTimes[j] == nil { + return true + } + return weightedTimes[i].Time.UnixNano() < weightedTimes[j].Time.UnixNano() + }) + + for _, weightedTime := range weightedTimes { + if weightedTime != nil { + if median <= weightedTime.Weight { + res = weightedTime.Time + break + } + median -= weightedTime.Weight + } + } + return +} diff --git a/libs/xsalsa20symmetric/symmetric.go b/libs/xsalsa20symmetric/symmetric.go new file mode 100644 index 000000000000..74cb4b103325 --- /dev/null +++ b/libs/xsalsa20symmetric/symmetric.go @@ -0,0 +1,54 @@ +package xsalsa20symmetric + +import ( + "errors" + "fmt" + + "golang.org/x/crypto/nacl/secretbox" + + "github.com/tendermint/tendermint/crypto" +) + +// TODO, make this into a struct that implements crypto.Symmetric. + +const nonceLen = 24 +const secretLen = 32 + +// secret must be 32 bytes long. Use something like Sha256(Bcrypt(passphrase)) +// The ciphertext is (secretbox.Overhead + 24) bytes longer than the plaintext. +func EncryptSymmetric(plaintext []byte, secret []byte) (ciphertext []byte) { + if len(secret) != secretLen { + panic(fmt.Sprintf("Secret must be 32 bytes long, got len %v", len(secret))) + } + nonce := crypto.CRandBytes(nonceLen) + nonceArr := [nonceLen]byte{} + copy(nonceArr[:], nonce) + secretArr := [secretLen]byte{} + copy(secretArr[:], secret) + ciphertext = make([]byte, nonceLen+secretbox.Overhead+len(plaintext)) + copy(ciphertext, nonce) + secretbox.Seal(ciphertext[nonceLen:nonceLen], plaintext, &nonceArr, &secretArr) + return ciphertext +} + +// secret must be 32 bytes long. Use something like Sha256(Bcrypt(passphrase)) +// The ciphertext is (secretbox.Overhead + 24) bytes longer than the plaintext. +func DecryptSymmetric(ciphertext []byte, secret []byte) (plaintext []byte, err error) { + if len(secret) != secretLen { + panic(fmt.Sprintf("Secret must be 32 bytes long, got len %v", len(secret))) + } + if len(ciphertext) <= secretbox.Overhead+nonceLen { + return nil, errors.New("ciphertext is too short") + } + nonce := ciphertext[:nonceLen] + nonceArr := [nonceLen]byte{} + copy(nonceArr[:], nonce) + secretArr := [secretLen]byte{} + copy(secretArr[:], secret) + plaintext = make([]byte, len(ciphertext)-nonceLen-secretbox.Overhead) + _, ok := secretbox.Open(plaintext[:0], ciphertext[nonceLen:], &nonceArr, &secretArr) + if !ok { + return nil, errors.New("ciphertext decryption failed") + } + return plaintext, nil +} diff --git a/server/rosetta/converter.go b/server/rosetta/converter.go index 4fdd87c75b67..14711bf0c9d6 100644 --- a/server/rosetta/converter.go +++ b/server/rosetta/converter.go @@ -11,7 +11,7 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/btcsuite/btcd/btcec" - tmcoretypes "github.com/tendermint/tendermint/rpc/core/types" + tmcoretypes "github.com/tendermint/tendermint/rpc/coretypes" crgtypes "github.com/cosmos/cosmos-sdk/server/rosetta/lib/types" diff --git a/server/start.go b/server/start.go index bda8b6ed8117..c99208d38057 100644 --- a/server/start.go +++ b/server/start.go @@ -18,9 +18,7 @@ import ( tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" tmos "github.com/tendermint/tendermint/libs/os" "github.com/tendermint/tendermint/node" - "github.com/tendermint/tendermint/p2p" pvm "github.com/tendermint/tendermint/privval" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/rpc/client/local" "github.com/cosmos/cosmos-sdk/server/rosetta" @@ -254,21 +252,21 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper) - nodeKey, err := p2p.LoadOrGenNodeKey(cfg.NodeKeyFile()) + nodeKey, err := cfg.LoadOrGenNodeKey(cfg.NodeKeyFile()) if err != nil { return err } - genDocProvider := node.DefaultGenesisDocProviderFunc(cfg) - tmNode, err := node.NewNode( + genDoc, err := tmtypes.GenesisDocFromFile(cfg.GenesisFile()) + if err != nil { + return err + } + + tmNode, err := node.New( cfg, - pvm.LoadOrGenFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()), - nodeKey, - proxy.NewLocalClientCreator(app), - genDocProvider, - node.DefaultDBProvider, - node.DefaultMetricsProvider(cfg.Instrumentation), ctx.Logger, + abciclient.NewLocalCreator(app), + genDoc, ) if err != nil { return err diff --git a/server/tm_cmds.go b/server/tm_cmds.go index 35e202abc22e..26ec066b4403 100644 --- a/server/tm_cmds.go +++ b/server/tm_cmds.go @@ -7,7 +7,6 @@ import ( "github.com/spf13/cobra" tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" - "github.com/tendermint/tendermint/p2p" pvm "github.com/tendermint/tendermint/privval" tversion "github.com/tendermint/tendermint/version" yaml "gopkg.in/yaml.v2" @@ -26,7 +25,7 @@ func ShowNodeIDCmd() *cobra.Command { serverCtx := GetServerContextFromCmd(cmd) cfg := serverCtx.Config - nodeKey, err := p2p.LoadNodeKey(cfg.NodeKeyFile()) + nodeKey, err := cfg.LoadNodeKey(cfg.NodeKeyFile()) if err != nil { return err } diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index 443f7899fbc5..8a7114b38cc6 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -10,12 +10,12 @@ import ( "os" "path/filepath" + tmtime "github.com/cosmos/cosmos-sdk/libs/time" "github.com/spf13/cobra" tmconfig "github.com/tendermint/tendermint/config" tmos "github.com/tendermint/tendermint/libs/os" tmrand "github.com/tendermint/tendermint/libs/rand" "github.com/tendermint/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" diff --git a/testutil/network/network.go b/testutil/network/network.go index 9c5bf6f3b67a..450449fd4bd2 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -15,9 +15,9 @@ import ( "testing" "time" + tmflags "github.com/cosmos/cosmos-sdk/libs/flags" "github.com/stretchr/testify/require" tmcfg "github.com/tendermint/tendermint/config" - tmflags "github.com/tendermint/tendermint/libs/cli/flags" "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" "github.com/tendermint/tendermint/node" diff --git a/testutil/network/util.go b/testutil/network/util.go index e7542113a87b..3ebbee90a845 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -5,14 +5,12 @@ import ( "path/filepath" "time" + tmtime "github.com/cosmos/cosmos-sdk/libs/time" tmos "github.com/tendermint/tendermint/libs/os" "github.com/tendermint/tendermint/node" - "github.com/tendermint/tendermint/p2p" pvm "github.com/tendermint/tendermint/privval" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/rpc/client/local" "github.com/tendermint/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/server/api" servergrpc "github.com/cosmos/cosmos-sdk/server/grpc" @@ -32,23 +30,23 @@ func startInProcess(cfg Config, val *Validator) error { return err } - nodeKey, err := p2p.LoadOrGenNodeKey(tmCfg.NodeKeyFile()) + nodeKey, err := tmCfg.LoadOrGenNodeKey(tmCfg.NodeKeyFile()) if err != nil { return err } app := cfg.AppConstructor(*val) - genDocProvider := node.DefaultGenesisDocProviderFunc(tmCfg) - tmNode, err := node.NewNode( - tmCfg, - pvm.LoadOrGenFilePV(tmCfg.PrivValidatorKeyFile(), tmCfg.PrivValidatorStateFile()), - nodeKey, - proxy.NewLocalClientCreator(app), - genDocProvider, - node.DefaultDBProvider, - node.DefaultMetricsProvider(tmCfg.Instrumentation), - logger.With("module", val.Moniker), + genDoc, err := tmtypes.GenesisDocFromFile(cfg.GenesisFile()) + if err != nil { + return err + } + + tmNode, err := node.New( + cfg, + ctx.Logger, + abciclient.NewLocalCreator(app), + genDoc, ) if err != nil { return err diff --git a/types/result.go b/types/result.go index 88aa24e34cbd..86b6206deb36 100644 --- a/types/result.go +++ b/types/result.go @@ -8,7 +8,7 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/types/result_test.go b/types/result_test.go index ab47b544a279..b50c4c3c200c 100644 --- a/types/result_test.go +++ b/types/result_test.go @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil/testdata" diff --git a/x/auth/tx/query.go b/x/auth/tx/query.go index 756f0db07828..ab333b8707bb 100644 --- a/x/auth/tx/query.go +++ b/x/auth/tx/query.go @@ -8,7 +8,7 @@ import ( "strings" "time" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" "github.com/cosmos/cosmos-sdk/client" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/auth/vesting/types/vesting_account_test.go b/x/auth/vesting/types/vesting_account_test.go index 979b0221292b..3721a8d5572b 100644 --- a/x/auth/vesting/types/vesting_account_test.go +++ b/x/auth/vesting/types/vesting_account_test.go @@ -4,8 +4,8 @@ import ( "testing" "time" + tmtime "github.com/cosmos/cosmos-sdk/libs/time" "github.com/stretchr/testify/require" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/testutil/testdata" diff --git a/x/authz/keeper/keeper_test.go b/x/authz/keeper/keeper_test.go index 8dfebac95a3b..d6eec9143719 100644 --- a/x/authz/keeper/keeper_test.go +++ b/x/authz/keeper/keeper_test.go @@ -4,9 +4,9 @@ import ( "testing" "time" + tmtime "github.com/cosmos/cosmos-sdk/libs/time" "github.com/stretchr/testify/suite" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 93f355260bf8..0bbd3ff502e9 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -9,10 +9,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + tmtime "github.com/cosmos/cosmos-sdk/libs/time" "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" diff --git a/x/evidence/genesis_test.go b/x/evidence/genesis_test.go index 3ae8eee03cd8..bff2412fc3f9 100644 --- a/x/evidence/genesis_test.go +++ b/x/evidence/genesis_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" + "github.com/cosmos/cosmos-sdk/libs/time" "github.com/stretchr/testify/suite" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/simapp" diff --git a/x/genutil/utils.go b/x/genutil/utils.go index 4c46bdb6f121..eca9804c6b25 100644 --- a/x/genutil/utils.go +++ b/x/genutil/utils.go @@ -10,7 +10,6 @@ import ( cfg "github.com/tendermint/tendermint/config" tmed25519 "github.com/tendermint/tendermint/crypto/ed25519" tmos "github.com/tendermint/tendermint/libs/os" - "github.com/tendermint/tendermint/p2p" "github.com/tendermint/tendermint/privval" tmtypes "github.com/tendermint/tendermint/types" @@ -61,7 +60,7 @@ func InitializeNodeValidatorFilesFromMnemonic(config *cfg.Config, mnemonic strin return "", nil, fmt.Errorf("invalid mnemonic") } - nodeKey, err := p2p.LoadOrGenNodeKey(config.NodeKeyFile()) + nodeKey, err := config.LoadOrGenNodeKey(config.NodeKeyFile()) if err != nil { return "", nil, err } diff --git a/x/gov/client/utils/query_test.go b/x/gov/client/utils/query_test.go index 30822c0d671c..997ba7d91292 100644 --- a/x/gov/client/utils/query_test.go +++ b/x/gov/client/utils/query_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/rpc/client/mock" - ctypes "github.com/tendermint/tendermint/rpc/core/types" + ctypes "github.com/tendermint/tendermint/rpc/coretypes" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" From 96fb6ad2909a5654967aa650b368eb7f57d6d788 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 20:00:45 -0600 Subject: [PATCH 3/8] modify to use tendermint master --- baseapp/abci.go | 27 +++- baseapp/abci_test.go | 3 +- baseapp/baseapp.go | 8 +- baseapp/baseapp_test.go | 23 +-- baseapp/grpcrouter_test.go | 4 +- baseapp/msg_service_router_test.go | 10 +- baseapp/params.go | 3 +- baseapp/params_test.go | 11 +- client/rpc/status.go | 5 +- libs/flags/tmflags.go | 210 ++++++++++++++++++++++++++-- server/api/server.go | 15 +- server/cmd/execute.go | 4 +- server/config/toml.go | 13 +- server/export.go | 14 +- server/export_test.go | 5 +- server/mock/helpers.go | 13 +- server/rosetta/client_online.go | 6 +- server/rosetta/converter.go | 4 +- server/start.go | 51 ++++--- server/tm_cmds.go | 26 ++-- server/types/app.go | 3 +- server/util.go | 2 +- simapp/app_test.go | 13 +- simapp/simd/cmd/testnet.go | 6 +- simapp/test_helpers.go | 4 +- store/internal/proofs/helpers.go | 2 +- testutil/network/network.go | 16 ++- testutil/network/util.go | 35 ++--- types/context.go | 8 +- types/context_test.go | 2 +- types/events.go | 8 +- types/events_test.go | 32 ++--- types/result_test.go | 12 +- x/bank/keeper/keeper_test.go | 20 +-- x/genutil/client/cli/init_test.go | 11 +- x/genutil/utils.go | 18 ++- x/params/keeper/consensus_params.go | 3 +- x/simulation/params.go | 7 +- x/staking/client/testutil/suite.go | 2 +- x/staking/handler_test.go | 5 +- x/upgrade/types/storeloader_test.go | 2 +- 41 files changed, 455 insertions(+), 211 deletions(-) diff --git a/baseapp/abci.go b/baseapp/abci.go index 80d0011dca36..e432a3c30a1d 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -116,12 +116,6 @@ func (app *BaseApp) Info(req abci.RequestInfo) abci.ResponseInfo { } } -// SetOption implements the ABCI interface. -func (app *BaseApp) SetOption(req abci.RequestSetOption) (res abci.ResponseSetOption) { - // TODO: Implement! - return -} - // FilterPeerByAddrPort filters peers by address/port. func (app *BaseApp) FilterPeerByAddrPort(info string) abci.ResponseQuery { if app.addrPeerFilter != nil { @@ -288,6 +282,27 @@ func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx } } +func (app *BaseApp) PrepareProposal(req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { + return abci.ResponsePrepareProposal{ + BlockData: req.BlockData, + } +} + +func (app *BaseApp) ProcessProposal(req abci.RequestProcessProposal) abci.ResponseProcessProposal { + return abci.ResponseProcessProposal{ + Result: abci.ResponseProcessProposal_ACCEPT, + } +} + +func (app *BaseApp) ExtendVote(req abci.RequestExtendVote) abci.ResponseExtendVote { + return abci.ResponseExtendVote{} +} + +// Verify application's vote extension data +func (app *BaseApp) VerifyVoteExtension(req abci.RequestVerifyVoteExtension) abci.ResponseVerifyVoteExtension { + return abci.ResponseVerifyVoteExtension{} +} + // Commit implements the ABCI interface. It will commit all state that exists in // the deliver state's multi-store and includes the resulting commit ID in the // returned abci.ResponseCommit. Commit will set the check state based on the diff --git a/baseapp/abci_test.go b/baseapp/abci_test.go index 8a61a0aebfc2..02132cc94de2 100644 --- a/baseapp/abci_test.go +++ b/baseapp/abci_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmprototypes "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -105,7 +106,7 @@ func TestGetBlockRentionHeight(t *testing.T) { tc.bapp.SetParamStore(¶mStore{db: dbm.NewMemDB()}) tc.bapp.InitChain(abci.RequestInitChain{ - ConsensusParams: &abci.ConsensusParams{ + ConsensusParams: &tmproto.ConsensusParams{ Evidence: &tmprototypes.EvidenceParams{ MaxAgeNumBlocks: tc.maxAgeBlocks, }, diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 3a73f6ef20d9..fc3e8ea79cb4 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -398,15 +398,15 @@ func (app *BaseApp) setDeliverState(header tmproto.Header) { // GetConsensusParams returns the current consensus parameters from the BaseApp's // ParamStore. If the BaseApp has no ParamStore defined, nil is returned. -func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams { +func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *tmproto.ConsensusParams { if app.paramStore == nil { return nil } - cp := new(abci.ConsensusParams) + cp := new(tmproto.ConsensusParams) if app.paramStore.Has(ctx, ParamStoreKeyBlockParams) { - var bp abci.BlockParams + var bp tmproto.BlockParams app.paramStore.Get(ctx, ParamStoreKeyBlockParams, &bp) cp.Block = &bp @@ -437,7 +437,7 @@ func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { } // StoreConsensusParams sets the consensus parameters to the baseapp's param store. -func (app *BaseApp) StoreConsensusParams(ctx sdk.Context, cp *abci.ConsensusParams) { +func (app *BaseApp) StoreConsensusParams(ctx sdk.Context, cp *tmproto.ConsensusParams) { if app.paramStore == nil { panic("cannot store consensus params with no params store set") } diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index df891e136936..88bfd330be62 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -75,7 +75,8 @@ func (ps *paramStore) Get(_ sdk.Context, key []byte, ptr interface{}) { } func defaultLogger() log.Logger { - return log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "sdk/app") + logger, _ := log.NewDefaultLogger("plain", "info") + return logger.With("module", "sdk/app") } func newBaseApp(name string, options ...func(*BaseApp)) *BaseApp { @@ -1390,8 +1391,8 @@ func TestMaxBlockGasLimits(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) app.InitChain(abci.RequestInitChain{ - ConsensusParams: &abci.ConsensusParams{ - Block: &abci.BlockParams{ + ConsensusParams: &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxGas: 100, }, }, @@ -1615,8 +1616,8 @@ func TestGasConsumptionBadTx(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) app.InitChain(abci.RequestInitChain{ - ConsensusParams: &abci.ConsensusParams{ - Block: &abci.BlockParams{ + ConsensusParams: &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxGas: 9, }, }, @@ -1774,16 +1775,16 @@ func TestGetMaximumBlockGas(t *testing.T) { app.InitChain(abci.RequestInitChain{}) ctx := app.NewContext(true, tmproto.Header{}) - app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: 0}}) + app.StoreConsensusParams(ctx, &tmproto.ConsensusParams{Block: &tmproto.BlockParams{MaxGas: 0}}) require.Equal(t, uint64(0), app.getMaximumBlockGas(ctx)) - app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: -1}}) + app.StoreConsensusParams(ctx, &tmproto.ConsensusParams{Block: &tmproto.BlockParams{MaxGas: -1}}) require.Equal(t, uint64(0), app.getMaximumBlockGas(ctx)) - app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: 5000000}}) + app.StoreConsensusParams(ctx, &tmproto.ConsensusParams{Block: &tmproto.BlockParams{MaxGas: 5000000}}) require.Equal(t, uint64(5000000), app.getMaximumBlockGas(ctx)) - app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: -5000000}}) + app.StoreConsensusParams(ctx, &tmproto.ConsensusParams{Block: &tmproto.BlockParams{MaxGas: -5000000}}) require.Panics(t, func() { app.getMaximumBlockGas(ctx) }) } @@ -2014,8 +2015,8 @@ func TestBaseApp_EndBlock(t *testing.T) { name := t.Name() logger := defaultLogger() - cp := &abci.ConsensusParams{ - Block: &abci.BlockParams{ + cp := &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxGas: 5000000, }, } diff --git a/baseapp/grpcrouter_test.go b/baseapp/grpcrouter_test.go index 64b2a97b9b00..88281a55b6c6 100644 --- a/baseapp/grpcrouter_test.go +++ b/baseapp/grpcrouter_test.go @@ -2,7 +2,6 @@ package baseapp_test import ( "context" - "os" "testing" "github.com/stretchr/testify/require" @@ -54,7 +53,8 @@ func TestRegisterQueryServiceTwice(t *testing.T) { // Setup baseapp. db := dbm.NewMemDB() encCfg := simapp.MakeTestEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + logger, _ := log.NewDefaultLogger("plain", "info") + app := baseapp.NewBaseApp("test", logger, db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterInterfaces(encCfg.InterfaceRegistry) diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index d599d0cbe47a..3cc1d2b3e493 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -1,7 +1,6 @@ package baseapp_test import ( - "os" "testing" "github.com/stretchr/testify/require" @@ -23,7 +22,8 @@ func TestRegisterMsgService(t *testing.T) { // Create an encoding config that doesn't register testdata Msg services. encCfg := simapp.MakeTestEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + logger, _ := log.NewDefaultLogger("plain", "info") + app := baseapp.NewBaseApp("test", logger, db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) require.Panics(t, func() { testdata.RegisterMsgServer( @@ -46,7 +46,8 @@ func TestRegisterMsgServiceTwice(t *testing.T) { // Setup baseapp. db := dbm.NewMemDB() encCfg := simapp.MakeTestEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + logger, _ := log.NewDefaultLogger("plain", "info") + app := baseapp.NewBaseApp("test", logger, db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterInterfaces(encCfg.InterfaceRegistry) @@ -72,7 +73,8 @@ func TestMsgService(t *testing.T) { encCfg := simapp.MakeTestEncodingConfig() testdata.RegisterInterfaces(encCfg.InterfaceRegistry) db := dbm.NewMemDB() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + logger, _ := log.NewDefaultLogger("plain", "info") + app := baseapp.NewBaseApp("test", logger, db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterMsgServer( app.MsgServiceRouter(), diff --git a/baseapp/params.go b/baseapp/params.go index 14701d524798..5cf31125b027 100644 --- a/baseapp/params.go +++ b/baseapp/params.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" - abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -31,7 +30,7 @@ type ParamStore interface { // ValidateBlockParams defines a stateless validation on BlockParams. This function // is called whenever the parameters are updated or stored. func ValidateBlockParams(i interface{}) error { - v, ok := i.(abci.BlockParams) + v, ok := i.(tmproto.BlockParams) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } diff --git a/baseapp/params_test.go b/baseapp/params_test.go index 6507e17a8aea..3f9d26a56f2f 100644 --- a/baseapp/params_test.go +++ b/baseapp/params_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -16,11 +15,11 @@ func TestValidateBlockParams(t *testing.T) { expectErr bool }{ {nil, true}, - {&abci.BlockParams{}, true}, - {abci.BlockParams{}, true}, - {abci.BlockParams{MaxBytes: -1, MaxGas: -1}, true}, - {abci.BlockParams{MaxBytes: 2000000, MaxGas: -5}, true}, - {abci.BlockParams{MaxBytes: 2000000, MaxGas: 300000}, false}, + {&tmproto.BlockParams{}, true}, + {tmproto.BlockParams{}, true}, + {tmproto.BlockParams{MaxBytes: -1, MaxGas: -1}, true}, + {tmproto.BlockParams{MaxBytes: 2000000, MaxGas: -5}, true}, + {tmproto.BlockParams{MaxBytes: 2000000, MaxGas: 300000}, false}, } for _, tc := range testCases { diff --git a/client/rpc/status.go b/client/rpc/status.go index 10f36feff236..262361497ead 100644 --- a/client/rpc/status.go +++ b/client/rpc/status.go @@ -8,6 +8,7 @@ import ( "github.com/tendermint/tendermint/libs/bytes" ctypes "github.com/tendermint/tendermint/rpc/coretypes" + "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -92,7 +93,7 @@ func getNodeStatus(clientCtx client.Context) (*ctypes.ResultStatus, error) { // NodeInfoResponse defines a response type that contains node status and version // information. type NodeInfoResponse struct { - p2p.DefaultNodeInfo `json:"node_info"` + types.NodeInfo `json:"node_info"` ApplicationVersion version.Info `json:"application_version"` } @@ -106,7 +107,7 @@ func NodeInfoRequestHandlerFn(clientCtx client.Context) http.HandlerFunc { } resp := NodeInfoResponse{ - DefaultNodeInfo: status.NodeInfo, + NodeInfo: status.NodeInfo, ApplicationVersion: version.NewInfo(), } diff --git a/libs/flags/tmflags.go b/libs/flags/tmflags.go index d96ad3f47c0c..0061ec9e08be 100644 --- a/libs/flags/tmflags.go +++ b/libs/flags/tmflags.go @@ -30,10 +30,10 @@ func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) ( l = defaultLogLevelKey + ":" + l } - options := make([]log.Option, 0) + options := make([]Option, 0) isDefaultLogLevelSet := false - var option log.Option + var option Option var err error list := strings.Split(l, ",") @@ -48,7 +48,7 @@ func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) ( level := moduleAndLevel[1] if module == defaultLogLevelKey { - option, err = log.AllowLevel(level) + option, err = AllowLevel(level) if err != nil { return nil, fmt.Errorf("failed to parse default log level (pair %s, list %s): %w", item, l, err) } @@ -57,13 +57,13 @@ func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) ( } else { switch level { case "debug": - option = log.AllowDebugWith("module", module) + option = AllowDebugWith("module", module) case "info": - option = log.AllowInfoWith("module", module) + option = AllowInfoWith("module", module) case "error": - option = log.AllowErrorWith("module", module) + option = AllowErrorWith("module", module) case "none": - option = log.AllowNoneWith("module", module) + option = AllowNoneWith("module", module) default: return nil, fmt.Errorf("expected either \"info\", \"debug\", \"error\" or \"none\" log level, given %s (pair %s, list %s)", @@ -78,12 +78,204 @@ func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) ( // if "*" is not provided, set default global level if !isDefaultLogLevelSet { - option, err = log.AllowLevel(defaultLogLevelValue) + option, err = AllowLevel(defaultLogLevelValue) if err != nil { return nil, err } options = append(options, option) } - return log.NewFilter(logger, options...), nil + return NewFilter(logger, options...), nil +} + +type level byte + +const ( + levelDebug level = 1 << iota + levelInfo + levelError +) + +type filter struct { + next log.Logger + allowed level // XOR'd levels for default case + initiallyAllowed level // XOR'd levels for initial case + allowedKeyvals map[keyval]level // When key-value match, use this level +} + +type keyval struct { + key interface{} + value interface{} +} + +// NewFilter wraps next and implements filtering. See the commentary on the +// Option functions for a detailed description of how to configure levels. If +// no options are provided, all leveled log events created with Debug, Info or +// Error helper methods are squelched. +func NewFilter(next log.Logger, options ...Option) log.Logger { + l := &filter{ + next: next, + allowedKeyvals: make(map[keyval]level), + } + for _, option := range options { + option(l) + } + l.initiallyAllowed = l.allowed + return l +} + +func (l *filter) Info(msg string, keyvals ...interface{}) { + levelAllowed := l.allowed&levelInfo != 0 + if !levelAllowed { + return + } + l.next.Info(msg, keyvals...) +} + +func (l *filter) Debug(msg string, keyvals ...interface{}) { + levelAllowed := l.allowed&levelDebug != 0 + if !levelAllowed { + return + } + l.next.Debug(msg, keyvals...) +} + +func (l *filter) Error(msg string, keyvals ...interface{}) { + levelAllowed := l.allowed&levelError != 0 + if !levelAllowed { + return + } + l.next.Error(msg, keyvals...) +} + +// With implements Logger by constructing a new filter with a keyvals appended +// to the logger. +// +// If custom level was set for a keyval pair using one of the +// Allow*With methods, it is used as the logger's level. +// +// Examples: +// logger = log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("module", "crypto")) +// logger.With("module", "crypto").Info("Hello") # produces "I... Hello module=crypto" +// +// logger = log.NewFilter(logger, log.AllowError(), +// log.AllowInfoWith("module", "crypto"), +// log.AllowNoneWith("user", "Sam")) +// logger.With("module", "crypto", "user", "Sam").Info("Hello") # returns nil +// +// logger = log.NewFilter(logger, +// log.AllowError(), +// log.AllowInfoWith("module", "crypto"), log.AllowNoneWith("user", "Sam")) +// logger.With("user", "Sam").With("module", "crypto").Info("Hello") # produces "I... Hello module=crypto user=Sam" +func (l *filter) With(keyvals ...interface{}) log.Logger { + keyInAllowedKeyvals := false + + for i := len(keyvals) - 2; i >= 0; i -= 2 { + for kv, allowed := range l.allowedKeyvals { + if keyvals[i] == kv.key { + keyInAllowedKeyvals = true + // Example: + // logger = log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("module", "crypto")) + // logger.With("module", "crypto") + if keyvals[i+1] == kv.value { + return &filter{ + next: l.next.With(keyvals...), + allowed: allowed, // set the desired level + allowedKeyvals: l.allowedKeyvals, + initiallyAllowed: l.initiallyAllowed, + } + } + } + } + } + + // Example: + // logger = log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("module", "crypto")) + // logger.With("module", "main") + if keyInAllowedKeyvals { + return &filter{ + next: l.next.With(keyvals...), + allowed: l.initiallyAllowed, // return back to initially allowed + allowedKeyvals: l.allowedKeyvals, + initiallyAllowed: l.initiallyAllowed, + } + } + + return &filter{ + next: l.next.With(keyvals...), + allowed: l.allowed, // simply continue with the current level + allowedKeyvals: l.allowedKeyvals, + initiallyAllowed: l.initiallyAllowed, + } +} + +//-------------------------------------------------------------------------------- + +// Option sets a parameter for the filter. +type Option func(*filter) + +// AllowLevel returns an option for the given level or error if no option exist +// for such level. +func AllowLevel(lvl string) (Option, error) { + switch lvl { + case "debug": + return AllowDebug(), nil + case "info": + return AllowInfo(), nil + case "error": + return AllowError(), nil + case "none": + return AllowNone(), nil + default: + return nil, fmt.Errorf("expected either \"info\", \"debug\", \"error\" or \"none\" level, given %s", lvl) + } +} + +// AllowAll is an alias for AllowDebug. +func AllowAll() Option { + return AllowDebug() +} + +// AllowDebug allows error, info and debug level log events to pass. +func AllowDebug() Option { + return allowed(levelError | levelInfo | levelDebug) +} + +// AllowInfo allows error and info level log events to pass. +func AllowInfo() Option { + return allowed(levelError | levelInfo) +} + +// AllowError allows only error level log events to pass. +func AllowError() Option { + return allowed(levelError) +} + +// AllowNone allows no leveled log events to pass. +func AllowNone() Option { + return allowed(0) +} + +func allowed(allowed level) Option { + return func(l *filter) { l.allowed = allowed } +} + +// AllowDebugWith allows error, info and debug level log events to pass for a specific key value pair. +func AllowDebugWith(key interface{}, value interface{}) Option { + return func(l *filter) { l.allowedKeyvals[keyval{key, value}] = levelError | levelInfo | levelDebug } +} + +// AllowInfoWith allows error and info level log events to pass for a specific key value pair. +func AllowInfoWith(key interface{}, value interface{}) Option { + return func(l *filter) { l.allowedKeyvals[keyval{key, value}] = levelError | levelInfo } +} + +// AllowErrorWith allows only error level log events to pass for a specific key value pair. +func AllowErrorWith(key interface{}, value interface{}) Option { + return func(l *filter) { l.allowedKeyvals[keyval{key, value}] = levelError } +} + +// AllowNoneWith allows no leveled log events to pass for a specific key value pair. +func AllowNoneWith(key interface{}, value interface{}) Option { + return func(l *filter) { l.allowedKeyvals[keyval{key, value}] = 0 } } diff --git a/server/api/server.go b/server/api/server.go index c2987f860d1a..830d7ab8b88c 100644 --- a/server/api/server.go +++ b/server/api/server.go @@ -1,6 +1,7 @@ package api import ( + "context" "fmt" "net" "net/http" @@ -33,6 +34,9 @@ type Server struct { logger log.Logger metrics *telemetry.Metrics listener net.Listener + + ctx context.Context + cancel context.CancelFunc } // CustomGRPCHeaderMatcher for mapping request headers to @@ -59,6 +63,8 @@ func New(clientCtx client.Context, logger log.Logger) *Server { AnyResolver: clientCtx.InterfaceRegistry, } + ctx, cancel := context.WithCancel(context.TODO()) + return &Server{ Router: mux.NewRouter(), ClientCtx: clientCtx, @@ -75,6 +81,8 @@ func New(clientCtx client.Context, logger log.Logger) *Server { // GRPC metadata runtime.WithIncomingHeaderMatcher(CustomGRPCHeaderMatcher), ), + ctx: ctx, + cancel: cancel, } } @@ -99,7 +107,7 @@ func (s *Server) Start(cfg config.Config) error { tmCfg.WriteTimeout = time.Duration(cfg.API.RPCWriteTimeout) * time.Second tmCfg.MaxBodyBytes = int64(cfg.API.RPCMaxBodyBytes) - listener, err := tmrpcserver.Listen(cfg.API.Address, tmCfg) + listener, err := tmrpcserver.Listen(cfg.API.Address, tmCfg.MaxOpenConnections) if err != nil { return err } @@ -111,15 +119,16 @@ func (s *Server) Start(cfg config.Config) error { if cfg.API.EnableUnsafeCORS { allowAllCORS := handlers.CORS(handlers.AllowedHeaders([]string{"Content-Type"})) - return tmrpcserver.Serve(s.listener, allowAllCORS(h), s.logger, tmCfg) + return tmrpcserver.Serve(s.ctx, s.listener, allowAllCORS(h), s.logger, tmCfg) } s.logger.Info("starting API server...") - return tmrpcserver.Serve(s.listener, s.Router, s.logger, tmCfg) + return tmrpcserver.Serve(s.ctx, s.listener, s.Router, s.logger, tmCfg) } // Close closes the API server. func (s *Server) Close() error { + s.cancel() return s.listener.Close() } diff --git a/server/cmd/execute.go b/server/cmd/execute.go index 83e9bc0b25a8..d2170fcba3d6 100644 --- a/server/cmd/execute.go +++ b/server/cmd/execute.go @@ -5,8 +5,8 @@ import ( "github.com/rs/zerolog" "github.com/spf13/cobra" - tmcfg "github.com/tendermint/tendermint/config" tmcli "github.com/tendermint/tendermint/libs/cli" + tmlog "github.com/tendermint/tendermint/libs/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -30,7 +30,7 @@ func Execute(rootCmd *cobra.Command, defaultHome string) error { ctx = context.WithValue(ctx, server.ServerContextKey, srvCtx) rootCmd.PersistentFlags().String(flags.FlagLogLevel, zerolog.InfoLevel.String(), "The logging level (trace|debug|info|warn|error|fatal|panic)") - rootCmd.PersistentFlags().String(flags.FlagLogFormat, tmcfg.LogFormatPlain, "The logging format (json|plain)") + rootCmd.PersistentFlags().String(flags.FlagLogFormat, tmlog.LogFormatPlain, "The logging format (json|plain)") executor := tmcli.PrepareBaseCmd(rootCmd, "", defaultHome) return executor.ExecuteContext(ctx) diff --git a/server/config/toml.go b/server/config/toml.go index 9e8eeadaf1ef..c6a70b524e1c 100644 --- a/server/config/toml.go +++ b/server/config/toml.go @@ -2,10 +2,12 @@ package config import ( "bytes" + "fmt" + "io/ioutil" + "os" "text/template" "github.com/spf13/viper" - tmos "github.com/tendermint/tendermint/libs/os" ) const DefaultConfigTemplate = `# This is a TOML config file. @@ -249,5 +251,12 @@ func WriteConfigFile(configFilePath string, config interface{}) { panic(err) } - tmos.MustWriteFile(configFilePath, buffer.Bytes(), 0644) + mustWriteFile(configFilePath, buffer.Bytes(), 0644) +} + +func mustWriteFile(filePath string, contents []byte, mode os.FileMode) { + if err := ioutil.WriteFile(filePath, contents, mode); err != nil { + fmt.Printf(fmt.Sprintf("failed to write file: %v", err) + "\n") + os.Exit(1) + } } diff --git a/server/export.go b/server/export.go index 150add98e78d..b2087c4a74f9 100644 --- a/server/export.go +++ b/server/export.go @@ -9,7 +9,6 @@ import ( "github.com/spf13/cobra" tmjson "github.com/tendermint/tendermint/libs/json" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client/flags" @@ -81,18 +80,17 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com doc.AppState = exported.AppState doc.Validators = exported.Validators doc.InitialHeight = exported.Height - doc.ConsensusParams = &tmproto.ConsensusParams{ - Block: tmproto.BlockParams{ - MaxBytes: exported.ConsensusParams.Block.MaxBytes, - MaxGas: exported.ConsensusParams.Block.MaxGas, - TimeIotaMs: doc.ConsensusParams.Block.TimeIotaMs, + doc.ConsensusParams = &tmtypes.ConsensusParams{ + Block: tmtypes.BlockParams{ + MaxBytes: exported.ConsensusParams.Block.MaxBytes, + MaxGas: exported.ConsensusParams.Block.MaxGas, }, - Evidence: tmproto.EvidenceParams{ + Evidence: tmtypes.EvidenceParams{ MaxAgeNumBlocks: exported.ConsensusParams.Evidence.MaxAgeNumBlocks, MaxAgeDuration: exported.ConsensusParams.Evidence.MaxAgeDuration, MaxBytes: exported.ConsensusParams.Evidence.MaxBytes, }, - Validator: tmproto.ValidatorParams{ + Validator: tmtypes.ValidatorParams{ PubKeyTypes: exported.ConsensusParams.Validator.PubKeyTypes, }, } diff --git a/server/export_test.go b/server/export_test.go index 364a8475dd33..61863fa6830d 100644 --- a/server/export_test.go +++ b/server/export_test.go @@ -33,7 +33,7 @@ import ( func TestExportCmd_ConsensusParams(t *testing.T) { tempDir := t.TempDir() - _, ctx, genDoc, cmd := setupApp(t, tempDir) + _, ctx, _, cmd := setupApp(t, tempDir) output := &bytes.Buffer{} cmd.SetOut(output) @@ -46,7 +46,6 @@ func TestExportCmd_ConsensusParams(t *testing.T) { t.Fatalf("error unmarshaling exported genesis doc: %s", err) } - require.Equal(t, genDoc.ConsensusParams.Block.TimeIotaMs, exportedGenDoc.ConsensusParams.Block.TimeIotaMs) require.Equal(t, simapp.DefaultConsensusParams.Block.MaxBytes, exportedGenDoc.ConsensusParams.Block.MaxBytes) require.Equal(t, simapp.DefaultConsensusParams.Block.MaxGas, exportedGenDoc.ConsensusParams.Block.MaxGas) @@ -127,7 +126,7 @@ func setupApp(t *testing.T, tempDir string) (*simapp.SimApp, context.Context, *t t.Fatalf("error creating config folder: %s", err) } - logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) + logger, _ := log.NewDefaultLogger("plain", "info") db := dbm.NewMemDB() encCfg := simapp.MakeTestEncodingConfig() app := simapp.NewSimApp(logger, db, nil, true, map[int64]bool{}, tempDir, 0, encCfg, simapp.EmptyAppOptions{}) diff --git a/server/mock/helpers.go b/server/mock/helpers.go index 88aacb4d8e41..a09a13c5166a 100644 --- a/server/mock/helpers.go +++ b/server/mock/helpers.go @@ -5,15 +5,22 @@ import ( "io/ioutil" "os" + "github.com/cosmos/cosmos-sdk/server" + "github.com/rs/zerolog" abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" + tmlog "github.com/tendermint/tendermint/libs/log" ) // SetupApp returns an application as well as a clean-up function // to be used to quickly setup a test case with an app func SetupApp() (abci.Application, func(), error) { - logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)). - With("module", "mock") + var logger tmlog.Logger + + logWriter := zerolog.ConsoleWriter{Out: os.Stderr} + logger = server.ZeroLogWrapper{ + Logger: zerolog.New(logWriter).Level(zerolog.InfoLevel).With().Timestamp().Logger(), + } + logger = logger.With("module", "mock") rootDir, err := ioutil.TempDir("", "mock-sdk") if err != nil { return nil, nil, err diff --git a/server/rosetta/client_online.go b/server/rosetta/client_online.go index f8396aab3a43..54c85550cb67 100644 --- a/server/rosetta/client_online.go +++ b/server/rosetta/client_online.go @@ -104,7 +104,7 @@ func (c *Client) Bootstrap() error { return err } - tmRPC, err := http.New(c.config.TendermintRPC, tmWebsocketPath) + tmRPC, err := http.New(c.config.TendermintRPC) if err != nil { return err } @@ -306,7 +306,7 @@ func (c *Client) GetTx(ctx context.Context, hash string) (*rosettatypes.Transact // GetUnconfirmedTx gets an unconfirmed transaction given its hash func (c *Client) GetUnconfirmedTx(ctx context.Context, hash string) (*rosettatypes.Transaction, error) { - res, err := c.tmRPC.UnconfirmedTxs(ctx, nil) + res, err := c.tmRPC.UnconfirmedTxs(ctx, nil, nil) if err != nil { return nil, crgerrs.WrapError(crgerrs.ErrNotFound, "unconfirmed tx not found") } @@ -339,7 +339,7 @@ func (c *Client) GetUnconfirmedTx(ctx context.Context, hash string) (*rosettatyp // Mempool returns the unconfirmed transactions in the mempool func (c *Client) Mempool(ctx context.Context) ([]*rosettatypes.TransactionIdentifier, error) { - txs, err := c.tmRPC.UnconfirmedTxs(ctx, nil) + txs, err := c.tmRPC.UnconfirmedTxs(ctx, nil, nil) if err != nil { return nil, err } diff --git a/server/rosetta/converter.go b/server/rosetta/converter.go index 14711bf0c9d6..a9f50dc5c659 100644 --- a/server/rosetta/converter.go +++ b/server/rosetta/converter.go @@ -571,9 +571,9 @@ func (c converter) Peers(peers []tmcoretypes.Peer) []*rosettatypes.Peer { for i, peer := range peers { converted[i] = &rosettatypes.Peer{ - PeerID: peer.NodeInfo.Moniker, + PeerID: string(peer.ID), Metadata: map[string]interface{}{ - "addr": peer.NodeInfo.ListenAddr, + "addr": peer.URL, }, } } diff --git a/server/start.go b/server/start.go index c99208d38057..774b75f68957 100644 --- a/server/start.go +++ b/server/start.go @@ -3,6 +3,7 @@ package server // DONTCOVER import ( + "context" "fmt" "net/http" "os" @@ -10,6 +11,7 @@ import ( "time" "github.com/cosmos/cosmos-sdk/codec" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/spf13/cobra" "google.golang.org/grpc" @@ -18,8 +20,8 @@ import ( tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" tmos "github.com/tendermint/tendermint/libs/os" "github.com/tendermint/tendermint/node" - pvm "github.com/tendermint/tendermint/privval" "github.com/tendermint/tendermint/rpc/client/local" + tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/server/rosetta" crgserver "github.com/cosmos/cosmos-sdk/server/rosetta/lib/server" @@ -118,13 +120,13 @@ which accepts a path for the resulting pprof file. withTM, _ := cmd.Flags().GetBool(flagWithTendermint) if !withTM { serverCtx.Logger.Info("starting ABCI without Tendermint") - return startStandAlone(serverCtx, appCreator) + return startStandAlone(cmd.Context(), serverCtx, appCreator) } serverCtx.Logger.Info("starting ABCI with Tendermint") // amino is needed here for backwards compatibility of REST routes - err = startInProcess(serverCtx, clientCtx, appCreator) + err = startInProcess(cmd.Context(), serverCtx, clientCtx, appCreator) errCode, ok := err.(ErrorCode) if !ok { return err @@ -163,12 +165,14 @@ which accepts a path for the resulting pprof file. cmd.Flags().Uint64(FlagStateSyncSnapshotInterval, 0, "State sync snapshot interval") cmd.Flags().Uint32(FlagStateSyncSnapshotKeepRecent, 2, "State sync snapshot to keep") + serverCtx := GetServerContextFromCmd(cmd) + // add support for all Tendermint-specific command line options - tcmd.AddNodeFlags(cmd) + tcmd.AddNodeFlags(cmd, serverCtx.Config) return cmd } -func startStandAlone(ctx *Context, appCreator types.AppCreator) error { +func startStandAlone(goCtx context.Context, ctx *Context, appCreator types.AppCreator) error { addr := ctx.Viper.GetString(flagAddress) transport := ctx.Viper.GetString(flagTransport) home := ctx.Viper.GetString(flags.FlagHome) @@ -186,30 +190,22 @@ func startStandAlone(ctx *Context, appCreator types.AppCreator) error { app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper) - svr, err := server.NewServer(addr, transport, app) + svr, err := server.NewServer(ctx.Logger.With("module", "abci-server"), addr, transport, app) if err != nil { return fmt.Errorf("error creating listener: %v", err) } - svr.SetLogger(ctx.Logger.With("module", "abci-server")) - - err = svr.Start() + err = svr.Start(goCtx) if err != nil { tmos.Exit(err.Error()) } - defer func() { - if err = svr.Stop(); err != nil { - tmos.Exit(err.Error()) - } - }() - // Wait for SIGINT or SIGTERM signal return WaitForQuitSignals() } // legacyAminoCdc is used for the legacy REST API -func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.AppCreator) error { +func startInProcess(goCtx context.Context, ctx *Context, clientCtx client.Context, appCreator types.AppCreator) error { cfg := ctx.Config home := cfg.RootDir var cpuProfileCleanup func() @@ -252,17 +248,13 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper) - nodeKey, err := cfg.LoadOrGenNodeKey(cfg.NodeKeyFile()) - if err != nil { - return err - } - genDoc, err := tmtypes.GenesisDocFromFile(cfg.GenesisFile()) if err != nil { return err } tmNode, err := node.New( + goCtx, cfg, ctx.Logger, abciclient.NewLocalCreator(app), @@ -273,7 +265,7 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App } ctx.Logger.Debug("initialization: tmNode created") - if err := tmNode.Start(); err != nil { + if err := tmNode.Start(goCtx); err != nil { return err } ctx.Logger.Debug("initialization: tmNode started") @@ -282,7 +274,15 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App // service if API or gRPC is enabled, and avoid doing so in the general // case, because it spawns a new local tendermint RPC client. if config.API.Enable || config.GRPC.Enable { - clientCtx = clientCtx.WithClient(local.New(tmNode)) + node, ok := tmNode.(local.NodeService) + if !ok { + panic("unable to set node type. Please try reinstalling the binary.") + } + localNode, err := local.New(ctx.Logger, node) + if err != nil { + panic(err) + } + clientCtx = clientCtx.WithClient(localNode) app.RegisterTxService(clientCtx) app.RegisterTendermintService(clientCtx) @@ -290,7 +290,7 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App var apiSrv *api.Server if config.API.Enable { - genDoc, err := genDocProvider() + genDoc, err := tmtypes.GenesisDocFromFile(cfg.GenesisFile()) if err != nil { return err } @@ -371,9 +371,6 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App } defer func() { - if tmNode.IsRunning() { - _ = tmNode.Stop() - } if cpuProfileCleanup != nil { cpuProfileCleanup() diff --git a/server/tm_cmds.go b/server/tm_cmds.go index 26ec066b4403..ce44a8762845 100644 --- a/server/tm_cmds.go +++ b/server/tm_cmds.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/spf13/cobra" - tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" pvm "github.com/tendermint/tendermint/privval" tversion "github.com/tendermint/tendermint/version" yaml "gopkg.in/yaml.v2" @@ -25,11 +24,11 @@ func ShowNodeIDCmd() *cobra.Command { serverCtx := GetServerContextFromCmd(cmd) cfg := serverCtx.Config - nodeKey, err := cfg.LoadNodeKey(cfg.NodeKeyFile()) + nodeKey, err := cfg.LoadNodeKeyID() if err != nil { return err } - fmt.Println(nodeKey.ID()) + fmt.Println(nodeKey) return nil }, } @@ -44,8 +43,11 @@ func ShowValidatorCmd() *cobra.Command { serverCtx := GetServerContextFromCmd(cmd) cfg := serverCtx.Config - privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) - pk, err := privValidator.GetPubKey() + privValidator, err := pvm.LoadFilePV(cfg.PrivValidator.KeyFile(), cfg.PrivValidator.StateFile()) + if err != nil { + return err + } + pk, err := privValidator.GetPubKey(cmd.Context()) if err != nil { return err } @@ -75,7 +77,10 @@ func ShowAddressCmd() *cobra.Command { serverCtx := GetServerContextFromCmd(cmd) cfg := serverCtx.Config - privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) + privValidator, err := pvm.LoadFilePV(cfg.PrivValidator.Key, cfg.PrivValidator.State) + if err != nil { + return err + } valConsAddr := (sdk.ConsAddress)(privValidator.GetAddress()) fmt.Println(valConsAddr.String()) return nil @@ -100,7 +105,7 @@ against which this app has been compiled. BlockProtocol uint64 P2PProtocol uint64 }{ - Tendermint: tversion.TMCoreSemVer, + Tendermint: tversion.TMVersion, ABCI: tversion.ABCIVersion, BlockProtocol: tversion.BlockProtocol, P2PProtocol: tversion.P2PProtocol, @@ -121,10 +126,11 @@ func UnsafeResetAllCmd() *cobra.Command { Use: "unsafe-reset-all", Short: "Resets the blockchain database, removes address book files, and resets data/priv_validator_state.json to the genesis state", RunE: func(cmd *cobra.Command, args []string) error { - serverCtx := GetServerContextFromCmd(cmd) - cfg := serverCtx.Config + fmt.Println("command not supported") + // serverCtx := GetServerContextFromCmd(cmd) + // cfg := serverCtx.Config - tcmd.ResetAll(cfg.DBDir(), cfg.P2P.AddrBookFile(), cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile(), serverCtx.Logger) + // tcmd.ResetAll(cfg.DBDir(), cfg.P2P.AddrBookFile(), cfg.PrivValidator.KeyFile(), cfg.PrivValidator.StateFile(), serverCtx.Logger) return nil }, } diff --git a/server/types/app.go b/server/types/app.go index 467f627c605f..63edd2f39983 100644 --- a/server/types/app.go +++ b/server/types/app.go @@ -15,6 +15,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server/api" "github.com/cosmos/cosmos-sdk/server/config" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) // ServerStartTime defines the time duration that the server need to stay running after startup @@ -70,7 +71,7 @@ type ( // Height is the app's latest block height. Height int64 // ConsensusParams are the exported consensus params for ABCI. - ConsensusParams *abci.ConsensusParams + ConsensusParams *tmproto.ConsensusParams } // AppExporter is a function that dumps all app state to diff --git a/server/util.go b/server/util.go index bc9ab45df182..ca8b06a4bb9e 100644 --- a/server/util.go +++ b/server/util.go @@ -138,7 +138,7 @@ func InterceptConfigsPreRunHandler(cmd *cobra.Command, customAppConfigTemplate s } var logWriter io.Writer - if strings.ToLower(serverCtx.Viper.GetString(flags.FlagLogFormat)) == tmcfg.LogFormatPlain { + if strings.ToLower(serverCtx.Viper.GetString(flags.FlagLogFormat)) == tmlog.LogFormatPlain { logWriter = zerolog.ConsoleWriter{Out: os.Stderr} } else { logWriter = os.Stderr diff --git a/simapp/app_test.go b/simapp/app_test.go index 56c6dc1485ad..33ff7748d1c1 100644 --- a/simapp/app_test.go +++ b/simapp/app_test.go @@ -2,7 +2,6 @@ package simapp import ( "encoding/json" - "os" "testing" "github.com/golang/mock/gomock" @@ -38,7 +37,8 @@ import ( func TestSimAppExportAndBlockedAddrs(t *testing.T) { encCfg := MakeTestEncodingConfig() db := dbm.NewMemDB() - app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) + logger, _ := log.NewDefaultLogger("plain", "info") + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) for acc := range maccPerms { require.True( @@ -62,7 +62,7 @@ func TestSimAppExportAndBlockedAddrs(t *testing.T) { app.Commit() // Making a new app object with the db, so that initchain hasn't been called - app2 := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) + app2 := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) _, err = app2.ExportAppStateAndValidators(false, []string{}) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -75,7 +75,7 @@ func TestGetMaccPerms(t *testing.T) { func TestRunMigrations(t *testing.T) { db := dbm.NewMemDB() encCfg := MakeTestEncodingConfig() - logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) + logger, _ := log.NewDefaultLogger("plain", "info") app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) // Create a new baseapp and configurator for the purpose of this test. @@ -198,7 +198,7 @@ func TestRunMigrations(t *testing.T) { func TestInitGenesisOnMigration(t *testing.T) { db := dbm.NewMemDB() encCfg := MakeTestEncodingConfig() - logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) + logger, _ := log.NewDefaultLogger("plain", "info") app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) @@ -242,7 +242,8 @@ func TestInitGenesisOnMigration(t *testing.T) { func TestUpgradeStateOnGenesis(t *testing.T) { encCfg := MakeTestEncodingConfig() db := dbm.NewMemDB() - app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) + logger, _ := log.NewDefaultLogger("plain", "info") + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) genesisState := NewDefaultGenesisState(encCfg.Marshaler) stateBytes, err := json.MarshalIndent(genesisState, "", " ") require.NoError(t, err) diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index 8a7114b38cc6..e6d577395c15 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -6,6 +6,7 @@ import ( "bufio" "encoding/json" "fmt" + "io/ioutil" "net" "os" "path/filepath" @@ -114,9 +115,10 @@ func InitTestnet( algoStr string, numValidators int, ) error { + rnd := tmrand.NewRand().Int63() if chainID == "" { - chainID = "chain-" + tmrand.NewRand().Str(6) + chainID = "chain-" + fmt.Sprintf("%d", rnd) } nodeIDs := make([]string, numValidators) @@ -395,7 +397,7 @@ func writeFile(name string, dir string, contents []byte) error { return err } - err = tmos.WriteFile(file, contents, 0644) + err = ioutil.WriteFile(file, contents, 0644) // nolint: gosec if err != nil { return err } diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index 4f45b23eacd2..42f7d02eeba0 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -34,8 +34,8 @@ import ( // DefaultConsensusParams defines the default Tendermint consensus params used in // SimApp testing. -var DefaultConsensusParams = &abci.ConsensusParams{ - Block: &abci.BlockParams{ +var DefaultConsensusParams = &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxBytes: 200000, MaxGas: 2000000, }, diff --git a/store/internal/proofs/helpers.go b/store/internal/proofs/helpers.go index 98b04ef5eff7..579ff99a9047 100644 --- a/store/internal/proofs/helpers.go +++ b/store/internal/proofs/helpers.go @@ -70,7 +70,7 @@ func GetKey(allkeys []string, loc Where) string { return allkeys[len(allkeys)-1] } // select a random index between 1 and allkeys-2 - idx := rand.Int()%(len(allkeys)-2) + 1 + idx := rand.NewRand().Int()%(len(allkeys)-2) + 1 return allkeys[idx] } diff --git a/testutil/network/network.go b/testutil/network/network.go index 450449fd4bd2..2d503608f890 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -20,7 +20,7 @@ import ( tmcfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" - "github.com/tendermint/tendermint/node" + "github.com/tendermint/tendermint/libs/service" tmclient "github.com/tendermint/tendermint/rpc/client" dbm "github.com/tendermint/tm-db" "google.golang.org/grpc" @@ -100,6 +100,8 @@ type Config struct { func DefaultConfig() Config { encCfg := simapp.MakeTestEncodingConfig() + rnd := tmrand.NewRand().Int63() + return Config{ Codec: encCfg.Marshaler, TxConfig: encCfg.TxConfig, @@ -109,7 +111,7 @@ func DefaultConfig() Config { AppConstructor: NewAppConstructor(encCfg), GenesisState: simapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), TimeoutCommit: 2 * time.Second, - ChainID: "chain-" + tmrand.NewRand().Str(6), + ChainID: "chain-" + fmt.Sprintf("%s", rnd), NumValidators: 4, BondDenom: sdk.DefaultBondDenom, MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), @@ -160,7 +162,7 @@ type ( ValAddress sdk.ValAddress RPCClient tmclient.Client - tmNode *node.Node + tmNode service.Service api *api.Server grpc *grpc.Server grpcWeb *http.Server @@ -243,7 +245,7 @@ func New(t *testing.T, cfg Config) *Network { logger := log.NewNopLogger() if cfg.EnableLogging { - logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) + logger = log.MustNewDefaultLogger("plain", "info") logger, _ = tmflags.ParseLogLevel("info", logger, tmcfg.DefaultLogLevel) } @@ -269,7 +271,7 @@ func New(t *testing.T, cfg Config) *Network { require.NoError(t, err) tmCfg.P2P.ListenAddress = p2pAddr - tmCfg.P2P.AddrBookStrict = false + // tmCfg.P2P.AddrBookStrict = false tmCfg.P2P.AllowDuplicateIP = true nodeID, pubKey, err := genutil.InitializeNodeValidatorFiles(tmCfg) @@ -380,7 +382,7 @@ func New(t *testing.T, cfg Config) *Network { t.Log("starting test network...") for _, v := range network.Validators { - require.NoError(t, startInProcess(cfg, v)) + require.NoError(t, startInProcess(context.TODO(), cfg, v)) } t.Log("started test network") @@ -474,7 +476,7 @@ func (n *Network) Cleanup() { for _, v := range n.Validators { if v.tmNode != nil && v.tmNode.IsRunning() { - _ = v.tmNode.Stop() + // _ = v.tmNode.Stop() } if v.api != nil { diff --git a/testutil/network/util.go b/testutil/network/util.go index 3ebbee90a845..cb64033e9f38 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -1,14 +1,15 @@ package network import ( + "context" "encoding/json" + "io/ioutil" "path/filepath" "time" tmtime "github.com/cosmos/cosmos-sdk/libs/time" tmos "github.com/tendermint/tendermint/libs/os" "github.com/tendermint/tendermint/node" - pvm "github.com/tendermint/tendermint/privval" "github.com/tendermint/tendermint/rpc/client/local" "github.com/tendermint/tendermint/types" @@ -19,9 +20,10 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + abciclient "github.com/tendermint/tendermint/abci/client" ) -func startInProcess(cfg Config, val *Validator) error { +func startInProcess(ctx context.Context, cfg Config, val *Validator) error { logger := val.Ctx.Logger tmCfg := val.Ctx.Config tmCfg.Instrumentation.Prometheus = false @@ -30,21 +32,17 @@ func startInProcess(cfg Config, val *Validator) error { return err } - nodeKey, err := tmCfg.LoadOrGenNodeKey(tmCfg.NodeKeyFile()) - if err != nil { - return err - } - app := cfg.AppConstructor(*val) - genDoc, err := tmtypes.GenesisDocFromFile(cfg.GenesisFile()) + genDoc, err := types.GenesisDocFromFile(tmCfg.GenesisFile()) if err != nil { return err } - tmNode, err := node.New( - cfg, - ctx.Logger, + val.tmNode, err = node.New( + ctx, + tmCfg, + logger.With("module", val.Moniker), abciclient.NewLocalCreator(app), genDoc, ) @@ -52,14 +50,19 @@ func startInProcess(cfg Config, val *Validator) error { return err } - if err := tmNode.Start(); err != nil { + if err := val.tmNode.Start(ctx); err != nil { return err } - val.tmNode = tmNode - if val.RPCAddress != "" { - val.RPCClient = local.New(tmNode) + node, ok := val.tmNode.(local.NodeService) + if !ok { + panic("can't cast service.Service to NodeService") + } + val.RPCClient, err = local.New(logger, node) + if err != nil { + panic("cant create a local node") + } } // We'll need a RPC client if the validator exposes a gRPC or REST endpoint. @@ -200,7 +203,7 @@ func writeFile(name string, dir string, contents []byte) error { return err } - err = tmos.WriteFile(file, contents, 0644) + err = ioutil.WriteFile(file, contents, 0644) // nolint: gosec if err != nil { return err } diff --git a/types/context.go b/types/context.go index 35030dad9a96..641424a6a9cd 100644 --- a/types/context.go +++ b/types/context.go @@ -36,7 +36,7 @@ type Context struct { checkTx bool recheckTx bool // if recheckTx == true, then checkTx must also be true minGasPrice DecCoins - consParams *abci.ConsensusParams + consParams *tmproto.ConsensusParams eventManager *EventManager } @@ -72,8 +72,8 @@ func (c Context) HeaderHash() tmbytes.HexBytes { return hash } -func (c Context) ConsensusParams() *abci.ConsensusParams { - return proto.Clone(c.consParams).(*abci.ConsensusParams) +func (c Context) ConsensusParams() *tmproto.ConsensusParams { + return proto.Clone(c.consParams).(*tmproto.ConsensusParams) } // create a new context @@ -203,7 +203,7 @@ func (c Context) WithMinGasPrices(gasPrices DecCoins) Context { } // WithConsensusParams returns a Context with an updated consensus params -func (c Context) WithConsensusParams(params *abci.ConsensusParams) Context { +func (c Context) WithConsensusParams(params *tmproto.ConsensusParams) Context { c.consParams = params return c } diff --git a/types/context_test.go b/types/context_test.go index 9533a52ee2e3..3052890a3f0c 100644 --- a/types/context_test.go +++ b/types/context_test.go @@ -127,7 +127,7 @@ func (s *contextTestSuite) TestContextWithCustom() { // test consensus param s.Require().Nil(ctx.ConsensusParams()) - cp := &abci.ConsensusParams{} + cp := &tmproto.ConsensusParams{} s.Require().Equal(cp, ctx.WithConsensusParams(cp).ConsensusParams()) // test inner context diff --git a/types/events.go b/types/events.go index 9c495a9da2a7..7b4d9f938960 100644 --- a/types/events.go +++ b/types/events.go @@ -90,8 +90,8 @@ func TypedEventToEvent(tev proto.Message) (Event, error) { attrs := make([]abci.EventAttribute, 0, len(attrMap)) for k, v := range attrMap { attrs = append(attrs, abci.EventAttribute{ - Key: []byte(k), - Value: v, + Key: k, + Value: string(v), }) } @@ -122,7 +122,7 @@ func ParseTypedEvent(event abci.Event) (proto.Message, error) { attrMap := make(map[string]json.RawMessage) for _, attr := range event.Attributes { - attrMap[string(attr.Key)] = attr.Value + attrMap[string(attr.Key)] = json.RawMessage(attr.Value) } attrBytes, err := json.Marshal(attrMap) @@ -178,7 +178,7 @@ func (a Attribute) String() string { // ToKVPair converts an Attribute object into a Tendermint key/value pair. func (a Attribute) ToKVPair() abci.EventAttribute { - return abci.EventAttribute{Key: toBytes(a.Key), Value: toBytes(a.Value)} + return abci.EventAttribute{Key: a.Key, Value: a.Value} } // AppendAttributes adds one or more attributes to an Event. diff --git a/types/events_test.go b/types/events_test.go index 7363355fb1b8..87622550d26a 100644 --- a/types/events_test.go +++ b/types/events_test.go @@ -124,15 +124,15 @@ func (s *eventsTestSuite) TestMarkEventsToIndex() { { Type: "message", Attributes: []abci.EventAttribute{ - {Key: []byte("sender"), Value: []byte("foo")}, - {Key: []byte("recipient"), Value: []byte("bar")}, + {Key: "sender", Value: "foo"}, + {Key: "recipient", Value: "bar"}, }, }, { Type: "staking", Attributes: []abci.EventAttribute{ - {Key: []byte("deposit"), Value: []byte("5")}, - {Key: []byte("unbond"), Value: []byte("10")}, + {Key: "deposit", Value: "5"}, + {Key: "unbond", Value: "10"}, }, }, } @@ -148,15 +148,15 @@ func (s *eventsTestSuite) TestMarkEventsToIndex() { { Type: "message", Attributes: []abci.EventAttribute{ - {Key: []byte("sender"), Value: []byte("foo"), Index: true}, - {Key: []byte("recipient"), Value: []byte("bar"), Index: true}, + {Key: "sender", Value: "foo", Index: true}, + {Key: "recipient", Value: "bar", Index: true}, }, }, { Type: "staking", Attributes: []abci.EventAttribute{ - {Key: []byte("deposit"), Value: []byte("5"), Index: true}, - {Key: []byte("unbond"), Value: []byte("10"), Index: true}, + {Key: "deposit", Value: "5", Index: true}, + {Key: "unbond", Value: "10", Index: true}, }, }, }, @@ -168,15 +168,15 @@ func (s *eventsTestSuite) TestMarkEventsToIndex() { { Type: "message", Attributes: []abci.EventAttribute{ - {Key: []byte("sender"), Value: []byte("foo"), Index: true}, - {Key: []byte("recipient"), Value: []byte("bar")}, + {Key: "sender", Value: "foo", Index: true}, + {Key: "recipient", Value: "bar"}, }, }, { Type: "staking", Attributes: []abci.EventAttribute{ - {Key: []byte("deposit"), Value: []byte("5"), Index: true}, - {Key: []byte("unbond"), Value: []byte("10")}, + {Key: "deposit", Value: "5", Index: true}, + {Key: "unbond", Value: "10"}, }, }, }, @@ -191,15 +191,15 @@ func (s *eventsTestSuite) TestMarkEventsToIndex() { { Type: "message", Attributes: []abci.EventAttribute{ - {Key: []byte("sender"), Value: []byte("foo"), Index: true}, - {Key: []byte("recipient"), Value: []byte("bar"), Index: true}, + {Key: "sender", Value: "foo", Index: true}, + {Key: "recipient", Value: "bar", Index: true}, }, }, { Type: "staking", Attributes: []abci.EventAttribute{ - {Key: []byte("deposit"), Value: []byte("5"), Index: true}, - {Key: []byte("unbond"), Value: []byte("10"), Index: true}, + {Key: "deposit", Value: "5", Index: true}, + {Key: "unbond", Value: "10", Index: true}, }, }, }, diff --git a/types/result_test.go b/types/result_test.go index b50c4c3c200c..84df86eb4bf5 100644 --- a/types/result_test.go +++ b/types/result_test.go @@ -159,8 +159,8 @@ func (s *resultTestSuite) TestResponseFormatBroadcastTxCommit() { Type: "message", Attributes: []abci.EventAttribute{ { - Key: []byte("action"), - Value: []byte("foo"), + Key: "action", + Value: "foo", Index: true, }, }, @@ -184,8 +184,8 @@ func (s *resultTestSuite) TestResponseFormatBroadcastTxCommit() { Type: "message", Attributes: []abci.EventAttribute{ { - Key: []byte("action"), - Value: []byte("foo"), + Key: "action", + Value: "foo", Index: true, }, }, @@ -209,8 +209,8 @@ func (s *resultTestSuite) TestResponseFormatBroadcastTxCommit() { Type: "message", Attributes: []abci.EventAttribute{ { - Key: []byte("action"), - Value: []byte("foo"), + Key: "action", + Value: "foo", Index: true, }, }, diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 0bbd3ff502e9..2461fdf286c9 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -556,15 +556,15 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { } event1.Attributes = append( event1.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: types.AttributeKeyRecipient, Value: addr2.String()}, ) event1.Attributes = append( event1.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: types.AttributeKeySender, Value: addr.String()}, ) event1.Attributes = append( event1.Attributes, - abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}, + abci.EventAttribute{Key: sdk.AttributeKeyAmount, Value: newCoins.String()}, ) event2 := sdk.Event{ @@ -573,7 +573,7 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { } event2.Attributes = append( event2.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: types.AttributeKeySender, Value: addr.String()}, ) // events are shifted due to the funding account events @@ -627,7 +627,7 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { } event1.Attributes = append( event1.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: types.AttributeKeySender, Value: addr.String()}, ) suite.Require().Equal(abci.Event(event1), events[7]) @@ -649,7 +649,7 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { } event2.Attributes = append( event2.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: types.AttributeKeySender, Value: addr2.String()}, ) event3 := sdk.Event{ Type: types.EventTypeTransfer, @@ -657,22 +657,22 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { } event3.Attributes = append( event3.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr3.String())}, + abci.EventAttribute{Key: types.AttributeKeyRecipient, Value: addr3.String()}, ) event3.Attributes = append( event3.Attributes, - abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}) + abci.EventAttribute{Key: sdk.AttributeKeyAmount, Value: newCoins.String()}) event4 := sdk.Event{ Type: types.EventTypeTransfer, Attributes: []abci.EventAttribute{}, } event4.Attributes = append( event4.Attributes, - abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr4.String())}, + abci.EventAttribute{Key: types.AttributeKeyRecipient, Value: addr4.String()}, ) event4.Attributes = append( event4.Attributes, - abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())}, + abci.EventAttribute{Key: sdk.AttributeKeyAmount, Value: newCoins2.String()}, ) // events are shifted due to the funding account events suite.Require().Equal(abci.Event(event1), events[21]) diff --git a/x/genutil/client/cli/init_test.go b/x/genutil/client/cli/init_test.go index c35368b296b3..d2a76201adcc 100644 --- a/x/genutil/client/cli/init_test.go +++ b/x/genutil/client/cli/init_test.go @@ -180,17 +180,16 @@ func TestStartStandAlone(t *testing.T) { svrAddr, _, err := server.FreeTCPAddr() require.NoError(t, err) - svr, err := abci_server.NewServer(svrAddr, "socket", app) + svr, err := abci_server.NewServer(logger, svrAddr, "socket", app) require.NoError(t, err, "error creating listener") - - svr.SetLogger(logger.With("module", "abci-server")) - err = svr.Start() + ctx, cancel := context.WithCancel(context.TODO()) + defer cancel() + err = svr.Start(ctx) require.NoError(t, err) timer := time.NewTimer(time.Duration(2) * time.Second) for range timer.C { - err = svr.Stop() - require.NoError(t, err) + cancel() break } } diff --git a/x/genutil/utils.go b/x/genutil/utils.go index eca9804c6b25..103c3827d384 100644 --- a/x/genutil/utils.go +++ b/x/genutil/utils.go @@ -1,6 +1,7 @@ package genutil import ( + "context" "encoding/json" "fmt" "path/filepath" @@ -59,33 +60,36 @@ func InitializeNodeValidatorFilesFromMnemonic(config *cfg.Config, mnemonic strin if len(mnemonic) > 0 && !bip39.IsMnemonicValid(mnemonic) { return "", nil, fmt.Errorf("invalid mnemonic") } - - nodeKey, err := config.LoadOrGenNodeKey(config.NodeKeyFile()) + nodeKey, err := tmtypes.LoadOrGenNodeKey(config.NodeKeyFile()) if err != nil { return "", nil, err } - nodeID = string(nodeKey.ID()) + nodeID = string(nodeKey.ID) - pvKeyFile := config.PrivValidatorKeyFile() + pvKeyFile := config.PrivValidator.KeyFile() if err := tmos.EnsureDir(filepath.Dir(pvKeyFile), 0777); err != nil { return "", nil, err } - pvStateFile := config.PrivValidatorStateFile() + pvStateFile := config.PrivValidator.StateFile() if err := tmos.EnsureDir(filepath.Dir(pvStateFile), 0777); err != nil { return "", nil, err } var filePV *privval.FilePV if len(mnemonic) == 0 { - filePV = privval.LoadOrGenFilePV(pvKeyFile, pvStateFile) + filePV, err = privval.LoadOrGenFilePV(pvKeyFile, pvStateFile) + if err != nil { + return "", nil, err + } } else { privKey := tmed25519.GenPrivKeyFromSecret([]byte(mnemonic)) filePV = privval.NewFilePV(privKey, pvKeyFile, pvStateFile) + filePV.Save() } - tmValPubKey, err := filePV.GetPubKey() + tmValPubKey, err := filePV.GetPubKey(context.TODO()) if err != nil { return "", nil, err } diff --git a/x/params/keeper/consensus_params.go b/x/params/keeper/consensus_params.go index 5ce8d340d0d9..9481d5d91271 100644 --- a/x/params/keeper/consensus_params.go +++ b/x/params/keeper/consensus_params.go @@ -1,7 +1,6 @@ package keeper import ( - abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -16,7 +15,7 @@ import ( func ConsensusParamsKeyTable() types.KeyTable { return types.NewKeyTable( types.NewParamSetPair( - baseapp.ParamStoreKeyBlockParams, abci.BlockParams{}, baseapp.ValidateBlockParams, + baseapp.ParamStoreKeyBlockParams, tmproto.BlockParams{}, baseapp.ValidateBlockParams, ), types.NewParamSetPair( baseapp.ParamStoreKeyEvidenceParams, tmproto.EvidenceParams{}, baseapp.ValidateEvidenceParams, diff --git a/x/simulation/params.go b/x/simulation/params.go index 51dfb6439f10..acc7d9b6d8f7 100644 --- a/x/simulation/params.go +++ b/x/simulation/params.go @@ -5,7 +5,6 @@ import ( "fmt" "math/rand" - abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types" @@ -151,7 +150,7 @@ func (w WeightedProposalContent) ContentSimulatorFn() simulation.ContentSimulato // Param change proposals // randomConsensusParams returns random simulation consensus parameters, it extracts the Evidence from the Staking genesis state. -func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSONCodec) *abci.ConsensusParams { +func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSONCodec) *tmproto.ConsensusParams { var genesisState map[string]json.RawMessage err := json.Unmarshal(appState, &genesisState) if err != nil { @@ -159,8 +158,8 @@ func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSO } stakingGenesisState := stakingtypes.GetGenesisStateFromAppState(cdc, genesisState) - consensusParams := &abci.ConsensusParams{ - Block: &abci.BlockParams{ + consensusParams := &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxBytes: int64(simulation.RandIntBetween(r, 20000000, 30000000)), MaxGas: -1, }, diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go index 807e2b6e7667..1de4d9009cc5 100644 --- a/x/staking/client/testutil/suite.go +++ b/x/staking/client/testutil/suite.go @@ -1322,7 +1322,7 @@ func (s *IntegrationTestSuite) TestBlockResults() { require.NoError(err) // Create a HTTP rpc client. - rpcClient, err := http.New(val.RPCAddress, "/websocket") + rpcClient, err := http.New(val.RPCAddress) require.NoError(err) // Loop until we find a block result with the correct validator updates. diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index 12dea7d7267a..fa9fe7537e9a 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" @@ -170,7 +169,7 @@ func TestDuplicatesMsgCreateValidator(t *testing.T) { func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { initPower := int64(1000) app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 1, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction)) - ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ + ctx = ctx.WithConsensusParams(&tmproto.ConsensusParams{ Validator: &tmproto.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519}}, }) @@ -184,7 +183,7 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { func TestBothPubKeyTypesMsgCreateValidator(t *testing.T) { app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, 1000, 2, sdk.NewInt(1000)) - ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ + ctx = ctx.WithConsensusParams(&tmproto.ConsensusParams{ Validator: &tmproto.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519, tmtypes.ABCIPubKeyTypeSecp256k1}}, }) diff --git a/x/upgrade/types/storeloader_test.go b/x/upgrade/types/storeloader_test.go index ec2bfa824d07..df4936d0d0d7 100644 --- a/x/upgrade/types/storeloader_test.go +++ b/x/upgrade/types/storeloader_test.go @@ -26,7 +26,7 @@ func useUpgradeLoader(height int64, upgrades *store.StoreUpgrades) func(*baseapp } func defaultLogger() log.Logger { - return log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "sdk/app") + return log.MustNewDefaultLogger("plain", "info") } func initStore(t *testing.T, db dbm.DB, storeKey string, k, v []byte) { From e7d285538e98c35f560054bb8b014ce273e23d5a Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 20:23:19 -0600 Subject: [PATCH 4/8] recompile new proto --- client/grpc/tmservice/query.pb.go | 161 ++- client/grpc/tmservice/service.go | 2 +- client/utils.go | 2 +- docs/core/proto-docs.md | 5 +- .../base/tendermint/v1beta1/query.proto | 2 +- testutil/network/network.go | 2 +- third_party/proto/tendermint/abci/types.proto | 218 +-- .../proto/tendermint/crypto/keys.proto | 1 + third_party/proto/tendermint/p2p/types.proto | 40 +- .../proto/tendermint/types/block.proto | 2 - .../proto/tendermint/types/canonical.proto | 37 + .../proto/tendermint/types/evidence.proto | 38 - .../proto/tendermint/types/params.proto | 81 +- .../proto/tendermint/types/types.proto | 94 +- .../proto/tendermint/version/types.proto | 8 - x/bank/types/query.pb.go | 106 +- x/staking/types/staking.pb.go | 1264 +++++++++-------- 17 files changed, 1125 insertions(+), 938 deletions(-) create mode 100644 third_party/proto/tendermint/types/canonical.proto delete mode 100644 third_party/proto/tendermint/types/evidence.proto diff --git a/client/grpc/tmservice/query.pb.go b/client/grpc/tmservice/query.pb.go index 6510f3c3bc02..d5b5b4f3fc49 100644 --- a/client/grpc/tmservice/query.pb.go +++ b/client/grpc/tmservice/query.pb.go @@ -635,8 +635,8 @@ var xxx_messageInfo_GetNodeInfoRequest proto.InternalMessageInfo // GetNodeInfoResponse is the request type for the Query/GetNodeInfo RPC method. type GetNodeInfoResponse struct { - DefaultNodeInfo *p2p.DefaultNodeInfo `protobuf:"bytes,1,opt,name=default_node_info,json=defaultNodeInfo,proto3" json:"default_node_info,omitempty"` - ApplicationVersion *VersionInfo `protobuf:"bytes,2,opt,name=application_version,json=applicationVersion,proto3" json:"application_version,omitempty"` + NodeInfo *p2p.NodeInfo `protobuf:"bytes,1,opt,name=node_info,json=nodeInfo,proto3" json:"node_info,omitempty"` + ApplicationVersion *VersionInfo `protobuf:"bytes,2,opt,name=application_version,json=applicationVersion,proto3" json:"application_version,omitempty"` } func (m *GetNodeInfoResponse) Reset() { *m = GetNodeInfoResponse{} } @@ -672,9 +672,9 @@ func (m *GetNodeInfoResponse) XXX_DiscardUnknown() { var xxx_messageInfo_GetNodeInfoResponse proto.InternalMessageInfo -func (m *GetNodeInfoResponse) GetDefaultNodeInfo() *p2p.DefaultNodeInfo { +func (m *GetNodeInfoResponse) GetNodeInfo() *p2p.NodeInfo { if m != nil { - return m.DefaultNodeInfo + return m.NodeInfo } return nil } @@ -875,75 +875,74 @@ func init() { } var fileDescriptor_40c93fb3ef485c5d = []byte{ - // 1081 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4d, 0x6f, 0xdc, 0x44, - 0x18, 0x8e, 0x77, 0xdb, 0x6c, 0xf2, 0x2e, 0x82, 0x64, 0x12, 0x1a, 0xc7, 0x4a, 0xb7, 0x61, 0x0f, - 0x6d, 0x42, 0x88, 0xad, 0xdd, 0xb6, 0x69, 0x0f, 0xa5, 0x88, 0x10, 0x48, 0xa3, 0x96, 0x2a, 0x72, - 0x10, 0x07, 0x84, 0x64, 0x79, 0xd7, 0x13, 0x67, 0x94, 0x5d, 0xcf, 0xd4, 0x33, 0x0e, 0x5a, 0xa1, - 0x0a, 0xc4, 0x89, 0x23, 0x12, 0x7f, 0xa1, 0x07, 0xf8, 0x03, 0x1c, 0x11, 0x47, 0x8e, 0x15, 0x48, - 0xa8, 0xe2, 0x84, 0x12, 0x7e, 0x08, 0xf2, 0xcc, 0x78, 0xd7, 0x6e, 0x92, 0xee, 0x6e, 0x0e, 0x48, - 0x3d, 0x79, 0xe6, 0xfd, 0x9a, 0xe7, 0x79, 0x66, 0xde, 0xf1, 0xc0, 0xbb, 0x6d, 0xca, 0xbb, 0x94, - 0x3b, 0x2d, 0x9f, 0x63, 0x47, 0xe0, 0x28, 0xc0, 0x71, 0x97, 0x44, 0xc2, 0x39, 0x6a, 0xb4, 0xb0, - 0xf0, 0x1b, 0xce, 0x93, 0x04, 0xc7, 0x3d, 0x9b, 0xc5, 0x54, 0x50, 0x54, 0x53, 0xb1, 0x76, 0x1a, - 0x6b, 0x0f, 0x62, 0x6d, 0x1d, 0x6b, 0xcd, 0x87, 0x34, 0xa4, 0x32, 0xd4, 0x49, 0x47, 0x2a, 0xcb, - 0x5a, 0x0c, 0x29, 0x0d, 0x3b, 0xd8, 0x91, 0xb3, 0x56, 0xb2, 0xef, 0xf8, 0x91, 0x2e, 0x68, 0x2d, - 0x69, 0x97, 0xcf, 0x88, 0xe3, 0x47, 0x11, 0x15, 0xbe, 0x20, 0x34, 0xe2, 0xda, 0x6b, 0xe5, 0xe0, - 0xb0, 0x26, 0x73, 0x44, 0x8f, 0xe1, 0xcc, 0xb7, 0x94, 0xf3, 0x49, 0xbb, 0xd3, 0xea, 0xd0, 0xf6, - 0xe1, 0xb9, 0xde, 0x7c, 0x6e, 0x81, 0xb2, 0xe4, 0xd7, 0x67, 0xcb, 0xfc, 0x90, 0x44, 0x12, 0x84, - 0x8a, 0xad, 0x7f, 0x6b, 0x40, 0x6d, 0x1b, 0x8b, 0xcf, 0xfd, 0x0e, 0x09, 0x7c, 0x41, 0xe3, 0x3d, - 0x2c, 0x36, 0x7b, 0x0f, 0x30, 0x09, 0x0f, 0x84, 0x8b, 0x9f, 0x24, 0x98, 0x0b, 0x74, 0x05, 0x26, - 0x0f, 0xa4, 0xc1, 0x34, 0x96, 0x8d, 0x95, 0xb2, 0xab, 0x67, 0xe8, 0x13, 0x80, 0x41, 0x39, 0xb3, - 0xb4, 0x6c, 0xac, 0x54, 0x9b, 0xd7, 0xed, 0xbc, 0x84, 0x4a, 0x5b, 0xbd, 0xb6, 0xbd, 0xeb, 0x87, - 0x58, 0xd7, 0x74, 0x73, 0x99, 0xf5, 0x17, 0x06, 0x5c, 0x3b, 0x17, 0x02, 0x67, 0x34, 0xe2, 0x18, - 0xbd, 0x03, 0x6f, 0x48, 0xfe, 0x5e, 0x01, 0x49, 0x55, 0xda, 0x54, 0x28, 0xda, 0x01, 0x38, 0xca, - 0x4a, 0x70, 0xb3, 0xb4, 0x5c, 0x5e, 0xa9, 0x36, 0x57, 0xed, 0x57, 0xef, 0xa8, 0xdd, 0x5f, 0xd4, - 0xcd, 0x25, 0xa3, 0xed, 0x02, 0xb3, 0xb2, 0x64, 0x76, 0x63, 0x28, 0x33, 0x05, 0xb5, 0x40, 0x6d, - 0x1f, 0x96, 0xb6, 0xb1, 0x78, 0xe4, 0x0b, 0xcc, 0x0b, 0xfc, 0x32, 0x69, 0x8b, 0x12, 0x1a, 0x17, - 0x96, 0xf0, 0x2f, 0x03, 0xae, 0x9e, 0xb3, 0xd0, 0xeb, 0x2d, 0xe0, 0x33, 0x03, 0xa6, 0xfb, 0x4b, - 0x20, 0x13, 0x2a, 0x7e, 0x10, 0xc4, 0x98, 0x73, 0x89, 0x7f, 0xda, 0xcd, 0xa6, 0x68, 0x1d, 0x2a, - 0x2c, 0x69, 0x79, 0x87, 0xb8, 0xa7, 0x0f, 0xe2, 0xbc, 0xad, 0x5a, 0xcf, 0xce, 0xba, 0xd2, 0xfe, - 0x30, 0xea, 0xb9, 0x93, 0x2c, 0x69, 0x3d, 0xc4, 0xbd, 0x54, 0x8d, 0x23, 0x2a, 0x48, 0x14, 0x7a, - 0x8c, 0x7e, 0x85, 0x63, 0x89, 0xb0, 0xec, 0x56, 0x95, 0x6d, 0x37, 0x35, 0xa1, 0x35, 0x98, 0x65, - 0x31, 0x65, 0x94, 0xe3, 0xd8, 0x63, 0x31, 0xa1, 0x31, 0x11, 0x3d, 0xf3, 0x92, 0x8c, 0x9b, 0xc9, - 0x1c, 0xbb, 0xda, 0x5e, 0x6f, 0xc0, 0xc2, 0x36, 0x16, 0x9b, 0xa9, 0x98, 0x23, 0x76, 0x4f, 0xfd, - 0x1b, 0x30, 0x4f, 0xa7, 0xe8, 0xcd, 0xba, 0x05, 0x53, 0x6a, 0xb3, 0x48, 0xa0, 0x0f, 0xc5, 0x62, - 0x5e, 0x7b, 0xd5, 0xeb, 0x32, 0x75, 0x67, 0xcb, 0xad, 0xc8, 0xd0, 0x9d, 0x00, 0xad, 0xc3, 0x65, - 0x39, 0xd4, 0x0a, 0x2c, 0x9c, 0x93, 0xe2, 0xaa, 0xa8, 0xfa, 0x02, 0xbc, 0xdd, 0x3f, 0x32, 0xca, - 0xa1, 0x10, 0xd7, 0x9f, 0xc2, 0x95, 0x97, 0x1d, 0xff, 0x27, 0xae, 0x39, 0x98, 0xdd, 0xc6, 0x62, - 0xaf, 0x17, 0xb5, 0x49, 0x14, 0x66, 0x98, 0x6c, 0x40, 0x79, 0xa3, 0xc6, 0x63, 0x42, 0x85, 0x2b, - 0x93, 0x84, 0x33, 0xe5, 0x66, 0xd3, 0xfa, 0xbc, 0x8c, 0x7f, 0x4c, 0x03, 0xbc, 0x13, 0xed, 0xd3, - 0xac, 0xca, 0x6f, 0x06, 0xcc, 0x15, 0xcc, 0xba, 0xce, 0x43, 0x98, 0x0d, 0xf0, 0xbe, 0x9f, 0x74, - 0x84, 0x17, 0xd1, 0x00, 0x7b, 0x24, 0xda, 0xa7, 0x9a, 0xe0, 0xb5, 0x3c, 0x5a, 0xd6, 0x64, 0xf6, - 0x96, 0x0a, 0xec, 0xd7, 0x78, 0x2b, 0x28, 0x1a, 0xd0, 0x97, 0x30, 0xe7, 0x33, 0xd6, 0x21, 0x6d, - 0x79, 0x82, 0xbd, 0x23, 0x1c, 0xf3, 0xc1, 0xfd, 0xb8, 0x36, 0xb4, 0x9f, 0x54, 0xb8, 0x2c, 0x8d, - 0x72, 0x75, 0xb4, 0xbd, 0xfe, 0x53, 0x09, 0xaa, 0xb9, 0x18, 0x84, 0xe0, 0x52, 0xe4, 0x77, 0xb1, - 0xee, 0x07, 0x39, 0x46, 0x8b, 0x30, 0xe5, 0x33, 0xe6, 0x49, 0x7b, 0x49, 0xf7, 0x09, 0x63, 0x8f, - 0x53, 0x97, 0x09, 0x95, 0x0c, 0x50, 0x59, 0x79, 0xf4, 0x14, 0x5d, 0x05, 0x08, 0x89, 0xf0, 0xda, - 0xb4, 0xdb, 0x25, 0x42, 0x1e, 0xf4, 0x69, 0x77, 0x3a, 0x24, 0xe2, 0x23, 0x69, 0x48, 0xdd, 0xad, - 0x84, 0x74, 0x02, 0x4f, 0xf8, 0x21, 0x37, 0x2f, 0x2b, 0xb7, 0xb4, 0x7c, 0xe6, 0x87, 0x5c, 0x66, - 0xd3, 0x3e, 0xd7, 0x49, 0x9d, 0x4d, 0x35, 0x52, 0xf4, 0x71, 0x96, 0x1d, 0x60, 0xc6, 0xcd, 0x8a, - 0xbc, 0x5a, 0xae, 0x0f, 0x93, 0xe2, 0x53, 0x1a, 0x24, 0x1d, 0xac, 0x57, 0xd9, 0xc2, 0x8c, 0xa3, - 0xf7, 0x00, 0xa9, 0x1c, 0x8f, 0x07, 0x87, 0xfd, 0xd5, 0xa6, 0xe4, 0x6a, 0x33, 0xca, 0xb3, 0x17, - 0x1c, 0x66, 0x52, 0x3d, 0x80, 0x49, 0x55, 0x22, 0x15, 0x89, 0xf9, 0xe2, 0x20, 0x13, 0x29, 0x1d, - 0xe7, 0x95, 0x28, 0x15, 0x95, 0x98, 0x81, 0x32, 0x4f, 0xba, 0x5a, 0x9f, 0x74, 0xd8, 0xfc, 0x7e, - 0x1a, 0x2a, 0x7b, 0x38, 0x3e, 0x22, 0x6d, 0x8c, 0x7e, 0x36, 0xa0, 0x9a, 0x3b, 0x43, 0xa8, 0x39, - 0x8c, 0xc6, 0xe9, 0x73, 0x68, 0xdd, 0x1c, 0x2b, 0x47, 0x1d, 0xd2, 0x7a, 0xe3, 0xbb, 0x3f, 0xff, - 0xfd, 0xb1, 0xb4, 0x86, 0x56, 0x9d, 0x21, 0x2f, 0x9a, 0xfe, 0x11, 0x46, 0xcf, 0x0c, 0x80, 0x41, - 0xdb, 0xa0, 0xc6, 0x08, 0xcb, 0x16, 0xfb, 0xce, 0x6a, 0x8e, 0x93, 0xa2, 0x81, 0x3a, 0x12, 0xe8, - 0x2a, 0xba, 0x31, 0x0c, 0xa8, 0x6e, 0x56, 0xf4, 0x8b, 0x01, 0x6f, 0x16, 0x6f, 0x1c, 0x74, 0x7b, - 0x84, 0x75, 0x4f, 0x5f, 0x5d, 0xd6, 0xc6, 0xb8, 0x69, 0x1a, 0xf2, 0x6d, 0x09, 0xd9, 0x41, 0xeb, - 0xc3, 0x20, 0xcb, 0x2b, 0x8a, 0x3b, 0x1d, 0x59, 0x03, 0xfd, 0x6a, 0xc0, 0xcc, 0xcb, 0x97, 0x38, - 0xba, 0x33, 0x02, 0x86, 0xb3, 0xfe, 0x14, 0xd6, 0xdd, 0xf1, 0x13, 0x35, 0xfc, 0x3b, 0x12, 0x7e, - 0x03, 0x39, 0x23, 0xc2, 0xff, 0x5a, 0xfd, 0x83, 0x9e, 0xa2, 0x3f, 0x8c, 0xdc, 0x4f, 0x20, 0xff, - 0x6e, 0x40, 0xf7, 0x46, 0x56, 0xf2, 0x8c, 0x77, 0x8d, 0xf5, 0xfe, 0x05, 0xb3, 0x35, 0x9f, 0x7b, - 0x92, 0xcf, 0x06, 0xba, 0x35, 0x8c, 0xcf, 0xe0, 0xc9, 0x81, 0x45, 0x7f, 0x57, 0xfe, 0x36, 0xe4, - 0xdf, 0xf8, 0xac, 0xf7, 0x24, 0xba, 0x3f, 0x02, 0xb0, 0x57, 0xbc, 0x85, 0xad, 0x0f, 0x2e, 0x9c, - 0xaf, 0xa9, 0xdd, 0x97, 0xd4, 0xee, 0xa2, 0x8d, 0xf1, 0xa8, 0x65, 0x3b, 0xb6, 0xf9, 0xe8, 0xf7, - 0xe3, 0x9a, 0xf1, 0xfc, 0xb8, 0x66, 0xfc, 0x73, 0x5c, 0x33, 0x7e, 0x38, 0xa9, 0x4d, 0x3c, 0x3f, - 0xa9, 0x4d, 0xbc, 0x38, 0xa9, 0x4d, 0x7c, 0xd1, 0x0c, 0x89, 0x38, 0x48, 0x5a, 0x76, 0x9b, 0x76, - 0xb3, 0xda, 0xea, 0xb3, 0xce, 0x83, 0x43, 0xa7, 0xdd, 0x21, 0x38, 0x12, 0x4e, 0x18, 0xb3, 0xb6, - 0x23, 0xba, 0x5c, 0x5d, 0x66, 0xad, 0x49, 0xf9, 0x3a, 0xba, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x9d, 0x37, 0x87, 0xe4, 0x25, 0x0d, 0x00, 0x00, + // 1069 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xef, 0xda, 0x6d, 0x1c, 0x3f, 0x23, 0x94, 0x4e, 0x42, 0xb3, 0x59, 0xa5, 0x26, 0xf8, 0xd0, + 0x26, 0x84, 0xec, 0xca, 0x6e, 0x93, 0xf6, 0x50, 0x8a, 0x08, 0x05, 0x37, 0xa2, 0x54, 0xd1, 0x06, + 0x71, 0x40, 0x48, 0xab, 0xb5, 0x77, 0xb2, 0x19, 0xd9, 0xde, 0x99, 0xee, 0x8c, 0x8d, 0x2c, 0x54, + 0x81, 0x38, 0x71, 0x44, 0xe2, 0x2b, 0xf4, 0x00, 0x7c, 0x00, 0x8e, 0x9c, 0x39, 0x56, 0x20, 0xa1, + 0x8a, 0x13, 0x4a, 0xf8, 0x20, 0x68, 0x67, 0x66, 0xed, 0xdd, 0x26, 0xa9, 0xed, 0x1c, 0x90, 0x38, + 0x79, 0xf6, 0xfd, 0x9b, 0xdf, 0xef, 0x37, 0xef, 0x8d, 0x07, 0xde, 0x6e, 0x53, 0xde, 0xa3, 0xdc, + 0x69, 0xf9, 0x1c, 0x3b, 0x02, 0x47, 0x01, 0x8e, 0x7b, 0x24, 0x12, 0xce, 0xa0, 0xde, 0xc2, 0xc2, + 0xaf, 0x3b, 0x4f, 0xfa, 0x38, 0x1e, 0xda, 0x2c, 0xa6, 0x82, 0xa2, 0xaa, 0x8a, 0xb5, 0x93, 0x58, + 0x7b, 0x1c, 0x6b, 0xeb, 0x58, 0x6b, 0x29, 0xa4, 0x21, 0x95, 0xa1, 0x4e, 0xb2, 0x52, 0x59, 0xd6, + 0x4a, 0x48, 0x69, 0xd8, 0xc5, 0x8e, 0xfc, 0x6a, 0xf5, 0x0f, 0x1d, 0x3f, 0xd2, 0x05, 0xad, 0x55, + 0xed, 0xf2, 0x19, 0x71, 0xfc, 0x28, 0xa2, 0xc2, 0x17, 0x84, 0x46, 0x5c, 0x7b, 0xad, 0x0c, 0x1c, + 0xd6, 0x60, 0x8e, 0x18, 0x32, 0x9c, 0xfa, 0x56, 0x33, 0x3e, 0x69, 0x77, 0x5a, 0x5d, 0xda, 0xee, + 0x9c, 0xeb, 0xcd, 0xe6, 0xe6, 0x28, 0x4b, 0x7e, 0x23, 0xb6, 0xcc, 0x0f, 0x49, 0x24, 0x41, 0xa8, + 0xd8, 0xda, 0x37, 0x06, 0x54, 0x9b, 0x58, 0x7c, 0xe6, 0x77, 0x49, 0xe0, 0x0b, 0x1a, 0x1f, 0x60, + 0xb1, 0x3b, 0x7c, 0x88, 0x49, 0x78, 0x24, 0x5c, 0xfc, 0xa4, 0x8f, 0xb9, 0x40, 0xd7, 0x60, 0xee, + 0x48, 0x1a, 0x4c, 0x63, 0xcd, 0x58, 0x2f, 0xba, 0xfa, 0x0b, 0x7d, 0x04, 0x30, 0x2e, 0x67, 0x16, + 0xd6, 0x8c, 0xf5, 0x4a, 0xe3, 0x86, 0x9d, 0x95, 0x50, 0x69, 0xab, 0xf7, 0xb6, 0xf7, 0xfd, 0x10, + 0xeb, 0x9a, 0x6e, 0x26, 0xb3, 0xf6, 0xc2, 0x80, 0x37, 0xcf, 0x85, 0xc0, 0x19, 0x8d, 0x38, 0x46, + 0x6f, 0xc1, 0x6b, 0x92, 0xbf, 0x97, 0x43, 0x52, 0x91, 0x36, 0x15, 0x8a, 0xf6, 0x00, 0x06, 0x69, + 0x09, 0x6e, 0x16, 0xd6, 0x8a, 0xeb, 0x95, 0xc6, 0x86, 0xfd, 0xea, 0x13, 0xb5, 0x47, 0x9b, 0xba, + 0x99, 0x64, 0xd4, 0xcc, 0x31, 0x2b, 0x4a, 0x66, 0x37, 0x27, 0x32, 0x53, 0x50, 0x73, 0xd4, 0x0e, + 0x61, 0xb5, 0x89, 0xc5, 0x23, 0x5f, 0x60, 0x9e, 0xe3, 0x97, 0x4a, 0x9b, 0x97, 0xd0, 0xb8, 0xb0, + 0x84, 0x7f, 0x1a, 0x70, 0xfd, 0x9c, 0x8d, 0xfe, 0xdf, 0x02, 0x3e, 0x33, 0xa0, 0x3c, 0xda, 0x02, + 0x99, 0x50, 0xf2, 0x83, 0x20, 0xc6, 0x9c, 0x4b, 0xfc, 0x65, 0x37, 0xfd, 0x44, 0x5b, 0x50, 0x62, + 0xfd, 0x96, 0xd7, 0xc1, 0x43, 0xdd, 0x88, 0x4b, 0xb6, 0x1a, 0x3d, 0x3b, 0x9d, 0x4a, 0xfb, 0xfd, + 0x68, 0xe8, 0xce, 0xb1, 0x7e, 0xeb, 0x63, 0x3c, 0x4c, 0xd4, 0x18, 0x50, 0x41, 0xa2, 0xd0, 0x63, + 0xf4, 0x4b, 0x1c, 0x4b, 0x84, 0x45, 0xb7, 0xa2, 0x6c, 0xfb, 0x89, 0x09, 0x6d, 0xc2, 0x55, 0x16, + 0x53, 0x46, 0x39, 0x8e, 0x3d, 0x16, 0x13, 0x1a, 0x13, 0x31, 0x34, 0x2f, 0xcb, 0xb8, 0x85, 0xd4, + 0xb1, 0xaf, 0xed, 0xb5, 0x3a, 0x2c, 0x37, 0xb1, 0xd8, 0x4d, 0xc4, 0x9c, 0x72, 0x7a, 0x6a, 0x5f, + 0x83, 0x79, 0x3a, 0x45, 0x1f, 0xd6, 0x6d, 0x98, 0x57, 0x87, 0x45, 0x02, 0xdd, 0x14, 0x2b, 0x59, + 0xed, 0xd5, 0xac, 0xcb, 0xd4, 0xbd, 0x07, 0x6e, 0x49, 0x86, 0xee, 0x05, 0x68, 0x0b, 0xae, 0xc8, + 0xa5, 0x56, 0x60, 0xf9, 0x9c, 0x14, 0x57, 0x45, 0xd5, 0x96, 0xe1, 0x8d, 0x51, 0xcb, 0x28, 0x87, + 0x42, 0x5c, 0x7b, 0x0a, 0xd7, 0x5e, 0x76, 0xfc, 0x97, 0xb8, 0x16, 0xe1, 0x6a, 0x13, 0x8b, 0x83, + 0x61, 0xd4, 0x26, 0x51, 0x98, 0x62, 0xb2, 0x01, 0x65, 0x8d, 0x1a, 0x8f, 0x09, 0x25, 0xae, 0x4c, + 0x12, 0xce, 0xbc, 0x9b, 0x7e, 0xd6, 0x96, 0x64, 0xfc, 0x63, 0x1a, 0xe0, 0xbd, 0xe8, 0x90, 0xa6, + 0x55, 0x7e, 0x36, 0x60, 0x31, 0x67, 0xd6, 0x75, 0xb6, 0xa1, 0x1c, 0xd1, 0x00, 0x7b, 0x24, 0x3a, + 0xa4, 0x9a, 0x98, 0x99, 0x45, 0xc9, 0x1a, 0xcc, 0x1e, 0x25, 0xcd, 0x47, 0x7a, 0x85, 0xbe, 0x80, + 0x45, 0x9f, 0xb1, 0x2e, 0x69, 0xcb, 0x5e, 0xf5, 0x06, 0x38, 0xe6, 0xe3, 0x9b, 0x70, 0x73, 0xe2, + 0xe4, 0xa8, 0x70, 0x59, 0x13, 0x65, 0xea, 0x68, 0x7b, 0xed, 0xc7, 0x02, 0x54, 0x32, 0x31, 0x08, + 0xc1, 0xe5, 0xc8, 0xef, 0x61, 0xdd, 0xf9, 0x72, 0x8d, 0x56, 0x60, 0xde, 0x67, 0xcc, 0x93, 0xf6, + 0x82, 0x9e, 0x08, 0xc6, 0x1e, 0x27, 0x2e, 0x13, 0x4a, 0x29, 0xa0, 0xa2, 0xf2, 0xe8, 0x4f, 0x74, + 0x1d, 0x20, 0x24, 0xc2, 0x6b, 0xd3, 0x5e, 0x8f, 0x08, 0xd9, 0xd2, 0x65, 0xb7, 0x1c, 0x12, 0xf1, + 0x81, 0x34, 0x24, 0xee, 0x56, 0x9f, 0x74, 0x03, 0x4f, 0xf8, 0x21, 0x37, 0xaf, 0x28, 0xb7, 0xb4, + 0x7c, 0xea, 0x87, 0x5c, 0x66, 0xd3, 0x11, 0xd7, 0x39, 0x9d, 0x4d, 0x35, 0x52, 0xf4, 0x61, 0x9a, + 0x1d, 0x60, 0xc6, 0xcd, 0x92, 0xbc, 0x44, 0x6e, 0x4c, 0x92, 0xe2, 0x13, 0x1a, 0xf4, 0xbb, 0x58, + 0xef, 0xf2, 0x00, 0x33, 0x8e, 0xde, 0x01, 0xa4, 0x72, 0x3c, 0x1e, 0x74, 0x46, 0xbb, 0xcd, 0xcb, + 0xdd, 0x16, 0x94, 0xe7, 0x20, 0xe8, 0xa4, 0x52, 0x3d, 0x84, 0x39, 0x55, 0x22, 0x11, 0x89, 0xf9, + 0xe2, 0x28, 0x15, 0x29, 0x59, 0x67, 0x95, 0x28, 0xe4, 0x95, 0x58, 0x80, 0x22, 0xef, 0xf7, 0xb4, + 0x3e, 0xc9, 0xb2, 0xf1, 0x5d, 0x19, 0x4a, 0x07, 0x38, 0x1e, 0x90, 0x36, 0x46, 0x3f, 0x19, 0x50, + 0xc9, 0x74, 0x0b, 0x6a, 0x4c, 0xa2, 0x71, 0xba, 0xe3, 0xac, 0x5b, 0x33, 0xe5, 0xa8, 0x76, 0xac, + 0xd5, 0xbf, 0xfd, 0xe3, 0x9f, 0x1f, 0x0a, 0x9b, 0x68, 0xc3, 0x99, 0xf0, 0x76, 0x19, 0x35, 0x2d, + 0x7a, 0x66, 0x00, 0x8c, 0x07, 0x04, 0xd5, 0xa7, 0xd8, 0x36, 0x3f, 0x61, 0x56, 0x63, 0x96, 0x14, + 0x0d, 0xd4, 0x91, 0x40, 0x37, 0xd0, 0xcd, 0x49, 0x40, 0xf5, 0x58, 0xa2, 0x5f, 0x0c, 0x78, 0x3d, + 0x7f, 0xb7, 0xa0, 0xed, 0x29, 0xf6, 0x3d, 0x7d, 0x49, 0x59, 0x3b, 0xb3, 0xa6, 0x69, 0xc8, 0xdb, + 0x12, 0xb2, 0x83, 0xb6, 0x26, 0x41, 0x96, 0x97, 0x11, 0x77, 0xba, 0xb2, 0x06, 0xfa, 0xd5, 0x80, + 0x85, 0x97, 0xaf, 0x6b, 0x74, 0x67, 0x0a, 0x0c, 0x67, 0xfd, 0x27, 0x58, 0x77, 0x67, 0x4f, 0xd4, + 0xf0, 0xef, 0x48, 0xf8, 0x75, 0xe4, 0x4c, 0x09, 0xff, 0x2b, 0xf5, 0x6f, 0xf3, 0x14, 0xfd, 0x6e, + 0x64, 0xae, 0xfb, 0xec, 0x0b, 0x01, 0xdd, 0x9b, 0x5a, 0xc9, 0x33, 0x5e, 0x30, 0xd6, 0xbb, 0x17, + 0xcc, 0xd6, 0x7c, 0xee, 0x49, 0x3e, 0x3b, 0xe8, 0xf6, 0x24, 0x3e, 0xe3, 0xc7, 0x05, 0x16, 0xa3, + 0x53, 0xf9, 0xcb, 0x90, 0xff, 0xbb, 0x67, 0xbd, 0x1c, 0xd1, 0xfd, 0x29, 0x80, 0xbd, 0xe2, 0xd5, + 0x6b, 0xbd, 0x77, 0xe1, 0x7c, 0x4d, 0xed, 0xbe, 0xa4, 0x76, 0x17, 0xed, 0xcc, 0x46, 0x2d, 0x3d, + 0xb1, 0xdd, 0x47, 0xbf, 0x1d, 0x57, 0x8d, 0xe7, 0xc7, 0x55, 0xe3, 0xef, 0xe3, 0xaa, 0xf1, 0xfd, + 0x49, 0xf5, 0xd2, 0xf3, 0x93, 0xea, 0xa5, 0x17, 0x27, 0xd5, 0x4b, 0x9f, 0x37, 0x42, 0x22, 0x8e, + 0xfa, 0x2d, 0xbb, 0x4d, 0x7b, 0x69, 0x6d, 0xf5, 0xb3, 0xc5, 0x83, 0x8e, 0xd3, 0xee, 0x12, 0x1c, + 0x09, 0x27, 0x8c, 0x59, 0xdb, 0x11, 0x3d, 0xae, 0x2e, 0xb3, 0xd6, 0x9c, 0x7c, 0x07, 0xdd, 0xfa, + 0x37, 0x00, 0x00, 0xff, 0xff, 0x55, 0x5b, 0xb2, 0xc9, 0x0f, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1709,9 +1708,9 @@ func (m *GetNodeInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if m.DefaultNodeInfo != nil { + if m.NodeInfo != nil { { - size, err := m.DefaultNodeInfo.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.NodeInfo.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2052,8 +2051,8 @@ func (m *GetNodeInfoResponse) Size() (n int) { } var l int _ = l - if m.DefaultNodeInfo != nil { - l = m.DefaultNodeInfo.Size() + if m.NodeInfo != nil { + l = m.NodeInfo.Size() n += 1 + l + sovQuery(uint64(l)) } if m.ApplicationVersion != nil { @@ -3322,7 +3321,7 @@ func (m *GetNodeInfoResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultNodeInfo", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NodeInfo", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3349,10 +3348,10 @@ func (m *GetNodeInfoResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.DefaultNodeInfo == nil { - m.DefaultNodeInfo = &p2p.DefaultNodeInfo{} + if m.NodeInfo == nil { + m.NodeInfo = &p2p.NodeInfo{} } - if err := m.DefaultNodeInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.NodeInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/client/grpc/tmservice/service.go b/client/grpc/tmservice/service.go index cd6e7e5313ef..efbe6a4e47d8 100644 --- a/client/grpc/tmservice/service.go +++ b/client/grpc/tmservice/service.go @@ -182,7 +182,7 @@ func (s queryServer) GetNodeInfo(ctx context.Context, req *GetNodeInfoRequest) ( } resp := GetNodeInfoResponse{ - DefaultNodeInfo: protoNodeInfo, + NodeInfo: protoNodeInfo, ApplicationVersion: &VersionInfo{ AppName: nodeInfo.AppName, Name: nodeInfo.Name, diff --git a/client/utils.go b/client/utils.go index 944471bc90bd..9d4d004f3e17 100644 --- a/client/utils.go +++ b/client/utils.go @@ -76,5 +76,5 @@ func ReadPageRequest(flagSet *pflag.FlagSet) (*query.PageRequest, error) { // TODO: We might not need to manually append `/websocket`: // https://github.com/cosmos/cosmos-sdk/issues/8986 func NewClientFromNode(nodeURI string) (*rpchttp.HTTP, error) { - return rpchttp.New(nodeURI, "/websocket") + return rpchttp.New(nodeURI) } diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md index 7d876f4e91c0..749389d1e778 100644 --- a/docs/core/proto-docs.md +++ b/docs/core/proto-docs.md @@ -1268,6 +1268,9 @@ tags are stringified and the log is JSON decoded. | `gas_used` | [int64](#int64) | | Amount of gas consumed by transaction. | | `tx` | [google.protobuf.Any](#google.protobuf.Any) | | The request transaction bytes. | | `timestamp` | [string](#string) | | Time of the previous block. For heights > 1, it's the weighted median of the timestamps of the valid votes in the block.LastCommit. For height == 1, it's genesis time. | +| `events` | [tendermint.abci.Event](#tendermint.abci.Event) | repeated | Events defines all the events emitted by processing a transaction. Note, these events include those emitted by processing all the messages and those emitted from the ante handler. Whereas Logs contains the events, with additional metadata, emitted only by processing the messages. + +Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 | @@ -2919,7 +2922,7 @@ GetNodeInfoResponse is the request type for the Query/GetNodeInfo RPC method. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `default_node_info` | [tendermint.p2p.DefaultNodeInfo](#tendermint.p2p.DefaultNodeInfo) | | | +| `node_info` | [tendermint.p2p.NodeInfo](#tendermint.p2p.NodeInfo) | | | | `application_version` | [VersionInfo](#cosmos.base.tendermint.v1beta1.VersionInfo) | | | diff --git a/proto/cosmos/base/tendermint/v1beta1/query.proto b/proto/cosmos/base/tendermint/v1beta1/query.proto index 3c31877aa0ce..86ecb2dd2c1d 100644 --- a/proto/cosmos/base/tendermint/v1beta1/query.proto +++ b/proto/cosmos/base/tendermint/v1beta1/query.proto @@ -110,7 +110,7 @@ message GetNodeInfoRequest {} // GetNodeInfoResponse is the request type for the Query/GetNodeInfo RPC method. message GetNodeInfoResponse { - .tendermint.p2p.DefaultNodeInfo default_node_info = 1; + .tendermint.p2p.NodeInfo node_info = 1; VersionInfo application_version = 2; } diff --git a/testutil/network/network.go b/testutil/network/network.go index 2d503608f890..941b8247553d 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -111,7 +111,7 @@ func DefaultConfig() Config { AppConstructor: NewAppConstructor(encCfg), GenesisState: simapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), TimeoutCommit: 2 * time.Second, - ChainID: "chain-" + fmt.Sprintf("%s", rnd), + ChainID: "chain-" + fmt.Sprintf("%d", rnd), NumValidators: 4, BondDenom: sdk.DefaultBondDenom, MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 2cbcabb29b33..18c18c60a6ac 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -21,21 +21,24 @@ import "gogoproto/gogo.proto"; message Request { oneof value { - RequestEcho echo = 1; - RequestFlush flush = 2; - RequestInfo info = 3; - RequestSetOption set_option = 4; - RequestInitChain init_chain = 5; - RequestQuery query = 6; - RequestBeginBlock begin_block = 7; - RequestCheckTx check_tx = 8; - RequestDeliverTx deliver_tx = 9; - RequestEndBlock end_block = 10; - RequestCommit commit = 11; - RequestListSnapshots list_snapshots = 12; - RequestOfferSnapshot offer_snapshot = 13; - RequestLoadSnapshotChunk load_snapshot_chunk = 14; - RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestInitChain init_chain = 4; + RequestQuery query = 5; + RequestBeginBlock begin_block = 6; + RequestCheckTx check_tx = 7; + RequestDeliverTx deliver_tx = 8; + RequestEndBlock end_block = 9; + RequestCommit commit = 10; + RequestListSnapshots list_snapshots = 11; + RequestOfferSnapshot offer_snapshot = 12; + RequestLoadSnapshotChunk load_snapshot_chunk = 13; + RequestApplySnapshotChunk apply_snapshot_chunk = 14; + RequestPrepareProposal prepare_proposal = 15; + RequestProcessProposal process_proposal = 16; + RequestExtendVote extend_vote = 17; + RequestVerifyVoteExtension verify_vote_extension = 18; } } @@ -49,22 +52,16 @@ message RequestInfo { string version = 1; uint64 block_version = 2; uint64 p2p_version = 3; -} - -// nondeterministic -message RequestSetOption { - string key = 1; - string value = 2; + string abci_version = 4; } message RequestInitChain { - google.protobuf.Timestamp time = 1 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; - int64 initial_height = 6; + google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + tendermint.types.ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; } message RequestQuery { @@ -102,8 +99,7 @@ message RequestEndBlock { message RequestCommit {} // lists available snapshots -message RequestListSnapshots { -} +message RequestListSnapshots {} // offers a snapshot to the application message RequestOfferSnapshot { @@ -125,27 +121,54 @@ message RequestApplySnapshotChunk { string sender = 3; } +message RequestPrepareProposal { + // block_data is an array of transactions that will be included in a block, + // sent to the app for possible modifications. + // applications can not exceed the size of the data passed to it. + repeated bytes block_data = 1; + // If an application decides to populate block_data with extra information, they can not exceed this value. + int64 block_data_size = 2; +} + +// Extends a vote with application-side injection +message RequestExtendVote { + types.Vote vote = 1; +} + +// Verify the vote extension +message RequestVerifyVoteExtension { + types.Vote vote = 1; +} + +message RequestProcessProposal { + tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; + repeated bytes txs = 2; +} + //---------------------------------------- // Response types message Response { oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - ResponseListSnapshots list_snapshots = 13; - ResponseOfferSnapshot offer_snapshot = 14; - ResponseLoadSnapshotChunk load_snapshot_chunk = 15; - ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseInitChain init_chain = 5; + ResponseQuery query = 6; + ResponseBeginBlock begin_block = 7; + ResponseCheckTx check_tx = 8; + ResponseDeliverTx deliver_tx = 9; + ResponseEndBlock end_block = 10; + ResponseCommit commit = 11; + ResponseListSnapshots list_snapshots = 12; + ResponseOfferSnapshot offer_snapshot = 13; + ResponseLoadSnapshotChunk load_snapshot_chunk = 14; + ResponseApplySnapshotChunk apply_snapshot_chunk = 15; + ResponsePrepareProposal prepare_proposal = 16; + ResponseProcessProposal process_proposal = 17; + ResponseExtendVote extend_vote = 18; + ResponseVerifyVoteExtension verify_vote_extension = 19; } } @@ -163,6 +186,7 @@ message ResponseFlush {} message ResponseInfo { string data = 1; + // this is the software version of the application. TODO: remove? string version = 2; uint64 app_version = 3; @@ -170,18 +194,10 @@ message ResponseInfo { bytes last_block_app_hash = 5; } -// nondeterministic -message ResponseSetOption { - uint32 code = 1; - // bytes data = 2; - string log = 3; - string info = 4; -} - message ResponseInitChain { - ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; - bytes app_hash = 3; + tendermint.types.ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; } message ResponseQuery { @@ -198,8 +214,7 @@ message ResponseQuery { } message ResponseBeginBlock { - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + repeated Event events = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCheckTx { @@ -209,9 +224,14 @@ message ResponseCheckTx { string info = 4; // nondeterministic int64 gas_wanted = 5 [json_name = "gas_wanted"]; int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; + repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; + string sender = 9; + int64 priority = 10; + + // mempool_error is set by Tendermint. + // ABCI applications creating a ResponseCheckTX should not set mempool_error. + string mempool_error = 11; } message ResponseDeliverTx { @@ -222,16 +242,14 @@ message ResponseDeliverTx { int64 gas_wanted = 5 [json_name = "gas_wanted"]; int64 gas_used = 6 [json_name = "gas_used"]; repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic string codespace = 8; } message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 - [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; + tendermint.types.ConsensusParams consensus_param_updates = 2; + repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCommit { @@ -276,26 +294,39 @@ message ResponseApplySnapshotChunk { } } -//---------------------------------------- -// Misc. +message ResponsePrepareProposal { + repeated bytes block_data = 1; +} -// ConsensusParams contains all consensus-relevant parameters -// that can be adjusted by the abci app -message ConsensusParams { - BlockParams block = 1; - tendermint.types.EvidenceParams evidence = 2; - tendermint.types.ValidatorParams validator = 3; - tendermint.types.VersionParams version = 4; +message ResponseExtendVote { + tendermint.types.VoteExtension vote_extension = 1; } -// BlockParams contains limits on the block size. -message BlockParams { - // Note: must be greater than 0 - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; +message ResponseVerifyVoteExtension { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, reject vote extension + ACCEPT = 1; // Vote extension verified, include the vote + SLASH = 2; // Vote extension verification aborted, continue but slash validator + REJECT = 3; // Vote extension invalidated + } } +message ResponseProcessProposal { + Result result = 1; + repeated bytes evidence = 2; + + enum Result { + UNKNOWN = 0; // Unknown result, invalidate + ACCEPT = 1; // proposal verified, vote on the proposal + REJECT = 2; // proposal invalidated + } +} + +//---------------------------------------- +// Misc. + message LastCommitInfo { int32 round = 1; repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; @@ -306,17 +337,14 @@ message LastCommitInfo { // Later, transactions may be queried using these events. message Event { string type = 1; - repeated EventAttribute attributes = 2 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "attributes,omitempty" - ]; + repeated EventAttribute attributes = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "attributes,omitempty"]; } // EventAttribute is a single key-value pair, associated with an event. message EventAttribute { - bytes key = 1; - bytes value = 2; - bool index = 3; // nondeterministic + string key = 1; + string value = 2; + bool index = 3; // nondeterministic } // TxResult contains results of executing the transaction. @@ -364,10 +392,7 @@ message Evidence { // The height when the offense occurred int64 height = 3; // The corresponding time where the offense occurred - google.protobuf.Timestamp time = 4 [ - (gogoproto.nullable) = false, - (gogoproto.stdtime) = true - ]; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; // Total voting power of the validator set in case the ABCI application does // not store historical validators. // https://github.com/tendermint/tendermint/issues/4581 @@ -392,7 +417,6 @@ service ABCIApplication { rpc Echo(RequestEcho) returns (ResponseEcho); rpc Flush(RequestFlush) returns (ResponseFlush); rpc Info(RequestInfo) returns (ResponseInfo); - rpc SetOption(RequestSetOption) returns (ResponseSetOption); rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); rpc Query(RequestQuery) returns (ResponseQuery); @@ -404,4 +428,8 @@ service ABCIApplication { rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); + rpc PrepareProposal(RequestPrepareProposal) returns (ResponsePrepareProposal); + rpc ProcessProposal(RequestProcessProposal) returns (ResponseProcessProposal); + rpc ExtendVote(RequestExtendVote) returns (ResponseExtendVote); + rpc VerifyVoteExtension(RequestVerifyVoteExtension) returns (ResponseVerifyVoteExtension); } diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto index 16fd7adf3eef..d66f9fc0c9cb 100644 --- a/third_party/proto/tendermint/crypto/keys.proto +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -13,5 +13,6 @@ message PublicKey { oneof sum { bytes ed25519 = 1; bytes secp256k1 = 2; + bytes sr25519 = 3; } } diff --git a/third_party/proto/tendermint/p2p/types.proto b/third_party/proto/tendermint/p2p/types.proto index 0d42ea400299..216a6d8d0699 100644 --- a/third_party/proto/tendermint/p2p/types.proto +++ b/third_party/proto/tendermint/p2p/types.proto @@ -4,12 +4,7 @@ package tendermint.p2p; option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; import "gogoproto/gogo.proto"; - -message NetAddress { - string id = 1 [(gogoproto.customname) = "ID"]; - string ip = 2 [(gogoproto.customname) = "IP"]; - uint32 port = 3; -} +import "google/protobuf/timestamp.proto"; message ProtocolVersion { uint64 p2p = 1 [(gogoproto.customname) = "P2P"]; @@ -17,18 +12,31 @@ message ProtocolVersion { uint64 app = 3; } -message DefaultNodeInfo { - ProtocolVersion protocol_version = 1 [(gogoproto.nullable) = false]; - string default_node_id = 2 [(gogoproto.customname) = "DefaultNodeID"]; - string listen_addr = 3; - string network = 4; - string version = 5; - bytes channels = 6; - string moniker = 7; - DefaultNodeInfoOther other = 8 [(gogoproto.nullable) = false]; +message NodeInfo { + ProtocolVersion protocol_version = 1 [(gogoproto.nullable) = false]; + string node_id = 2 [(gogoproto.customname) = "NodeID"]; + string listen_addr = 3; + string network = 4; + string version = 5; + bytes channels = 6; + string moniker = 7; + NodeInfoOther other = 8 [(gogoproto.nullable) = false]; } -message DefaultNodeInfoOther { +message NodeInfoOther { string tx_index = 1; string rpc_address = 2 [(gogoproto.customname) = "RPCAddress"]; } + +message PeerInfo { + string id = 1 [(gogoproto.customname) = "ID"]; + repeated PeerAddressInfo address_info = 2; + google.protobuf.Timestamp last_connected = 3 [(gogoproto.stdtime) = true]; +} + +message PeerAddressInfo { + string address = 1; + google.protobuf.Timestamp last_dial_success = 2 [(gogoproto.stdtime) = true]; + google.protobuf.Timestamp last_dial_failure = 3 [(gogoproto.stdtime) = true]; + uint32 dial_failures = 4; +} diff --git a/third_party/proto/tendermint/types/block.proto b/third_party/proto/tendermint/types/block.proto index 84e9bb15d86a..bf4b35664fb1 100644 --- a/third_party/proto/tendermint/types/block.proto +++ b/third_party/proto/tendermint/types/block.proto @@ -5,11 +5,9 @@ option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; -import "tendermint/types/evidence.proto"; message Block { Header header = 1 [(gogoproto.nullable) = false]; Data data = 2 [(gogoproto.nullable) = false]; - tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; Commit last_commit = 4; } diff --git a/third_party/proto/tendermint/types/canonical.proto b/third_party/proto/tendermint/types/canonical.proto new file mode 100644 index 000000000000..e88fd6ffe319 --- /dev/null +++ b/third_party/proto/tendermint/types/canonical.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/types/types.proto"; +import "google/protobuf/timestamp.proto"; + +message CanonicalBlockID { + bytes hash = 1; + CanonicalPartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; +} + +message CanonicalPartSetHeader { + uint32 total = 1; + bytes hash = 2; +} + +message CanonicalProposal { + SignedMsgType type = 1; // type alias for byte + sfixed64 height = 2; // canonicalization requires fixed size encoding here + sfixed64 round = 3; // canonicalization requires fixed size encoding here + int64 pol_round = 4 [(gogoproto.customname) = "POLRound"]; + CanonicalBlockID block_id = 5 [(gogoproto.customname) = "BlockID"]; + google.protobuf.Timestamp timestamp = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 7 [(gogoproto.customname) = "ChainID"]; +} + +message CanonicalVote { + SignedMsgType type = 1; // type alias for byte + sfixed64 height = 2; // canonicalization requires fixed size encoding here + sfixed64 round = 3; // canonicalization requires fixed size encoding here + CanonicalBlockID block_id = 4 [(gogoproto.customname) = "BlockID"]; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 6 [(gogoproto.customname) = "ChainID"]; +} diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto deleted file mode 100644 index 3b234571ba67..000000000000 --- a/third_party/proto/tendermint/types/evidence.proto +++ /dev/null @@ -1,38 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "google/protobuf/timestamp.proto"; -import "tendermint/types/types.proto"; -import "tendermint/types/validator.proto"; - -message Evidence { - oneof sum { - DuplicateVoteEvidence duplicate_vote_evidence = 1; - LightClientAttackEvidence light_client_attack_evidence = 2; - } -} - -// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. -message DuplicateVoteEvidence { - tendermint.types.Vote vote_a = 1; - tendermint.types.Vote vote_b = 2; - int64 total_voting_power = 3; - int64 validator_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. -message LightClientAttackEvidence { - tendermint.types.LightBlock conflicting_block = 1; - int64 common_height = 2; - repeated tendermint.types.Validator byzantine_validators = 3; - int64 total_voting_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -message EvidenceList { - repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto index 0de7d846fbd3..837ed8136b18 100644 --- a/third_party/proto/tendermint/types/params.proto +++ b/third_party/proto/tendermint/types/params.proto @@ -11,10 +11,12 @@ option (gogoproto.equal_all) = true; // ConsensusParams contains consensus critical parameters that determine the // validity of blocks. message ConsensusParams { - BlockParams block = 1 [(gogoproto.nullable) = false]; - EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; - ValidatorParams validator = 3 [(gogoproto.nullable) = false]; - VersionParams version = 4 [(gogoproto.nullable) = false]; + BlockParams block = 1; + EvidenceParams evidence = 2; + ValidatorParams validator = 3; + VersionParams version = 4; + SynchronyParams synchrony = 5; + TimeoutParams timeout = 6; } // BlockParams contains limits on the block size. @@ -25,11 +27,6 @@ message BlockParams { // Max gas per block. // Note: must be greater or equal to -1 int64 max_gas = 2; - // Minimum time increment between consecutive blocks (in milliseconds) If the - // block header timestamp is ahead of the system clock, decrease this value. - // - // Not exposed to the application. - int64 time_iota_ms = 3; } // EvidenceParams determine how we handle evidence of malfeasance. @@ -46,7 +43,7 @@ message EvidenceParams { // mechanism for handling [Nothing-At-Stake // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; // This sets the maximum size of total evidence in bytes that can be committed in a single block. // and should fall comfortably under the max block bytes. @@ -57,17 +54,11 @@ message EvidenceParams { // ValidatorParams restrict the public key types validators can use. // NOTE: uses ABCI pubkey naming, not Amino names. message ValidatorParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - repeated string pub_key_types = 1; } // VersionParams contains the ABCI application version. message VersionParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - uint64 app_version = 1; } @@ -78,3 +69,61 @@ message HashedParams { int64 block_max_bytes = 1; int64 block_max_gas = 2; } + +// SynchronyParams configure the bounds under which a proposed block's timestamp is considered valid. +// These parameters are part of the proposer-based timestamps algorithm. For more information, +// see the specification of proposer-based timestamps: +// https://github.com/tendermint/spec/tree/master/spec/consensus/proposer-based-timestamp +message SynchronyParams { + // message_delay bounds how long a proposal message may take to reach all validators on a newtork + // and still be considered valid. + google.protobuf.Duration message_delay = 1 [(gogoproto.stdduration) = true]; + // precision bounds how skewed a proposer's clock may be from any validator + // on the network while still producing valid proposals. + google.protobuf.Duration precision = 2 [(gogoproto.stdduration) = true]; +} + +// TimeoutParams configure the timeouts for the steps of the Tendermint consensus algorithm. +message TimeoutParams { + // These fields configure the timeouts for the propose step of the Tendermint + // consensus algorithm: propose is the initial timeout and propose_delta + // determines how much the timeout grows in subsequent rounds. + // For the first round, this propose timeout is used and for every subsequent + // round, the timeout grows by propose_delta. + // + // For example: + // With propose = 10ms, propose_delta = 5ms, the first round's propose phase + // timeout would be 10ms, the second round's would be 15ms, the third 20ms and so on. + // + // If a node waiting for a proposal message does not receive one matching its + // current height and round before this timeout, the node will issue a + // nil prevote for the round and advance to the next step. + google.protobuf.Duration propose = 1 [(gogoproto.stdduration) = true]; + google.protobuf.Duration propose_delta = 2 [(gogoproto.stdduration) = true]; + + // vote along with vote_delta configure the timeout for both of the prevote and + // precommit steps of the Tendermint consensus algorithm. + // + // These parameters influence the vote step timeouts in the the same way that + // the propose and propose_delta parameters do to the proposal step. + // + // The vote timeout does not begin until a quorum of votes has been received. Once + // a quorum of votes has been seen and this timeout elapses, Tendermint will + // procced to the next step of the consensus algorithm. If Tendermint receives + // all of the remaining votes before the end of the timeout, it will proceed + // to the next step immediately. + google.protobuf.Duration vote = 3 [(gogoproto.stdduration) = true]; + google.protobuf.Duration vote_delta = 4 [(gogoproto.stdduration) = true]; + + // commit configures how long Tendermint will wait after receiving a quorum of + // precommits before beginning consensus for the next height. This can be + // used to allow slow precommits to arrive for inclusion in the next height before progressing. + google.protobuf.Duration commit = 5 [(gogoproto.stdduration) = true]; + + // enable_commit_timeout_bypass configures the node to proceed immediately to + // the next height once the node has received all precommits for a block, forgoing + // the remaining commit timeout. + // Setting enable_commit_timeout_bypass false (the default) causes Tendermint to wait + // for the full commit. + bool enable_commit_timeout_bypass = 6; +} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto index 7f7ea74cac21..0667b3414355 100644 --- a/third_party/proto/tendermint/types/types.proto +++ b/third_party/proto/tendermint/types/types.proto @@ -87,6 +87,70 @@ message Data { // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. repeated bytes txs = 1; + + IntermediateStateRoots intermediate_state_roots = 2 [(gogoproto.nullable) = false]; + EvidenceList evidence = 3 [(gogoproto.nullable) = false]; + Messages messages = 4 [(gogoproto.nullable) = false]; +} + +// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. +message DuplicateVoteEvidence { + tendermint.types.Vote vote_a = 1; + tendermint.types.Vote vote_b = 2; + int64 total_voting_power = 3; + int64 validator_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. +message LightClientAttackEvidence { + tendermint.types.LightBlock conflicting_block = 1; + int64 common_height = 2; + repeated tendermint.types.Validator byzantine_validators = 3; + int64 total_voting_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message Evidence { + oneof sum { + DuplicateVoteEvidence duplicate_vote_evidence = 1; + LightClientAttackEvidence light_client_attack_evidence = 2; + } +} + +// EvidenceData contains any evidence of malicious wrong-doing by validators +message EvidenceList { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; +} + +message IntermediateStateRoots { + repeated bytes raw_roots_list = 1; +} + +message Messages { + repeated Message messages_list = 1; +} + +message Message { + bytes namespace_id = 1; + bytes data = 2; +} + +// DataAvailabilityHeader contains the row and column roots of the erasure +// coded version of the data in Block.Data. +// Therefor the original Block.Data is arranged in a +// k × k matrix, which is then "extended" to a +// 2k × 2k matrix applying multiple times Reed-Solomon encoding. +// For details see Section 5.2: https://arxiv.org/abs/1809.09044 +// or the Celestia specification: +// https://github.com/celestiaorg/celestia-specs/blob/master/specs/data_structures.md#availabledataheader +// Note that currently we list row and column roots in separate fields +// (different from the spec). +message DataAvailabilityHeader { + // RowRoot_j = root((M_{j,1} || M_{j,2} || ... || M_{j,2k} )) + repeated bytes row_roots = 1; + // ColumnRoot_j = root((M_{1,j} || M_{2,j} || ... || M_{2k,j} )) + repeated bytes column_roots = 2; } // Vote represents a prevote, precommit, or commit vote from validators for @@ -96,20 +160,33 @@ message Vote { int64 height = 2; int32 round = 3; BlockID block_id = 4 - [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. google.protobuf.Timestamp timestamp = 5 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes validator_address = 6; int32 validator_index = 7; bytes signature = 8; + VoteExtension vote_extension = 9; +} + +// VoteExtension is app-defined additional information to the validator votes. +message VoteExtension { + bytes app_data_to_sign = 1; + bytes app_data_self_authenticating = 2; +} + +// VoteExtensionToSign is a subset of VoteExtension that is signed by the validators private key. +// VoteExtensionToSign is extracted from an existing VoteExtension. +message VoteExtensionToSign { + bytes app_data_to_sign = 1; } // Commit contains the evidence that a block was committed by a set of validators. message Commit { - int64 height = 1; - int32 round = 2; - BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; - repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; } // CommitSig is a part of the Vote included in a Commit. @@ -117,8 +194,9 @@ message CommitSig { BlockIDFlag block_id_flag = 1; bytes validator_address = 2; google.protobuf.Timestamp timestamp = 3 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 4; + VoteExtensionToSign vote_extension = 5; } message Proposal { @@ -128,7 +206,7 @@ message Proposal { int32 pol_round = 4; BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; google.protobuf.Timestamp timestamp = 6 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 7; } diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto index 6061868bd439..3c4e4cc533ed 100644 --- a/third_party/proto/tendermint/version/types.proto +++ b/third_party/proto/tendermint/version/types.proto @@ -5,14 +5,6 @@ option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; import "gogoproto/gogo.proto"; -// App includes the protocol and software version for the application. -// This information is included in ResponseInfo. The App.Protocol can be -// updated in ResponseEndBlock. -message App { - uint64 protocol = 1; - string software = 2; -} - // Consensus captures the consensus rules for processing a block in the blockchain, // including all blockchain data structures and the rules of the application's // state transition machine. diff --git a/x/bank/types/query.pb.go b/x/bank/types/query.pb.go index 2b9432192388..0b9ebea6cb6d 100644 --- a/x/bank/types/query.pb.go +++ b/x/bank/types/query.pb.go @@ -705,59 +705,59 @@ func init() { func init() { proto.RegisterFile("cosmos/bank/v1beta1/query.proto", fileDescriptor_9c6fc1939682df13) } var fileDescriptor_9c6fc1939682df13 = []byte{ - // 825 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4d, 0x6f, 0xd3, 0x58, - 0x14, 0xcd, 0xeb, 0x4c, 0xd3, 0xf4, 0x46, 0x33, 0x8b, 0xd7, 0x8c, 0x26, 0x75, 0xa7, 0xc9, 0xc8, - 0x9d, 0x69, 0xd3, 0x92, 0xda, 0x4d, 0x8b, 0x54, 0xc1, 0x06, 0x35, 0x45, 0xb0, 0x40, 0xa8, 0x21, - 0xb0, 0x42, 0x42, 0xe8, 0x25, 0x31, 0x26, 0x6a, 0xe2, 0xe7, 0xe6, 0x39, 0x88, 0xaa, 0xaa, 0x84, - 0x90, 0x90, 0x58, 0x01, 0x12, 0x0b, 0x16, 0x6c, 0xca, 0x06, 0x09, 0x96, 0xfc, 0x8a, 0x2e, 0x58, - 0x54, 0x62, 0xc3, 0x0a, 0x50, 0xcb, 0x82, 0x9f, 0x81, 0xf2, 0x3e, 0x5c, 0x27, 0x71, 0x13, 0x2f, - 0xc2, 0x2a, 0xf6, 0xf5, 0xfd, 0x38, 0xe7, 0x3c, 0xdf, 0xe3, 0x40, 0xb6, 0x4a, 0x59, 0x93, 0x32, - 0xb3, 0x42, 0x9c, 0x6d, 0xf3, 0x41, 0xa1, 0x62, 0x79, 0xa4, 0x60, 0xee, 0xb4, 0xad, 0xd6, 0xae, - 0xe1, 0xb6, 0xa8, 0x47, 0xf1, 0x94, 0x48, 0x30, 0x3a, 0x09, 0x86, 0x4c, 0xd0, 0x96, 0xfc, 0x2a, - 0x66, 0x89, 0x6c, 0xbf, 0xd6, 0x25, 0x76, 0xdd, 0x21, 0x5e, 0x9d, 0x3a, 0xa2, 0x81, 0x96, 0xb2, - 0xa9, 0x4d, 0xf9, 0xa5, 0xd9, 0xb9, 0x92, 0xd1, 0x7f, 0x6c, 0x4a, 0xed, 0x86, 0x65, 0x12, 0xb7, - 0x6e, 0x12, 0xc7, 0xa1, 0x1e, 0x2f, 0x61, 0xf2, 0x69, 0x26, 0xd8, 0x5f, 0x75, 0xae, 0xd2, 0xba, - 0xd3, 0xf7, 0x3c, 0x80, 0x9a, 0x23, 0xe4, 0xcf, 0xf5, 0x2d, 0x98, 0xba, 0xd1, 0x41, 0x55, 0x24, - 0x0d, 0xe2, 0x54, 0xad, 0xb2, 0xb5, 0xd3, 0xb6, 0x98, 0x87, 0xd3, 0x30, 0x41, 0x6a, 0xb5, 0x96, - 0xc5, 0x58, 0x1a, 0xfd, 0x8b, 0x72, 0x93, 0x65, 0x75, 0x8b, 0x53, 0x30, 0x5e, 0xb3, 0x1c, 0xda, - 0x4c, 0x8f, 0xf1, 0xb8, 0xb8, 0xb9, 0x98, 0x78, 0x7a, 0x90, 0x8d, 0xfd, 0x38, 0xc8, 0xc6, 0xf4, - 0x6b, 0x90, 0xea, 0x6e, 0xc8, 0x5c, 0xea, 0x30, 0x0b, 0xaf, 0xc1, 0x44, 0x45, 0x84, 0x78, 0xc7, - 0xe4, 0xea, 0xb4, 0xe1, 0xeb, 0xc5, 0x2c, 0xa5, 0x97, 0xb1, 0x49, 0xeb, 0x4e, 0x59, 0x65, 0xea, - 0x4f, 0x10, 0xfc, 0xcd, 0xbb, 0x6d, 0x34, 0x1a, 0xb2, 0x21, 0x1b, 0x0e, 0xf1, 0x0a, 0xc0, 0xa9, - 0xb6, 0x1c, 0x67, 0x72, 0x75, 0xbe, 0x6b, 0x9a, 0x38, 0x36, 0x35, 0xb3, 0x44, 0x6c, 0x45, 0xbc, - 0x1c, 0xa8, 0x0c, 0x90, 0xfa, 0x88, 0x20, 0xdd, 0x8f, 0x43, 0x32, 0xb3, 0x21, 0x21, 0xf1, 0x76, - 0x90, 0xfc, 0x36, 0x90, 0x5a, 0x71, 0xe5, 0xf0, 0x4b, 0x36, 0xf6, 0xfe, 0x6b, 0x36, 0x67, 0xd7, - 0xbd, 0xfb, 0xed, 0x8a, 0x51, 0xa5, 0x4d, 0x53, 0x1e, 0x91, 0xf8, 0x59, 0x66, 0xb5, 0x6d, 0xd3, - 0xdb, 0x75, 0x2d, 0xc6, 0x0b, 0x58, 0xd9, 0x6f, 0x8e, 0xaf, 0x86, 0xf0, 0x5a, 0x18, 0xca, 0x4b, - 0xa0, 0x0c, 0x12, 0xd3, 0xb7, 0xa5, 0xaa, 0xb7, 0xa8, 0x47, 0x1a, 0x37, 0xdb, 0xae, 0xdb, 0xd8, - 0x55, 0xaa, 0x76, 0x6b, 0x87, 0x46, 0xa0, 0xdd, 0xa1, 0xd2, 0xae, 0x6b, 0x9a, 0xd4, 0xae, 0x0a, - 0x71, 0xc6, 0x23, 0xbf, 0x42, 0x39, 0xd9, 0x7a, 0x74, 0xba, 0xe5, 0xe5, 0xbb, 0x2d, 0x48, 0x6c, - 0xdd, 0x53, 0xa2, 0xf9, 0x3b, 0x81, 0x02, 0x3b, 0xa1, 0x97, 0xe0, 0xaf, 0x9e, 0x6c, 0x49, 0x7a, - 0x1d, 0xe2, 0xa4, 0x49, 0xdb, 0x8e, 0x37, 0x74, 0x13, 0x8a, 0xbf, 0x77, 0x48, 0x97, 0x65, 0xba, - 0x9e, 0x02, 0xcc, 0x3b, 0x96, 0x48, 0x8b, 0x34, 0xd5, 0x22, 0xe8, 0x25, 0xb9, 0xc2, 0x2a, 0x2a, - 0xa7, 0x5c, 0x80, 0xb8, 0xcb, 0x23, 0x72, 0xca, 0x8c, 0x11, 0xe2, 0x4f, 0x86, 0x28, 0x52, 0x73, - 0x44, 0x81, 0x5e, 0x03, 0x8d, 0x77, 0xbc, 0xdc, 0xe1, 0xc1, 0xae, 0x5b, 0x1e, 0xa9, 0x11, 0x8f, - 0x8c, 0xf8, 0x15, 0xd1, 0xdf, 0x21, 0x98, 0x09, 0x1d, 0x23, 0x09, 0x6c, 0xc0, 0x64, 0x53, 0xc6, - 0xd4, 0x62, 0xcd, 0x86, 0x72, 0x50, 0x95, 0x92, 0xc5, 0x69, 0xd5, 0xe8, 0x4e, 0xbe, 0x00, 0xd3, - 0xa7, 0x50, 0x7b, 0x05, 0x09, 0x3f, 0xfe, 0x3b, 0x41, 0x11, 0xfb, 0xc8, 0x5d, 0x82, 0x84, 0x82, - 0x29, 0x25, 0x8c, 0xc4, 0xcd, 0x2f, 0x5a, 0xfd, 0x90, 0x80, 0x71, 0xde, 0x1f, 0xbf, 0x42, 0x30, - 0x21, 0x4d, 0x09, 0xe7, 0x42, 0x9b, 0x84, 0x38, 0xbc, 0xb6, 0x18, 0x21, 0x53, 0x60, 0xd5, 0xd7, - 0x1f, 0x7f, 0xfa, 0xfe, 0x72, 0xac, 0x80, 0x4d, 0x33, 0xfc, 0x63, 0x22, 0xec, 0xc9, 0xdc, 0x93, - 0xfe, 0xbb, 0x6f, 0xee, 0x71, 0x05, 0xf6, 0xf1, 0x6b, 0x04, 0xc9, 0x80, 0x63, 0xe2, 0xfc, 0xd9, - 0x33, 0xfb, 0x0d, 0x5e, 0x5b, 0x8e, 0x98, 0x2d, 0x51, 0x9a, 0x1c, 0xe5, 0x22, 0x5e, 0x88, 0x88, - 0x12, 0x3f, 0x47, 0x90, 0x0c, 0x78, 0xd2, 0x20, 0x74, 0xfd, 0x46, 0x39, 0x08, 0x5d, 0x88, 0xd1, - 0xe9, 0x73, 0x1c, 0xdd, 0x2c, 0x9e, 0x09, 0x45, 0x27, 0x8d, 0xea, 0x19, 0x82, 0x84, 0x72, 0x0b, - 0x3c, 0xe0, 0x80, 0x7a, 0xfc, 0x47, 0x5b, 0x8a, 0x92, 0x2a, 0x81, 0x9c, 0xe3, 0x40, 0xfe, 0xc7, - 0x73, 0x03, 0x80, 0xf8, 0x07, 0xf8, 0x08, 0x41, 0x5c, 0x38, 0x04, 0x5e, 0x38, 0x7b, 0x46, 0x97, - 0x1d, 0x69, 0xb9, 0xe1, 0x89, 0x91, 0x34, 0x11, 0x5e, 0x84, 0xdf, 0x22, 0xf8, 0xa3, 0x6b, 0x85, - 0xb0, 0x71, 0xf6, 0x80, 0xb0, 0xf5, 0xd4, 0xcc, 0xc8, 0xf9, 0x12, 0xd7, 0x79, 0x8e, 0xcb, 0xc0, - 0xf9, 0x50, 0x5c, 0x5c, 0x1a, 0x76, 0x57, 0x2d, 0xa2, 0xaf, 0xd5, 0x1b, 0x04, 0x7f, 0x76, 0x3b, - 0x19, 0x1e, 0x36, 0xb9, 0xd7, 0x5a, 0xb5, 0x95, 0xe8, 0x05, 0x12, 0x6b, 0x9e, 0x63, 0x9d, 0xc7, - 0xff, 0x45, 0xc1, 0x5a, 0xdc, 0x3c, 0x3c, 0xce, 0xa0, 0xa3, 0xe3, 0x0c, 0xfa, 0x76, 0x9c, 0x41, - 0x2f, 0x4e, 0x32, 0xb1, 0xa3, 0x93, 0x4c, 0xec, 0xf3, 0x49, 0x26, 0x76, 0x7b, 0x71, 0xe0, 0x57, - 0xf5, 0xa1, 0x68, 0xcb, 0x3f, 0xae, 0x95, 0x38, 0xff, 0xe7, 0xb8, 0xf6, 0x33, 0x00, 0x00, 0xff, - 0xff, 0xa0, 0xfe, 0xe2, 0x92, 0x11, 0x0b, 0x00, 0x00, + // 829 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4d, 0x6b, 0x13, 0x5b, + 0x18, 0xce, 0xe9, 0xbd, 0x4d, 0xd3, 0x37, 0xdc, 0xbb, 0x38, 0xcd, 0xe5, 0xa6, 0xd3, 0xdb, 0xe4, + 0x32, 0xd5, 0x36, 0xad, 0xe9, 0x4c, 0x9b, 0x0a, 0x7e, 0x6c, 0xa4, 0xa9, 0xe8, 0x42, 0xa4, 0x31, + 0xba, 0x12, 0xa4, 0x9c, 0x24, 0xe3, 0x18, 0x9a, 0xcc, 0x99, 0xe6, 0x4c, 0xc4, 0x50, 0x0a, 0x22, + 0x08, 0xae, 0x54, 0x70, 0x23, 0xb8, 0xa9, 0x1b, 0x41, 0xb7, 0xfe, 0x89, 0x2e, 0x5c, 0x14, 0xdc, + 0xb8, 0x52, 0x69, 0x5d, 0xf8, 0x33, 0x24, 0xe7, 0x23, 0x9d, 0x24, 0xd3, 0x64, 0x16, 0x71, 0x95, + 0x99, 0x77, 0xde, 0x8f, 0xe7, 0x79, 0xce, 0xbc, 0xcf, 0x04, 0xd2, 0x65, 0xca, 0xea, 0x94, 0x99, + 0x25, 0xe2, 0x6c, 0x9b, 0x0f, 0x57, 0x4b, 0x96, 0x47, 0x56, 0xcd, 0x9d, 0xa6, 0xd5, 0x68, 0x19, + 0x6e, 0x83, 0x7a, 0x14, 0x4f, 0x89, 0x04, 0xa3, 0x9d, 0x60, 0xc8, 0x04, 0x6d, 0xa9, 0x53, 0xc5, + 0x2c, 0x91, 0xdd, 0xa9, 0x75, 0x89, 0x5d, 0x75, 0x88, 0x57, 0xa5, 0x8e, 0x68, 0xa0, 0x25, 0x6c, + 0x6a, 0x53, 0x7e, 0x69, 0xb6, 0xaf, 0x64, 0xf4, 0x3f, 0x9b, 0x52, 0xbb, 0x66, 0x99, 0xc4, 0xad, + 0x9a, 0xc4, 0x71, 0xa8, 0xc7, 0x4b, 0x98, 0x7c, 0x9a, 0xf2, 0xf7, 0x57, 0x9d, 0xcb, 0xb4, 0xea, + 0xf4, 0x3d, 0xf7, 0xa1, 0xe6, 0x08, 0xf9, 0x73, 0x7d, 0x13, 0xa6, 0x6e, 0xb5, 0x51, 0xe5, 0x49, + 0x8d, 0x38, 0x65, 0xab, 0x68, 0xed, 0x34, 0x2d, 0xe6, 0xe1, 0x24, 0x4c, 0x90, 0x4a, 0xa5, 0x61, + 0x31, 0x96, 0x44, 0xff, 0xa3, 0xcc, 0x64, 0x51, 0xdd, 0xe2, 0x04, 0x8c, 0x57, 0x2c, 0x87, 0xd6, + 0x93, 0x63, 0x3c, 0x2e, 0x6e, 0x2e, 0xc7, 0x9e, 0xed, 0xa7, 0x23, 0x3f, 0xf7, 0xd3, 0x11, 0xfd, + 0x06, 0x24, 0xba, 0x1b, 0x32, 0x97, 0x3a, 0xcc, 0xc2, 0x6b, 0x30, 0x51, 0x12, 0x21, 0xde, 0x31, + 0x9e, 0x9b, 0x36, 0x3a, 0x7a, 0x31, 0x4b, 0xe9, 0x65, 0x6c, 0xd0, 0xaa, 0x53, 0x54, 0x99, 0xfa, + 0x53, 0x04, 0xff, 0xf2, 0x6e, 0xeb, 0xb5, 0x9a, 0x6c, 0xc8, 0x86, 0x43, 0xbc, 0x06, 0x70, 0xa2, + 0x2d, 0xc7, 0x19, 0xcf, 0xcd, 0x77, 0x4d, 0x13, 0xc7, 0xa6, 0x66, 0x16, 0x88, 0xad, 0x88, 0x17, + 0x7d, 0x95, 0x3e, 0x52, 0x9f, 0x10, 0x24, 0xfb, 0x71, 0x48, 0x66, 0x36, 0xc4, 0x24, 0xde, 0x36, + 0x92, 0x3f, 0x06, 0x52, 0xcb, 0xaf, 0x1c, 0x7c, 0x4d, 0x47, 0x3e, 0x7c, 0x4b, 0x67, 0xec, 0xaa, + 0xf7, 0xa0, 0x59, 0x32, 0xca, 0xb4, 0x6e, 0xca, 0x23, 0x12, 0x3f, 0xcb, 0xac, 0xb2, 0x6d, 0x7a, + 0x2d, 0xd7, 0x62, 0xbc, 0x80, 0x15, 0x3b, 0xcd, 0xf1, 0xf5, 0x00, 0x5e, 0x0b, 0x43, 0x79, 0x09, + 0x94, 0x7e, 0x62, 0xfa, 0xb6, 0x54, 0xf5, 0x0e, 0xf5, 0x48, 0xed, 0x76, 0xd3, 0x75, 0x6b, 0x2d, + 0xa5, 0x6a, 0xb7, 0x76, 0x68, 0x04, 0xda, 0x1d, 0x28, 0xed, 0xba, 0xa6, 0x49, 0xed, 0xca, 0x10, + 0x65, 0x3c, 0xf2, 0x3b, 0x94, 0x93, 0xad, 0x47, 0xa7, 0x5b, 0x56, 0xbe, 0xdb, 0x82, 0xc4, 0xe6, + 0x7d, 0x25, 0x5a, 0x67, 0x27, 0x90, 0x6f, 0x27, 0xf4, 0x02, 0xfc, 0xd3, 0x93, 0x2d, 0x49, 0x5f, + 0x80, 0x28, 0xa9, 0xd3, 0xa6, 0xe3, 0x0d, 0xdd, 0x84, 0xfc, 0x9f, 0x6d, 0xd2, 0x45, 0x99, 0xae, + 0x27, 0x00, 0xf3, 0x8e, 0x05, 0xd2, 0x20, 0x75, 0xb5, 0x08, 0x7a, 0x41, 0xae, 0xb0, 0x8a, 0xca, + 0x29, 0x97, 0x20, 0xea, 0xf2, 0x88, 0x9c, 0x32, 0x63, 0x04, 0xf8, 0x93, 0x21, 0x8a, 0xd4, 0x1c, + 0x51, 0xa0, 0x57, 0x40, 0xe3, 0x1d, 0xaf, 0xb6, 0x79, 0xb0, 0x9b, 0x96, 0x47, 0x2a, 0xc4, 0x23, + 0x23, 0x7e, 0x45, 0xf4, 0xf7, 0x08, 0x66, 0x02, 0xc7, 0x48, 0x02, 0xeb, 0x30, 0x59, 0x97, 0x31, + 0xb5, 0x58, 0xb3, 0x81, 0x1c, 0x54, 0xa5, 0x64, 0x71, 0x52, 0x35, 0xba, 0x93, 0x5f, 0x85, 0xe9, + 0x13, 0xa8, 0xbd, 0x82, 0x04, 0x1f, 0xff, 0x3d, 0xbf, 0x88, 0x7d, 0xe4, 0xae, 0x40, 0x4c, 0xc1, + 0x94, 0x12, 0x86, 0xe2, 0xd6, 0x29, 0xca, 0x7d, 0x8c, 0xc1, 0x38, 0xef, 0x8f, 0x5f, 0x23, 0x98, + 0x90, 0xa6, 0x84, 0x33, 0x81, 0x4d, 0x02, 0x1c, 0x5e, 0x5b, 0x0c, 0x91, 0x29, 0xb0, 0xea, 0x17, + 0x9f, 0x7c, 0xfe, 0xf1, 0x6a, 0x2c, 0x87, 0x57, 0xcc, 0xe0, 0x8f, 0x89, 0xb0, 0x27, 0x73, 0x57, + 0xfa, 0xef, 0x9e, 0x59, 0x6a, 0x6d, 0x71, 0x0d, 0xf0, 0x1b, 0x04, 0x71, 0x9f, 0x65, 0xe2, 0xec, + 0xe9, 0x43, 0xfb, 0x1d, 0x5e, 0x5b, 0x0e, 0x99, 0x2d, 0x61, 0x9a, 0x1c, 0xe6, 0x22, 0x5e, 0x08, + 0x09, 0x13, 0xbf, 0x40, 0x10, 0xf7, 0x99, 0xd2, 0x20, 0x74, 0xfd, 0x4e, 0x39, 0x08, 0x5d, 0x80, + 0xd3, 0xe9, 0x73, 0x1c, 0xdd, 0x2c, 0x9e, 0x09, 0x44, 0x27, 0x9d, 0xea, 0x39, 0x82, 0x98, 0xb2, + 0x0b, 0x3c, 0xe0, 0x84, 0x7a, 0x0c, 0x48, 0x5b, 0x0a, 0x93, 0x2a, 0x81, 0x9c, 0xe3, 0x40, 0xce, + 0xe2, 0xb9, 0x01, 0x40, 0xcc, 0x5d, 0x7e, 0x7e, 0x7b, 0xf8, 0x31, 0x82, 0xa8, 0xb0, 0x08, 0xbc, + 0x70, 0xfa, 0x8c, 0x2e, 0x3f, 0xd2, 0x32, 0xc3, 0x13, 0x43, 0x69, 0x22, 0xcc, 0x08, 0xbf, 0x43, + 0xf0, 0x57, 0xd7, 0x0e, 0x61, 0xe3, 0xf4, 0x01, 0x41, 0xfb, 0xa9, 0x99, 0xa1, 0xf3, 0x25, 0xae, + 0xf3, 0x1c, 0x97, 0x81, 0xb3, 0x81, 0xb8, 0xb8, 0x34, 0x6c, 0x4b, 0x6d, 0x62, 0x47, 0xab, 0xb7, + 0x08, 0xfe, 0xee, 0xb6, 0x32, 0x3c, 0x6c, 0x72, 0xaf, 0xb7, 0x6a, 0x2b, 0xe1, 0x0b, 0x24, 0xd6, + 0x2c, 0xc7, 0x3a, 0x8f, 0xcf, 0x84, 0xc1, 0x9a, 0xdf, 0x38, 0x38, 0x4a, 0xa1, 0xc3, 0xa3, 0x14, + 0xfa, 0x7e, 0x94, 0x42, 0x2f, 0x8f, 0x53, 0x91, 0xc3, 0xe3, 0x54, 0xe4, 0xcb, 0x71, 0x2a, 0x72, + 0x77, 0x71, 0xe0, 0x67, 0xf5, 0x91, 0x68, 0xcb, 0xbf, 0xae, 0xa5, 0x28, 0xff, 0xeb, 0xb8, 0xf6, + 0x2b, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x6f, 0x29, 0xd7, 0x12, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 618599edba36..1dd297ba1349 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1260,622 +1260,654 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9834 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x5c, 0xd7, - 0x75, 0x18, 0xde, 0x7e, 0x00, 0xbb, 0x07, 0x0b, 0x60, 0x71, 0x01, 0x92, 0xcb, 0x25, 0x09, 0x40, - 0x4f, 0x5f, 0x14, 0x25, 0x81, 0x12, 0x25, 0x52, 0xd2, 0x32, 0xb6, 0xbc, 0x8b, 0x5d, 0x82, 0x10, - 0xf1, 0xa5, 0x07, 0x80, 0x92, 0x65, 0xa7, 0x3b, 0x0f, 0xbb, 0x17, 0x8b, 0x27, 0xec, 0xbe, 0xf7, - 0xf4, 0xde, 0x5b, 0x12, 0xa0, 0xed, 0x8e, 0xfc, 0x51, 0xd7, 0x66, 0x26, 0x8d, 0x5d, 0x77, 0x1a, - 0x5b, 0x36, 0x5d, 0x39, 0x4e, 0xeb, 0xd4, 0x71, 0x1b, 0x3b, 0x76, 0xdd, 0xa6, 0xed, 0x4c, 0xed, - 0xce, 0xa4, 0xb1, 0xdd, 0x26, 0x63, 0xb7, 0x99, 0x36, 0xcd, 0xa4, 0x74, 0x2a, 0x7b, 0x52, 0xd5, - 0x75, 0x1b, 0x87, 0x71, 0xdb, 0x74, 0x3c, 0x9d, 0x76, 0xee, 0xd7, 0xfb, 0xda, 0x4f, 0x40, 0xa4, - 0xed, 0x34, 0xfd, 0x85, 0xbd, 0xe7, 0x9e, 0x73, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0x5f, - 0x0f, 0xf0, 0x85, 0xf3, 0x30, 0x53, 0x33, 0x8c, 0x5a, 0x1d, 0x9f, 0x36, 0x2d, 0xc3, 0x31, 0x36, - 0x9b, 0x5b, 0xa7, 0xab, 0xd8, 0xae, 0x58, 0x9a, 0xe9, 0x18, 0xd6, 0x2c, 0x85, 0xa1, 0x31, 0x86, - 0x31, 0x2b, 0x30, 0xe4, 0x25, 0x18, 0xbf, 0xa0, 0xd5, 0x71, 0xd1, 0x45, 0x5c, 0xc3, 0x0e, 0x7a, - 0x12, 0x62, 0x5b, 0x5a, 0x1d, 0x67, 0xa4, 0x99, 0xe8, 0xc9, 0xe1, 0x33, 0xf7, 0xcc, 0x86, 0x88, - 0x66, 0x83, 0x14, 0xab, 0x04, 0xac, 0x50, 0x0a, 0xf9, 0xbb, 0x31, 0x98, 0x68, 0x53, 0x8b, 0x10, - 0xc4, 0x74, 0xb5, 0x41, 0x38, 0x4a, 0x27, 0x93, 0x0a, 0xfd, 0x8d, 0x32, 0x30, 0x64, 0xaa, 0x95, - 0x1d, 0xb5, 0x86, 0x33, 0x11, 0x0a, 0x16, 0x45, 0x34, 0x05, 0x50, 0xc5, 0x26, 0xd6, 0xab, 0x58, - 0xaf, 0xec, 0x65, 0xa2, 0x33, 0xd1, 0x93, 0x49, 0xc5, 0x07, 0x41, 0x0f, 0xc2, 0xb8, 0xd9, 0xdc, - 0xac, 0x6b, 0x95, 0xb2, 0x0f, 0x0d, 0x66, 0xa2, 0x27, 0xe3, 0x4a, 0x9a, 0x55, 0x14, 0x3d, 0xe4, - 0xfb, 0x61, 0xec, 0x2a, 0x56, 0x77, 0xfc, 0xa8, 0xc3, 0x14, 0x75, 0x94, 0x80, 0x7d, 0x88, 0x73, - 0x90, 0x6a, 0x60, 0xdb, 0x56, 0x6b, 0xb8, 0xec, 0xec, 0x99, 0x38, 0x13, 0xa3, 0xda, 0xcf, 0xb4, - 0x68, 0x1f, 0xd6, 0x7c, 0x98, 0x53, 0xad, 0xef, 0x99, 0x18, 0xe5, 0x21, 0x89, 0xf5, 0x66, 0x83, - 0x71, 0x88, 0x77, 0xb0, 0x5f, 0x49, 0x6f, 0x36, 0xc2, 0x5c, 0x12, 0x84, 0x8c, 0xb3, 0x18, 0xb2, - 0xb1, 0x75, 0x45, 0xab, 0xe0, 0xcc, 0x20, 0x65, 0x70, 0x7f, 0x0b, 0x83, 0x35, 0x56, 0x1f, 0xe6, - 0x21, 0xe8, 0xd0, 0x1c, 0x24, 0xf1, 0xae, 0x83, 0x75, 0x5b, 0x33, 0xf4, 0xcc, 0x10, 0x65, 0x72, - 0x6f, 0x9b, 0x5e, 0xc4, 0xf5, 0x6a, 0x98, 0x85, 0x47, 0x87, 0xce, 0xc1, 0x90, 0x61, 0x3a, 0x9a, - 0xa1, 0xdb, 0x99, 0xc4, 0x8c, 0x74, 0x72, 0xf8, 0xcc, 0xf1, 0xb6, 0x8e, 0xb0, 0xc2, 0x70, 0x14, - 0x81, 0x8c, 0x16, 0x20, 0x6d, 0x1b, 0x4d, 0xab, 0x82, 0xcb, 0x15, 0xa3, 0x8a, 0xcb, 0x9a, 0xbe, - 0x65, 0x64, 0x92, 0x94, 0xc1, 0x74, 0xab, 0x22, 0x14, 0x71, 0xce, 0xa8, 0xe2, 0x05, 0x7d, 0xcb, - 0x50, 0x46, 0xed, 0x40, 0x19, 0x1d, 0x86, 0x41, 0x7b, 0x4f, 0x77, 0xd4, 0xdd, 0x4c, 0x8a, 0x7a, - 0x08, 0x2f, 0xc9, 0xbf, 0x31, 0x08, 0x63, 0xfd, 0xb8, 0xd8, 0x79, 0x88, 0x6f, 0x11, 0x2d, 0x33, - 0x91, 0xfd, 0xd8, 0x80, 0xd1, 0x04, 0x8d, 0x38, 0x78, 0x40, 0x23, 0xe6, 0x61, 0x58, 0xc7, 0xb6, - 0x83, 0xab, 0xcc, 0x23, 0xa2, 0x7d, 0xfa, 0x14, 0x30, 0xa2, 0x56, 0x97, 0x8a, 0x1d, 0xc8, 0xa5, - 0x9e, 0x87, 0x31, 0x57, 0xa4, 0xb2, 0xa5, 0xea, 0x35, 0xe1, 0x9b, 0xa7, 0x7b, 0x49, 0x32, 0x5b, - 0x12, 0x74, 0x0a, 0x21, 0x53, 0x46, 0x71, 0xa0, 0x8c, 0x8a, 0x00, 0x86, 0x8e, 0x8d, 0xad, 0x72, - 0x15, 0x57, 0xea, 0x99, 0x44, 0x07, 0x2b, 0xad, 0x10, 0x94, 0x16, 0x2b, 0x19, 0x0c, 0x5a, 0xa9, - 0xa3, 0xa7, 0x3c, 0x57, 0x1b, 0xea, 0xe0, 0x29, 0x4b, 0x6c, 0x90, 0xb5, 0x78, 0xdb, 0x06, 0x8c, - 0x5a, 0x98, 0xf8, 0x3d, 0xae, 0x72, 0xcd, 0x92, 0x54, 0x88, 0xd9, 0x9e, 0x9a, 0x29, 0x9c, 0x8c, - 0x29, 0x36, 0x62, 0xf9, 0x8b, 0xe8, 0x6e, 0x70, 0x01, 0x65, 0xea, 0x56, 0x40, 0xa3, 0x50, 0x4a, - 0x00, 0x97, 0xd5, 0x06, 0xce, 0x5e, 0x83, 0xd1, 0xa0, 0x79, 0xd0, 0x24, 0xc4, 0x6d, 0x47, 0xb5, - 0x1c, 0xea, 0x85, 0x71, 0x85, 0x15, 0x50, 0x1a, 0xa2, 0x58, 0xaf, 0xd2, 0x28, 0x17, 0x57, 0xc8, - 0x4f, 0xf4, 0x16, 0x4f, 0xe1, 0x28, 0x55, 0xf8, 0xbe, 0xd6, 0x1e, 0x0d, 0x70, 0x0e, 0xeb, 0x9d, - 0x7d, 0x02, 0x46, 0x02, 0x0a, 0xf4, 0xdb, 0xb4, 0xfc, 0x4e, 0x38, 0xd4, 0x96, 0x35, 0x7a, 0x1e, - 0x26, 0x9b, 0xba, 0xa6, 0x3b, 0xd8, 0x32, 0x2d, 0x4c, 0x3c, 0x96, 0x35, 0x95, 0xf9, 0x4f, 0x43, - 0x1d, 0x7c, 0x6e, 0xc3, 0x8f, 0xcd, 0xb8, 0x28, 0x13, 0xcd, 0x56, 0xe0, 0xa9, 0x64, 0xe2, 0xf5, - 0xa1, 0xf4, 0xcb, 0x2f, 0xbf, 0xfc, 0x72, 0x44, 0xfe, 0xea, 0x20, 0x4c, 0xb6, 0x1b, 0x33, 0x6d, - 0x87, 0xef, 0x61, 0x18, 0xd4, 0x9b, 0x8d, 0x4d, 0x6c, 0x51, 0x23, 0xc5, 0x15, 0x5e, 0x42, 0x79, - 0x88, 0xd7, 0xd5, 0x4d, 0x5c, 0xcf, 0xc4, 0x66, 0xa4, 0x93, 0xa3, 0x67, 0x1e, 0xec, 0x6b, 0x54, - 0xce, 0x2e, 0x12, 0x12, 0x85, 0x51, 0xa2, 0x37, 0x43, 0x8c, 0x87, 0x68, 0xc2, 0xe1, 0x54, 0x7f, - 0x1c, 0xc8, 0x58, 0x52, 0x28, 0x1d, 0x3a, 0x06, 0x49, 0xf2, 0x97, 0xf9, 0xc6, 0x20, 0x95, 0x39, - 0x41, 0x00, 0xc4, 0x2f, 0x50, 0x16, 0x12, 0x74, 0x98, 0x54, 0xb1, 0x98, 0xda, 0xdc, 0x32, 0x71, - 0xac, 0x2a, 0xde, 0x52, 0x9b, 0x75, 0xa7, 0x7c, 0x45, 0xad, 0x37, 0x31, 0x75, 0xf8, 0xa4, 0x92, - 0xe2, 0xc0, 0xcb, 0x04, 0x86, 0xa6, 0x61, 0x98, 0x8d, 0x2a, 0x4d, 0xaf, 0xe2, 0x5d, 0x1a, 0x3d, - 0xe3, 0x0a, 0x1b, 0x68, 0x0b, 0x04, 0x42, 0x9a, 0x7f, 0xd1, 0x36, 0x74, 0xe1, 0x9a, 0xb4, 0x09, - 0x02, 0xa0, 0xcd, 0x3f, 0x11, 0x0e, 0xdc, 0x27, 0xda, 0xab, 0xd7, 0x32, 0x96, 0xee, 0x87, 0x31, - 0x8a, 0xf1, 0x18, 0xef, 0x7a, 0xb5, 0x9e, 0x19, 0x9f, 0x91, 0x4e, 0x26, 0x94, 0x51, 0x06, 0x5e, - 0xe1, 0x50, 0xf9, 0xcb, 0x11, 0x88, 0xd1, 0xc0, 0x32, 0x06, 0xc3, 0xeb, 0x6f, 0x5d, 0x2d, 0x95, - 0x8b, 0x2b, 0x1b, 0x85, 0xc5, 0x52, 0x5a, 0x42, 0xa3, 0x00, 0x14, 0x70, 0x61, 0x71, 0x25, 0xbf, - 0x9e, 0x8e, 0xb8, 0xe5, 0x85, 0xe5, 0xf5, 0x73, 0x8f, 0xa7, 0xa3, 0x2e, 0xc1, 0x06, 0x03, 0xc4, - 0xfc, 0x08, 0x8f, 0x9d, 0x49, 0xc7, 0x51, 0x1a, 0x52, 0x8c, 0xc1, 0xc2, 0xf3, 0xa5, 0xe2, 0xb9, - 0xc7, 0xd3, 0x83, 0x41, 0xc8, 0x63, 0x67, 0xd2, 0x43, 0x68, 0x04, 0x92, 0x14, 0x52, 0x58, 0x59, - 0x59, 0x4c, 0x27, 0x5c, 0x9e, 0x6b, 0xeb, 0xca, 0xc2, 0xf2, 0x7c, 0x3a, 0xe9, 0xf2, 0x9c, 0x57, - 0x56, 0x36, 0x56, 0xd3, 0xe0, 0x72, 0x58, 0x2a, 0xad, 0xad, 0xe5, 0xe7, 0x4b, 0xe9, 0x61, 0x17, - 0xa3, 0xf0, 0xd6, 0xf5, 0xd2, 0x5a, 0x3a, 0x15, 0x10, 0xeb, 0xb1, 0x33, 0xe9, 0x11, 0xb7, 0x89, - 0xd2, 0xf2, 0xc6, 0x52, 0x7a, 0x14, 0x8d, 0xc3, 0x08, 0x6b, 0x42, 0x08, 0x31, 0x16, 0x02, 0x9d, - 0x7b, 0x3c, 0x9d, 0xf6, 0x04, 0x61, 0x5c, 0xc6, 0x03, 0x80, 0x73, 0x8f, 0xa7, 0x91, 0x3c, 0x07, - 0x71, 0xea, 0x86, 0x08, 0xc1, 0xe8, 0x62, 0xbe, 0x50, 0x5a, 0x2c, 0xaf, 0xac, 0xae, 0x2f, 0xac, - 0x2c, 0xe7, 0x17, 0xd3, 0x92, 0x07, 0x53, 0x4a, 0xcf, 0x6e, 0x2c, 0x28, 0xa5, 0x62, 0x3a, 0xe2, - 0x87, 0xad, 0x96, 0xf2, 0xeb, 0xa5, 0x62, 0x3a, 0x2a, 0x57, 0x60, 0xb2, 0x5d, 0x40, 0x6d, 0x3b, - 0x84, 0x7c, 0xbe, 0x10, 0xe9, 0xe0, 0x0b, 0x94, 0x57, 0xd8, 0x17, 0xe4, 0xef, 0x44, 0x60, 0xa2, - 0xcd, 0xa4, 0xd2, 0xb6, 0x91, 0xa7, 0x21, 0xce, 0x7c, 0x99, 0x4d, 0xb3, 0x0f, 0xb4, 0x9d, 0x9d, - 0xa8, 0x67, 0xb7, 0x4c, 0xb5, 0x94, 0xce, 0x9f, 0x6a, 0x44, 0x3b, 0xa4, 0x1a, 0x84, 0x45, 0x8b, - 0xc3, 0xfe, 0x6c, 0x4b, 0xf0, 0x67, 0xf3, 0xe3, 0xb9, 0x7e, 0xe6, 0x47, 0x0a, 0xdb, 0xdf, 0x24, - 0x10, 0x6f, 0x33, 0x09, 0x9c, 0x87, 0xf1, 0x16, 0x46, 0x7d, 0x07, 0xe3, 0xf7, 0x4a, 0x90, 0xe9, - 0x64, 0x9c, 0x1e, 0x21, 0x31, 0x12, 0x08, 0x89, 0xe7, 0xc3, 0x16, 0xbc, 0xab, 0x73, 0x27, 0xb4, - 0xf4, 0xf5, 0x67, 0x24, 0x38, 0xdc, 0x3e, 0xa5, 0x6c, 0x2b, 0xc3, 0x9b, 0x61, 0xb0, 0x81, 0x9d, - 0x6d, 0x43, 0xa4, 0x55, 0xf7, 0xb5, 0x99, 0xac, 0x49, 0x75, 0xb8, 0xb3, 0x39, 0x95, 0x7f, 0xb6, - 0x8f, 0x76, 0xca, 0x0b, 0x99, 0x34, 0x2d, 0x92, 0x7e, 0x30, 0x02, 0x87, 0xda, 0x32, 0x6f, 0x2b, - 0xe8, 0x09, 0x00, 0x4d, 0x37, 0x9b, 0x0e, 0x4b, 0x9d, 0x58, 0x24, 0x4e, 0x52, 0x08, 0x0d, 0x5e, - 0x24, 0xca, 0x36, 0x1d, 0xb7, 0x3e, 0x4a, 0xeb, 0x81, 0x81, 0x28, 0xc2, 0x93, 0x9e, 0xa0, 0x31, - 0x2a, 0xe8, 0x54, 0x07, 0x4d, 0x5b, 0x1c, 0xf3, 0x11, 0x48, 0x57, 0xea, 0x1a, 0xd6, 0x9d, 0xb2, - 0xed, 0x58, 0x58, 0x6d, 0x68, 0x7a, 0x8d, 0x4e, 0x35, 0x89, 0x5c, 0x7c, 0x4b, 0xad, 0xdb, 0x58, - 0x19, 0x63, 0xd5, 0x6b, 0xa2, 0x96, 0x50, 0x50, 0x07, 0xb2, 0x7c, 0x14, 0x83, 0x01, 0x0a, 0x56, - 0xed, 0x52, 0xc8, 0x1f, 0x4e, 0xc2, 0xb0, 0x2f, 0x01, 0x47, 0x77, 0x41, 0xea, 0x45, 0xf5, 0x8a, - 0x5a, 0x16, 0x8b, 0x2a, 0x66, 0x89, 0x61, 0x02, 0x5b, 0xe5, 0x0b, 0xab, 0x47, 0x60, 0x92, 0xa2, - 0x18, 0x4d, 0x07, 0x5b, 0xe5, 0x4a, 0x5d, 0xb5, 0x6d, 0x6a, 0xb4, 0x04, 0x45, 0x45, 0xa4, 0x6e, - 0x85, 0x54, 0xcd, 0x89, 0x1a, 0x74, 0x16, 0x26, 0x28, 0x45, 0xa3, 0x59, 0x77, 0x34, 0xb3, 0x8e, - 0xcb, 0x64, 0x99, 0x67, 0xd3, 0x29, 0xc7, 0x95, 0x6c, 0x9c, 0x60, 0x2c, 0x71, 0x04, 0x22, 0x91, - 0x8d, 0x8a, 0x70, 0x82, 0x92, 0xd5, 0xb0, 0x8e, 0x2d, 0xd5, 0xc1, 0x65, 0xfc, 0x52, 0x53, 0xad, - 0xdb, 0x65, 0x55, 0xaf, 0x96, 0xb7, 0x55, 0x7b, 0x3b, 0x33, 0x49, 0x18, 0x14, 0x22, 0x19, 0x49, - 0x39, 0x4a, 0x10, 0xe7, 0x39, 0x5e, 0x89, 0xa2, 0xe5, 0xf5, 0xea, 0x45, 0xd5, 0xde, 0x46, 0x39, - 0x38, 0x4c, 0xb9, 0xd8, 0x8e, 0xa5, 0xe9, 0xb5, 0x72, 0x65, 0x1b, 0x57, 0x76, 0xca, 0x4d, 0x67, - 0xeb, 0xc9, 0xcc, 0x31, 0x7f, 0xfb, 0x54, 0xc2, 0x35, 0x8a, 0x33, 0x47, 0x50, 0x36, 0x9c, 0xad, - 0x27, 0xd1, 0x1a, 0xa4, 0x48, 0x67, 0x34, 0xb4, 0x6b, 0xb8, 0xbc, 0x65, 0x58, 0x74, 0x0e, 0x1d, - 0x6d, 0x13, 0x9a, 0x7c, 0x16, 0x9c, 0x5d, 0xe1, 0x04, 0x4b, 0x46, 0x15, 0xe7, 0xe2, 0x6b, 0xab, - 0xa5, 0x52, 0x51, 0x19, 0x16, 0x5c, 0x2e, 0x18, 0x16, 0x71, 0xa8, 0x9a, 0xe1, 0x1a, 0x78, 0x98, - 0x39, 0x54, 0xcd, 0x10, 0xe6, 0x3d, 0x0b, 0x13, 0x95, 0x0a, 0xd3, 0x59, 0xab, 0x94, 0xf9, 0x62, - 0xcc, 0xce, 0xa4, 0x03, 0xc6, 0xaa, 0x54, 0xe6, 0x19, 0x02, 0xf7, 0x71, 0x1b, 0x3d, 0x05, 0x87, - 0x3c, 0x63, 0xf9, 0x09, 0xc7, 0x5b, 0xb4, 0x0c, 0x93, 0x9e, 0x85, 0x09, 0x73, 0xaf, 0x95, 0x10, - 0x05, 0x5a, 0x34, 0xf7, 0xc2, 0x64, 0x4f, 0xc0, 0xa4, 0xb9, 0x6d, 0xb6, 0xd2, 0x9d, 0xf2, 0xd3, - 0x21, 0x73, 0xdb, 0x0c, 0x13, 0xde, 0x4b, 0x57, 0xe6, 0x16, 0xae, 0xa8, 0x0e, 0xae, 0x66, 0x8e, - 0xf8, 0xd1, 0x7d, 0x15, 0x68, 0x16, 0xd2, 0x95, 0x4a, 0x19, 0xeb, 0xea, 0x66, 0x1d, 0x97, 0x55, - 0x0b, 0xeb, 0xaa, 0x9d, 0x99, 0xa6, 0xc8, 0x31, 0xc7, 0x6a, 0x62, 0x65, 0xb4, 0x52, 0x29, 0xd1, - 0xca, 0x3c, 0xad, 0x43, 0xa7, 0x60, 0xdc, 0xd8, 0x7c, 0xb1, 0xc2, 0x3c, 0xb2, 0x6c, 0x5a, 0x78, - 0x4b, 0xdb, 0xcd, 0xdc, 0x43, 0xcd, 0x3b, 0x46, 0x2a, 0xa8, 0x3f, 0xae, 0x52, 0x30, 0x7a, 0x00, - 0xd2, 0x15, 0x7b, 0x5b, 0xb5, 0x4c, 0x1a, 0x92, 0x6d, 0x53, 0xad, 0xe0, 0xcc, 0xbd, 0x0c, 0x95, - 0xc1, 0x97, 0x05, 0x98, 0x8c, 0x08, 0xfb, 0xaa, 0xb6, 0xe5, 0x08, 0x8e, 0xf7, 0xb3, 0x11, 0x41, - 0x61, 0x9c, 0xdb, 0x49, 0x48, 0x13, 0x4b, 0x04, 0x1a, 0x3e, 0x49, 0xd1, 0x46, 0xcd, 0x6d, 0xd3, - 0xdf, 0xee, 0xdd, 0x30, 0x42, 0x30, 0xbd, 0x46, 0x1f, 0x60, 0x89, 0x9b, 0xb9, 0xed, 0x6b, 0xf1, - 0x71, 0x38, 0x4c, 0x90, 0x1a, 0xd8, 0x51, 0xab, 0xaa, 0xa3, 0xfa, 0xb0, 0x1f, 0xa2, 0xd8, 0xc4, - 0xec, 0x4b, 0xbc, 0x32, 0x20, 0xa7, 0xd5, 0xdc, 0xdc, 0x73, 0x1d, 0xeb, 0x61, 0x26, 0x27, 0x81, - 0x09, 0xd7, 0xba, 0x63, 0xc9, 0xb9, 0x9c, 0x83, 0x94, 0xdf, 0xef, 0x51, 0x12, 0x98, 0xe7, 0xa7, - 0x25, 0x92, 0x04, 0xcd, 0xad, 0x14, 0x49, 0xfa, 0xf2, 0x42, 0x29, 0x1d, 0x21, 0x69, 0xd4, 0xe2, - 0xc2, 0x7a, 0xa9, 0xac, 0x6c, 0x2c, 0xaf, 0x2f, 0x2c, 0x95, 0xd2, 0x51, 0x5f, 0x62, 0xff, 0x4c, - 0x2c, 0x71, 0x5f, 0xfa, 0x7e, 0xf9, 0x5b, 0x11, 0x18, 0x0d, 0xae, 0xd4, 0xd0, 0xcf, 0xc0, 0x11, - 0xb1, 0xad, 0x62, 0x63, 0xa7, 0x7c, 0x55, 0xb3, 0xe8, 0x80, 0x6c, 0xa8, 0x6c, 0x72, 0x74, 0xfd, - 0x67, 0x92, 0x63, 0xad, 0x61, 0xe7, 0x39, 0xcd, 0x22, 0xc3, 0xad, 0xa1, 0x3a, 0x68, 0x11, 0xa6, - 0x75, 0xa3, 0x6c, 0x3b, 0xaa, 0x5e, 0x55, 0xad, 0x6a, 0xd9, 0xdb, 0xd0, 0x2a, 0xab, 0x95, 0x0a, - 0xb6, 0x6d, 0x83, 0x4d, 0x84, 0x2e, 0x97, 0xe3, 0xba, 0xb1, 0xc6, 0x91, 0xbd, 0x19, 0x22, 0xcf, - 0x51, 0x43, 0xee, 0x1b, 0xed, 0xe4, 0xbe, 0xc7, 0x20, 0xd9, 0x50, 0xcd, 0x32, 0xd6, 0x1d, 0x6b, - 0x8f, 0xe6, 0xe7, 0x09, 0x25, 0xd1, 0x50, 0xcd, 0x12, 0x29, 0xff, 0x58, 0x96, 0x49, 0xcf, 0xc4, - 0x12, 0x89, 0x74, 0xf2, 0x99, 0x58, 0x22, 0x99, 0x06, 0xf9, 0xb5, 0x28, 0xa4, 0xfc, 0xf9, 0x3a, - 0x59, 0xfe, 0x54, 0xe8, 0x8c, 0x25, 0xd1, 0x98, 0x76, 0x77, 0xd7, 0xec, 0x7e, 0x76, 0x8e, 0x4c, - 0x65, 0xb9, 0x41, 0x96, 0x1c, 0x2b, 0x8c, 0x92, 0xa4, 0x11, 0xc4, 0xd9, 0x30, 0x4b, 0x46, 0x12, - 0x0a, 0x2f, 0xa1, 0x79, 0x18, 0x7c, 0xd1, 0xa6, 0xbc, 0x07, 0x29, 0xef, 0x7b, 0xba, 0xf3, 0x7e, - 0x66, 0x8d, 0x32, 0x4f, 0x3e, 0xb3, 0x56, 0x5e, 0x5e, 0x51, 0x96, 0xf2, 0x8b, 0x0a, 0x27, 0x47, - 0x47, 0x21, 0x56, 0x57, 0xaf, 0xed, 0x05, 0x27, 0x3d, 0x0a, 0xea, 0xb7, 0x13, 0x8e, 0x42, 0xec, - 0x2a, 0x56, 0x77, 0x82, 0x53, 0x0d, 0x05, 0xdd, 0xc1, 0xc1, 0x70, 0x1a, 0xe2, 0xd4, 0x5e, 0x08, - 0x80, 0x5b, 0x2c, 0x3d, 0x80, 0x12, 0x10, 0x9b, 0x5b, 0x51, 0xc8, 0x80, 0x48, 0x43, 0x8a, 0x41, - 0xcb, 0xab, 0x0b, 0xa5, 0xb9, 0x52, 0x3a, 0x22, 0x9f, 0x85, 0x41, 0x66, 0x04, 0x32, 0x58, 0x5c, - 0x33, 0xa4, 0x07, 0x78, 0x91, 0xf3, 0x90, 0x44, 0xed, 0xc6, 0x52, 0xa1, 0xa4, 0xa4, 0x23, 0xc1, - 0xae, 0x8e, 0xa5, 0xe3, 0xb2, 0x0d, 0x29, 0x7f, 0x1e, 0xfe, 0xe3, 0x59, 0x8c, 0x7f, 0x45, 0x82, - 0x61, 0x5f, 0x5e, 0x4d, 0x12, 0x22, 0xb5, 0x5e, 0x37, 0xae, 0x96, 0xd5, 0xba, 0xa6, 0xda, 0xdc, - 0x35, 0x80, 0x82, 0xf2, 0x04, 0xd2, 0x6f, 0xd7, 0xfd, 0x98, 0x86, 0x48, 0x3c, 0x3d, 0x28, 0x7f, - 0x52, 0x82, 0x74, 0x38, 0xb1, 0x0d, 0x89, 0x29, 0xfd, 0x24, 0xc5, 0x94, 0x3f, 0x21, 0xc1, 0x68, - 0x30, 0x9b, 0x0d, 0x89, 0x77, 0xd7, 0x4f, 0x54, 0xbc, 0x3f, 0x8c, 0xc0, 0x48, 0x20, 0x87, 0xed, - 0x57, 0xba, 0x97, 0x60, 0x5c, 0xab, 0xe2, 0x86, 0x69, 0x38, 0x58, 0xaf, 0xec, 0x95, 0xeb, 0xf8, - 0x0a, 0xae, 0x67, 0x64, 0x1a, 0x34, 0x4e, 0x77, 0xcf, 0x92, 0x67, 0x17, 0x3c, 0xba, 0x45, 0x42, - 0x96, 0x9b, 0x58, 0x28, 0x96, 0x96, 0x56, 0x57, 0xd6, 0x4b, 0xcb, 0x73, 0x6f, 0x2d, 0x6f, 0x2c, - 0x5f, 0x5a, 0x5e, 0x79, 0x6e, 0x59, 0x49, 0x6b, 0x21, 0xb4, 0x3b, 0x38, 0xec, 0x57, 0x21, 0x1d, - 0x16, 0x0a, 0x1d, 0x81, 0x76, 0x62, 0xa5, 0x07, 0xd0, 0x04, 0x8c, 0x2d, 0xaf, 0x94, 0xd7, 0x16, - 0x8a, 0xa5, 0x72, 0xe9, 0xc2, 0x85, 0xd2, 0xdc, 0xfa, 0x1a, 0xdb, 0xf7, 0x70, 0xb1, 0xd7, 0x03, - 0x03, 0x5c, 0x7e, 0x25, 0x0a, 0x13, 0x6d, 0x24, 0x41, 0x79, 0xbe, 0x62, 0x61, 0x8b, 0xa8, 0x87, - 0xfb, 0x91, 0x7e, 0x96, 0xe4, 0x0c, 0xab, 0xaa, 0xe5, 0xf0, 0x05, 0xce, 0x03, 0x40, 0xac, 0xa4, - 0x3b, 0xda, 0x96, 0x86, 0x2d, 0xbe, 0x9f, 0xc4, 0x96, 0x31, 0x63, 0x1e, 0x9c, 0x6d, 0x29, 0x3d, - 0x04, 0xc8, 0x34, 0x6c, 0xcd, 0xd1, 0xae, 0xe0, 0xb2, 0xa6, 0x8b, 0xcd, 0x27, 0xb2, 0xac, 0x89, - 0x29, 0x69, 0x51, 0xb3, 0xa0, 0x3b, 0x2e, 0xb6, 0x8e, 0x6b, 0x6a, 0x08, 0x9b, 0x04, 0xf3, 0xa8, - 0x92, 0x16, 0x35, 0x2e, 0xf6, 0x5d, 0x90, 0xaa, 0x1a, 0x4d, 0x92, 0xeb, 0x31, 0x3c, 0x32, 0x77, - 0x48, 0xca, 0x30, 0x83, 0xb9, 0x28, 0x3c, 0x8b, 0xf7, 0x76, 0xbd, 0x52, 0xca, 0x30, 0x83, 0x31, - 0x94, 0xfb, 0x61, 0x4c, 0xad, 0xd5, 0x2c, 0xc2, 0x5c, 0x30, 0x62, 0xeb, 0x92, 0x51, 0x17, 0x4c, - 0x11, 0xb3, 0xcf, 0x40, 0x42, 0xd8, 0x81, 0x4c, 0xd5, 0xc4, 0x12, 0x65, 0x93, 0x2d, 0xb6, 0x23, - 0x27, 0x93, 0x4a, 0x42, 0x17, 0x95, 0x77, 0x41, 0x4a, 0xb3, 0xcb, 0xde, 0x26, 0x7e, 0x64, 0x26, - 0x72, 0x32, 0xa1, 0x0c, 0x6b, 0xb6, 0xbb, 0x01, 0x2a, 0x7f, 0x26, 0x02, 0xa3, 0xc1, 0x43, 0x08, - 0x54, 0x84, 0x44, 0xdd, 0xa8, 0xa8, 0xd4, 0xb5, 0xd8, 0x09, 0xd8, 0xc9, 0x1e, 0xe7, 0x16, 0xb3, - 0x8b, 0x1c, 0x5f, 0x71, 0x29, 0xb3, 0xbf, 0x23, 0x41, 0x42, 0x80, 0xd1, 0x61, 0x88, 0x99, 0xaa, - 0xb3, 0x4d, 0xd9, 0xc5, 0x0b, 0x91, 0xb4, 0xa4, 0xd0, 0x32, 0x81, 0xdb, 0xa6, 0xaa, 0x53, 0x17, - 0xe0, 0x70, 0x52, 0x26, 0xfd, 0x5a, 0xc7, 0x6a, 0x95, 0x2e, 0x7a, 0x8c, 0x46, 0x03, 0xeb, 0x8e, - 0x2d, 0xfa, 0x95, 0xc3, 0xe7, 0x38, 0x18, 0x3d, 0x08, 0xe3, 0x8e, 0xa5, 0x6a, 0xf5, 0x00, 0x6e, - 0x8c, 0xe2, 0xa6, 0x45, 0x85, 0x8b, 0x9c, 0x83, 0xa3, 0x82, 0x6f, 0x15, 0x3b, 0x6a, 0x65, 0x1b, - 0x57, 0x3d, 0xa2, 0x41, 0xba, 0xb9, 0x71, 0x84, 0x23, 0x14, 0x79, 0xbd, 0xa0, 0x95, 0xbf, 0x25, - 0xc1, 0xb8, 0x58, 0xa6, 0x55, 0x5d, 0x63, 0x2d, 0x01, 0xa8, 0xba, 0x6e, 0x38, 0x7e, 0x73, 0xb5, - 0xba, 0x72, 0x0b, 0xdd, 0x6c, 0xde, 0x25, 0x52, 0x7c, 0x0c, 0xb2, 0x0d, 0x00, 0xaf, 0xa6, 0xa3, - 0xd9, 0xa6, 0x61, 0x98, 0x9f, 0x30, 0xd1, 0x63, 0x4a, 0xb6, 0xb0, 0x07, 0x06, 0x22, 0xeb, 0x39, - 0x34, 0x09, 0xf1, 0x4d, 0x5c, 0xd3, 0x74, 0xbe, 0x6f, 0xcc, 0x0a, 0x62, 0xfb, 0x25, 0xe6, 0x6e, - 0xbf, 0x14, 0xfe, 0x32, 0x4c, 0x54, 0x8c, 0x46, 0x58, 0xdc, 0x42, 0x3a, 0xb4, 0xb9, 0x60, 0x5f, - 0x94, 0x5e, 0x78, 0x98, 0x23, 0xd5, 0x8c, 0xba, 0xaa, 0xd7, 0x66, 0x0d, 0xab, 0xe6, 0x1d, 0xb3, - 0x92, 0x8c, 0xc7, 0xf6, 0x1d, 0xb6, 0x9a, 0x9b, 0x7f, 0x26, 0x49, 0xbf, 0x14, 0x89, 0xce, 0xaf, - 0x16, 0x3e, 0x1b, 0xc9, 0xce, 0x33, 0xc2, 0x55, 0x61, 0x0c, 0x05, 0x6f, 0xd5, 0x71, 0x85, 0x28, - 0x08, 0xdf, 0x7b, 0x10, 0x26, 0x6b, 0x46, 0xcd, 0xa0, 0x9c, 0x4e, 0x93, 0x5f, 0xfc, 0x9c, 0x36, - 0xe9, 0x42, 0xb3, 0x3d, 0x0f, 0x75, 0x73, 0xcb, 0x30, 0xc1, 0x91, 0xcb, 0xf4, 0xa0, 0x88, 0x2d, - 0x63, 0x50, 0xd7, 0x3d, 0xb4, 0xcc, 0x17, 0xbe, 0x4b, 0xa7, 0x6f, 0x65, 0x9c, 0x93, 0x92, 0x3a, - 0xb6, 0xd2, 0xc9, 0x29, 0x70, 0x28, 0xc0, 0x8f, 0x0d, 0x52, 0x6c, 0xf5, 0xe0, 0xf8, 0x9b, 0x9c, - 0xe3, 0x84, 0x8f, 0xe3, 0x1a, 0x27, 0xcd, 0xcd, 0xc1, 0xc8, 0x7e, 0x78, 0xfd, 0x0b, 0xce, 0x2b, - 0x85, 0xfd, 0x4c, 0xe6, 0x61, 0x8c, 0x32, 0xa9, 0x34, 0x6d, 0xc7, 0x68, 0xd0, 0x08, 0xd8, 0x9d, - 0xcd, 0x6f, 0x7d, 0x97, 0x8d, 0x9a, 0x51, 0x42, 0x36, 0xe7, 0x52, 0xe5, 0x72, 0x40, 0xcf, 0xc6, - 0xaa, 0xb8, 0x52, 0xef, 0xc1, 0xe1, 0x6b, 0x5c, 0x10, 0x17, 0x3f, 0x77, 0x19, 0x26, 0xc9, 0x6f, - 0x1a, 0xa0, 0xfc, 0x92, 0xf4, 0xde, 0x70, 0xcb, 0x7c, 0xeb, 0xbd, 0x6c, 0x60, 0x4e, 0xb8, 0x0c, - 0x7c, 0x32, 0xf9, 0x7a, 0xb1, 0x86, 0x1d, 0x07, 0x5b, 0x76, 0x59, 0xad, 0xb7, 0x13, 0xcf, 0xb7, - 0x63, 0x91, 0xf9, 0xd8, 0xf7, 0x83, 0xbd, 0x38, 0xcf, 0x28, 0xf3, 0xf5, 0x7a, 0x6e, 0x03, 0x8e, - 0xb4, 0xf1, 0x8a, 0x3e, 0x78, 0xbe, 0xc2, 0x79, 0x4e, 0xb6, 0x78, 0x06, 0x61, 0xbb, 0x0a, 0x02, - 0xee, 0xf6, 0x65, 0x1f, 0x3c, 0x3f, 0xce, 0x79, 0x22, 0x4e, 0x2b, 0xba, 0x94, 0x70, 0x7c, 0x06, - 0xc6, 0xaf, 0x60, 0x6b, 0xd3, 0xb0, 0xf9, 0x2e, 0x51, 0x1f, 0xec, 0x3e, 0xc1, 0xd9, 0x8d, 0x71, - 0x42, 0xba, 0x6d, 0x44, 0x78, 0x3d, 0x05, 0x89, 0x2d, 0xb5, 0x82, 0xfb, 0x60, 0x71, 0x83, 0xb3, - 0x18, 0x22, 0xf8, 0x84, 0x34, 0x0f, 0xa9, 0x9a, 0xc1, 0xe7, 0xa8, 0xde, 0xe4, 0x9f, 0xe4, 0xe4, - 0xc3, 0x82, 0x86, 0xb3, 0x30, 0x0d, 0xb3, 0x59, 0x27, 0x13, 0x58, 0x6f, 0x16, 0x7f, 0x4b, 0xb0, - 0x10, 0x34, 0x9c, 0xc5, 0x3e, 0xcc, 0xfa, 0xaa, 0x60, 0x61, 0xfb, 0xec, 0xf9, 0x34, 0x0c, 0x1b, - 0x7a, 0x7d, 0xcf, 0xd0, 0xfb, 0x11, 0xe2, 0x53, 0x9c, 0x03, 0x70, 0x12, 0xc2, 0xe0, 0x3c, 0x24, - 0xfb, 0xed, 0x88, 0xbf, 0xfd, 0x7d, 0x31, 0x3c, 0x44, 0x0f, 0xcc, 0xc3, 0x98, 0x08, 0x50, 0x9a, - 0xa1, 0xf7, 0xc1, 0xe2, 0xef, 0x70, 0x16, 0xa3, 0x3e, 0x32, 0xae, 0x86, 0x83, 0x6d, 0xa7, 0x86, - 0xfb, 0x61, 0xf2, 0x19, 0xa1, 0x06, 0x27, 0xe1, 0xa6, 0xdc, 0xc4, 0x7a, 0x65, 0xbb, 0x3f, 0x0e, - 0xbf, 0x22, 0x4c, 0x29, 0x68, 0x08, 0x8b, 0x39, 0x18, 0x69, 0xa8, 0x96, 0xbd, 0xad, 0xd6, 0xfb, - 0xea, 0x8e, 0xbf, 0xcb, 0x79, 0xa4, 0x5c, 0x22, 0x6e, 0x91, 0xa6, 0xbe, 0x1f, 0x36, 0x9f, 0x15, - 0x16, 0xf1, 0x91, 0xf1, 0xa1, 0x67, 0x3b, 0x74, 0x4b, 0x6d, 0x3f, 0xdc, 0x7e, 0x55, 0x0c, 0x3d, - 0x46, 0xbb, 0xe4, 0xe7, 0x78, 0x1e, 0x92, 0xb6, 0x76, 0xad, 0x2f, 0x36, 0x9f, 0x13, 0x3d, 0x4d, - 0x09, 0x08, 0xf1, 0x5b, 0xe1, 0x68, 0xdb, 0x69, 0xa2, 0x0f, 0x66, 0x7f, 0x8f, 0x33, 0x3b, 0xdc, - 0x66, 0xaa, 0xe0, 0x21, 0x61, 0xbf, 0x2c, 0xff, 0xbe, 0x08, 0x09, 0x38, 0xc4, 0x6b, 0x95, 0xac, - 0x1a, 0x6c, 0x75, 0x6b, 0x7f, 0x56, 0xfb, 0x35, 0x61, 0x35, 0x46, 0x1b, 0xb0, 0xda, 0x3a, 0x1c, - 0xe6, 0x1c, 0xf7, 0xd7, 0xaf, 0x9f, 0x17, 0x81, 0x95, 0x51, 0x6f, 0x04, 0x7b, 0xf7, 0x6d, 0x90, - 0x75, 0xcd, 0x29, 0xd2, 0x53, 0xbb, 0xdc, 0x50, 0xcd, 0x3e, 0x38, 0x7f, 0x81, 0x73, 0x16, 0x11, - 0xdf, 0xcd, 0x6f, 0xed, 0x25, 0xd5, 0x24, 0xcc, 0x9f, 0x87, 0x8c, 0x60, 0xde, 0xd4, 0x2d, 0x5c, - 0x31, 0x6a, 0xba, 0x76, 0x0d, 0x57, 0xfb, 0x60, 0xfd, 0xeb, 0xa1, 0xae, 0xda, 0xf0, 0x91, 0x13, - 0xce, 0x0b, 0x90, 0x76, 0x73, 0x95, 0xb2, 0xd6, 0x30, 0x0d, 0xcb, 0xe9, 0xc1, 0xf1, 0x8b, 0xa2, - 0xa7, 0x5c, 0xba, 0x05, 0x4a, 0x96, 0x2b, 0x01, 0x3b, 0x67, 0xee, 0xd7, 0x25, 0xbf, 0xc4, 0x19, - 0x8d, 0x78, 0x54, 0x3c, 0x70, 0x54, 0x8c, 0x86, 0xa9, 0x5a, 0xfd, 0xc4, 0xbf, 0x7f, 0x20, 0x02, - 0x07, 0x27, 0xe1, 0x81, 0x83, 0x64, 0x74, 0x64, 0xb6, 0xef, 0x83, 0xc3, 0x97, 0x45, 0xe0, 0x10, - 0x34, 0x9c, 0x85, 0x48, 0x18, 0xfa, 0x60, 0xf1, 0x0f, 0x05, 0x0b, 0x41, 0x43, 0x58, 0x3c, 0xeb, - 0x4d, 0xb4, 0x16, 0xae, 0x69, 0xb6, 0x63, 0xb1, 0xa4, 0xb8, 0x3b, 0xab, 0x7f, 0xf4, 0xfd, 0x60, - 0x12, 0xa6, 0xf8, 0x48, 0x49, 0x24, 0xe2, 0x9b, 0xac, 0x74, 0xcd, 0xd4, 0x5b, 0xb0, 0xdf, 0x10, - 0x91, 0xc8, 0x47, 0x46, 0x64, 0xf3, 0x65, 0x88, 0xc4, 0xec, 0x15, 0xb2, 0x52, 0xe8, 0x83, 0xdd, - 0x3f, 0x0e, 0x09, 0xb7, 0x26, 0x68, 0x09, 0x4f, 0x5f, 0xfe, 0xd3, 0xd4, 0x77, 0xf0, 0x5e, 0x5f, - 0xde, 0xf9, 0x4f, 0x42, 0xf9, 0xcf, 0x06, 0xa3, 0x64, 0x31, 0x64, 0x2c, 0x94, 0x4f, 0xa1, 0x5e, - 0xb7, 0x8a, 0x32, 0xef, 0xfe, 0x21, 0xd7, 0x37, 0x98, 0x4e, 0xe5, 0x16, 0x89, 0x93, 0x07, 0x93, - 0x9e, 0xde, 0xcc, 0xde, 0xfb, 0x43, 0xd7, 0xcf, 0x03, 0x39, 0x4f, 0xee, 0x02, 0x8c, 0x04, 0x12, - 0x9e, 0xde, 0xac, 0xde, 0xc7, 0x59, 0xa5, 0xfc, 0xf9, 0x4e, 0xee, 0x2c, 0xc4, 0x48, 0xf2, 0xd2, - 0x9b, 0xfc, 0xaf, 0x70, 0x72, 0x8a, 0x9e, 0x7b, 0x13, 0x24, 0x44, 0xd2, 0xd2, 0x9b, 0xf4, 0xfd, - 0x9c, 0xd4, 0x25, 0x21, 0xe4, 0x22, 0x61, 0xe9, 0x4d, 0xfe, 0x57, 0x05, 0xb9, 0x20, 0x21, 0xe4, - 0xfd, 0x9b, 0xf0, 0x2b, 0x3f, 0x17, 0xe3, 0x93, 0x8e, 0xb0, 0xdd, 0x79, 0x18, 0xe2, 0x99, 0x4a, - 0x6f, 0xea, 0x0f, 0xf2, 0xc6, 0x05, 0x45, 0xee, 0x09, 0x88, 0xf7, 0x69, 0xf0, 0x9f, 0xe7, 0xa4, - 0x0c, 0x3f, 0x37, 0x07, 0xc3, 0xbe, 0xec, 0xa4, 0x37, 0xf9, 0x5f, 0xe3, 0xe4, 0x7e, 0x2a, 0x22, - 0x3a, 0xcf, 0x4e, 0x7a, 0x33, 0xf8, 0x05, 0x21, 0x3a, 0xa7, 0x20, 0x66, 0x13, 0x89, 0x49, 0x6f, - 0xea, 0x0f, 0x09, 0xab, 0x0b, 0x92, 0xdc, 0xd3, 0x90, 0x74, 0x27, 0x9b, 0xde, 0xf4, 0x1f, 0xe6, - 0xf4, 0x1e, 0x0d, 0xb1, 0x80, 0x6f, 0xb2, 0xeb, 0xcd, 0xe2, 0xaf, 0x0b, 0x0b, 0xf8, 0xa8, 0xc8, - 0x30, 0x0a, 0x27, 0x30, 0xbd, 0x39, 0x7d, 0x44, 0x0c, 0xa3, 0x50, 0xfe, 0x42, 0x7a, 0x93, 0xc6, - 0xfc, 0xde, 0x2c, 0xfe, 0x86, 0xe8, 0x4d, 0x8a, 0x4f, 0xc4, 0x08, 0x67, 0x04, 0xbd, 0x79, 0xfc, - 0xa2, 0x10, 0x23, 0x94, 0x10, 0xe4, 0x56, 0x01, 0xb5, 0x66, 0x03, 0xbd, 0xf9, 0x7d, 0x94, 0xf3, - 0x1b, 0x6f, 0x49, 0x06, 0x72, 0xcf, 0xc1, 0xe1, 0xf6, 0x99, 0x40, 0x6f, 0xae, 0x1f, 0xfb, 0x61, - 0x68, 0xed, 0xe6, 0x4f, 0x04, 0x72, 0xeb, 0xde, 0x94, 0xe2, 0xcf, 0x02, 0x7a, 0xb3, 0x7d, 0xe5, - 0x87, 0xc1, 0xc0, 0xed, 0x4f, 0x02, 0x72, 0x79, 0x00, 0x6f, 0x02, 0xee, 0xcd, 0xeb, 0x13, 0x9c, - 0x97, 0x8f, 0x88, 0x0c, 0x0d, 0x3e, 0xff, 0xf6, 0xa6, 0xbf, 0x21, 0x86, 0x06, 0xa7, 0x20, 0x43, - 0x43, 0x4c, 0xbd, 0xbd, 0xa9, 0x3f, 0x29, 0x86, 0x86, 0x20, 0x21, 0x9e, 0xed, 0x9b, 0xdd, 0x7a, - 0x73, 0xf8, 0x94, 0xf0, 0x6c, 0x1f, 0x55, 0x6e, 0x19, 0xc6, 0x5b, 0x26, 0xc4, 0xde, 0xac, 0x7e, - 0x89, 0xb3, 0x4a, 0x87, 0xe7, 0x43, 0xff, 0xe4, 0xc5, 0x27, 0xc3, 0xde, 0xdc, 0x3e, 0x1d, 0x9a, - 0xbc, 0xf8, 0x5c, 0x98, 0x3b, 0x0f, 0x09, 0xbd, 0x59, 0xaf, 0x93, 0xc1, 0x83, 0xba, 0xdf, 0x04, - 0xcc, 0xfc, 0xe7, 0x1f, 0x71, 0xeb, 0x08, 0x82, 0xdc, 0x59, 0x88, 0xe3, 0xc6, 0x26, 0xae, 0xf6, - 0xa2, 0xfc, 0xde, 0x8f, 0x44, 0xc0, 0x24, 0xd8, 0xb9, 0xa7, 0x01, 0xd8, 0xd6, 0x08, 0x3d, 0x0c, - 0xec, 0x41, 0xfb, 0x5f, 0x7e, 0xc4, 0xaf, 0xde, 0x78, 0x24, 0x1e, 0x03, 0x76, 0x91, 0xa7, 0x3b, - 0x83, 0xef, 0x07, 0x19, 0xd0, 0x1e, 0x79, 0x0a, 0x86, 0x5e, 0xb4, 0x0d, 0xdd, 0x51, 0x6b, 0xbd, - 0xa8, 0xff, 0x2b, 0xa7, 0x16, 0xf8, 0xc4, 0x60, 0x0d, 0xc3, 0xc2, 0x8e, 0x5a, 0xb3, 0x7b, 0xd1, - 0xfe, 0x37, 0x4e, 0xeb, 0x12, 0x10, 0xe2, 0x8a, 0x6a, 0x3b, 0xfd, 0xe8, 0xfd, 0xc7, 0x82, 0x58, - 0x10, 0x10, 0xa1, 0xc9, 0xef, 0x1d, 0xbc, 0xd7, 0x8b, 0xf6, 0x07, 0x42, 0x68, 0x8e, 0x9f, 0x7b, - 0x13, 0x24, 0xc9, 0x4f, 0x76, 0x9f, 0xae, 0x07, 0xf1, 0x9f, 0x70, 0x62, 0x8f, 0x82, 0xb4, 0x6c, - 0x3b, 0x55, 0x47, 0xeb, 0x6d, 0xec, 0x5b, 0xbc, 0xa7, 0x05, 0x7e, 0x2e, 0x0f, 0xc3, 0xb6, 0x53, - 0xad, 0x36, 0x79, 0x7e, 0xda, 0x83, 0xfc, 0x4f, 0x7f, 0xe4, 0x6e, 0x59, 0xb8, 0x34, 0xa4, 0xb7, - 0xaf, 0xee, 0x38, 0xa6, 0x41, 0x0f, 0x3c, 0x7a, 0x71, 0xf8, 0x21, 0xe7, 0xe0, 0x23, 0xc9, 0xcd, - 0x41, 0x8a, 0xe8, 0x62, 0x61, 0x13, 0xd3, 0xd3, 0xa9, 0x1e, 0x2c, 0xfe, 0x3b, 0x37, 0x40, 0x80, - 0xa8, 0xf0, 0xb3, 0x5f, 0x7b, 0x6d, 0x4a, 0xfa, 0xe6, 0x6b, 0x53, 0xd2, 0x1f, 0xbe, 0x36, 0x25, - 0x7d, 0xe8, 0x3b, 0x53, 0x03, 0xdf, 0xfc, 0xce, 0xd4, 0xc0, 0xef, 0x7d, 0x67, 0x6a, 0xa0, 0xfd, - 0x2e, 0x31, 0xcc, 0x1b, 0xf3, 0x06, 0xdb, 0x1f, 0x7e, 0x41, 0xae, 0x69, 0xce, 0x76, 0x73, 0x73, - 0xb6, 0x62, 0x34, 0xe8, 0x36, 0xae, 0xb7, 0x5b, 0xeb, 0x2e, 0x72, 0xe0, 0x3d, 0x51, 0x38, 0x5a, - 0x31, 0xec, 0x86, 0x61, 0x97, 0xd9, 0x7e, 0x2f, 0x2b, 0xf0, 0x1d, 0xdf, 0x94, 0xbf, 0xaa, 0x8f, - 0x4d, 0xdf, 0x8b, 0x30, 0x4a, 0x55, 0xa7, 0xdb, 0x5d, 0xd4, 0xdb, 0x7a, 0x06, 0x88, 0xaf, 0xff, - 0xdb, 0x38, 0xd5, 0x7a, 0xc4, 0x25, 0xa4, 0xa7, 0xf7, 0xeb, 0x30, 0xa9, 0x35, 0xcc, 0x3a, 0xa6, - 0xdb, 0xfc, 0x65, 0xb7, 0xae, 0x37, 0xbf, 0x6f, 0x70, 0x7e, 0x13, 0x1e, 0xf9, 0x82, 0xa0, 0xce, - 0x2d, 0xc2, 0xb8, 0x5a, 0xa9, 0x60, 0x33, 0xc0, 0xb2, 0x47, 0xb7, 0x08, 0x01, 0xd3, 0x9c, 0xd2, - 0xe5, 0x56, 0x78, 0xba, 0x53, 0xd7, 0xbc, 0x70, 0xaf, 0xcf, 0xf2, 0x16, 0xae, 0x61, 0xfd, 0x61, - 0x1d, 0x3b, 0x57, 0x0d, 0x6b, 0x87, 0x9b, 0xf7, 0x61, 0xd6, 0xd4, 0x20, 0xbb, 0xc1, 0x0c, 0xef, - 0x8b, 0xc2, 0x14, 0xab, 0x38, 0xbd, 0xa9, 0xda, 0xf8, 0xf4, 0x95, 0x47, 0x37, 0xb1, 0xa3, 0x3e, - 0x7a, 0xba, 0x62, 0x68, 0x3a, 0xef, 0x89, 0x09, 0xde, 0x2f, 0xa4, 0x7e, 0x96, 0xd7, 0x67, 0xdb, - 0x6e, 0xd3, 0xcb, 0xf3, 0x10, 0x9b, 0x33, 0x34, 0x1d, 0x4d, 0x42, 0xbc, 0x8a, 0x75, 0xa3, 0xc1, - 0xef, 0xdc, 0xb1, 0x02, 0xba, 0x1b, 0x06, 0xd5, 0x86, 0xd1, 0xd4, 0x1d, 0x76, 0x42, 0x51, 0x18, - 0xfe, 0xda, 0xcd, 0xe9, 0x81, 0xdf, 0xbf, 0x39, 0x1d, 0x5d, 0xd0, 0x1d, 0x85, 0x57, 0xe5, 0x62, - 0xaf, 0xbf, 0x3a, 0x2d, 0xc9, 0xcf, 0xc0, 0x50, 0x11, 0x57, 0x0e, 0xc2, 0xab, 0x88, 0x2b, 0x21, - 0x5e, 0x0f, 0x40, 0x62, 0x41, 0x77, 0xd8, 0xad, 0xc8, 0x13, 0x10, 0xd5, 0x74, 0x76, 0xd1, 0x26, - 0xd4, 0x3e, 0x81, 0x13, 0xd4, 0x22, 0xae, 0xb8, 0xa8, 0x55, 0x5c, 0x09, 0xa3, 0x12, 0xf6, 0x04, - 0x5e, 0x28, 0xfe, 0xde, 0x7f, 0x9c, 0x1a, 0x78, 0xf9, 0xb5, 0xa9, 0x81, 0x8e, 0x3d, 0xe1, 0x1f, - 0x03, 0xdc, 0xc4, 0xbc, 0x0b, 0xec, 0xea, 0x0e, 0x3b, 0x23, 0x71, 0xbb, 0xe1, 0xb7, 0x07, 0x41, - 0xe6, 0x38, 0xb6, 0xa3, 0xee, 0x68, 0x7a, 0xcd, 0xed, 0x09, 0xb5, 0xe9, 0x6c, 0x5f, 0xe3, 0x5d, - 0x71, 0x98, 0x77, 0x05, 0xc7, 0xe9, 0xde, 0x1b, 0xd9, 0xce, 0xa3, 0x2b, 0xdb, 0xa3, 0xcf, 0xe5, - 0x7f, 0x15, 0x05, 0xb4, 0xe6, 0xa8, 0x3b, 0x38, 0xdf, 0x74, 0xb6, 0x0d, 0x4b, 0xbb, 0xc6, 0x62, - 0x19, 0x06, 0x68, 0xa8, 0xbb, 0x65, 0xc7, 0xd8, 0xc1, 0xba, 0x4d, 0x4d, 0x33, 0x7c, 0xe6, 0xe8, - 0x6c, 0x1b, 0xff, 0x98, 0x25, 0x5d, 0x57, 0x78, 0xf0, 0xb3, 0xdf, 0x9e, 0xbe, 0xbf, 0xb7, 0x15, - 0x28, 0x32, 0x49, 0xae, 0x77, 0xd7, 0x29, 0x63, 0x74, 0x19, 0xd8, 0x25, 0x8b, 0x72, 0x5d, 0xb3, - 0x1d, 0x7e, 0x4f, 0xfb, 0xec, 0x6c, 0x7b, 0xdd, 0x67, 0x5b, 0xc5, 0x9c, 0xbd, 0xac, 0xd6, 0xb5, - 0xaa, 0xea, 0x18, 0x96, 0x7d, 0x71, 0x40, 0x49, 0x52, 0x56, 0x8b, 0x9a, 0xed, 0xa0, 0x75, 0x48, - 0x56, 0xb1, 0xbe, 0xc7, 0xd8, 0x46, 0xdf, 0x18, 0xdb, 0x04, 0xe1, 0x44, 0xb9, 0x3e, 0x0f, 0x48, - 0xf5, 0xe3, 0x89, 0x87, 0x49, 0xec, 0x7e, 0x65, 0x07, 0xf6, 0x01, 0xce, 0xf4, 0x1d, 0xc5, 0xb8, - 0x1a, 0x06, 0x65, 0xef, 0x03, 0xf0, 0xda, 0x44, 0x19, 0x18, 0x52, 0xab, 0x55, 0x0b, 0xdb, 0x36, - 0x3d, 0x00, 0x4c, 0x2a, 0xa2, 0x98, 0x1b, 0xff, 0xd7, 0x5f, 0x7a, 0x78, 0x24, 0xc0, 0xb1, 0x90, - 0x02, 0xb8, 0xe2, 0x92, 0x9e, 0xfa, 0xa4, 0x04, 0xe3, 0x2d, 0x2d, 0x22, 0x19, 0xa6, 0xf2, 0x1b, - 0xeb, 0x17, 0x57, 0x94, 0x85, 0x17, 0xf2, 0xeb, 0x0b, 0x2b, 0xcb, 0x65, 0x76, 0xe5, 0x7f, 0x79, - 0x6d, 0xb5, 0x34, 0xb7, 0x70, 0x61, 0xa1, 0x54, 0x4c, 0x0f, 0xa0, 0x69, 0x38, 0xd6, 0x06, 0xa7, - 0x58, 0x5a, 0x2c, 0xcd, 0xe7, 0xd7, 0x4b, 0x69, 0x09, 0xdd, 0x05, 0x27, 0xda, 0x32, 0x71, 0x51, - 0x22, 0x1d, 0x50, 0x94, 0x92, 0x8b, 0x12, 0x2d, 0x5c, 0xe8, 0x38, 0x8a, 0x1e, 0xea, 0xea, 0x3f, - 0xbb, 0xee, 0x70, 0x09, 0x8e, 0xa7, 0x77, 0x47, 0xe0, 0x68, 0x78, 0xca, 0x50, 0xf5, 0xbd, 0x0e, - 0xaf, 0x3e, 0x3b, 0x44, 0xb3, 0x8b, 0x10, 0xcd, 0xeb, 0x7b, 0xe8, 0x28, 0xcb, 0xa7, 0xcb, 0x4d, - 0xab, 0xce, 0x63, 0xd0, 0x10, 0x29, 0x6f, 0x58, 0x75, 0x12, 0x9b, 0xc4, 0x45, 0x7f, 0xe9, 0x64, - 0x8a, 0xdf, 0xde, 0xcf, 0xa5, 0x3f, 0xfa, 0xea, 0xf4, 0xc0, 0xe7, 0x5f, 0x9d, 0x1e, 0xf8, 0xc1, - 0xa7, 0xa6, 0x07, 0x5e, 0xfe, 0x83, 0x99, 0x81, 0xc2, 0x4e, 0x58, 0xbd, 0xaf, 0xf4, 0x9c, 0x4d, - 0x13, 0x79, 0x7d, 0x8f, 0x06, 0xa2, 0x55, 0xe9, 0x85, 0x38, 0x55, 0x4e, 0x1c, 0xa0, 0x4e, 0x85, - 0x0f, 0x50, 0x9f, 0xc3, 0xf5, 0xfa, 0x25, 0xdd, 0xb8, 0x4a, 0x7b, 0xd5, 0xb3, 0xc1, 0x47, 0x22, - 0x30, 0xd5, 0x32, 0x6d, 0xf2, 0x0c, 0xa3, 0xd3, 0xf3, 0xd7, 0x1c, 0x24, 0x8a, 0x22, 0x71, 0xc9, - 0xc0, 0x90, 0x8d, 0x2b, 0x86, 0x5e, 0x65, 0x23, 0x3d, 0xaa, 0x88, 0x22, 0x51, 0x5b, 0x57, 0x75, - 0xc3, 0xe6, 0x77, 0xee, 0x59, 0xa1, 0xf0, 0x71, 0x69, 0x7f, 0xf9, 0xc2, 0x88, 0x68, 0x49, 0xa8, - 0xf9, 0x68, 0xcf, 0x23, 0xe5, 0x1d, 0xa2, 0xa5, 0xab, 0x44, 0xe0, 0x58, 0xb9, 0x5f, 0xab, 0xfc, - 0x62, 0x04, 0xa6, 0xc3, 0x56, 0x21, 0x69, 0x9b, 0xed, 0xa8, 0x0d, 0xb3, 0x93, 0x59, 0xce, 0x43, - 0x72, 0x5d, 0xe0, 0xec, 0xdb, 0x2e, 0x37, 0xf6, 0x69, 0x97, 0x51, 0xb7, 0x29, 0x61, 0x98, 0x33, - 0x7d, 0x1a, 0xc6, 0xd5, 0xe3, 0x40, 0x96, 0xf9, 0x6c, 0x0c, 0x4e, 0xd0, 0x47, 0x59, 0x56, 0x43, - 0xd3, 0x9d, 0xd3, 0x15, 0x6b, 0xcf, 0x74, 0x68, 0xe2, 0x66, 0x6c, 0x71, 0xbb, 0x8c, 0x7b, 0xd5, - 0xb3, 0xac, 0xba, 0xc3, 0xc8, 0xd9, 0x82, 0xf8, 0x2a, 0xa1, 0x23, 0x16, 0x71, 0x0c, 0x47, 0xad, - 0x73, 0x4b, 0xb1, 0x02, 0x81, 0xb2, 0x87, 0x5c, 0x11, 0x06, 0xd5, 0xc4, 0x1b, 0xae, 0x3a, 0x56, - 0xb7, 0xd8, 0x7d, 0xf8, 0x28, 0x1d, 0x50, 0x09, 0x02, 0xa0, 0x57, 0xdf, 0x27, 0x21, 0xae, 0x36, - 0xd9, 0x55, 0x8e, 0x28, 0x19, 0x69, 0xb4, 0x20, 0x5f, 0x82, 0x21, 0x7e, 0xa0, 0x8c, 0xd2, 0x10, - 0xdd, 0xc1, 0x7b, 0xb4, 0x9d, 0x94, 0x42, 0x7e, 0xa2, 0x59, 0x88, 0x53, 0xe1, 0xf9, 0x04, 0x92, - 0x99, 0x6d, 0x91, 0x7e, 0x96, 0x0a, 0xa9, 0x30, 0x34, 0xf9, 0x19, 0x48, 0x14, 0x8d, 0x86, 0xa6, - 0x1b, 0x41, 0x6e, 0x49, 0xc6, 0x8d, 0xca, 0x6c, 0x36, 0x79, 0xbe, 0xa1, 0xb0, 0x02, 0x3a, 0x0c, - 0x83, 0xec, 0x7d, 0x04, 0xbf, 0x8e, 0xc2, 0x4b, 0xf2, 0x1c, 0x0c, 0x51, 0xde, 0x2b, 0x26, 0x42, - 0xfc, 0x65, 0x1d, 0x7f, 0x88, 0x41, 0x53, 0x53, 0xce, 0x3e, 0xe2, 0x09, 0x8b, 0x20, 0x56, 0x55, - 0x1d, 0x95, 0xeb, 0x4d, 0x7f, 0xcb, 0x6f, 0x86, 0x04, 0x67, 0x62, 0xa3, 0x33, 0x10, 0x35, 0x4c, - 0x9b, 0x5f, 0x28, 0xc9, 0x76, 0x52, 0x65, 0xc5, 0x2c, 0xc4, 0x48, 0xa6, 0xa2, 0x10, 0xe4, 0x82, - 0xd2, 0x31, 0xa8, 0x3e, 0xe9, 0x0b, 0xaa, 0xbe, 0x2e, 0xf7, 0xfd, 0x64, 0x5d, 0xda, 0xe2, 0x0e, - 0xae, 0xb3, 0x7c, 0x2a, 0x02, 0x53, 0xbe, 0xda, 0x2b, 0xd8, 0xb2, 0x35, 0x43, 0xe7, 0xf3, 0x39, - 0xf3, 0x16, 0xe4, 0x13, 0x92, 0xd7, 0x77, 0x70, 0x97, 0x37, 0x41, 0x34, 0x6f, 0x9a, 0x28, 0x0b, - 0x09, 0x5a, 0xae, 0x18, 0xcc, 0x5f, 0x62, 0x8a, 0x5b, 0x26, 0x75, 0xb6, 0xb1, 0xe5, 0x5c, 0x55, - 0x2d, 0xf7, 0x09, 0xa1, 0x28, 0xcb, 0x4f, 0x41, 0x72, 0xce, 0xd0, 0x6d, 0xac, 0xdb, 0x4d, 0x3a, - 0x06, 0x37, 0xeb, 0x46, 0x65, 0x87, 0x73, 0x60, 0x05, 0x62, 0x70, 0xd5, 0x34, 0x29, 0x65, 0x4c, - 0x21, 0x3f, 0x59, 0x6e, 0x58, 0x58, 0xeb, 0x68, 0xa2, 0xa7, 0xf6, 0x6f, 0x22, 0xae, 0xa4, 0x6b, - 0xa3, 0xff, 0x2d, 0xc1, 0xf1, 0xd6, 0x01, 0xb5, 0x83, 0xf7, 0xec, 0xfd, 0x8e, 0xa7, 0xe7, 0x21, - 0xb9, 0x4a, 0xdf, 0xf1, 0x5f, 0xc2, 0x7b, 0x28, 0x0b, 0x43, 0xb8, 0x7a, 0xe6, 0xec, 0xd9, 0x47, - 0x9f, 0x62, 0xde, 0x7e, 0x71, 0x40, 0x11, 0x00, 0x34, 0x05, 0x49, 0x1b, 0x57, 0xcc, 0x33, 0x67, - 0xcf, 0xed, 0x3c, 0xca, 0xdc, 0x8b, 0x64, 0x40, 0x2e, 0x28, 0x97, 0x20, 0x5a, 0xbf, 0xfe, 0xa9, - 0x69, 0xa9, 0x10, 0x87, 0xa8, 0xdd, 0x6c, 0xdc, 0x51, 0x1f, 0x79, 0x25, 0x0e, 0x33, 0x7e, 0x4a, - 0x1a, 0xa9, 0xdc, 0xac, 0x84, 0xdb, 0x20, 0xed, 0xb3, 0x01, 0xc5, 0xe8, 0x90, 0xcc, 0x76, 0xb5, - 0xa4, 0xfc, 0xeb, 0x12, 0xa4, 0xdc, 0x54, 0x69, 0x0d, 0x3b, 0xe8, 0xbc, 0x3f, 0xff, 0xe1, 0xc3, - 0xe6, 0xd8, 0x6c, 0xb8, 0x2d, 0x2f, 0xa5, 0x53, 0x7c, 0xe8, 0xe8, 0x09, 0xea, 0x88, 0xa6, 0x61, - 0xf3, 0x67, 0x65, 0x3d, 0x48, 0x5d, 0x64, 0xf4, 0x10, 0x20, 0x1a, 0xe1, 0xca, 0x57, 0x0c, 0x47, - 0xd3, 0x6b, 0x65, 0xd3, 0xb8, 0xca, 0x1f, 0xeb, 0x46, 0x95, 0x34, 0xad, 0xb9, 0x4c, 0x2b, 0x56, - 0x09, 0x9c, 0x08, 0x9d, 0x74, 0xb9, 0x04, 0xd3, 0x3b, 0x12, 0x04, 0x44, 0x11, 0x9d, 0x87, 0x21, - 0xb3, 0xb9, 0x59, 0x16, 0x11, 0x63, 0xf8, 0xcc, 0xf1, 0x76, 0xe3, 0x5f, 0xf8, 0x07, 0x8f, 0x00, - 0x83, 0x66, 0x73, 0x93, 0x78, 0xcb, 0x5d, 0x90, 0x6a, 0x23, 0xcc, 0xf0, 0x15, 0x4f, 0x0e, 0xfa, - 0xf9, 0x08, 0xae, 0x41, 0xd9, 0xb4, 0x34, 0xc3, 0xd2, 0x9c, 0x3d, 0x9a, 0xbf, 0x46, 0x95, 0xb4, - 0xa8, 0x58, 0xe5, 0x70, 0x79, 0x07, 0xc6, 0xd6, 0xe8, 0xfa, 0xd6, 0x93, 0xfc, 0xac, 0x27, 0x9f, - 0xd4, 0x5b, 0xbe, 0x8e, 0x92, 0x45, 0x5a, 0x24, 0x2b, 0x3c, 0xdb, 0xd1, 0x3b, 0x9f, 0xd8, 0xbf, - 0x77, 0x06, 0x33, 0xc4, 0x3f, 0x3e, 0x1a, 0x18, 0x9c, 0xcc, 0x39, 0xfd, 0xe1, 0xab, 0x5f, 0xc7, - 0xec, 0x95, 0x4d, 0x64, 0xbb, 0x4f, 0xaa, 0xd9, 0x1e, 0x61, 0x34, 0xdb, 0x73, 0x08, 0xc9, 0x4f, - 0xc1, 0xc8, 0xaa, 0x6a, 0x39, 0x6b, 0xd8, 0xb9, 0x88, 0xd5, 0x2a, 0xb6, 0x82, 0xb3, 0xee, 0x88, - 0x98, 0x75, 0x11, 0xc4, 0xe8, 0xd4, 0xca, 0x66, 0x1d, 0xfa, 0x5b, 0xde, 0x86, 0x18, 0xbd, 0x19, - 0xea, 0xce, 0xc8, 0x9c, 0x82, 0xcd, 0xc8, 0x24, 0x96, 0xee, 0x39, 0xd8, 0x16, 0xe9, 0x2d, 0x2d, - 0xa0, 0xc7, 0xc5, 0xbc, 0x1a, 0xed, 0x3e, 0xaf, 0x72, 0x47, 0xe4, 0xb3, 0x6b, 0x1d, 0x86, 0x0a, - 0x24, 0x14, 0x2f, 0x14, 0x5d, 0x41, 0x24, 0x4f, 0x10, 0xb4, 0x04, 0x63, 0xa6, 0x6a, 0x39, 0xf4, - 0x49, 0xcc, 0x36, 0xd5, 0x82, 0xfb, 0xfa, 0x74, 0xeb, 0xc8, 0x0b, 0x28, 0xcb, 0x5b, 0x19, 0x31, - 0xfd, 0x40, 0xf9, 0x8f, 0x62, 0x30, 0xc8, 0x8d, 0xf1, 0x26, 0x18, 0xe2, 0x66, 0xe5, 0xde, 0x79, - 0x62, 0xb6, 0x75, 0x62, 0x9a, 0x75, 0x27, 0x10, 0xce, 0x4f, 0xd0, 0xa0, 0xfb, 0x20, 0x51, 0xd9, - 0x56, 0x35, 0xbd, 0xac, 0x55, 0xc5, 0x56, 0xc3, 0x6b, 0x37, 0xa7, 0x87, 0xe6, 0x08, 0x6c, 0xa1, - 0xa8, 0x0c, 0xd1, 0xca, 0x85, 0x2a, 0xc9, 0x04, 0xb6, 0xb1, 0x56, 0xdb, 0x76, 0xf8, 0x08, 0xe3, - 0x25, 0xf4, 0x24, 0xc4, 0x88, 0x43, 0xf0, 0x07, 0x93, 0xd9, 0x96, 0x0d, 0x1f, 0x37, 0xd9, 0x2b, - 0x24, 0x48, 0xc3, 0x1f, 0xfa, 0xf6, 0xb4, 0xa4, 0x50, 0x0a, 0x34, 0x07, 0x23, 0x75, 0xd5, 0x76, - 0xca, 0x74, 0x06, 0x23, 0xcd, 0xc7, 0xf9, 0x7a, 0xbb, 0xc5, 0x20, 0xdc, 0xb0, 0x5c, 0xf4, 0x61, - 0x42, 0xc5, 0x40, 0x55, 0x74, 0x12, 0xd2, 0x94, 0x49, 0xc5, 0x68, 0x34, 0x34, 0x87, 0xe5, 0x56, - 0x83, 0xd4, 0xee, 0xa3, 0x04, 0x3e, 0x47, 0xc1, 0x34, 0xc3, 0x3a, 0x06, 0x49, 0xfa, 0x44, 0x8b, - 0xa2, 0xb0, 0xeb, 0xc8, 0x09, 0x02, 0xa0, 0x95, 0xf7, 0xc3, 0x98, 0x17, 0x1f, 0x19, 0x4a, 0x82, - 0x71, 0xf1, 0xc0, 0x14, 0xf1, 0x11, 0x98, 0xd4, 0xf1, 0x2e, 0xbd, 0x20, 0x1d, 0xc0, 0x4e, 0x52, - 0x6c, 0x44, 0xea, 0x2e, 0x07, 0x29, 0xee, 0x85, 0xd1, 0x8a, 0x30, 0x3e, 0xc3, 0x05, 0x8a, 0x3b, - 0xe2, 0x42, 0x29, 0xda, 0x51, 0x48, 0xa8, 0xa6, 0xc9, 0x10, 0x86, 0x79, 0x7c, 0x34, 0x4d, 0x5a, - 0x75, 0x0a, 0xc6, 0xa9, 0x8e, 0x16, 0xb6, 0x9b, 0x75, 0x87, 0x33, 0x49, 0x51, 0x9c, 0x31, 0x52, - 0xa1, 0x30, 0x38, 0xc5, 0xbd, 0x1b, 0x46, 0xf0, 0x15, 0xad, 0x8a, 0xf5, 0x0a, 0x66, 0x78, 0x23, - 0x14, 0x2f, 0x25, 0x80, 0x14, 0xe9, 0x01, 0x70, 0xe3, 0x5e, 0x59, 0xc4, 0xe4, 0x51, 0xc6, 0x4f, - 0xc0, 0xf3, 0x0c, 0x2c, 0x67, 0x20, 0x56, 0x54, 0x1d, 0x95, 0x24, 0x18, 0xce, 0x2e, 0x9b, 0x68, - 0x52, 0x0a, 0xf9, 0x29, 0xbf, 0x1e, 0x81, 0xd8, 0x65, 0xc3, 0xc1, 0xe8, 0x31, 0x5f, 0x02, 0x38, - 0xda, 0xce, 0x9f, 0xd7, 0xb4, 0x9a, 0x8e, 0xab, 0x4b, 0x76, 0xcd, 0xf7, 0x3d, 0x05, 0xcf, 0x9d, - 0x22, 0x01, 0x77, 0x9a, 0x84, 0xb8, 0x65, 0x34, 0xf5, 0xaa, 0xb8, 0xc9, 0x4b, 0x0b, 0xa8, 0x04, - 0x09, 0xd7, 0x4b, 0x62, 0xbd, 0xbc, 0x64, 0x8c, 0x78, 0x09, 0xf1, 0x61, 0x0e, 0x50, 0x86, 0x36, - 0xb9, 0xb3, 0x14, 0x20, 0xe9, 0x06, 0x2f, 0xee, 0x6d, 0xfd, 0x39, 0xac, 0x47, 0x46, 0x26, 0x13, - 0xb7, 0xef, 0x5d, 0xe3, 0x31, 0x8f, 0x4b, 0xbb, 0x15, 0xdc, 0x7a, 0x01, 0xb7, 0xe2, 0xdf, 0x76, - 0x18, 0xa2, 0x7a, 0x79, 0x6e, 0xc5, 0xbe, 0xef, 0x70, 0x1c, 0x92, 0xb6, 0x56, 0xd3, 0x55, 0xa7, - 0x69, 0x61, 0xee, 0x79, 0x1e, 0x40, 0xfe, 0x8a, 0x04, 0x83, 0xcc, 0x93, 0x7d, 0x76, 0x93, 0xda, - 0xdb, 0x2d, 0xd2, 0xc9, 0x6e, 0xd1, 0x83, 0xdb, 0x2d, 0x0f, 0xe0, 0x0a, 0x63, 0xf3, 0x27, 0xf7, - 0x6d, 0x32, 0x06, 0x26, 0xe2, 0x9a, 0x56, 0xe3, 0x03, 0xd5, 0x47, 0x24, 0xff, 0x07, 0x89, 0x24, - 0xb1, 0xbc, 0x1e, 0xe5, 0x61, 0x44, 0xc8, 0x55, 0xde, 0xaa, 0xab, 0x35, 0xee, 0x3b, 0x27, 0x3a, - 0x0a, 0x77, 0xa1, 0xae, 0xd6, 0x94, 0x61, 0x2e, 0x0f, 0x29, 0xb4, 0xef, 0x87, 0x48, 0x87, 0x7e, - 0x08, 0x74, 0x7c, 0xf4, 0x60, 0x1d, 0x1f, 0xe8, 0xa2, 0x58, 0xb8, 0x8b, 0xbe, 0x18, 0xa1, 0x8b, - 0x19, 0xd3, 0xb0, 0xd5, 0xfa, 0x8f, 0x63, 0x44, 0x1c, 0x83, 0xa4, 0x69, 0xd4, 0xcb, 0xac, 0x86, - 0xdd, 0x70, 0x4f, 0x98, 0x46, 0x5d, 0x69, 0xe9, 0xf6, 0xf8, 0x6d, 0x1a, 0x2e, 0x83, 0xb7, 0xc1, - 0x6a, 0x43, 0x61, 0xab, 0x59, 0x90, 0x62, 0xa6, 0xe0, 0x73, 0xd9, 0x23, 0xc4, 0x06, 0x74, 0x72, - 0x94, 0x5a, 0xe7, 0x5e, 0x26, 0x36, 0xc3, 0x54, 0x38, 0x1e, 0xa1, 0x60, 0xa1, 0xbf, 0xdd, 0x2a, - 0xd8, 0xef, 0x96, 0x0a, 0xc7, 0x93, 0xff, 0xa6, 0x04, 0xb0, 0x48, 0x2c, 0x4b, 0xf5, 0x25, 0xb3, - 0x90, 0x4d, 0x45, 0x28, 0x07, 0x5a, 0x9e, 0xea, 0xd4, 0x69, 0xbc, 0xfd, 0x94, 0xed, 0x97, 0x7b, - 0x0e, 0x46, 0x3c, 0x67, 0xb4, 0xb1, 0x10, 0x66, 0xaa, 0x4b, 0x56, 0xbd, 0x86, 0x1d, 0x25, 0x75, - 0xc5, 0x57, 0x92, 0xff, 0xb9, 0x04, 0x49, 0x2a, 0xd3, 0x12, 0x76, 0xd4, 0x40, 0x1f, 0x4a, 0x07, - 0xef, 0xc3, 0x13, 0x00, 0x8c, 0x8d, 0xad, 0x5d, 0xc3, 0xdc, 0xb3, 0x92, 0x14, 0xb2, 0xa6, 0x5d, - 0xc3, 0xe8, 0x9c, 0x6b, 0xf0, 0x68, 0x77, 0x83, 0x8b, 0xac, 0x9b, 0x9b, 0xfd, 0x08, 0x0c, 0xd1, - 0x4f, 0x54, 0xed, 0xda, 0x3c, 0x91, 0x1e, 0xd4, 0x9b, 0x8d, 0xf5, 0x5d, 0x5b, 0x7e, 0x11, 0x86, - 0xd6, 0x77, 0xd9, 0xde, 0xc8, 0x31, 0x48, 0x5a, 0x86, 0xc1, 0xe7, 0x64, 0x96, 0x0b, 0x25, 0x08, - 0x80, 0x4e, 0x41, 0x62, 0x3f, 0x20, 0xe2, 0xed, 0x07, 0x78, 0x1b, 0x1a, 0xd1, 0xbe, 0x36, 0x34, - 0x4e, 0xfd, 0x3b, 0x09, 0x86, 0x7d, 0xf1, 0x01, 0x3d, 0x0a, 0x87, 0x0a, 0x8b, 0x2b, 0x73, 0x97, - 0xca, 0x0b, 0xc5, 0xf2, 0x85, 0xc5, 0xfc, 0xbc, 0xf7, 0x86, 0x2b, 0x7b, 0xf8, 0xfa, 0x8d, 0x19, - 0xe4, 0xc3, 0xdd, 0xd0, 0xe9, 0x8e, 0x12, 0x3a, 0x0d, 0x93, 0x41, 0x92, 0x7c, 0x61, 0xad, 0xb4, - 0xbc, 0x9e, 0x96, 0xb2, 0x87, 0xae, 0xdf, 0x98, 0x19, 0xf7, 0x51, 0xe4, 0x37, 0x6d, 0xac, 0x3b, - 0xad, 0x04, 0x73, 0x2b, 0x4b, 0x4b, 0x0b, 0xeb, 0xe9, 0x48, 0x0b, 0x01, 0x0f, 0xd8, 0x0f, 0xc0, - 0x78, 0x90, 0x60, 0x79, 0x61, 0x31, 0x1d, 0xcd, 0xa2, 0xeb, 0x37, 0x66, 0x46, 0x7d, 0xd8, 0xcb, - 0x5a, 0x3d, 0x9b, 0xf8, 0xc0, 0xa7, 0xa7, 0x06, 0x7e, 0xe5, 0x97, 0xa7, 0x24, 0xa2, 0xd9, 0x48, - 0x20, 0x46, 0xa0, 0x87, 0xe0, 0xc8, 0xda, 0xc2, 0xfc, 0x72, 0xa9, 0x58, 0x5e, 0x5a, 0x9b, 0x17, - 0x7b, 0xd0, 0x42, 0xbb, 0xb1, 0xeb, 0x37, 0x66, 0x86, 0xb9, 0x4a, 0x9d, 0xb0, 0x57, 0x95, 0xd2, - 0xe5, 0x95, 0xf5, 0x52, 0x5a, 0x62, 0xd8, 0xab, 0x16, 0xbe, 0x62, 0x38, 0xec, 0x1b, 0x76, 0x8f, - 0xc0, 0xd1, 0x36, 0xd8, 0xae, 0x62, 0xe3, 0xd7, 0x6f, 0xcc, 0x8c, 0xac, 0x5a, 0x98, 0x8d, 0x1f, - 0x4a, 0x31, 0x0b, 0x99, 0x56, 0x8a, 0x95, 0xd5, 0x95, 0xb5, 0xfc, 0x62, 0x7a, 0x26, 0x9b, 0xbe, - 0x7e, 0x63, 0x26, 0x25, 0x82, 0x21, 0xdd, 0xe8, 0x77, 0x35, 0xbb, 0x93, 0x2b, 0x9e, 0x3f, 0x7d, - 0x18, 0xee, 0xe9, 0x70, 0xc6, 0x24, 0x4e, 0x27, 0x0e, 0x74, 0xca, 0xd4, 0x71, 0x9f, 0x3d, 0xdb, - 0x63, 0xfb, 0xb9, 0xf7, 0xd2, 0xe9, 0xe0, 0x27, 0x58, 0xd9, 0xae, 0x8b, 0x3b, 0xf9, 0x83, 0x12, - 0x8c, 0x5e, 0xd4, 0x6c, 0xc7, 0xb0, 0xb4, 0x8a, 0x5a, 0xa7, 0x2f, 0xb7, 0xce, 0xf5, 0x1b, 0x5b, - 0x43, 0x43, 0xfd, 0x69, 0x18, 0xbc, 0xa2, 0xd6, 0x59, 0x50, 0x8b, 0xd2, 0x0f, 0xcd, 0x74, 0x38, - 0xf2, 0x71, 0x43, 0x9b, 0x60, 0xc0, 0xc8, 0xe4, 0x5f, 0x8b, 0xc0, 0x18, 0x1d, 0x0c, 0x36, 0xfb, - 0x04, 0x19, 0x59, 0x63, 0x15, 0x20, 0x66, 0xa9, 0x0e, 0xdf, 0x34, 0x2c, 0xcc, 0xf2, 0xd3, 0xc7, - 0xfb, 0xfa, 0x38, 0x4b, 0x2b, 0xe2, 0x8a, 0x42, 0x69, 0xd1, 0xdb, 0x21, 0xd1, 0x50, 0x77, 0xcb, - 0x94, 0x0f, 0x5b, 0xb9, 0xe4, 0xf7, 0xc7, 0xe7, 0xd6, 0xcd, 0xe9, 0xb1, 0x3d, 0xb5, 0x51, 0xcf, - 0xc9, 0x82, 0x8f, 0xac, 0x0c, 0x35, 0xd4, 0x5d, 0x22, 0x22, 0x32, 0x61, 0x8c, 0x40, 0x2b, 0xdb, - 0xaa, 0x5e, 0xc3, 0xac, 0x11, 0xba, 0x05, 0x5a, 0xb8, 0xb8, 0xef, 0x46, 0x0e, 0x7b, 0x8d, 0xf8, - 0xd8, 0xc9, 0xca, 0x48, 0x43, 0xdd, 0x9d, 0xa3, 0x00, 0xd2, 0x62, 0x2e, 0xf1, 0xd1, 0x57, 0xa7, - 0x07, 0xe8, 0x89, 0xee, 0xb7, 0x24, 0x00, 0xcf, 0x62, 0xe8, 0xed, 0x90, 0xae, 0xb8, 0x25, 0x4a, - 0x2b, 0xce, 0x26, 0xef, 0xef, 0xd4, 0x17, 0x21, 0x7b, 0xb3, 0xb9, 0xf9, 0x9b, 0x37, 0xa7, 0x25, - 0x65, 0xac, 0x12, 0xea, 0x8a, 0xb7, 0xc1, 0x70, 0xd3, 0xac, 0xaa, 0x0e, 0x2e, 0xd3, 0x75, 0x5c, - 0xa4, 0xe7, 0x3c, 0x3f, 0x45, 0x78, 0xdd, 0xba, 0x39, 0x8d, 0x98, 0x5a, 0x3e, 0x62, 0x99, 0xce, - 0xfe, 0xc0, 0x20, 0x84, 0xc0, 0xa7, 0xd3, 0xd7, 0x25, 0x18, 0x2e, 0xfa, 0xee, 0x54, 0x66, 0x60, - 0xa8, 0x61, 0xe8, 0xda, 0x0e, 0xf7, 0xc7, 0xa4, 0x22, 0x8a, 0x28, 0x0b, 0x09, 0xf6, 0x98, 0xd5, - 0xd9, 0x13, 0x5b, 0xa1, 0xa2, 0x4c, 0xa8, 0xae, 0xe2, 0x4d, 0x5b, 0x13, 0xbd, 0xa1, 0x88, 0x22, - 0xba, 0x00, 0x69, 0x1b, 0x57, 0x9a, 0x96, 0xe6, 0xec, 0x95, 0x2b, 0x86, 0xee, 0xa8, 0x15, 0x87, - 0x3d, 0x8b, 0x2c, 0x1c, 0xbb, 0x75, 0x73, 0xfa, 0x08, 0x93, 0x35, 0x8c, 0x21, 0x2b, 0x63, 0x02, - 0x34, 0xc7, 0x20, 0xa4, 0x85, 0x2a, 0x76, 0x54, 0xad, 0x6e, 0x67, 0xd8, 0xe5, 0x04, 0x51, 0xf4, - 0xe9, 0xf2, 0xb9, 0x21, 0xff, 0xc6, 0xd6, 0x05, 0x48, 0x1b, 0x26, 0xb6, 0x02, 0x89, 0xa8, 0x14, - 0x6e, 0x39, 0x8c, 0x21, 0x2b, 0x63, 0x02, 0x24, 0x92, 0x54, 0x87, 0x74, 0xb3, 0x58, 0x28, 0x9a, - 0xcd, 0x4d, 0x6f, 0x3f, 0x6c, 0xb2, 0xa5, 0x37, 0xf2, 0xfa, 0x5e, 0xe1, 0x31, 0x8f, 0x7b, 0x98, - 0x4e, 0xfe, 0xc6, 0x97, 0x1e, 0x9e, 0xe4, 0xae, 0xe1, 0xed, 0x4f, 0x5d, 0xc2, 0x7b, 0xa4, 0xfb, - 0x39, 0xea, 0x2a, 0xc5, 0x24, 0x69, 0xe7, 0x8b, 0xaa, 0x56, 0x17, 0xcf, 0xfb, 0x15, 0x5e, 0x42, - 0x39, 0x18, 0xb4, 0x1d, 0xd5, 0x69, 0xda, 0xfc, 0xa4, 0x57, 0xee, 0xe4, 0x6a, 0x05, 0x43, 0xaf, - 0xae, 0x51, 0x4c, 0x85, 0x53, 0xa0, 0x0b, 0x30, 0xc8, 0x8f, 0xd0, 0xe3, 0xfb, 0x1e, 0xdf, 0xf4, - 0xae, 0x04, 0xa3, 0x26, 0x16, 0xa9, 0xe2, 0x3a, 0xae, 0xb1, 0xb4, 0x6a, 0x5b, 0x25, 0xab, 0x0f, - 0xfa, 0xed, 0xbd, 0xc2, 0xc2, 0xbe, 0x07, 0x21, 0xb7, 0x54, 0x98, 0x9f, 0xac, 0x8c, 0xb9, 0xa0, - 0x35, 0x0a, 0x41, 0x97, 0x02, 0x97, 0x7f, 0xf9, 0x07, 0x2a, 0xef, 0xee, 0xa4, 0xbe, 0xcf, 0xa7, - 0xc5, 0xfe, 0x84, 0xff, 0xea, 0xf0, 0x05, 0x48, 0x37, 0xf5, 0x4d, 0x43, 0xa7, 0x6f, 0x70, 0x79, - 0x7e, 0x4f, 0xd6, 0x77, 0x51, 0xbf, 0x73, 0x84, 0x31, 0x64, 0x65, 0xcc, 0x05, 0x5d, 0x64, 0xab, - 0x80, 0x2a, 0x8c, 0x7a, 0x58, 0x74, 0xa0, 0x26, 0x7b, 0x0e, 0xd4, 0xbb, 0xf8, 0x40, 0x3d, 0x14, - 0x6e, 0xc5, 0x1b, 0xab, 0x23, 0x2e, 0x90, 0x90, 0xa1, 0x8b, 0x00, 0x5e, 0x78, 0xa0, 0xfb, 0x14, - 0xc3, 0x9d, 0x3b, 0xde, 0x8b, 0x31, 0x62, 0xbd, 0xe7, 0xd1, 0xa2, 0x77, 0xc2, 0x44, 0x43, 0xd3, - 0xcb, 0x36, 0xae, 0x6f, 0x95, 0xb9, 0x81, 0x09, 0x4b, 0xfa, 0x09, 0xa5, 0xc2, 0xe2, 0xfe, 0xfc, - 0xe1, 0xd6, 0xcd, 0xe9, 0x2c, 0x0f, 0xa1, 0xad, 0x2c, 0x65, 0x65, 0xbc, 0xa1, 0xe9, 0x6b, 0xb8, - 0xbe, 0x55, 0x74, 0x61, 0xb9, 0xd4, 0x07, 0x5e, 0x9d, 0x1e, 0xe0, 0xc3, 0x75, 0x40, 0x3e, 0x47, - 0xf7, 0xce, 0xf9, 0x30, 0xc3, 0x36, 0x59, 0x93, 0xa8, 0xa2, 0xc0, 0xaf, 0x1a, 0x78, 0x00, 0x36, - 0xcc, 0x5f, 0xfe, 0x83, 0x19, 0x49, 0xfe, 0x9c, 0x04, 0x83, 0xc5, 0xcb, 0xab, 0xaa, 0x66, 0xa1, - 0x05, 0x18, 0xf7, 0x3c, 0x27, 0x38, 0xc8, 0x8f, 0xdf, 0xba, 0x39, 0x9d, 0x09, 0x3b, 0x97, 0x3b, - 0xca, 0x3d, 0x07, 0x16, 0xc3, 0x7c, 0xa1, 0xd3, 0xc2, 0x35, 0xc0, 0xaa, 0x05, 0x45, 0x6e, 0x5d, - 0xd6, 0x86, 0xd4, 0x2c, 0xc1, 0x10, 0x93, 0xd6, 0x46, 0x39, 0x88, 0x9b, 0xe4, 0x07, 0x3f, 0x18, - 0x98, 0xea, 0xe8, 0xbc, 0x14, 0xdf, 0xdd, 0xc8, 0x24, 0x24, 0xf2, 0x87, 0x23, 0x00, 0xc5, 0xcb, - 0x97, 0xd7, 0x2d, 0xcd, 0xac, 0x63, 0xe7, 0x76, 0x6a, 0xbe, 0x0e, 0x87, 0x7c, 0xab, 0x24, 0xab, - 0x12, 0xd2, 0x7e, 0xe6, 0xd6, 0xcd, 0xe9, 0xe3, 0x61, 0xed, 0x7d, 0x68, 0xb2, 0x32, 0xe1, 0xad, - 0x97, 0xac, 0x4a, 0x5b, 0xae, 0x55, 0xdb, 0x71, 0xb9, 0x46, 0x3b, 0x73, 0xf5, 0xa1, 0xf9, 0xb9, - 0x16, 0x6d, 0xa7, 0xbd, 0x69, 0xd7, 0x60, 0xd8, 0x33, 0x89, 0x8d, 0x8a, 0x90, 0x70, 0xf8, 0x6f, - 0x6e, 0x61, 0xb9, 0xb3, 0x85, 0x05, 0x19, 0xb7, 0xb2, 0x4b, 0x29, 0xff, 0x99, 0x04, 0xe0, 0xf9, - 0xec, 0x4f, 0xa7, 0x8b, 0x91, 0x50, 0xce, 0x03, 0x6f, 0xf4, 0x40, 0xa9, 0x1a, 0xa7, 0x0e, 0xd9, - 0xf3, 0xe7, 0x22, 0x30, 0xb1, 0x21, 0x22, 0xcf, 0x4f, 0xbd, 0x0d, 0x56, 0x61, 0x08, 0xeb, 0x8e, - 0xa5, 0x51, 0x23, 0x90, 0xde, 0x7e, 0xa4, 0x53, 0x6f, 0xb7, 0xd1, 0x89, 0x7e, 0x44, 0x4a, 0x6c, - 0xba, 0x73, 0x36, 0x21, 0x6b, 0xfc, 0x42, 0x14, 0x32, 0x9d, 0x28, 0xd1, 0x1c, 0x8c, 0x55, 0x2c, - 0xcc, 0x2e, 0x5e, 0xf9, 0x77, 0xfe, 0x0a, 0x59, 0x2f, 0xb3, 0x0c, 0x21, 0xc8, 0xca, 0xa8, 0x80, - 0xf0, 0xd9, 0xa3, 0x06, 0x24, 0xed, 0x23, 0x6e, 0x47, 0xef, 0x6f, 0xf5, 0x97, 0xe7, 0xc9, 0x7c, - 0xfa, 0x10, 0x8d, 0x04, 0x19, 0xb0, 0xf9, 0x63, 0xd4, 0x83, 0xd2, 0x09, 0xe4, 0x25, 0x18, 0xd3, - 0x74, 0xcd, 0xd1, 0xd4, 0x7a, 0x79, 0x53, 0xad, 0xab, 0x7a, 0xe5, 0x20, 0x59, 0x33, 0x0b, 0xf9, - 0xbc, 0xd9, 0x10, 0x3b, 0x59, 0x19, 0xe5, 0x90, 0x02, 0x03, 0xa0, 0x8b, 0x30, 0x24, 0x9a, 0x8a, - 0x1d, 0x28, 0xdb, 0x10, 0xe4, 0xbe, 0x04, 0xef, 0xe7, 0xa3, 0x30, 0xae, 0xe0, 0xea, 0xff, 0xef, - 0x8a, 0xfd, 0x75, 0xc5, 0x12, 0x00, 0x1b, 0xee, 0x24, 0xc0, 0x1e, 0xa0, 0x37, 0x48, 0xc0, 0x48, - 0x32, 0x0e, 0x45, 0xdb, 0xf1, 0xf5, 0xc7, 0xcd, 0x08, 0xa4, 0xfc, 0xfd, 0xf1, 0x17, 0x74, 0x56, - 0x42, 0x0b, 0x5e, 0x24, 0x8a, 0xf1, 0x4f, 0xef, 0x76, 0x88, 0x44, 0x2d, 0xde, 0xdb, 0x3d, 0x04, - 0xfd, 0x8f, 0x08, 0x0c, 0xae, 0xaa, 0x96, 0xda, 0xb0, 0x51, 0xa5, 0x25, 0xd3, 0x14, 0xdb, 0x8f, - 0x2d, 0x1f, 0x58, 0xe7, 0xbb, 0x1d, 0x3d, 0x12, 0xcd, 0x8f, 0xb6, 0x49, 0x34, 0xdf, 0x02, 0xa3, - 0x64, 0x39, 0xec, 0xbb, 0xc2, 0x40, 0xac, 0x3d, 0x52, 0x38, 0xea, 0x71, 0x09, 0xd6, 0xb3, 0xd5, - 0xf2, 0x65, 0xff, 0x1d, 0x86, 0x61, 0x82, 0xe1, 0x05, 0x66, 0x42, 0x7e, 0xd8, 0x5b, 0x96, 0xfa, - 0x2a, 0x65, 0x05, 0x1a, 0xea, 0x6e, 0x89, 0x15, 0xd0, 0x22, 0xa0, 0x6d, 0x77, 0x67, 0xa4, 0xec, - 0x99, 0x93, 0xd0, 0x9f, 0xb8, 0x75, 0x73, 0xfa, 0x28, 0xa3, 0x6f, 0xc5, 0x91, 0x95, 0x71, 0x0f, - 0x28, 0xb8, 0x3d, 0x0e, 0x40, 0xf4, 0x2a, 0xb3, 0x2b, 0xdc, 0x6c, 0xb9, 0x73, 0xe8, 0xd6, 0xcd, - 0xe9, 0x71, 0xc6, 0xc5, 0xab, 0x93, 0x95, 0x24, 0x29, 0x14, 0xc9, 0x6f, 0x9f, 0x67, 0x7f, 0x5a, - 0x02, 0xe4, 0x85, 0x7c, 0x05, 0xdb, 0x26, 0x59, 0x9f, 0x91, 0x44, 0xdc, 0x97, 0x35, 0x4b, 0xdd, - 0x13, 0x71, 0x8f, 0x5e, 0x24, 0xe2, 0xbe, 0x91, 0xf2, 0x94, 0x17, 0x1e, 0x23, 0xbd, 0xee, 0x33, - 0x73, 0x17, 0x09, 0xc7, 0xc3, 0x01, 0xf9, 0x5f, 0x4a, 0x70, 0xb4, 0xc5, 0xa3, 0x5c, 0x61, 0xff, - 0x12, 0x20, 0xcb, 0x57, 0xc9, 0xbf, 0xa3, 0xc8, 0x84, 0xde, 0xb7, 0x83, 0x8e, 0x5b, 0x2d, 0x71, - 0xf7, 0xf6, 0x45, 0x78, 0x76, 0x61, 0xfe, 0x9f, 0x49, 0x30, 0xe9, 0x6f, 0xde, 0x55, 0x64, 0x19, - 0x52, 0xfe, 0xd6, 0xb9, 0x0a, 0xf7, 0xf4, 0xa3, 0x02, 0x97, 0x3e, 0x40, 0x8f, 0x9e, 0xf5, 0x86, - 0x2b, 0xdb, 0x3b, 0x7b, 0xb4, 0x6f, 0x6b, 0x08, 0x99, 0xc2, 0xc3, 0x36, 0x46, 0xfb, 0xe3, 0xff, - 0x48, 0x10, 0x5b, 0x35, 0x8c, 0x3a, 0x32, 0x60, 0x5c, 0x37, 0x9c, 0x32, 0xf1, 0x2c, 0x5c, 0xf5, - 0xdf, 0x5b, 0x4f, 0x16, 0xe6, 0xf6, 0x67, 0xa4, 0xef, 0xdd, 0x9c, 0x6e, 0x65, 0xa5, 0x8c, 0xe9, - 0x86, 0x53, 0xa0, 0x10, 0x7e, 0x75, 0xfd, 0x9d, 0x30, 0x12, 0x6c, 0x8c, 0x45, 0xc9, 0xe7, 0xf6, - 0xdd, 0x58, 0x90, 0xcd, 0xad, 0x9b, 0xd3, 0x93, 0xde, 0x88, 0x71, 0xc1, 0xb2, 0x92, 0xda, 0xf4, - 0xb5, 0xce, 0xae, 0x77, 0xfd, 0xe0, 0xd5, 0x69, 0xe9, 0xd4, 0x97, 0x25, 0x00, 0x6f, 0xe7, 0x01, - 0x3d, 0x04, 0x47, 0x0a, 0x2b, 0xcb, 0xc5, 0xf2, 0xda, 0x7a, 0x7e, 0x7d, 0x63, 0x2d, 0x78, 0xc7, - 0x5b, 0x6c, 0x8f, 0xdb, 0x26, 0xae, 0x68, 0x5b, 0x1a, 0xae, 0xa2, 0xfb, 0x60, 0x32, 0x88, 0x4d, - 0x4a, 0xa5, 0x62, 0x5a, 0xca, 0xa6, 0xae, 0xdf, 0x98, 0x49, 0xb0, 0x5c, 0x0c, 0x57, 0xd1, 0x49, - 0x38, 0xd4, 0x8a, 0xb7, 0xb0, 0x3c, 0x9f, 0x8e, 0x64, 0x47, 0xae, 0xdf, 0x98, 0x49, 0xba, 0x49, - 0x1b, 0x92, 0x01, 0xf9, 0x31, 0x39, 0xbf, 0x68, 0x16, 0xae, 0xdf, 0x98, 0x19, 0x64, 0x06, 0xcc, - 0xc6, 0x3e, 0xf0, 0xe9, 0xa9, 0x81, 0xdb, 0x7e, 0x13, 0xfc, 0x4f, 0x86, 0x3a, 0xee, 0x7a, 0xd7, - 0xb0, 0x8e, 0x6d, 0xcd, 0x3e, 0xd0, 0xae, 0x77, 0x5f, 0x3b, 0xe9, 0xf2, 0xef, 0xc6, 0x21, 0x35, - 0xcf, 0x5a, 0x21, 0x1d, 0x81, 0xd1, 0xcf, 0xc0, 0xa0, 0x49, 0xa7, 0x11, 0xf7, 0x18, 0xad, 0x83, - 0xc3, 0xb3, 0xc9, 0xc6, 0xbd, 0xcb, 0xc5, 0xa6, 0x1e, 0x9b, 0x5f, 0xe6, 0x60, 0x77, 0xcc, 0xbc, - 0x5b, 0x53, 0xa9, 0x7d, 0xed, 0xf7, 0xb0, 0x9c, 0x85, 0x6f, 0xad, 0x84, 0xf9, 0xc9, 0xec, 0x5e, - 0xc8, 0x3a, 0x81, 0xb0, 0xdb, 0x61, 0xef, 0x93, 0xe0, 0x10, 0xc5, 0xf2, 0x26, 0x62, 0x8a, 0x29, - 0x92, 0xfd, 0x53, 0x9d, 0x54, 0x58, 0x54, 0x6d, 0xef, 0xae, 0x07, 0xbb, 0xcf, 0x75, 0x0f, 0x9f, - 0x08, 0x8f, 0xfb, 0x1a, 0x0f, 0xb3, 0x95, 0x95, 0x89, 0x7a, 0x0b, 0xa5, 0x8d, 0xe6, 0x03, 0x17, - 0xfa, 0x62, 0xfb, 0xdb, 0x6a, 0xf7, 0x5f, 0xee, 0x7b, 0x06, 0x86, 0xbd, 0x58, 0x62, 0xf3, 0xff, - 0xfb, 0xd2, 0xff, 0xdc, 0xe1, 0x27, 0x46, 0xef, 0x97, 0xe0, 0x90, 0x37, 0x9b, 0xfb, 0xd9, 0xb2, - 0xff, 0x8f, 0xf3, 0xe0, 0x3e, 0x16, 0x42, 0x61, 0xe3, 0xb4, 0xe5, 0x2b, 0x2b, 0x93, 0xcd, 0x56, - 0x52, 0xb2, 0x04, 0x1b, 0xf1, 0x47, 0x56, 0x3b, 0x23, 0x3e, 0x01, 0xd9, 0x7f, 0x68, 0x0e, 0x32, - 0x60, 0xff, 0xb3, 0xc3, 0x34, 0x2c, 0x07, 0x57, 0xe9, 0x86, 0x5c, 0x42, 0x71, 0xcb, 0xf2, 0x32, - 0xa0, 0xd6, 0xce, 0x0d, 0x5f, 0x60, 0xf4, 0xde, 0xa7, 0xa0, 0x49, 0x88, 0xfb, 0xaf, 0xf8, 0xb1, - 0x42, 0x2e, 0xf1, 0x01, 0x3e, 0x7d, 0xde, 0xf6, 0x31, 0xff, 0xed, 0x08, 0x9c, 0xf2, 0x1f, 0x0f, - 0xbd, 0xd4, 0xc4, 0xd6, 0x9e, 0x3b, 0x44, 0x4d, 0xb5, 0xa6, 0xe9, 0xfe, 0x57, 0x10, 0x47, 0xfd, - 0x13, 0x3e, 0xc5, 0x15, 0x76, 0x92, 0x3f, 0x20, 0xc1, 0xf0, 0xaa, 0x5a, 0xc3, 0x0a, 0x7e, 0xa9, - 0x89, 0x6d, 0xa7, 0xcd, 0x2d, 0xf3, 0xc3, 0x30, 0x68, 0x6c, 0x6d, 0x89, 0x33, 0xed, 0x98, 0xc2, - 0x4b, 0x44, 0xe7, 0xba, 0xd6, 0xd0, 0xd8, 0x75, 0xb0, 0x98, 0xc2, 0x0a, 0x68, 0x1a, 0x86, 0x2b, - 0x46, 0x53, 0xe7, 0x43, 0x2e, 0x13, 0x13, 0xdf, 0x5a, 0x69, 0xea, 0x6c, 0xc8, 0x11, 0x23, 0x5a, - 0xf8, 0x0a, 0xb6, 0x6c, 0xf6, 0x75, 0xc9, 0x84, 0x22, 0x8a, 0xf2, 0xd3, 0x90, 0x62, 0x92, 0xf0, - 0xc9, 0xf8, 0x28, 0x24, 0xe8, 0x4d, 0x2b, 0x4f, 0x9e, 0x21, 0x52, 0xbe, 0xc4, 0xee, 0xaa, 0x33, - 0xfe, 0x4c, 0x24, 0x56, 0x28, 0x14, 0x3a, 0x5a, 0xf9, 0x64, 0xef, 0xa8, 0xc1, 0x6c, 0xe8, 0x5a, - 0xf8, 0x37, 0xe3, 0x70, 0x88, 0x1f, 0xde, 0xa9, 0xa6, 0x76, 0x7a, 0xdb, 0x71, 0xc4, 0xdb, 0x09, - 0xe0, 0x59, 0xb0, 0x6a, 0x6a, 0xf2, 0x1e, 0xc4, 0x2e, 0x3a, 0x8e, 0x89, 0x4e, 0x41, 0xdc, 0x6a, - 0xd6, 0xb1, 0xd8, 0x0c, 0x72, 0xb7, 0xeb, 0x55, 0x53, 0x9b, 0x25, 0x08, 0x4a, 0xb3, 0x8e, 0x15, - 0x86, 0x82, 0x4a, 0x30, 0xbd, 0xd5, 0xac, 0xd7, 0xf7, 0xca, 0x55, 0x4c, 0xff, 0x5d, 0x96, 0xfb, - 0x0f, 0x27, 0xf0, 0xae, 0xa9, 0x8a, 0xcf, 0x56, 0x12, 0xc3, 0x1c, 0xa7, 0x68, 0x45, 0x8a, 0x25, - 0xfe, 0xd9, 0x44, 0x49, 0xe0, 0xc8, 0xbf, 0x1f, 0x81, 0x84, 0x60, 0x4d, 0x2f, 0x8f, 0xe3, 0x3a, - 0xae, 0x38, 0x86, 0x38, 0x4c, 0x71, 0xcb, 0x08, 0x41, 0xb4, 0xc6, 0x3b, 0x2f, 0x79, 0x71, 0x40, - 0x21, 0x05, 0x02, 0x73, 0xaf, 0xf4, 0x13, 0x98, 0xd9, 0x24, 0xfd, 0x19, 0x33, 0x0d, 0xb1, 0x6a, - 0xbb, 0x38, 0xa0, 0xd0, 0x12, 0xca, 0xc0, 0x20, 0x19, 0x34, 0x0e, 0xeb, 0x2d, 0x02, 0xe7, 0x65, - 0x74, 0x18, 0xe2, 0xa6, 0xea, 0x54, 0xd8, 0x6d, 0x3b, 0x52, 0xc1, 0x8a, 0xe8, 0x09, 0x18, 0x64, - 0xaf, 0xb2, 0xc3, 0xff, 0x8b, 0x86, 0x18, 0x83, 0x7d, 0xfe, 0x8e, 0xc8, 0xbd, 0xaa, 0x3a, 0x0e, - 0xb6, 0x74, 0xc2, 0x90, 0xa1, 0x23, 0x04, 0xb1, 0x4d, 0xa3, 0xba, 0xc7, 0xff, 0x3f, 0x0e, 0xfd, - 0xcd, 0xff, 0x21, 0x07, 0xf5, 0x87, 0x32, 0xad, 0x64, 0xff, 0x16, 0x2c, 0x25, 0x80, 0x05, 0x82, - 0x54, 0x82, 0x09, 0xb5, 0x5a, 0xd5, 0xd8, 0xbf, 0xaa, 0x29, 0x6f, 0x6a, 0x34, 0x78, 0xd8, 0xf4, - 0x9f, 0xbe, 0x75, 0xea, 0x0b, 0xe4, 0x11, 0x14, 0x38, 0x7e, 0x21, 0x09, 0x43, 0x26, 0x13, 0x4a, - 0x3e, 0x0f, 0xe3, 0x2d, 0x92, 0x12, 0xf9, 0x76, 0x34, 0xbd, 0x2a, 0xde, 0x39, 0x90, 0xdf, 0x04, - 0x46, 0x3f, 0x58, 0xc9, 0x8e, 0xa9, 0xe8, 0xef, 0xc2, 0x7b, 0x3a, 0x3f, 0x87, 0x19, 0xf5, 0x3d, - 0x87, 0x51, 0x4d, 0xad, 0x90, 0xa4, 0xfc, 0xf9, 0x23, 0x98, 0x7c, 0xeb, 0x23, 0x98, 0x1a, 0xd6, - 0xc5, 0xc4, 0x4c, 0xaa, 0x54, 0x53, 0xb3, 0xa9, 0x3b, 0x7a, 0x1f, 0xd0, 0xb4, 0xcf, 0xfb, 0x7e, - 0xd3, 0x37, 0x31, 0xb1, 0xf9, 0xfc, 0xea, 0x82, 0xeb, 0xc7, 0x5f, 0x8d, 0xc0, 0x71, 0x9f, 0x1f, - 0xfb, 0x90, 0x5b, 0xdd, 0x39, 0xdb, 0xde, 0xe3, 0xfb, 0x78, 0x9b, 0x7c, 0x09, 0x62, 0x04, 0x1f, - 0xf5, 0xf8, 0x77, 0x19, 0x99, 0xcf, 0x7f, 0xe3, 0x9f, 0xca, 0xc1, 0x03, 0xad, 0x40, 0xaf, 0x50, - 0x26, 0x85, 0xf7, 0xf7, 0x6f, 0xbf, 0xb4, 0xf7, 0xed, 0x50, 0xfb, 0xf6, 0x99, 0x31, 0x6c, 0xc3, - 0xef, 0x9e, 0xed, 0xf8, 0x76, 0x95, 0x05, 0xd3, 0xee, 0xf9, 0xd5, 0x3e, 0x22, 0x75, 0xa7, 0xa7, - 0x01, 0xdd, 0x7a, 0xb0, 0xcf, 0x4c, 0x6d, 0x17, 0x0e, 0x3f, 0x4b, 0xda, 0xf6, 0x56, 0xd0, 0x22, - 0xe4, 0x1f, 0x76, 0x0f, 0xfa, 0x24, 0xfe, 0x3f, 0xf7, 0xc4, 0x21, 0x1e, 0x78, 0xf2, 0xf1, 0xb5, - 0xe3, 0x7d, 0xb3, 0x1d, 0xa7, 0x92, 0x59, 0xdf, 0x34, 0xa2, 0xf8, 0x28, 0xe5, 0x5f, 0x95, 0xe0, - 0x48, 0x4b, 0xd3, 0x3c, 0xc6, 0xcf, 0xb7, 0x79, 0xc5, 0x70, 0xa0, 0xa4, 0x67, 0xbe, 0x8d, 0xb0, - 0xf7, 0xf7, 0x14, 0x96, 0x49, 0x11, 0x90, 0xf6, 0xcd, 0x70, 0x28, 0x28, 0xac, 0x30, 0xd3, 0xbd, - 0x30, 0x1a, 0xdc, 0x2c, 0xe6, 0xe6, 0x1a, 0x09, 0x6c, 0x17, 0xcb, 0xe5, 0xb0, 0x9d, 0x5d, 0x5d, - 0x4b, 0x90, 0x74, 0x51, 0x79, 0x76, 0xdc, 0xb7, 0xaa, 0x1e, 0xa5, 0xfc, 0x61, 0x09, 0x66, 0x82, - 0x2d, 0xf8, 0xf2, 0xa4, 0xfd, 0x09, 0x7b, 0xdb, 0xba, 0xf8, 0x75, 0x09, 0xee, 0xea, 0x22, 0x13, - 0x37, 0xc0, 0x35, 0x98, 0xf4, 0x6d, 0x12, 0x88, 0x10, 0x2e, 0xba, 0xfd, 0x54, 0xef, 0x0c, 0xd5, - 0x5d, 0x13, 0x1f, 0x23, 0x46, 0xf9, 0xec, 0xb7, 0xa7, 0x27, 0x5a, 0xeb, 0x6c, 0x65, 0xa2, 0x75, - 0x61, 0x7f, 0x1b, 0xfd, 0xe3, 0x15, 0x09, 0x1e, 0x08, 0xaa, 0xda, 0x26, 0xd5, 0xfd, 0x49, 0xf5, - 0xc3, 0xbf, 0x97, 0xe0, 0x54, 0x3f, 0xc2, 0xf1, 0x0e, 0xd9, 0x84, 0x09, 0x2f, 0x09, 0x0f, 0xf7, - 0xc7, 0xbe, 0x52, 0x7b, 0xe6, 0xa5, 0xc8, 0xe5, 0x76, 0x07, 0x0c, 0x6f, 0xf2, 0x81, 0xe5, 0xef, - 0x72, 0xd7, 0xc8, 0xc1, 0x8d, 0x5e, 0x61, 0xe4, 0xc0, 0x56, 0x6f, 0x9b, 0xbe, 0x88, 0xb4, 0xe9, - 0x0b, 0x2f, 0x6b, 0x97, 0xaf, 0xf0, 0xb8, 0xd5, 0x66, 0x7b, 0xee, 0x6d, 0x30, 0xd1, 0xc6, 0x95, - 0xf9, 0xa8, 0xde, 0x87, 0x27, 0x2b, 0xa8, 0xd5, 0x59, 0xe5, 0x3d, 0x98, 0xa6, 0xed, 0xb6, 0x31, - 0xf4, 0x9d, 0x56, 0xb9, 0xc1, 0x63, 0x4b, 0xdb, 0xa6, 0xb9, 0xee, 0x0b, 0x30, 0xc8, 0xfa, 0x99, - 0xab, 0x7b, 0x00, 0x47, 0xe1, 0x0c, 0xe4, 0x8f, 0x8b, 0x58, 0x56, 0x14, 0x62, 0xb7, 0x1f, 0x43, - 0xfd, 0xe8, 0x7a, 0x9b, 0xc6, 0x90, 0xcf, 0x18, 0xdf, 0x12, 0x51, 0xad, 0xbd, 0x74, 0xdc, 0x1c, - 0x95, 0xdb, 0x16, 0xd5, 0x98, 0x6d, 0xee, 0x6c, 0xf8, 0xfa, 0x65, 0x11, 0xbe, 0x5c, 0x9d, 0x7a, - 0x84, 0xaf, 0x9f, 0x8c, 0xe9, 0xdd, 0x40, 0xd6, 0x43, 0xcc, 0x3f, 0x8f, 0x81, 0xec, 0x07, 0x12, - 0x1c, 0xa5, 0xba, 0xf9, 0xf7, 0x28, 0xf6, 0x6b, 0xf2, 0x87, 0x00, 0xd9, 0x56, 0xa5, 0xdc, 0x76, - 0x74, 0xa7, 0x6d, 0xab, 0x72, 0x39, 0x30, 0xbf, 0x3c, 0x04, 0xa8, 0x1a, 0xd8, 0x89, 0xa2, 0xd8, - 0xec, 0x02, 0x5d, 0xba, 0xea, 0xdb, 0xe8, 0x68, 0xd3, 0x9d, 0xb1, 0xdb, 0xd0, 0x9d, 0xdf, 0x94, - 0x20, 0xdb, 0x4e, 0x65, 0xde, 0x7d, 0x1a, 0x1c, 0x0e, 0x9c, 0x1f, 0x84, 0x7b, 0xf0, 0xa1, 0x7e, - 0x76, 0x79, 0x42, 0xc3, 0xe8, 0x90, 0x85, 0xef, 0x74, 0x1e, 0x30, 0x1d, 0xf4, 0xd0, 0xd6, 0xcc, - 0xfa, 0x27, 0x36, 0x7c, 0xbe, 0xd4, 0x12, 0x57, 0xff, 0x5c, 0xe4, 0xde, 0xbb, 0x30, 0xd5, 0x41, - 0xea, 0x3b, 0x3d, 0xef, 0x6d, 0x77, 0xec, 0xcc, 0xdb, 0x9d, 0xbe, 0x3f, 0xce, 0x47, 0x42, 0xf0, - 0x72, 0xb6, 0x6f, 0x2d, 0xd6, 0xee, 0x75, 0x97, 0xfc, 0x56, 0x38, 0xd6, 0x96, 0x8a, 0xcb, 0x96, - 0x83, 0xd8, 0xb6, 0x66, 0x3b, 0x5c, 0xac, 0xfb, 0x3a, 0x89, 0x15, 0xa2, 0xa6, 0x34, 0x32, 0x82, - 0x34, 0x65, 0xbd, 0x6a, 0x18, 0x75, 0x2e, 0x86, 0x7c, 0x09, 0xc6, 0x7d, 0x30, 0xde, 0xc8, 0x39, - 0x88, 0x99, 0x06, 0xff, 0x72, 0xc1, 0xf0, 0x99, 0xe3, 0x1d, 0x37, 0xf6, 0x0d, 0xa3, 0xce, 0xd5, - 0xa6, 0xf8, 0xf2, 0x24, 0x20, 0xc6, 0x8c, 0xee, 0xf1, 0x8b, 0x26, 0xd6, 0x60, 0x22, 0x00, 0xe5, - 0x8d, 0xbc, 0xa1, 0xf3, 0x83, 0x33, 0xdf, 0x3b, 0x04, 0x71, 0xca, 0x15, 0x7d, 0x4c, 0x0a, 0x7c, - 0x5a, 0x68, 0xb6, 0x13, 0x9b, 0xf6, 0x6b, 0xe2, 0xec, 0xe9, 0xbe, 0xf1, 0x79, 0xce, 0x76, 0xea, - 0x3d, 0xff, 0xe6, 0xbb, 0x1f, 0x89, 0xdc, 0x83, 0xe4, 0xd3, 0x1d, 0x56, 0xe3, 0xbe, 0xf1, 0xf2, - 0x99, 0xc0, 0xb3, 0xf8, 0x87, 0xfb, 0x6b, 0x4a, 0x48, 0x36, 0xdb, 0x2f, 0x3a, 0x17, 0xec, 0x3c, - 0x15, 0xec, 0x2c, 0x7a, 0xac, 0xb7, 0x60, 0xa7, 0xdf, 0x11, 0x1c, 0x34, 0xef, 0x42, 0xbf, 0x2b, - 0xc1, 0x64, 0xbb, 0x25, 0x1d, 0x7a, 0xb2, 0x3f, 0x29, 0x5a, 0x53, 0x8a, 0xec, 0x53, 0x07, 0xa0, - 0xe4, 0xaa, 0xcc, 0x53, 0x55, 0xf2, 0xe8, 0xe9, 0x03, 0xa8, 0x72, 0xda, 0xbf, 0xf5, 0xff, 0xbf, - 0x24, 0x38, 0xd1, 0x75, 0x85, 0x84, 0xf2, 0xfd, 0x49, 0xd9, 0x25, 0x77, 0xca, 0x16, 0xde, 0x08, - 0x0b, 0xae, 0xf1, 0xb3, 0x54, 0xe3, 0x4b, 0x68, 0xe1, 0x20, 0x1a, 0xb7, 0x3d, 0x5f, 0x41, 0xbf, - 0x15, 0xbc, 0x74, 0xd8, 0xdd, 0x9d, 0x5a, 0x16, 0x1e, 0x3d, 0x06, 0x46, 0x6b, 0x52, 0x2b, 0x3f, - 0x4f, 0x55, 0x50, 0xd0, 0xea, 0x1b, 0xec, 0xb4, 0xd3, 0xef, 0x08, 0x06, 0xfe, 0x77, 0xa1, 0xff, - 0x29, 0xb5, 0xbf, 0x43, 0xf8, 0x44, 0x57, 0x11, 0x3b, 0x2f, 0xaa, 0xb2, 0x4f, 0xee, 0x9f, 0x90, - 0x2b, 0xd9, 0xa0, 0x4a, 0xd6, 0x10, 0xbe, 0xdd, 0x4a, 0xb6, 0xed, 0x44, 0xf4, 0x75, 0x09, 0x26, - 0xdb, 0xad, 0x49, 0x7a, 0x0c, 0xcb, 0x2e, 0x8b, 0xac, 0x1e, 0xc3, 0xb2, 0xdb, 0x02, 0x48, 0xfe, - 0x19, 0xaa, 0xfc, 0x39, 0xf4, 0x78, 0x27, 0xe5, 0xbb, 0xf6, 0x22, 0x19, 0x8b, 0x5d, 0x93, 0xfc, - 0x1e, 0x63, 0xb1, 0x9f, 0x75, 0x4c, 0x8f, 0xb1, 0xd8, 0xd7, 0x1a, 0xa3, 0xf7, 0x58, 0x74, 0x35, - 0xeb, 0xb3, 0x1b, 0x6d, 0xf4, 0x55, 0x09, 0x46, 0x02, 0x19, 0x31, 0x7a, 0xb4, 0xab, 0xa0, 0xed, - 0x16, 0x0c, 0xd9, 0x33, 0xfb, 0x21, 0xe1, 0xba, 0x2c, 0x50, 0x5d, 0xe6, 0x50, 0xfe, 0x20, 0xba, - 0x04, 0x8f, 0x51, 0xbf, 0x29, 0xc1, 0x44, 0x9b, 0x2c, 0xb3, 0xc7, 0x28, 0xec, 0x9c, 0x34, 0x67, - 0x9f, 0xdc, 0x3f, 0x21, 0xd7, 0xea, 0x02, 0xd5, 0xea, 0x2d, 0xe8, 0xcd, 0x07, 0xd1, 0xca, 0x37, - 0x3f, 0xdf, 0xf4, 0xae, 0x64, 0xf9, 0xda, 0x41, 0xe7, 0xf6, 0x29, 0x98, 0x50, 0xe8, 0x89, 0x7d, - 0xd3, 0x71, 0x7d, 0x9e, 0xa3, 0xfa, 0x3c, 0x8b, 0x56, 0xde, 0x98, 0x3e, 0xad, 0xd3, 0xfa, 0x17, - 0x5b, 0x1f, 0x07, 0x76, 0xf7, 0xa2, 0xb6, 0xc9, 0x6a, 0xf6, 0xb1, 0x7d, 0xd1, 0x70, 0xa5, 0x9e, - 0xa4, 0x4a, 0x9d, 0x41, 0x8f, 0x74, 0x52, 0xca, 0x77, 0xef, 0x4e, 0xd3, 0xb7, 0x8c, 0xd3, 0xef, - 0x60, 0x29, 0xf0, 0xbb, 0xd0, 0xbb, 0xc5, 0x9d, 0xa7, 0x93, 0x5d, 0xdb, 0xf5, 0xe5, 0xb1, 0xd9, - 0x07, 0xfa, 0xc0, 0xe4, 0x72, 0xdd, 0x43, 0xe5, 0x9a, 0x42, 0xc7, 0x3b, 0xc9, 0x45, 0x72, 0x59, - 0xf4, 0x41, 0xc9, 0xbd, 0x26, 0x79, 0xaa, 0x3b, 0x6f, 0x7f, 0xb2, 0x9b, 0x7d, 0xb0, 0x2f, 0x5c, - 0x2e, 0xc9, 0x7d, 0x54, 0x92, 0x19, 0x34, 0xd5, 0x51, 0x12, 0x96, 0xfa, 0xde, 0xee, 0x4b, 0x05, - 0xd7, 0x8f, 0xc0, 0x74, 0x87, 0x16, 0x9d, 0xdd, 0x1e, 0x67, 0x5c, 0x5d, 0xde, 0xc8, 0xf6, 0x7c, - 0x03, 0x7b, 0xbb, 0xbf, 0xed, 0xda, 0xe7, 0x81, 0xd8, 0x6f, 0xc7, 0x00, 0x2d, 0xd9, 0xb5, 0x39, - 0x0b, 0xb3, 0xff, 0x33, 0xc9, 0x47, 0x79, 0xe8, 0xf1, 0x97, 0xf4, 0x86, 0x1e, 0x7f, 0x2d, 0x05, - 0x9e, 0x53, 0x45, 0xf6, 0xf7, 0x64, 0xb3, 0xef, 0x37, 0x55, 0xd1, 0x1f, 0xcb, 0x9b, 0xaa, 0xf6, - 0x57, 0xae, 0x63, 0xb7, 0xef, 0x6d, 0x46, 0xfc, 0xa0, 0xef, 0x53, 0xf8, 0x53, 0xc9, 0xc1, 0x2e, - 0x4f, 0x25, 0x33, 0x1d, 0xdf, 0x43, 0x72, 0x6a, 0x74, 0x56, 0x7c, 0xe9, 0x74, 0xa8, 0xbf, 0x4b, - 0xb2, 0xfc, 0x53, 0xa8, 0xde, 0x16, 0xc2, 0x71, 0xc8, 0xb6, 0xba, 0x93, 0x3b, 0xa8, 0x3f, 0x12, - 0x85, 0xf4, 0x92, 0x5d, 0x2b, 0x55, 0x35, 0xe7, 0x0e, 0xf9, 0xda, 0xd3, 0x9d, 0xdf, 0xbb, 0xa0, - 0x5b, 0x37, 0xa7, 0x47, 0x99, 0x4d, 0xbb, 0x58, 0xb2, 0x01, 0x63, 0xa1, 0x57, 0xc6, 0xdc, 0xb3, - 0x8a, 0x07, 0x79, 0xec, 0x1c, 0x62, 0x25, 0xd3, 0xe7, 0x09, 0x3e, 0xff, 0x46, 0xbb, 0xed, 0x9d, - 0x99, 0x39, 0xd4, 0xc5, 0x3b, 0xf9, 0x38, 0xd0, 0xeb, 0xb3, 0x2c, 0x64, 0xc2, 0x9d, 0xe2, 0xf6, - 0xd8, 0x1f, 0x49, 0x30, 0xbc, 0x64, 0x8b, 0x54, 0x10, 0xff, 0x94, 0x3e, 0x4d, 0x7a, 0xc2, 0xfd, - 0x4c, 0x78, 0xb4, 0x3f, 0xbf, 0x15, 0x9f, 0x0e, 0xf7, 0x8c, 0x70, 0x08, 0x26, 0x7c, 0x7a, 0xba, - 0xfa, 0xff, 0x4e, 0x84, 0xc6, 0xc7, 0x02, 0xae, 0x69, 0xba, 0x9b, 0x45, 0xe2, 0xbf, 0xa8, 0x0f, - 0x2f, 0x3c, 0x3b, 0xc7, 0x0e, 0x6a, 0xe7, 0x1d, 0x1a, 0x20, 0x42, 0xf6, 0x74, 0x37, 0xbe, 0x96, - 0x5a, 0x9f, 0x05, 0x49, 0xfb, 0xf8, 0xe2, 0x4e, 0xe8, 0xf1, 0x8f, 0xfc, 0xba, 0x04, 0x23, 0x4b, - 0x76, 0x6d, 0x43, 0xaf, 0xfe, 0x3f, 0xef, 0xbf, 0x5b, 0x70, 0x28, 0xa0, 0xe9, 0x1d, 0x32, 0xe9, - 0x99, 0x57, 0x62, 0x10, 0x5d, 0xb2, 0x6b, 0xe8, 0x25, 0x18, 0x0b, 0x27, 0x0d, 0x1d, 0x73, 0xc1, - 0xd6, 0x19, 0xa1, 0xf3, 0x7a, 0xad, 0xf3, 0xec, 0x81, 0x76, 0x60, 0x24, 0x38, 0x73, 0x9c, 0xec, - 0xc2, 0x24, 0x80, 0x99, 0x7d, 0xa4, 0x5f, 0x4c, 0xb7, 0xb1, 0xb7, 0x43, 0xc2, 0x0d, 0x7a, 0x77, - 0x77, 0xa1, 0x16, 0x48, 0x9d, 0xb3, 0xdb, 0x36, 0x61, 0x85, 0x58, 0x2f, 0x1c, 0x52, 0xba, 0x59, - 0x2f, 0x84, 0xdb, 0xd5, 0x7a, 0x9d, 0x86, 0xd6, 0x26, 0x80, 0x6f, 0x1c, 0xdc, 0xdb, 0x85, 0x83, - 0x87, 0x96, 0x7d, 0xb8, 0x2f, 0x34, 0xf7, 0xd0, 0xe9, 0x36, 0x27, 0xe3, 0xff, 0x37, 0x00, 0x00, - 0xff, 0xff, 0xb1, 0x48, 0x2a, 0x05, 0xdd, 0x97, 0x00, 0x00, + // 10345 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x5c, 0xd7, + 0x79, 0x18, 0xee, 0xee, 0x02, 0xd8, 0xfd, 0xb0, 0x00, 0x16, 0x07, 0x20, 0xb8, 0x5c, 0x92, 0x00, + 0x74, 0xf5, 0x20, 0x45, 0x89, 0xa0, 0x44, 0x89, 0x94, 0xb4, 0xb4, 0x25, 0xef, 0x02, 0x4b, 0x10, + 0x22, 0x5e, 0xba, 0x00, 0x29, 0x59, 0x76, 0xba, 0x73, 0xb1, 0x7b, 0xb0, 0xb8, 0xc2, 0xdd, 0x7b, + 0xaf, 0xee, 0xbd, 0x4b, 0x12, 0xb4, 0xdd, 0x91, 0x1f, 0x75, 0x6d, 0x65, 0xd2, 0xd8, 0x75, 0xa7, + 0xb1, 0x65, 0xd3, 0x95, 0xe3, 0xb4, 0x4e, 0x6d, 0xb7, 0xb1, 0x63, 0xd7, 0x6d, 0xda, 0xce, 0xd4, + 0xee, 0x4c, 0x1a, 0xdb, 0xad, 0x33, 0x76, 0x9b, 0x69, 0xd3, 0x4c, 0x86, 0x4e, 0x65, 0x4d, 0xea, + 0x3a, 0x6e, 0xeb, 0x30, 0x6e, 0x9b, 0x8e, 0x7f, 0xb4, 0x73, 0x5e, 0xf7, 0xb5, 0x4f, 0x40, 0xa4, + 0xed, 0x34, 0xfd, 0x43, 0xee, 0x39, 0xe7, 0xfb, 0xbe, 0xf3, 0x9d, 0xef, 0x7c, 0xaf, 0xf3, 0xba, + 0x80, 0x2f, 0x9e, 0x83, 0x99, 0x9a, 0x69, 0xd6, 0x74, 0x7c, 0xca, 0xb2, 0x4d, 0xd7, 0xdc, 0x6c, + 0x6c, 0x9d, 0xaa, 0x62, 0xa7, 0x62, 0x6b, 0x96, 0x6b, 0xda, 0xb3, 0xb4, 0x0e, 0x8d, 0x32, 0x88, + 0x59, 0x01, 0x21, 0x2f, 0xc3, 0xd8, 0x79, 0x4d, 0xc7, 0xf3, 0x1e, 0xe0, 0x3a, 0x76, 0xd1, 0xe3, + 0x90, 0xd8, 0xd2, 0x74, 0x9c, 0x95, 0x66, 0xe2, 0xc7, 0x87, 0x4e, 0xdf, 0x33, 0x1b, 0x41, 0x9a, + 0x0d, 0x63, 0xac, 0x91, 0x6a, 0x85, 0x62, 0xc8, 0xaf, 0x27, 0x60, 0xbc, 0x45, 0x2b, 0x42, 0x90, + 0x30, 0xd4, 0x3a, 0xa1, 0x28, 0x1d, 0x4f, 0x29, 0xf4, 0x37, 0xca, 0xc2, 0xa0, 0xa5, 0x56, 0x76, + 0xd4, 0x1a, 0xce, 0xc6, 0x68, 0xb5, 0x28, 0xa2, 0x29, 0x80, 0x2a, 0xb6, 0xb0, 0x51, 0xc5, 0x46, + 0x65, 0x37, 0x1b, 0x9f, 0x89, 0x1f, 0x4f, 0x29, 0x81, 0x1a, 0xf4, 0x00, 0x8c, 0x59, 0x8d, 0x4d, + 0x5d, 0xab, 0x94, 0x03, 0x60, 0x30, 0x13, 0x3f, 0xde, 0xaf, 0x64, 0x58, 0xc3, 0xbc, 0x0f, 0x7c, + 0x0c, 0x46, 0xaf, 0x62, 0x75, 0x27, 0x08, 0x3a, 0x44, 0x41, 0x47, 0x48, 0x75, 0x00, 0x70, 0x0e, + 0xd2, 0x75, 0xec, 0x38, 0x6a, 0x0d, 0x97, 0xdd, 0x5d, 0x0b, 0x67, 0x13, 0x74, 0xf4, 0x33, 0x4d, + 0xa3, 0x8f, 0x8e, 0x7c, 0x88, 0x63, 0x6d, 0xec, 0x5a, 0x18, 0x15, 0x20, 0x85, 0x8d, 0x46, 0x9d, + 0x51, 0xe8, 0x6f, 0x23, 0xbf, 0x92, 0xd1, 0xa8, 0x47, 0xa9, 0x24, 0x09, 0x1a, 0x27, 0x31, 0xe8, + 0x60, 0xfb, 0x8a, 0x56, 0xc1, 0xd9, 0x01, 0x4a, 0xe0, 0x58, 0x13, 0x81, 0x75, 0xd6, 0x1e, 0xa5, + 0x21, 0xf0, 0xd0, 0x1c, 0xa4, 0xf0, 0x35, 0x17, 0x1b, 0x8e, 0x66, 0x1a, 0xd9, 0x41, 0x4a, 0xe4, + 0xde, 0x16, 0xb3, 0x88, 0xf5, 0x6a, 0x94, 0x84, 0x8f, 0x87, 0xce, 0xc2, 0xa0, 0x69, 0xb9, 0x9a, + 0x69, 0x38, 0xd9, 0xe4, 0x8c, 0x74, 0x7c, 0xe8, 0xf4, 0x91, 0x96, 0x8a, 0xb0, 0xca, 0x60, 0x14, + 0x01, 0x8c, 0x16, 0x21, 0xe3, 0x98, 0x0d, 0xbb, 0x82, 0xcb, 0x15, 0xb3, 0x8a, 0xcb, 0x9a, 0xb1, + 0x65, 0x66, 0x53, 0x94, 0xc0, 0x74, 0xf3, 0x40, 0x28, 0xe0, 0x9c, 0x59, 0xc5, 0x8b, 0xc6, 0x96, + 0xa9, 0x8c, 0x38, 0xa1, 0x32, 0x9a, 0x84, 0x01, 0x67, 0xd7, 0x70, 0xd5, 0x6b, 0xd9, 0x34, 0xd5, + 0x10, 0x5e, 0x92, 0x7f, 0x6b, 0x00, 0x46, 0x7b, 0x51, 0xb1, 0x73, 0xd0, 0xbf, 0x45, 0x46, 0x99, + 0x8d, 0xed, 0x45, 0x06, 0x0c, 0x27, 0x2c, 0xc4, 0x81, 0x7d, 0x0a, 0xb1, 0x00, 0x43, 0x06, 0x76, + 0x5c, 0x5c, 0x65, 0x1a, 0x11, 0xef, 0x51, 0xa7, 0x80, 0x21, 0x35, 0xab, 0x54, 0x62, 0x5f, 0x2a, + 0xf5, 0x1c, 0x8c, 0x7a, 0x2c, 0x95, 0x6d, 0xd5, 0xa8, 0x09, 0xdd, 0x3c, 0xd5, 0x8d, 0x93, 0xd9, + 0x92, 0xc0, 0x53, 0x08, 0x9a, 0x32, 0x82, 0x43, 0x65, 0x34, 0x0f, 0x60, 0x1a, 0xd8, 0xdc, 0x2a, + 0x57, 0x71, 0x45, 0xcf, 0x26, 0xdb, 0x48, 0x69, 0x95, 0x80, 0x34, 0x49, 0xc9, 0x64, 0xb5, 0x15, + 0x1d, 0x3d, 0xe1, 0xab, 0xda, 0x60, 0x1b, 0x4d, 0x59, 0x66, 0x46, 0xd6, 0xa4, 0x6d, 0x97, 0x60, + 0xc4, 0xc6, 0x44, 0xef, 0x71, 0x95, 0x8f, 0x2c, 0x45, 0x99, 0x98, 0xed, 0x3a, 0x32, 0x85, 0xa3, + 0xb1, 0x81, 0x0d, 0xdb, 0xc1, 0x22, 0xba, 0x1b, 0xbc, 0x8a, 0x32, 0x55, 0x2b, 0xa0, 0x5e, 0x28, + 0x2d, 0x2a, 0x57, 0xd4, 0x3a, 0xce, 0x5d, 0x87, 0x91, 0xb0, 0x78, 0xd0, 0x04, 0xf4, 0x3b, 0xae, + 0x6a, 0xbb, 0x54, 0x0b, 0xfb, 0x15, 0x56, 0x40, 0x19, 0x88, 0x63, 0xa3, 0x4a, 0xbd, 0x5c, 0xbf, + 0x42, 0x7e, 0xa2, 0xb7, 0xf8, 0x03, 0x8e, 0xd3, 0x01, 0xdf, 0xd7, 0x3c, 0xa3, 0x21, 0xca, 0xd1, + 0x71, 0xe7, 0x1e, 0x83, 0xe1, 0xd0, 0x00, 0x7a, 0xed, 0x5a, 0x7e, 0x27, 0x1c, 0x68, 0x49, 0x1a, + 0x3d, 0x07, 0x13, 0x0d, 0x43, 0x33, 0x5c, 0x6c, 0x5b, 0x36, 0x26, 0x1a, 0xcb, 0xba, 0xca, 0xfe, + 0xe7, 0xc1, 0x36, 0x3a, 0x77, 0x29, 0x08, 0xcd, 0xa8, 0x28, 0xe3, 0x8d, 0xe6, 0xca, 0x13, 0xa9, + 0xe4, 0xf7, 0x07, 0x33, 0x2f, 0xbd, 0xf4, 0xd2, 0x4b, 0x31, 0xf9, 0x6b, 0x03, 0x30, 0xd1, 0xca, + 0x66, 0x5a, 0x9a, 0xef, 0x24, 0x0c, 0x18, 0x8d, 0xfa, 0x26, 0xb6, 0xa9, 0x90, 0xfa, 0x15, 0x5e, + 0x42, 0x05, 0xe8, 0xd7, 0xd5, 0x4d, 0xac, 0x67, 0x13, 0x33, 0xd2, 0xf1, 0x91, 0xd3, 0x0f, 0xf4, + 0x64, 0x95, 0xb3, 0x4b, 0x04, 0x45, 0x61, 0x98, 0xe8, 0x49, 0x48, 0x70, 0x17, 0x4d, 0x28, 0x9c, + 0xe8, 0x8d, 0x02, 0xb1, 0x25, 0x85, 0xe2, 0xa1, 0xc3, 0x90, 0x22, 0xff, 0x33, 0xdd, 0x18, 0xa0, + 0x3c, 0x27, 0x49, 0x05, 0xd1, 0x0b, 0x94, 0x83, 0x24, 0x35, 0x93, 0x2a, 0x16, 0xa1, 0xcd, 0x2b, + 0x13, 0xc5, 0xaa, 0xe2, 0x2d, 0xb5, 0xa1, 0xbb, 0xe5, 0x2b, 0xaa, 0xde, 0xc0, 0x54, 0xe1, 0x53, + 0x4a, 0x9a, 0x57, 0x5e, 0x26, 0x75, 0x68, 0x1a, 0x86, 0x98, 0x55, 0x69, 0x46, 0x15, 0x5f, 0xa3, + 0xde, 0xb3, 0x5f, 0x61, 0x86, 0xb6, 0x48, 0x6a, 0x48, 0xf7, 0x2f, 0x38, 0xa6, 0x21, 0x54, 0x93, + 0x76, 0x41, 0x2a, 0x68, 0xf7, 0x8f, 0x45, 0x1d, 0xf7, 0xd1, 0xd6, 0xc3, 0x6b, 0xb2, 0xa5, 0x63, + 0x30, 0x4a, 0x21, 0x1e, 0xe1, 0x53, 0xaf, 0xea, 0xd9, 0xb1, 0x19, 0xe9, 0x78, 0x52, 0x19, 0x61, + 0xd5, 0xab, 0xbc, 0x56, 0xfe, 0x4a, 0x0c, 0x12, 0xd4, 0xb1, 0x8c, 0xc2, 0xd0, 0xc6, 0x5b, 0xd7, + 0x4a, 0xe5, 0xf9, 0xd5, 0x4b, 0xc5, 0xa5, 0x52, 0x46, 0x42, 0x23, 0x00, 0xb4, 0xe2, 0xfc, 0xd2, + 0x6a, 0x61, 0x23, 0x13, 0xf3, 0xca, 0x8b, 0x2b, 0x1b, 0x67, 0x1f, 0xcd, 0xc4, 0x3d, 0x84, 0x4b, + 0xac, 0x22, 0x11, 0x04, 0x78, 0xe4, 0x74, 0xa6, 0x1f, 0x65, 0x20, 0xcd, 0x08, 0x2c, 0x3e, 0x57, + 0x9a, 0x3f, 0xfb, 0x68, 0x66, 0x20, 0x5c, 0xf3, 0xc8, 0xe9, 0xcc, 0x20, 0x1a, 0x86, 0x14, 0xad, + 0x29, 0xae, 0xae, 0x2e, 0x65, 0x92, 0x1e, 0xcd, 0xf5, 0x0d, 0x65, 0x71, 0x65, 0x21, 0x93, 0xf2, + 0x68, 0x2e, 0x28, 0xab, 0x97, 0xd6, 0x32, 0xe0, 0x51, 0x58, 0x2e, 0xad, 0xaf, 0x17, 0x16, 0x4a, + 0x99, 0x21, 0x0f, 0xa2, 0xf8, 0xd6, 0x8d, 0xd2, 0x7a, 0x26, 0x1d, 0x62, 0xeb, 0x91, 0xd3, 0x99, + 0x61, 0xaf, 0x8b, 0xd2, 0xca, 0xa5, 0xe5, 0xcc, 0x08, 0x1a, 0x83, 0x61, 0xd6, 0x85, 0x60, 0x62, + 0x34, 0x52, 0x75, 0xf6, 0xd1, 0x4c, 0xc6, 0x67, 0x84, 0x51, 0x19, 0x0b, 0x55, 0x9c, 0x7d, 0x34, + 0x83, 0xe4, 0x39, 0xe8, 0xa7, 0x6a, 0x88, 0x10, 0x8c, 0x2c, 0x15, 0x8a, 0xa5, 0xa5, 0xf2, 0xea, + 0xda, 0xc6, 0xe2, 0xea, 0x4a, 0x61, 0x29, 0x23, 0xf9, 0x75, 0x4a, 0xe9, 0x99, 0x4b, 0x8b, 0x4a, + 0x69, 0x3e, 0x13, 0x0b, 0xd6, 0xad, 0x95, 0x0a, 0x1b, 0xa5, 0xf9, 0x4c, 0x5c, 0xae, 0xc0, 0x44, + 0x2b, 0x87, 0xda, 0xd2, 0x84, 0x02, 0xba, 0x10, 0x6b, 0xa3, 0x0b, 0x94, 0x56, 0x54, 0x17, 0xe4, + 0xef, 0xc5, 0x60, 0xbc, 0x45, 0x50, 0x69, 0xd9, 0xc9, 0x53, 0xd0, 0xcf, 0x74, 0x99, 0x85, 0xd9, + 0xfb, 0x5b, 0x46, 0x27, 0xaa, 0xd9, 0x4d, 0xa1, 0x96, 0xe2, 0x05, 0x53, 0x8d, 0x78, 0x9b, 0x54, + 0x83, 0x90, 0x68, 0x52, 0xd8, 0x5f, 0x68, 0x72, 0xfe, 0x2c, 0x3e, 0x9e, 0xed, 0x25, 0x3e, 0xd2, + 0xba, 0xbd, 0x05, 0x81, 0xfe, 0x16, 0x41, 0xe0, 0x1c, 0x8c, 0x35, 0x11, 0xea, 0xd9, 0x19, 0xbf, + 0x57, 0x82, 0x6c, 0x3b, 0xe1, 0x74, 0x71, 0x89, 0xb1, 0x90, 0x4b, 0x3c, 0x17, 0x95, 0xe0, 0x5d, + 0xed, 0x27, 0xa1, 0x69, 0xae, 0x3f, 0x23, 0xc1, 0x64, 0xeb, 0x94, 0xb2, 0x25, 0x0f, 0x4f, 0xc2, + 0x40, 0x1d, 0xbb, 0xdb, 0xa6, 0x48, 0xab, 0xee, 0x6b, 0x11, 0xac, 0x49, 0x73, 0x74, 0xb2, 0x39, + 0x56, 0x30, 0xda, 0xc7, 0xdb, 0xe5, 0x85, 0x8c, 0x9b, 0x26, 0x4e, 0x3f, 0x18, 0x83, 0x03, 0x2d, + 0x89, 0xb7, 0x64, 0xf4, 0x28, 0x80, 0x66, 0x58, 0x0d, 0x97, 0xa5, 0x4e, 0xcc, 0x13, 0xa7, 0x68, + 0x0d, 0x75, 0x5e, 0xc4, 0xcb, 0x36, 0x5c, 0xaf, 0x3d, 0x4e, 0xdb, 0x81, 0x55, 0x51, 0x80, 0xc7, + 0x7d, 0x46, 0x13, 0x94, 0xd1, 0xa9, 0x36, 0x23, 0x6d, 0x52, 0xcc, 0x87, 0x20, 0x53, 0xd1, 0x35, + 0x6c, 0xb8, 0x65, 0xc7, 0xb5, 0xb1, 0x5a, 0xd7, 0x8c, 0x1a, 0x0d, 0x35, 0xc9, 0x7c, 0xff, 0x96, + 0xaa, 0x3b, 0x58, 0x19, 0x65, 0xcd, 0xeb, 0xa2, 0x95, 0x60, 0x50, 0x05, 0xb2, 0x03, 0x18, 0x03, + 0x21, 0x0c, 0xd6, 0xec, 0x61, 0xc8, 0x1f, 0x4e, 0xc1, 0x50, 0x20, 0x01, 0x47, 0x77, 0x41, 0xfa, + 0x05, 0xf5, 0x8a, 0x5a, 0x16, 0x8b, 0x2a, 0x26, 0x89, 0x21, 0x52, 0xb7, 0xc6, 0x17, 0x56, 0x0f, + 0xc1, 0x04, 0x05, 0x31, 0x1b, 0x2e, 0xb6, 0xcb, 0x15, 0x5d, 0x75, 0x1c, 0x2a, 0xb4, 0x24, 0x05, + 0x45, 0xa4, 0x6d, 0x95, 0x34, 0xcd, 0x89, 0x16, 0x74, 0x06, 0xc6, 0x29, 0x46, 0xbd, 0xa1, 0xbb, + 0x9a, 0xa5, 0xe3, 0x32, 0x59, 0xe6, 0x39, 0x34, 0xe4, 0x78, 0x9c, 0x8d, 0x11, 0x88, 0x65, 0x0e, + 0x40, 0x38, 0x72, 0xd0, 0x3c, 0x1c, 0xa5, 0x68, 0x35, 0x6c, 0x60, 0x5b, 0x75, 0x71, 0x19, 0xbf, + 0xd8, 0x50, 0x75, 0xa7, 0xac, 0x1a, 0xd5, 0xf2, 0xb6, 0xea, 0x6c, 0x67, 0x27, 0x08, 0x81, 0x62, + 0x2c, 0x2b, 0x29, 0x87, 0x08, 0xe0, 0x02, 0x87, 0x2b, 0x51, 0xb0, 0x82, 0x51, 0xbd, 0xa0, 0x3a, + 0xdb, 0x28, 0x0f, 0x93, 0x94, 0x8a, 0xe3, 0xda, 0x9a, 0x51, 0x2b, 0x57, 0xb6, 0x71, 0x65, 0xa7, + 0xdc, 0x70, 0xb7, 0x1e, 0xcf, 0x1e, 0x0e, 0xf6, 0x4f, 0x39, 0x5c, 0xa7, 0x30, 0x73, 0x04, 0xe4, + 0x92, 0xbb, 0xf5, 0x38, 0x5a, 0x87, 0x34, 0x99, 0x8c, 0xba, 0x76, 0x1d, 0x97, 0xb7, 0x4c, 0x9b, + 0xc6, 0xd0, 0x91, 0x16, 0xae, 0x29, 0x20, 0xc1, 0xd9, 0x55, 0x8e, 0xb0, 0x6c, 0x56, 0x71, 0xbe, + 0x7f, 0x7d, 0xad, 0x54, 0x9a, 0x57, 0x86, 0x04, 0x95, 0xf3, 0xa6, 0x4d, 0x14, 0xaa, 0x66, 0x7a, + 0x02, 0x1e, 0x62, 0x0a, 0x55, 0x33, 0x85, 0x78, 0xcf, 0xc0, 0x78, 0xa5, 0xc2, 0xc6, 0xac, 0x55, + 0xca, 0x7c, 0x31, 0xe6, 0x64, 0x33, 0x21, 0x61, 0x55, 0x2a, 0x0b, 0x0c, 0x80, 0xeb, 0xb8, 0x83, + 0x9e, 0x80, 0x03, 0xbe, 0xb0, 0x82, 0x88, 0x63, 0x4d, 0xa3, 0x8c, 0xa2, 0x9e, 0x81, 0x71, 0x6b, + 0xb7, 0x19, 0x11, 0x85, 0x7a, 0xb4, 0x76, 0xa3, 0x68, 0x8f, 0xc1, 0x84, 0xb5, 0x6d, 0x35, 0xe3, + 0x9d, 0x08, 0xe2, 0x21, 0x6b, 0xdb, 0x8a, 0x22, 0xde, 0x4b, 0x57, 0xe6, 0x36, 0xae, 0xa8, 0x2e, + 0xae, 0x66, 0x0f, 0x06, 0xc1, 0x03, 0x0d, 0x68, 0x16, 0x32, 0x95, 0x4a, 0x19, 0x1b, 0xea, 0xa6, + 0x8e, 0xcb, 0xaa, 0x8d, 0x0d, 0xd5, 0xc9, 0x4e, 0x53, 0xe0, 0x84, 0x6b, 0x37, 0xb0, 0x32, 0x52, + 0xa9, 0x94, 0x68, 0x63, 0x81, 0xb6, 0xa1, 0x13, 0x30, 0x66, 0x6e, 0xbe, 0x50, 0x61, 0x1a, 0x59, + 0xb6, 0x6c, 0xbc, 0xa5, 0x5d, 0xcb, 0xde, 0x43, 0xc5, 0x3b, 0x4a, 0x1a, 0xa8, 0x3e, 0xae, 0xd1, + 0x6a, 0x74, 0x3f, 0x64, 0x2a, 0xce, 0xb6, 0x6a, 0x5b, 0xd4, 0x25, 0x3b, 0x96, 0x5a, 0xc1, 0xd9, + 0x7b, 0x19, 0x28, 0xab, 0x5f, 0x11, 0xd5, 0xc4, 0x22, 0x9c, 0xab, 0xda, 0x96, 0x2b, 0x28, 0x1e, + 0x63, 0x16, 0x41, 0xeb, 0x38, 0xb5, 0xe3, 0x90, 0x21, 0x92, 0x08, 0x75, 0x7c, 0x9c, 0x82, 0x8d, + 0x58, 0xdb, 0x56, 0xb0, 0xdf, 0xbb, 0x61, 0x98, 0x40, 0xfa, 0x9d, 0xde, 0xcf, 0x12, 0x37, 0x6b, + 0x3b, 0xd0, 0xe3, 0xa3, 0x30, 0x49, 0x80, 0xea, 0xd8, 0x55, 0xab, 0xaa, 0xab, 0x06, 0xa0, 0x1f, + 0xa4, 0xd0, 0x44, 0xec, 0xcb, 0xbc, 0x31, 0xc4, 0xa7, 0xdd, 0xd8, 0xdc, 0xf5, 0x14, 0xeb, 0x24, + 0xe3, 0x93, 0xd4, 0x09, 0xd5, 0xba, 0x63, 0xc9, 0xb9, 0x9c, 0x87, 0x74, 0x50, 0xef, 0x51, 0x0a, + 0x98, 0xe6, 0x67, 0x24, 0x92, 0x04, 0xcd, 0xad, 0xce, 0x93, 0xf4, 0xe5, 0xf9, 0x52, 0x26, 0x46, + 0xd2, 0xa8, 0xa5, 0xc5, 0x8d, 0x52, 0x59, 0xb9, 0xb4, 0xb2, 0xb1, 0xb8, 0x5c, 0xca, 0xc4, 0x03, + 0x89, 0xfd, 0xd3, 0x89, 0xe4, 0x7d, 0x99, 0x63, 0xf2, 0x77, 0x62, 0x30, 0x12, 0x5e, 0xa9, 0xa1, + 0x37, 0xc1, 0x41, 0xb1, 0xad, 0xe2, 0x60, 0xb7, 0x7c, 0x55, 0xb3, 0xa9, 0x41, 0xd6, 0x55, 0x16, + 0x1c, 0x3d, 0xfd, 0x99, 0xe0, 0x50, 0xeb, 0xd8, 0x7d, 0x56, 0xb3, 0x89, 0xb9, 0xd5, 0x55, 0x17, + 0x2d, 0xc1, 0xb4, 0x61, 0x96, 0x1d, 0x57, 0x35, 0xaa, 0xaa, 0x5d, 0x2d, 0xfb, 0x1b, 0x5a, 0x65, + 0xb5, 0x52, 0xc1, 0x8e, 0x63, 0xb2, 0x40, 0xe8, 0x51, 0x39, 0x62, 0x98, 0xeb, 0x1c, 0xd8, 0x8f, + 0x10, 0x05, 0x0e, 0x1a, 0x51, 0xdf, 0x78, 0x3b, 0xf5, 0x3d, 0x0c, 0xa9, 0xba, 0x6a, 0x95, 0xb1, + 0xe1, 0xda, 0xbb, 0x34, 0x3f, 0x4f, 0x2a, 0xc9, 0xba, 0x6a, 0x95, 0x48, 0xf9, 0xa7, 0xb2, 0x4c, + 0x7a, 0x3a, 0x91, 0x4c, 0x66, 0x52, 0x4f, 0x27, 0x92, 0xa9, 0x0c, 0xc8, 0xaf, 0xc5, 0x21, 0x1d, + 0xcc, 0xd7, 0xc9, 0xf2, 0xa7, 0x42, 0x23, 0x96, 0x44, 0x7d, 0xda, 0xdd, 0x1d, 0xb3, 0xfb, 0xd9, + 0x39, 0x12, 0xca, 0xf2, 0x03, 0x2c, 0x39, 0x56, 0x18, 0x26, 0x49, 0x23, 0x88, 0xb2, 0x61, 0x96, + 0x8c, 0x24, 0x15, 0x5e, 0x42, 0x0b, 0x30, 0xf0, 0x82, 0x43, 0x69, 0x0f, 0x50, 0xda, 0xf7, 0x74, + 0xa6, 0xfd, 0xf4, 0x3a, 0x25, 0x9e, 0x7a, 0x7a, 0xbd, 0xbc, 0xb2, 0xaa, 0x2c, 0x17, 0x96, 0x14, + 0x8e, 0x8e, 0x0e, 0x41, 0x42, 0x57, 0xaf, 0xef, 0x86, 0x83, 0x1e, 0xad, 0xea, 0x75, 0x12, 0x0e, + 0x41, 0xe2, 0x2a, 0x56, 0x77, 0xc2, 0xa1, 0x86, 0x56, 0xdd, 0x41, 0x63, 0x38, 0x05, 0xfd, 0x54, + 0x5e, 0x08, 0x80, 0x4b, 0x2c, 0xd3, 0x87, 0x92, 0x90, 0x98, 0x5b, 0x55, 0x88, 0x41, 0x64, 0x20, + 0xcd, 0x6a, 0xcb, 0x6b, 0x8b, 0xa5, 0xb9, 0x52, 0x26, 0x26, 0x9f, 0x81, 0x01, 0x26, 0x04, 0x62, + 0x2c, 0x9e, 0x18, 0x32, 0x7d, 0xbc, 0xc8, 0x69, 0x48, 0xa2, 0xf5, 0xd2, 0x72, 0xb1, 0xa4, 0x64, + 0x62, 0xe1, 0xa9, 0x4e, 0x64, 0xfa, 0x65, 0x07, 0xd2, 0xc1, 0x3c, 0xfc, 0xa7, 0xb3, 0x18, 0xff, + 0xaa, 0x04, 0x43, 0x81, 0xbc, 0x9a, 0x24, 0x44, 0xaa, 0xae, 0x9b, 0x57, 0xcb, 0xaa, 0xae, 0xa9, + 0x0e, 0x57, 0x0d, 0xa0, 0x55, 0x05, 0x52, 0xd3, 0xeb, 0xd4, 0xfd, 0x94, 0x4c, 0xa4, 0x3f, 0x33, + 0x20, 0x7f, 0x52, 0x82, 0x4c, 0x34, 0xb1, 0x8d, 0xb0, 0x29, 0xfd, 0x2c, 0xd9, 0x94, 0x3f, 0x21, + 0xc1, 0x48, 0x38, 0x9b, 0x8d, 0xb0, 0x77, 0xd7, 0xcf, 0x94, 0xbd, 0x3f, 0x8a, 0xc1, 0x70, 0x28, + 0x87, 0xed, 0x95, 0xbb, 0x17, 0x61, 0x4c, 0xab, 0xe2, 0xba, 0x65, 0xba, 0xd8, 0xa8, 0xec, 0x96, + 0x75, 0x7c, 0x05, 0xeb, 0x59, 0x99, 0x3a, 0x8d, 0x53, 0x9d, 0xb3, 0xe4, 0xd9, 0x45, 0x1f, 0x6f, + 0x89, 0xa0, 0xe5, 0xc7, 0x17, 0xe7, 0x4b, 0xcb, 0x6b, 0xab, 0x1b, 0xa5, 0x95, 0xb9, 0xb7, 0x96, + 0x2f, 0xad, 0x5c, 0x5c, 0x59, 0x7d, 0x76, 0x45, 0xc9, 0x68, 0x11, 0xb0, 0x3b, 0x68, 0xf6, 0x6b, + 0x90, 0x89, 0x32, 0x85, 0x0e, 0x42, 0x2b, 0xb6, 0x32, 0x7d, 0x68, 0x1c, 0x46, 0x57, 0x56, 0xcb, + 0xeb, 0x8b, 0xf3, 0xa5, 0x72, 0xe9, 0xfc, 0xf9, 0xd2, 0xdc, 0xc6, 0x3a, 0xdb, 0xf7, 0xf0, 0xa0, + 0x37, 0x42, 0x06, 0x2e, 0xbf, 0x12, 0x87, 0xf1, 0x16, 0x9c, 0xa0, 0x02, 0x5f, 0xb1, 0xb0, 0x45, + 0xd4, 0xc9, 0x5e, 0xb8, 0x9f, 0x25, 0x39, 0xc3, 0x9a, 0x6a, 0xbb, 0x7c, 0x81, 0x73, 0x3f, 0x10, + 0x29, 0x19, 0xae, 0xb6, 0xa5, 0x61, 0x9b, 0xef, 0x27, 0xb1, 0x65, 0xcc, 0xa8, 0x5f, 0xcf, 0xb6, + 0x94, 0x1e, 0x04, 0x64, 0x99, 0x8e, 0xe6, 0x6a, 0x57, 0x70, 0x59, 0x33, 0xc4, 0xe6, 0x13, 0x59, + 0xd6, 0x24, 0x94, 0x8c, 0x68, 0x59, 0x34, 0x5c, 0x0f, 0xda, 0xc0, 0x35, 0x35, 0x02, 0x4d, 0x9c, + 0x79, 0x5c, 0xc9, 0x88, 0x16, 0x0f, 0xfa, 0x2e, 0x48, 0x57, 0xcd, 0x06, 0xc9, 0xf5, 0x18, 0x1c, + 0x89, 0x1d, 0x92, 0x32, 0xc4, 0xea, 0x3c, 0x10, 0x9e, 0xc5, 0xfb, 0xbb, 0x5e, 0x69, 0x65, 0x88, + 0xd5, 0x31, 0x90, 0x63, 0x30, 0xaa, 0xd6, 0x6a, 0x36, 0x21, 0x2e, 0x08, 0xb1, 0x75, 0xc9, 0x88, + 0x57, 0x4d, 0x01, 0x73, 0x4f, 0x43, 0x52, 0xc8, 0x81, 0x84, 0x6a, 0x22, 0x89, 0xb2, 0xc5, 0x16, + 0xdb, 0xb1, 0xe3, 0x29, 0x25, 0x69, 0x88, 0xc6, 0xbb, 0x20, 0xad, 0x39, 0x65, 0x7f, 0x13, 0x3f, + 0x36, 0x13, 0x3b, 0x9e, 0x54, 0x86, 0x34, 0xc7, 0xdb, 0x00, 0x95, 0x3f, 0x13, 0x83, 0x91, 0xf0, + 0x21, 0x04, 0x9a, 0x87, 0xa4, 0x6e, 0x56, 0x54, 0xaa, 0x5a, 0xec, 0x04, 0xec, 0x78, 0x97, 0x73, + 0x8b, 0xd9, 0x25, 0x0e, 0xaf, 0x78, 0x98, 0xb9, 0xdf, 0x95, 0x20, 0x29, 0xaa, 0xd1, 0x24, 0x24, + 0x2c, 0xd5, 0xdd, 0xa6, 0xe4, 0xfa, 0x8b, 0xb1, 0x8c, 0xa4, 0xd0, 0x32, 0xa9, 0x77, 0x2c, 0xd5, + 0xa0, 0x2a, 0xc0, 0xeb, 0x49, 0x99, 0xcc, 0xab, 0x8e, 0xd5, 0x2a, 0x5d, 0xf4, 0x98, 0xf5, 0x3a, + 0x36, 0x5c, 0x47, 0xcc, 0x2b, 0xaf, 0x9f, 0xe3, 0xd5, 0xe8, 0x01, 0x18, 0x73, 0x6d, 0x55, 0xd3, + 0x43, 0xb0, 0x09, 0x0a, 0x9b, 0x11, 0x0d, 0x1e, 0x70, 0x1e, 0x0e, 0x09, 0xba, 0x55, 0xec, 0xaa, + 0x95, 0x6d, 0x5c, 0xf5, 0x91, 0x06, 0xe8, 0xe6, 0xc6, 0x41, 0x0e, 0x30, 0xcf, 0xdb, 0x05, 0xae, + 0xfc, 0x1d, 0x09, 0xc6, 0xc4, 0x32, 0xad, 0xea, 0x09, 0x6b, 0x19, 0x40, 0x35, 0x0c, 0xd3, 0x0d, + 0x8a, 0xab, 0x59, 0x95, 0x9b, 0xf0, 0x66, 0x0b, 0x1e, 0x92, 0x12, 0x20, 0x90, 0xab, 0x03, 0xf8, + 0x2d, 0x6d, 0xc5, 0x36, 0x0d, 0x43, 0xfc, 0x84, 0x89, 0x1e, 0x53, 0xb2, 0x85, 0x3d, 0xb0, 0x2a, + 0xb2, 0x9e, 0x43, 0x13, 0xd0, 0xbf, 0x89, 0x6b, 0x9a, 0xc1, 0xf7, 0x8d, 0x59, 0x41, 0x6c, 0xbf, + 0x24, 0xbc, 0xed, 0x97, 0xe2, 0x5f, 0x85, 0xf1, 0x8a, 0x59, 0x8f, 0xb2, 0x5b, 0xcc, 0x44, 0x36, + 0x17, 0x9c, 0x0b, 0xd2, 0xf3, 0x27, 0x39, 0x50, 0xcd, 0xd4, 0x55, 0xa3, 0x36, 0x6b, 0xda, 0x35, + 0xff, 0x98, 0x95, 0x64, 0x3c, 0x4e, 0xe0, 0xb0, 0xd5, 0xda, 0xfc, 0x73, 0x49, 0xfa, 0xd5, 0x58, + 0x7c, 0x61, 0xad, 0xf8, 0xd9, 0x58, 0x6e, 0x81, 0x21, 0xae, 0x09, 0x61, 0x28, 0x78, 0x4b, 0xc7, + 0x15, 0x32, 0x40, 0xf8, 0xc1, 0x03, 0x30, 0x51, 0x33, 0x6b, 0x26, 0xa5, 0x74, 0x8a, 0xfc, 0xe2, + 0xe7, 0xb4, 0x29, 0xaf, 0x36, 0xd7, 0xf5, 0x50, 0x37, 0xbf, 0x02, 0xe3, 0x1c, 0xb8, 0x4c, 0x0f, + 0x8a, 0xd8, 0x32, 0x06, 0x75, 0xdc, 0x43, 0xcb, 0x7e, 0xf1, 0x75, 0x1a, 0xbe, 0x95, 0x31, 0x8e, + 0x4a, 0xda, 0xd8, 0x4a, 0x27, 0xaf, 0xc0, 0x81, 0x10, 0x3d, 0x66, 0xa4, 0xd8, 0xee, 0x42, 0xf1, + 0xb7, 0x39, 0xc5, 0xf1, 0x00, 0xc5, 0x75, 0x8e, 0x9a, 0x9f, 0x83, 0xe1, 0xbd, 0xd0, 0xfa, 0x57, + 0x9c, 0x56, 0x1a, 0x07, 0x89, 0x2c, 0xc0, 0x28, 0x25, 0x52, 0x69, 0x38, 0xae, 0x59, 0xa7, 0x1e, + 0xb0, 0x33, 0x99, 0xdf, 0x79, 0x9d, 0x59, 0xcd, 0x08, 0x41, 0x9b, 0xf3, 0xb0, 0xf2, 0x79, 0xa0, + 0x67, 0x63, 0x55, 0x5c, 0xd1, 0xbb, 0x50, 0xf8, 0x3a, 0x67, 0xc4, 0x83, 0xcf, 0x5f, 0x86, 0x09, + 0xf2, 0x9b, 0x3a, 0xa8, 0x20, 0x27, 0xdd, 0x37, 0xdc, 0xb2, 0xdf, 0x79, 0x2f, 0x33, 0xcc, 0x71, + 0x8f, 0x40, 0x80, 0xa7, 0xc0, 0x2c, 0xd6, 0xb0, 0xeb, 0x62, 0xdb, 0x29, 0xab, 0x7a, 0x2b, 0xf6, + 0x02, 0x3b, 0x16, 0xd9, 0x8f, 0xfd, 0x30, 0x3c, 0x8b, 0x0b, 0x0c, 0xb3, 0xa0, 0xeb, 0xf9, 0x4b, + 0x70, 0xb0, 0x85, 0x56, 0xf4, 0x40, 0xf3, 0x15, 0x4e, 0x73, 0xa2, 0x49, 0x33, 0x08, 0xd9, 0x35, + 0x10, 0xf5, 0xde, 0x5c, 0xf6, 0x40, 0xf3, 0xe3, 0x9c, 0x26, 0xe2, 0xb8, 0x62, 0x4a, 0x09, 0xc5, + 0xa7, 0x61, 0xec, 0x0a, 0xb6, 0x37, 0x4d, 0x87, 0xef, 0x12, 0xf5, 0x40, 0xee, 0x13, 0x9c, 0xdc, + 0x28, 0x47, 0xa4, 0xdb, 0x46, 0x84, 0xd6, 0x13, 0x90, 0xdc, 0x52, 0x2b, 0xb8, 0x07, 0x12, 0x37, + 0x38, 0x89, 0x41, 0x02, 0x4f, 0x50, 0x0b, 0x90, 0xae, 0x99, 0x3c, 0x46, 0x75, 0x47, 0xff, 0x24, + 0x47, 0x1f, 0x12, 0x38, 0x9c, 0x84, 0x65, 0x5a, 0x0d, 0x9d, 0x04, 0xb0, 0xee, 0x24, 0xfe, 0x8e, + 0x20, 0x21, 0x70, 0x38, 0x89, 0x3d, 0x88, 0xf5, 0x55, 0x41, 0xc2, 0x09, 0xc8, 0xf3, 0x29, 0x18, + 0x32, 0x0d, 0x7d, 0xd7, 0x34, 0x7a, 0x61, 0xe2, 0x53, 0x9c, 0x02, 0x70, 0x14, 0x42, 0xe0, 0x1c, + 0xa4, 0x7a, 0x9d, 0x88, 0xbf, 0xfb, 0x43, 0x61, 0x1e, 0x62, 0x06, 0x16, 0x60, 0x54, 0x38, 0x28, + 0xcd, 0x34, 0x7a, 0x20, 0xf1, 0xf7, 0x38, 0x89, 0x91, 0x00, 0x1a, 0x1f, 0x86, 0x8b, 0x1d, 0xb7, + 0x86, 0x7b, 0x21, 0xf2, 0x19, 0x31, 0x0c, 0x8e, 0xc2, 0x45, 0xb9, 0x89, 0x8d, 0xca, 0x76, 0x6f, + 0x14, 0x7e, 0x5d, 0x88, 0x52, 0xe0, 0x10, 0x12, 0x73, 0x30, 0x5c, 0x57, 0x6d, 0x67, 0x5b, 0xd5, + 0x7b, 0x9a, 0x8e, 0xbf, 0xcf, 0x69, 0xa4, 0x3d, 0x24, 0x2e, 0x91, 0x86, 0xb1, 0x17, 0x32, 0x9f, + 0x15, 0x12, 0x09, 0xa0, 0x71, 0xd3, 0x73, 0x5c, 0xba, 0xa5, 0xb6, 0x17, 0x6a, 0x9f, 0x13, 0xa6, + 0xc7, 0x70, 0x97, 0x83, 0x14, 0xcf, 0x41, 0xca, 0xd1, 0xae, 0xf7, 0x44, 0xe6, 0xf3, 0x62, 0xa6, + 0x29, 0x02, 0x41, 0x7e, 0x2b, 0x1c, 0x6a, 0x19, 0x26, 0x7a, 0x20, 0xf6, 0x0f, 0x38, 0xb1, 0xc9, + 0x16, 0xa1, 0x82, 0xbb, 0x84, 0xbd, 0x92, 0xfc, 0x87, 0xc2, 0x25, 0xe0, 0x08, 0xad, 0x35, 0xb2, + 0x6a, 0x70, 0xd4, 0xad, 0xbd, 0x49, 0xed, 0x37, 0x84, 0xd4, 0x18, 0x6e, 0x48, 0x6a, 0x1b, 0x30, + 0xc9, 0x29, 0xee, 0x6d, 0x5e, 0xbf, 0x20, 0x1c, 0x2b, 0xc3, 0xbe, 0x14, 0x9e, 0xdd, 0xb7, 0x41, + 0xce, 0x13, 0xa7, 0x48, 0x4f, 0x9d, 0x72, 0x5d, 0xb5, 0x7a, 0xa0, 0xfc, 0x45, 0x4e, 0x59, 0x78, + 0x7c, 0x2f, 0xbf, 0x75, 0x96, 0x55, 0x8b, 0x10, 0x7f, 0x0e, 0xb2, 0x82, 0x78, 0xc3, 0xb0, 0x71, + 0xc5, 0xac, 0x19, 0xda, 0x75, 0x5c, 0xed, 0x81, 0xf4, 0x6f, 0x46, 0xa6, 0xea, 0x52, 0x00, 0x9d, + 0x50, 0x5e, 0x84, 0x8c, 0x97, 0xab, 0x94, 0xb5, 0xba, 0x65, 0xda, 0x6e, 0x17, 0x8a, 0x5f, 0x12, + 0x33, 0xe5, 0xe1, 0x2d, 0x52, 0xb4, 0x7c, 0x09, 0xd8, 0x39, 0x73, 0xaf, 0x2a, 0xf9, 0x65, 0x4e, + 0x68, 0xd8, 0xc7, 0xe2, 0x8e, 0xa3, 0x62, 0xd6, 0x2d, 0xd5, 0xee, 0xc5, 0xff, 0xfd, 0x23, 0xe1, + 0x38, 0x38, 0x0a, 0x77, 0x1c, 0x24, 0xa3, 0x23, 0xd1, 0xbe, 0x07, 0x0a, 0x5f, 0x11, 0x8e, 0x43, + 0xe0, 0x70, 0x12, 0x22, 0x61, 0xe8, 0x81, 0xc4, 0x3f, 0x16, 0x24, 0x04, 0x0e, 0x21, 0xf1, 0x8c, + 0x1f, 0x68, 0x6d, 0x5c, 0xd3, 0x1c, 0xd7, 0x66, 0x49, 0x71, 0x67, 0x52, 0xff, 0xe4, 0x87, 0xe1, + 0x24, 0x4c, 0x09, 0xa0, 0x12, 0x4f, 0xc4, 0x37, 0x59, 0xe9, 0x9a, 0xa9, 0x3b, 0x63, 0xbf, 0x25, + 0x3c, 0x51, 0x00, 0x8d, 0xf0, 0x16, 0xc8, 0x10, 0x89, 0xd8, 0x2b, 0x64, 0xa5, 0xd0, 0x03, 0xb9, + 0x7f, 0x1a, 0x61, 0x6e, 0x5d, 0xe0, 0x12, 0x9a, 0x81, 0xfc, 0xa7, 0x61, 0xec, 0xe0, 0xdd, 0x9e, + 0xb4, 0xf3, 0x9f, 0x45, 0xf2, 0x9f, 0x4b, 0x0c, 0x93, 0xf9, 0x90, 0xd1, 0x48, 0x3e, 0x85, 0xba, + 0xdd, 0x2a, 0xca, 0xbe, 0xfb, 0xc7, 0x7c, 0xbc, 0xe1, 0x74, 0x2a, 0xbf, 0x44, 0x94, 0x3c, 0x9c, + 0xf4, 0x74, 0x27, 0xf6, 0xde, 0x1f, 0x7b, 0x7a, 0x1e, 0xca, 0x79, 0xf2, 0xe7, 0x61, 0x38, 0x94, + 0xf0, 0x74, 0x27, 0xf5, 0x3e, 0x4e, 0x2a, 0x1d, 0xcc, 0x77, 0xf2, 0x67, 0x20, 0x41, 0x92, 0x97, + 0xee, 0xe8, 0x7f, 0x8d, 0xa3, 0x53, 0xf0, 0xfc, 0x9b, 0x21, 0x29, 0x92, 0x96, 0xee, 0xa8, 0xef, + 0xe7, 0xa8, 0x1e, 0x0a, 0x41, 0x17, 0x09, 0x4b, 0x77, 0xf4, 0xbf, 0x2e, 0xd0, 0x05, 0x0a, 0x41, + 0xef, 0x5d, 0x84, 0x5f, 0xfd, 0xc5, 0x04, 0x0f, 0x3a, 0x42, 0x76, 0xe7, 0x60, 0x90, 0x67, 0x2a, + 0xdd, 0xb1, 0x3f, 0xc8, 0x3b, 0x17, 0x18, 0xf9, 0xc7, 0xa0, 0xbf, 0x47, 0x81, 0xff, 0x12, 0x47, + 0x65, 0xf0, 0xf9, 0x39, 0x18, 0x0a, 0x64, 0x27, 0xdd, 0xd1, 0xff, 0x06, 0x47, 0x0f, 0x62, 0x11, + 0xd6, 0x79, 0x76, 0xd2, 0x9d, 0xc0, 0x2f, 0x0b, 0xd6, 0x39, 0x06, 0x11, 0x9b, 0x48, 0x4c, 0xba, + 0x63, 0x7f, 0x48, 0x48, 0x5d, 0xa0, 0xe4, 0x9f, 0x82, 0x94, 0x17, 0x6c, 0xba, 0xe3, 0x7f, 0x98, + 0xe3, 0xfb, 0x38, 0x44, 0x02, 0x81, 0x60, 0xd7, 0x9d, 0xc4, 0xdf, 0x14, 0x12, 0x08, 0x60, 0x11, + 0x33, 0x8a, 0x26, 0x30, 0xdd, 0x29, 0x7d, 0x44, 0x98, 0x51, 0x24, 0x7f, 0x21, 0xb3, 0x49, 0x7d, + 0x7e, 0x77, 0x12, 0x7f, 0x4b, 0xcc, 0x26, 0x85, 0x27, 0x6c, 0x44, 0x33, 0x82, 0xee, 0x34, 0x7e, + 0x45, 0xb0, 0x11, 0x49, 0x08, 0xf2, 0x6b, 0x80, 0x9a, 0xb3, 0x81, 0xee, 0xf4, 0x3e, 0xca, 0xe9, + 0x8d, 0x35, 0x25, 0x03, 0xf9, 0x67, 0x61, 0xb2, 0x75, 0x26, 0xd0, 0x9d, 0xea, 0xc7, 0x7e, 0x1c, + 0x59, 0xbb, 0x05, 0x13, 0x81, 0xfc, 0x86, 0x1f, 0x52, 0x82, 0x59, 0x40, 0x77, 0xb2, 0xaf, 0xfc, + 0x38, 0xec, 0xb8, 0x83, 0x49, 0x40, 0xbe, 0x00, 0xe0, 0x07, 0xe0, 0xee, 0xb4, 0x3e, 0xc1, 0x69, + 0x05, 0x90, 0x88, 0x69, 0xf0, 0xf8, 0xdb, 0x1d, 0xff, 0x86, 0x30, 0x0d, 0x8e, 0x41, 0x4c, 0x43, + 0x84, 0xde, 0xee, 0xd8, 0x9f, 0x14, 0xa6, 0x21, 0x50, 0x88, 0x66, 0x07, 0xa2, 0x5b, 0x77, 0x0a, + 0x9f, 0x12, 0x9a, 0x1d, 0xc0, 0xca, 0xaf, 0xc0, 0x58, 0x53, 0x40, 0xec, 0x4e, 0xea, 0x57, 0x39, + 0xa9, 0x4c, 0x34, 0x1e, 0x06, 0x83, 0x17, 0x0f, 0x86, 0xdd, 0xa9, 0x7d, 0x3a, 0x12, 0xbc, 0x78, + 0x2c, 0xcc, 0x9f, 0x83, 0xa4, 0xd1, 0xd0, 0x75, 0x62, 0x3c, 0xa8, 0xf3, 0x4d, 0xc0, 0xec, 0x7f, + 0xf9, 0x09, 0x97, 0x8e, 0x40, 0xc8, 0x9f, 0x81, 0x7e, 0x5c, 0xdf, 0xc4, 0xd5, 0x6e, 0x98, 0x3f, + 0xf8, 0x89, 0x70, 0x98, 0x04, 0x3a, 0xff, 0x14, 0x00, 0xdb, 0x1a, 0xa1, 0x87, 0x81, 0x5d, 0x70, + 0xff, 0xe4, 0x27, 0xfc, 0xea, 0x8d, 0x8f, 0xe2, 0x13, 0x60, 0x17, 0x79, 0x3a, 0x13, 0xf8, 0x61, + 0x98, 0x00, 0x9d, 0x91, 0x27, 0x60, 0xf0, 0x05, 0xc7, 0x34, 0x5c, 0xb5, 0xd6, 0x0d, 0xfb, 0xbf, + 0x72, 0x6c, 0x01, 0x4f, 0x04, 0x56, 0x37, 0x6d, 0xec, 0xaa, 0x35, 0xa7, 0x1b, 0xee, 0x7f, 0xe3, + 0xb8, 0x1e, 0x02, 0x41, 0xae, 0xa8, 0x8e, 0xdb, 0xcb, 0xb8, 0xff, 0xbb, 0x40, 0x16, 0x08, 0x84, + 0x69, 0xf2, 0x7b, 0x07, 0xef, 0x76, 0xc3, 0xfd, 0x91, 0x60, 0x9a, 0xc3, 0xe7, 0xdf, 0x0c, 0x29, + 0xf2, 0x93, 0xdd, 0xa7, 0xeb, 0x82, 0xfc, 0xa7, 0x1c, 0xd9, 0xc7, 0x20, 0x3d, 0x3b, 0x6e, 0xd5, + 0xd5, 0xba, 0x0b, 0xfb, 0x16, 0x9f, 0x69, 0x01, 0x9f, 0x2f, 0xc0, 0x90, 0xe3, 0x56, 0xab, 0x0d, + 0x9e, 0x9f, 0x76, 0x41, 0xff, 0xb3, 0x9f, 0x78, 0x5b, 0x16, 0x1e, 0x0e, 0x99, 0xed, 0xab, 0x3b, + 0xae, 0x65, 0xd2, 0x03, 0x8f, 0x6e, 0x14, 0x7e, 0xcc, 0x29, 0x04, 0x50, 0xf2, 0x73, 0x90, 0x26, + 0x63, 0xb1, 0xb1, 0x85, 0xe9, 0xe9, 0x54, 0x17, 0x12, 0xff, 0x83, 0x0b, 0x20, 0x84, 0x54, 0xfc, + 0x85, 0xaf, 0xbf, 0x36, 0x25, 0x7d, 0xfb, 0xb5, 0x29, 0xe9, 0x8f, 0x5e, 0x9b, 0x92, 0x3e, 0xf4, + 0xbd, 0xa9, 0xbe, 0x6f, 0x7f, 0x6f, 0xaa, 0xef, 0xf7, 0xbf, 0x37, 0xd5, 0xd7, 0x7a, 0x97, 0x18, + 0x16, 0xcc, 0x05, 0x93, 0xed, 0x0f, 0x3f, 0x2f, 0xd7, 0x34, 0x77, 0xbb, 0xb1, 0x39, 0x5b, 0x31, + 0xeb, 0x74, 0x1b, 0xd7, 0xdf, 0xad, 0xf5, 0x16, 0x39, 0xf0, 0x9e, 0x38, 0x1c, 0xaa, 0x98, 0x4e, + 0xdd, 0x74, 0xca, 0x6c, 0xbf, 0x97, 0x15, 0xf8, 0x8e, 0x6f, 0x3a, 0xd8, 0xd4, 0xc3, 0xa6, 0xef, + 0x05, 0x18, 0xa1, 0x43, 0xa7, 0xdb, 0x5d, 0x54, 0xdb, 0xba, 0x3a, 0x88, 0x6f, 0xfc, 0xfb, 0x7e, + 0x3a, 0xea, 0x61, 0x0f, 0x91, 0x9e, 0xde, 0x6f, 0xc0, 0x84, 0x56, 0xb7, 0x74, 0x4c, 0xb7, 0xf9, + 0xcb, 0x5e, 0x5b, 0x77, 0x7a, 0xdf, 0xe4, 0xf4, 0xc6, 0x7d, 0xf4, 0x45, 0x81, 0x9d, 0x5f, 0x82, + 0x31, 0xb5, 0x52, 0xc1, 0x56, 0x88, 0x64, 0x97, 0x69, 0x11, 0x0c, 0x66, 0x38, 0xa6, 0x47, 0xad, + 0xf8, 0x54, 0xbb, 0xa9, 0x79, 0xfe, 0xde, 0x80, 0xe4, 0x6d, 0x5c, 0xc3, 0xc6, 0x49, 0x03, 0xbb, + 0x57, 0x4d, 0x7b, 0x87, 0x8b, 0xf7, 0x24, 0xeb, 0x6a, 0x80, 0xdd, 0x60, 0x86, 0xf7, 0xc5, 0x61, + 0x8a, 0x35, 0x9c, 0xda, 0x54, 0x1d, 0x7c, 0xea, 0xca, 0xc3, 0x9b, 0xd8, 0x55, 0x1f, 0x3e, 0x55, + 0x31, 0x35, 0x83, 0xcf, 0xc4, 0x38, 0x9f, 0x17, 0xd2, 0x3e, 0xcb, 0xdb, 0x73, 0x2d, 0xb7, 0xe9, + 0xe5, 0x05, 0x48, 0xcc, 0x99, 0x9a, 0x81, 0x26, 0xa0, 0xbf, 0x8a, 0x0d, 0xb3, 0xce, 0xef, 0xdc, + 0xb1, 0x02, 0xba, 0x1b, 0x06, 0xd4, 0xba, 0xd9, 0x30, 0x5c, 0x76, 0x42, 0x51, 0x1c, 0xfa, 0xfa, + 0xcd, 0xe9, 0xbe, 0x3f, 0xb8, 0x39, 0x1d, 0x5f, 0x34, 0x5c, 0x85, 0x37, 0xe5, 0x13, 0xdf, 0x7f, + 0x75, 0x5a, 0x92, 0x9f, 0x86, 0xc1, 0x79, 0x5c, 0xd9, 0x0f, 0xad, 0x79, 0x5c, 0x89, 0xd0, 0xba, + 0x1f, 0x92, 0x8b, 0x86, 0xcb, 0x6e, 0x45, 0x1e, 0x85, 0xb8, 0x66, 0xb0, 0x8b, 0x36, 0x91, 0xfe, + 0x49, 0x3d, 0x01, 0x9d, 0xc7, 0x15, 0x0f, 0xb4, 0x8a, 0x2b, 0x51, 0x50, 0x42, 0x9e, 0xd4, 0x17, + 0xe7, 0x7f, 0xff, 0x3f, 0x4d, 0xf5, 0xbd, 0xf4, 0xda, 0x54, 0x5f, 0xdb, 0x99, 0x08, 0xda, 0x00, + 0x17, 0x31, 0x9f, 0x02, 0xa7, 0xba, 0xc3, 0xce, 0x48, 0xbc, 0x69, 0xf8, 0xd6, 0x00, 0xc8, 0x1c, + 0xc6, 0x71, 0xd5, 0x1d, 0xcd, 0xa8, 0x79, 0x33, 0xa1, 0x36, 0xdc, 0xed, 0xeb, 0x7c, 0x2a, 0x26, + 0xf9, 0x54, 0x70, 0x98, 0xce, 0xb3, 0x91, 0x6b, 0x6f, 0x5d, 0xb9, 0x2e, 0x73, 0x2e, 0xff, 0x9b, + 0x38, 0xa0, 0x75, 0x57, 0xdd, 0xc1, 0x85, 0x86, 0xbb, 0x6d, 0xda, 0xda, 0x75, 0xe6, 0xcb, 0x30, + 0x40, 0x5d, 0xbd, 0x56, 0x76, 0xcd, 0x1d, 0x6c, 0x38, 0x54, 0x34, 0x43, 0xa7, 0x0f, 0xcd, 0xb6, + 0xd0, 0x8f, 0x59, 0x32, 0x75, 0xc5, 0x07, 0x3e, 0xfb, 0xdd, 0xe9, 0x63, 0xdd, 0xa5, 0x40, 0x81, + 0x49, 0x72, 0x7d, 0x6d, 0x83, 0x12, 0x46, 0x97, 0x81, 0x5d, 0xb2, 0x28, 0xeb, 0x9a, 0xe3, 0xf2, + 0x7b, 0xda, 0x67, 0x66, 0x5b, 0x8f, 0x7d, 0xb6, 0x99, 0xcd, 0xd9, 0xcb, 0xaa, 0xae, 0x55, 0x55, + 0xd7, 0xb4, 0x9d, 0x0b, 0x7d, 0x4a, 0x8a, 0x92, 0x5a, 0xd2, 0x1c, 0x17, 0x6d, 0x40, 0xaa, 0x8a, + 0x8d, 0x5d, 0x46, 0x36, 0xfe, 0xc6, 0xc8, 0x26, 0x09, 0x25, 0x4a, 0xf5, 0x39, 0x40, 0x6a, 0x10, + 0x4e, 0x3c, 0x4c, 0x62, 0xf7, 0x2b, 0xdb, 0x90, 0x0f, 0x51, 0xa6, 0xef, 0x28, 0xc6, 0xd4, 0x68, + 0x55, 0xee, 0x3e, 0x00, 0xbf, 0x4f, 0x94, 0x85, 0x41, 0xb5, 0x5a, 0xb5, 0xb1, 0xe3, 0xd0, 0x03, + 0xc0, 0x94, 0x22, 0x8a, 0xf9, 0xb1, 0x7f, 0xfb, 0xe5, 0x93, 0xc3, 0x21, 0x8a, 0xc5, 0x34, 0xc0, + 0x15, 0x0f, 0xf5, 0xc4, 0x27, 0x25, 0x18, 0x6b, 0xea, 0x11, 0xc9, 0x30, 0x55, 0xb8, 0xb4, 0x71, + 0x61, 0x55, 0x59, 0x7c, 0xbe, 0xb0, 0xb1, 0xb8, 0xba, 0x52, 0x66, 0x57, 0xfe, 0x57, 0xd6, 0xd7, + 0x4a, 0x73, 0x8b, 0xe7, 0x17, 0x4b, 0xf3, 0x99, 0x3e, 0x34, 0x0d, 0x87, 0x5b, 0xc0, 0xcc, 0x97, + 0x96, 0x4a, 0x0b, 0x85, 0x8d, 0x52, 0x46, 0x42, 0x77, 0xc1, 0xd1, 0x96, 0x44, 0x3c, 0x90, 0x58, + 0x1b, 0x10, 0xa5, 0xe4, 0x81, 0xc4, 0x8b, 0xe7, 0xdb, 0x5a, 0xd1, 0x83, 0x1d, 0xf5, 0xe7, 0x9a, + 0x67, 0x2e, 0x61, 0x7b, 0x7a, 0x77, 0x0c, 0x0e, 0x45, 0x43, 0x86, 0x6a, 0xec, 0xb6, 0x79, 0xf5, + 0xd9, 0xc6, 0x9b, 0x5d, 0x80, 0x78, 0xc1, 0xd8, 0x45, 0x87, 0x58, 0x3e, 0x5d, 0x6e, 0xd8, 0x3a, + 0xf7, 0x41, 0x83, 0xa4, 0x7c, 0xc9, 0xd6, 0x89, 0x6f, 0x12, 0x17, 0xfd, 0xa5, 0xe3, 0x69, 0x7e, + 0x7b, 0x3f, 0x9f, 0xf9, 0xe8, 0xab, 0xd3, 0x7d, 0x5f, 0x78, 0x75, 0xba, 0xef, 0x47, 0x9f, 0x9a, + 0xee, 0x7b, 0xe9, 0x0f, 0x67, 0xfa, 0x8a, 0x3b, 0xd1, 0xe1, 0x7d, 0xb5, 0x6b, 0x34, 0x4d, 0x16, + 0x8c, 0x5d, 0xea, 0x88, 0xd6, 0xa4, 0xe7, 0xfb, 0xe9, 0xe0, 0xc4, 0x01, 0xea, 0x54, 0xf4, 0x00, + 0xf5, 0x59, 0xac, 0xeb, 0x17, 0x0d, 0xf3, 0x2a, 0x9d, 0x55, 0x5f, 0x06, 0x1f, 0x89, 0xc1, 0x54, + 0x53, 0xd8, 0xe4, 0x19, 0x46, 0xbb, 0xe7, 0xaf, 0x79, 0x48, 0xce, 0x8b, 0xc4, 0x25, 0x0b, 0x83, + 0x0e, 0xae, 0x98, 0x46, 0x95, 0x59, 0x7a, 0x5c, 0x11, 0x45, 0x32, 0x6c, 0x43, 0x35, 0x4c, 0x87, + 0xdf, 0xb9, 0x67, 0x85, 0xe2, 0xc7, 0xa5, 0xbd, 0xe5, 0x0b, 0xc3, 0xa2, 0x27, 0x31, 0xcc, 0x87, + 0xbb, 0x1e, 0x29, 0xef, 0x90, 0x51, 0x7a, 0x83, 0x08, 0x1d, 0x2b, 0xf7, 0x2a, 0x95, 0x5f, 0x89, + 0xc1, 0x74, 0x54, 0x2a, 0x24, 0x6d, 0x73, 0x5c, 0xb5, 0x6e, 0xb5, 0x13, 0xcb, 0x39, 0x48, 0x6d, + 0x08, 0x98, 0x3d, 0xcb, 0xe5, 0xc6, 0x1e, 0xe5, 0x32, 0xe2, 0x75, 0x25, 0x04, 0x73, 0xba, 0x47, + 0xc1, 0x78, 0xe3, 0xd8, 0x97, 0x64, 0x3e, 0x9b, 0x80, 0xa3, 0xf4, 0x51, 0x96, 0x5d, 0xd7, 0x0c, + 0xf7, 0x54, 0xc5, 0xde, 0xb5, 0x5c, 0x9a, 0xb8, 0x99, 0x5b, 0x5c, 0x2e, 0x63, 0x7e, 0xf3, 0x2c, + 0x6b, 0x6e, 0x63, 0x39, 0x5b, 0xd0, 0xbf, 0x46, 0xf0, 0x88, 0x44, 0x5c, 0xd3, 0x55, 0x75, 0x2e, + 0x29, 0x56, 0x20, 0xb5, 0xec, 0x21, 0x57, 0x8c, 0xd5, 0x6a, 0xe2, 0x0d, 0x97, 0x8e, 0xd5, 0x2d, + 0x76, 0x1f, 0x3e, 0x4e, 0x0d, 0x2a, 0x49, 0x2a, 0xe8, 0xd5, 0xf7, 0x09, 0xe8, 0x57, 0x1b, 0xec, + 0x2a, 0x47, 0x9c, 0x58, 0x1a, 0x2d, 0xc8, 0x17, 0x61, 0x90, 0x1f, 0x28, 0xa3, 0x0c, 0xc4, 0x77, + 0xf0, 0x2e, 0xed, 0x27, 0xad, 0x90, 0x9f, 0x68, 0x16, 0xfa, 0x29, 0xf3, 0x3c, 0x80, 0x64, 0x67, + 0x9b, 0xb8, 0x9f, 0xa5, 0x4c, 0x2a, 0x0c, 0x4c, 0x7e, 0x1a, 0x92, 0xf3, 0x66, 0x5d, 0x33, 0xcc, + 0x30, 0xb5, 0x14, 0xa3, 0x46, 0x79, 0xb6, 0x1a, 0x3c, 0xdf, 0x50, 0x58, 0x01, 0x4d, 0xc2, 0x00, + 0x7b, 0x1f, 0xc1, 0xaf, 0xa3, 0xf0, 0x92, 0x3c, 0x07, 0x83, 0x94, 0xf6, 0xaa, 0x85, 0x10, 0x7f, + 0x59, 0xc7, 0x1f, 0x62, 0xd0, 0xd4, 0x94, 0x93, 0x8f, 0xf9, 0xcc, 0x22, 0x48, 0x54, 0x55, 0x57, + 0xe5, 0xe3, 0xa6, 0xbf, 0xe5, 0x27, 0x21, 0xc9, 0x89, 0x38, 0xe8, 0x34, 0xc4, 0x4d, 0xcb, 0xe1, + 0x17, 0x4a, 0x72, 0xed, 0x86, 0xb2, 0x6a, 0x15, 0x13, 0x24, 0x53, 0x51, 0x08, 0x70, 0x51, 0x69, + 0xeb, 0x54, 0x1f, 0x0f, 0x38, 0xd5, 0xc0, 0x94, 0x07, 0x7e, 0xb2, 0x29, 0x6d, 0x52, 0x07, 0x4f, + 0x59, 0x5e, 0x93, 0x60, 0x2a, 0xd0, 0x7a, 0x05, 0xdb, 0x8e, 0x66, 0x1a, 0x3c, 0x9e, 0x33, 0x6d, + 0x41, 0x01, 0x26, 0x79, 0x7b, 0x1b, 0x75, 0x79, 0x02, 0x52, 0x73, 0xa6, 0xe1, 0x60, 0xc3, 0x69, + 0x50, 0x23, 0xda, 0xd4, 0xcd, 0xca, 0x0e, 0x15, 0x58, 0x42, 0x61, 0x05, 0x22, 0x31, 0xd5, 0xb2, + 0xa8, 0xc4, 0x12, 0x0a, 0xf9, 0xc9, 0x92, 0xbb, 0xe2, 0x7a, 0xdb, 0x31, 0x3e, 0xb1, 0xf7, 0x31, + 0x72, 0x2e, 0xbd, 0x41, 0x7e, 0x2c, 0x06, 0x47, 0x9a, 0x2d, 0x62, 0x07, 0xef, 0x3a, 0x7b, 0x35, + 0x08, 0x17, 0x52, 0x6b, 0xf4, 0x21, 0xfe, 0x45, 0xbc, 0x8b, 0x72, 0x30, 0x88, 0xab, 0xa7, 0xcf, + 0x9c, 0x79, 0xf8, 0x09, 0xa6, 0xae, 0x17, 0xfa, 0x14, 0x51, 0x81, 0xa6, 0x20, 0xe5, 0xe0, 0x8a, + 0x75, 0xfa, 0xcc, 0xd9, 0x9d, 0x87, 0x99, 0x7e, 0x90, 0x14, 0xc6, 0xab, 0x22, 0xb8, 0x8e, 0xcd, + 0x70, 0xe3, 0x02, 0x97, 0x57, 0xe4, 0x93, 0x44, 0x22, 0xdf, 0xff, 0xd4, 0xb4, 0x54, 0xec, 0x87, + 0xb8, 0xd3, 0xa8, 0xdf, 0x51, 0x05, 0x78, 0xa5, 0x1f, 0x66, 0x82, 0x98, 0xd4, 0x0d, 0x79, 0x29, + 0x07, 0x97, 0x4f, 0x26, 0x20, 0x1f, 0x0a, 0xd1, 0x26, 0x53, 0xed, 0x28, 0x65, 0xf9, 0x37, 0x25, + 0x48, 0x7b, 0x79, 0xd0, 0x3a, 0x76, 0xd1, 0xb9, 0x60, 0x72, 0xc3, 0x6d, 0xe2, 0xf0, 0x6c, 0xb4, + 0x2f, 0x3f, 0x5f, 0x53, 0x02, 0xe0, 0xe8, 0x31, 0x48, 0x5a, 0xb6, 0x69, 0x99, 0x0e, 0x7f, 0x33, + 0xd6, 0x05, 0xd5, 0x03, 0x46, 0x0f, 0x02, 0xa2, 0xee, 0xab, 0x7c, 0xc5, 0x74, 0x35, 0xa3, 0x56, + 0xb6, 0xcc, 0xab, 0xfc, 0x25, 0x6e, 0x5c, 0xc9, 0xd0, 0x96, 0xcb, 0xb4, 0x61, 0x8d, 0xd4, 0x13, + 0xa6, 0x53, 0x1e, 0x95, 0x70, 0xee, 0x46, 0x2c, 0x5c, 0x14, 0xd1, 0x39, 0x18, 0xb4, 0x1a, 0x9b, + 0x65, 0xe1, 0x0e, 0x86, 0x4e, 0x1f, 0x69, 0x65, 0xdc, 0x42, 0x77, 0xb8, 0x79, 0x0f, 0x58, 0x8d, + 0x4d, 0xa2, 0x49, 0x77, 0x41, 0xba, 0x05, 0x33, 0x43, 0x57, 0x7c, 0x3e, 0xe8, 0xb7, 0x21, 0xf8, + 0x08, 0xca, 0x96, 0xad, 0x99, 0xb6, 0xe6, 0xee, 0xd2, 0xe4, 0x34, 0xae, 0x64, 0x44, 0xc3, 0x1a, + 0xaf, 0x97, 0x77, 0x60, 0x74, 0x9d, 0x2e, 0x5e, 0x7d, 0xce, 0xcf, 0xf8, 0xfc, 0x49, 0xdd, 0xf9, + 0x6b, 0xcb, 0x59, 0xac, 0x89, 0xb3, 0xe2, 0x33, 0x6d, 0xb5, 0xf3, 0xb1, 0xbd, 0x6b, 0x67, 0x38, + 0xfd, 0xfb, 0x93, 0x63, 0x21, 0xc3, 0x65, 0xca, 0x19, 0xf4, 0x4d, 0xbd, 0x2a, 0x66, 0xb7, 0x54, + 0x21, 0xd7, 0x39, 0x62, 0xe6, 0xba, 0xf8, 0xc8, 0x5c, 0x57, 0x13, 0x92, 0x9f, 0x80, 0xe1, 0x35, + 0xd5, 0x76, 0xd7, 0xb1, 0x7b, 0x01, 0xab, 0x55, 0x6c, 0x87, 0x43, 0xea, 0xb0, 0x08, 0xa9, 0x08, + 0x12, 0x34, 0x6e, 0xb2, 0x90, 0x42, 0x7f, 0xcb, 0xdb, 0x90, 0xa0, 0xd7, 0x3e, 0xbd, 0x70, 0xcb, + 0x31, 0x58, 0xb8, 0x25, 0x7e, 0x76, 0xd7, 0xc5, 0x8e, 0xc8, 0x5d, 0x69, 0x01, 0x3d, 0x2a, 0x82, + 0x66, 0xbc, 0x73, 0xd0, 0xe4, 0x8a, 0xc8, 0x43, 0xa7, 0x0e, 0x83, 0x45, 0xe2, 0xa6, 0x17, 0xe7, + 0x3d, 0x46, 0x24, 0x9f, 0x11, 0xb4, 0x0c, 0xa3, 0x96, 0x6a, 0xbb, 0xf4, 0xbd, 0xcb, 0x36, 0x1d, + 0x05, 0xd7, 0xf5, 0xe9, 0x66, 0xcb, 0x0b, 0x0d, 0x96, 0xf7, 0x32, 0x6c, 0x05, 0x2b, 0xe5, 0x3f, + 0x4e, 0xc0, 0x00, 0x17, 0xc6, 0x9b, 0x61, 0x90, 0x8b, 0x95, 0x6b, 0xe7, 0xd1, 0xd9, 0xe6, 0xa8, + 0x33, 0xeb, 0x05, 0x17, 0x4e, 0x4f, 0xe0, 0xa0, 0xfb, 0x20, 0x59, 0xd9, 0x56, 0x35, 0xa3, 0xac, + 0x55, 0xc5, 0x3e, 0xc2, 0x6b, 0x37, 0xa7, 0x07, 0xe7, 0x48, 0xdd, 0xe2, 0xbc, 0x32, 0x48, 0x1b, + 0x17, 0xab, 0x24, 0xcc, 0x6f, 0x63, 0xad, 0xb6, 0xed, 0x72, 0x0b, 0xe3, 0x25, 0xf4, 0x38, 0x24, + 0x88, 0x42, 0xf0, 0xd7, 0x90, 0xb9, 0xa6, 0xdd, 0x1c, 0x2f, 0x93, 0x2b, 0x26, 0x49, 0xc7, 0x1f, + 0xfa, 0xee, 0xb4, 0xa4, 0x50, 0x0c, 0x34, 0x07, 0xc3, 0xba, 0xea, 0xb8, 0x65, 0x1a, 0xdd, 0x48, + 0xf7, 0xfd, 0x7c, 0x31, 0xdd, 0x24, 0x10, 0x2e, 0x58, 0xce, 0xfa, 0x10, 0xc1, 0x62, 0x55, 0x55, + 0x74, 0x1c, 0x32, 0x94, 0x48, 0xc5, 0xac, 0xd7, 0x35, 0x97, 0x25, 0x4e, 0x03, 0x54, 0xee, 0x23, + 0xa4, 0x7e, 0x8e, 0x56, 0xd3, 0xf4, 0xe9, 0x30, 0xa4, 0xe8, 0xfb, 0x2b, 0x0a, 0xc2, 0xee, 0x1a, + 0x27, 0x49, 0x05, 0x6d, 0x3c, 0x06, 0xa3, 0xbe, 0x7f, 0x64, 0x20, 0x49, 0x46, 0xc5, 0xaf, 0xa6, + 0x80, 0x0f, 0xc1, 0x84, 0x81, 0xaf, 0xd1, 0xdb, 0xcf, 0x21, 0xe8, 0x14, 0x85, 0x46, 0xa4, 0xed, + 0x72, 0x18, 0xe3, 0x5e, 0x18, 0xa9, 0x08, 0xe1, 0x33, 0x58, 0xa0, 0xb0, 0xc3, 0x5e, 0x2d, 0x05, + 0x3b, 0x04, 0x49, 0xd5, 0xb2, 0x18, 0xc0, 0x10, 0xf7, 0x8f, 0x96, 0x45, 0x9b, 0x4e, 0xc0, 0x18, + 0x1d, 0xa3, 0x8d, 0x9d, 0x86, 0xee, 0x72, 0x22, 0x69, 0x0a, 0x33, 0x4a, 0x1a, 0x14, 0x56, 0x4f, + 0x61, 0xef, 0x86, 0x61, 0x7c, 0x45, 0xab, 0x62, 0xa3, 0x82, 0x19, 0xdc, 0x30, 0x85, 0x4b, 0x8b, + 0x4a, 0x0a, 0x74, 0x3f, 0x78, 0x7e, 0xaf, 0x2c, 0x7c, 0xf2, 0x08, 0xa3, 0x27, 0xea, 0x0b, 0xac, + 0x5a, 0x7e, 0x4f, 0x0c, 0x12, 0xf3, 0xaa, 0xab, 0x92, 0xec, 0xc3, 0xbd, 0xc6, 0x22, 0x4d, 0x5a, + 0x21, 0x3f, 0xd1, 0x36, 0x64, 0xe9, 0x36, 0x5e, 0x1d, 0x57, 0x35, 0xd5, 0xc5, 0x65, 0xc7, 0x25, + 0xff, 0xda, 0xa6, 0xe9, 0x8a, 0x87, 0xe5, 0xc7, 0x9b, 0xa7, 0x72, 0x31, 0x80, 0xb1, 0x4e, 0x10, + 0x14, 0x02, 0xcf, 0x67, 0x76, 0x52, 0x6b, 0xd9, 0x8a, 0xde, 0x02, 0x49, 0xc1, 0x3f, 0x37, 0xca, + 0xa9, 0x66, 0xca, 0x25, 0x0e, 0xb1, 0xa4, 0x39, 0x2e, 0xa7, 0xe7, 0x61, 0xa1, 0x37, 0x41, 0x92, + 0x9f, 0xcd, 0x38, 0x9e, 0xa6, 0x36, 0x51, 0xe0, 0x7b, 0x99, 0x82, 0x1b, 0x0f, 0x43, 0xfe, 0x50, + 0x0c, 0x0e, 0xcc, 0x37, 0x2c, 0x5d, 0xab, 0xa8, 0x2e, 0xbe, 0x6c, 0xba, 0x58, 0xf4, 0x85, 0x4e, + 0xc2, 0xc0, 0x15, 0xd3, 0xc5, 0x65, 0x95, 0xdb, 0xde, 0x64, 0x8b, 0x38, 0x6a, 0xba, 0x58, 0xe9, + 0x27, 0x50, 0x05, 0x0f, 0x7c, 0x93, 0x0b, 0xa8, 0x23, 0x78, 0x71, 0x6f, 0xe1, 0x36, 0xa4, 0xc3, + 0x1c, 0x94, 0x05, 0x39, 0x5f, 0x87, 0x19, 0x60, 0x11, 0x52, 0x9e, 0x0f, 0xe7, 0x46, 0xd7, 0x9b, + 0xdd, 0xfa, 0x68, 0xf2, 0xb7, 0x62, 0x70, 0x68, 0x89, 0x38, 0x80, 0x39, 0xfa, 0x68, 0xb9, 0xe0, + 0xba, 0x6a, 0x65, 0xc7, 0x13, 0xcb, 0x22, 0x8c, 0x55, 0x4c, 0x63, 0x4b, 0xd7, 0x2a, 0x94, 0x6f, + 0x3f, 0x99, 0x8d, 0xc4, 0x4e, 0x36, 0x64, 0x4a, 0x87, 0x1a, 0xb4, 0x92, 0x09, 0xa0, 0xd1, 0x1a, + 0xa2, 0xd0, 0xc4, 0xb6, 0x4d, 0xa3, 0xcc, 0xdd, 0x0f, 0x0b, 0xa3, 0x69, 0x56, 0x79, 0x81, 0x39, + 0xa1, 0x15, 0x98, 0xd8, 0xdc, 0xbd, 0xae, 0x1a, 0xae, 0x66, 0xe0, 0x80, 0x69, 0xf2, 0x6f, 0xeb, + 0x74, 0x4c, 0x6e, 0xc6, 0x3d, 0xc4, 0xc0, 0x3e, 0x53, 0x6b, 0xc1, 0x27, 0xda, 0x08, 0xfe, 0x76, + 0xc8, 0xf3, 0x75, 0x09, 0x92, 0x9e, 0xf8, 0x54, 0x38, 0x58, 0x15, 0xea, 0x56, 0xa6, 0x0a, 0xe3, + 0xa9, 0x3f, 0x13, 0xe2, 0xb1, 0xe6, 0x11, 0xb5, 0xd4, 0xcf, 0x0b, 0x7d, 0xca, 0x81, 0x6a, 0x4b, + 0xc5, 0x35, 0xe0, 0x88, 0x4e, 0x44, 0x57, 0xe6, 0x6f, 0xd2, 0x55, 0x3a, 0x81, 0x7e, 0x3f, 0x4c, + 0x3f, 0x1f, 0x68, 0x33, 0x59, 0xad, 0x26, 0xfd, 0x42, 0x9f, 0x72, 0x48, 0x6f, 0xd7, 0xc8, 0xd3, + 0x71, 0x79, 0x09, 0xd2, 0x41, 0x3b, 0x25, 0x76, 0x19, 0x18, 0x5a, 0xbc, 0xb5, 0x5d, 0x7a, 0x44, + 0x22, 0x56, 0x2d, 0x3f, 0x09, 0x93, 0xad, 0xfd, 0x09, 0xba, 0x07, 0x46, 0x6c, 0xf5, 0x2a, 0x73, + 0x46, 0x6c, 0xaf, 0x93, 0x39, 0xae, 0xb4, 0xad, 0x5e, 0xa5, 0x10, 0xa4, 0x77, 0xb2, 0xdc, 0x15, + 0x36, 0x8f, 0x9e, 0x84, 0x61, 0x61, 0xef, 0x3e, 0x42, 0xcb, 0x68, 0xc4, 0x51, 0x14, 0xf1, 0x69, + 0x30, 0x46, 0xeb, 0x2d, 0x30, 0xc8, 0x1b, 0x48, 0xe2, 0xe7, 0x3d, 0xf2, 0x25, 0x71, 0x8d, 0xe5, + 0x01, 0x43, 0x5e, 0xdd, 0x62, 0xd5, 0x5b, 0xeb, 0xc6, 0x02, 0x6b, 0xdd, 0xe7, 0x60, 0x92, 0x78, + 0xda, 0xc2, 0x15, 0x55, 0xd3, 0xd5, 0x4d, 0x4d, 0xd7, 0xdc, 0x5d, 0x1e, 0xe2, 0x0f, 0x43, 0xca, + 0x36, 0xf9, 0x68, 0xf8, 0x40, 0x92, 0xb6, 0xc9, 0x06, 0x42, 0x7a, 0xab, 0x98, 0x7a, 0xa3, 0x6e, + 0x78, 0xae, 0x97, 0xb4, 0x0f, 0xb1, 0x3a, 0x0a, 0x22, 0x7f, 0x21, 0x0e, 0x09, 0x32, 0xfb, 0xe8, + 0x91, 0xc0, 0x42, 0x7c, 0xa4, 0x55, 0xea, 0xb1, 0xae, 0xd5, 0x0c, 0x5c, 0x5d, 0x76, 0x6a, 0x81, + 0xef, 0xda, 0xf8, 0x91, 0x3f, 0x16, 0x8a, 0xfc, 0x13, 0xd0, 0x6f, 0x9b, 0x0d, 0xa3, 0x2a, 0x5e, + 0x54, 0xd0, 0x02, 0x2a, 0x41, 0xd2, 0x0b, 0xe8, 0x89, 0x6e, 0x01, 0x7d, 0x94, 0x4c, 0x28, 0x49, + 0x37, 0x78, 0x85, 0x32, 0xb8, 0xc9, 0xe3, 0xfa, 0x6d, 0xb0, 0x29, 0x92, 0xf7, 0xfb, 0x0e, 0x51, + 0xc4, 0x39, 0x96, 0x1c, 0x64, 0xbc, 0x06, 0x1e, 0xe8, 0xc2, 0xde, 0x93, 0xe5, 0x8a, 0x83, 0x74, + 0x5c, 0xbe, 0xf7, 0x64, 0xdf, 0xd9, 0x39, 0x02, 0x29, 0x47, 0xab, 0x19, 0xaa, 0xdb, 0xb0, 0x31, + 0x4f, 0x12, 0xfc, 0x0a, 0x74, 0x1e, 0x46, 0x98, 0xc1, 0x7a, 0x2f, 0x8c, 0x52, 0xed, 0xd2, 0x3c, + 0x6a, 0x8f, 0xde, 0x67, 0x97, 0x86, 0xaf, 0x04, 0x8b, 0xf2, 0x2e, 0x0c, 0x87, 0xda, 0xd1, 0x31, + 0xc8, 0x90, 0xfc, 0x80, 0xa6, 0x30, 0xf4, 0x4a, 0x41, 0xcd, 0xe0, 0x8a, 0x35, 0xac, 0x5a, 0x16, + 0x51, 0x9c, 0x0d, 0x93, 0xcc, 0x1e, 0x7a, 0x0a, 0x8e, 0x78, 0x80, 0x0e, 0xd6, 0xb7, 0xca, 0x6a, + 0xc3, 0xdd, 0xc6, 0x86, 0x4b, 0x7c, 0x80, 0x66, 0xd4, 0xb8, 0xca, 0x1d, 0xe2, 0x48, 0xeb, 0x58, + 0xdf, 0x2a, 0x84, 0x00, 0xe4, 0x27, 0x61, 0x3c, 0xd4, 0x35, 0xa7, 0xdb, 0x2b, 0x03, 0xf2, 0x57, + 0x25, 0x18, 0x60, 0x79, 0x57, 0x40, 0x75, 0xa4, 0xd6, 0xaa, 0x13, 0x6b, 0xa7, 0x3a, 0xf1, 0xfd, + 0xab, 0x4e, 0x01, 0xc0, 0x9b, 0x0f, 0x87, 0x7f, 0xfd, 0xa5, 0x45, 0x08, 0x60, 0x2c, 0xae, 0x6b, + 0x35, 0xee, 0x56, 0x02, 0x48, 0xf2, 0xe7, 0x62, 0x90, 0xf2, 0xda, 0x51, 0x01, 0x86, 0x05, 0x5f, + 0xe5, 0x2d, 0x5d, 0xad, 0x71, 0xf3, 0x39, 0xda, 0x96, 0xb9, 0xf3, 0xba, 0x5a, 0x53, 0x86, 0x38, + 0x3f, 0xa4, 0xd0, 0x5a, 0x15, 0x63, 0x6d, 0x54, 0x31, 0xa4, 0xfb, 0xf1, 0xfd, 0xe9, 0x7e, 0x48, + 0x4b, 0x13, 0x51, 0x2d, 0x5d, 0x6a, 0xd2, 0x52, 0x66, 0x62, 0xf7, 0x76, 0xd1, 0x52, 0x36, 0xc3, + 0x51, 0x5d, 0xfd, 0x52, 0x8c, 0xee, 0xd2, 0x59, 0xa6, 0xa3, 0xea, 0x3f, 0x0d, 0x17, 0x73, 0x18, + 0x52, 0x96, 0xa9, 0x97, 0x59, 0x0b, 0x7b, 0xba, 0x95, 0xb4, 0x4c, 0x5d, 0x69, 0x52, 0xa2, 0xfe, + 0xdb, 0xe4, 0x7f, 0x06, 0x6e, 0xc3, 0x1c, 0x0c, 0x46, 0xe6, 0x40, 0xb6, 0x21, 0xcd, 0x44, 0xc1, + 0x9d, 0xfc, 0x43, 0x44, 0x06, 0x74, 0x61, 0x28, 0x35, 0xaf, 0x3b, 0x19, 0xdb, 0x0c, 0x52, 0xe1, + 0x70, 0x04, 0x83, 0x2d, 0x7b, 0x5a, 0x6d, 0xef, 0x06, 0x95, 0x5c, 0xe1, 0x70, 0xf2, 0xdf, 0x96, + 0x00, 0xfc, 0x6c, 0x8b, 0xac, 0xc0, 0x1c, 0xca, 0x42, 0x39, 0xd4, 0xf3, 0x54, 0xbb, 0x49, 0xe3, + 0xfd, 0xa7, 0x9d, 0x20, 0xdf, 0x73, 0x30, 0xec, 0xab, 0xb6, 0x83, 0x05, 0x33, 0x53, 0x1d, 0x92, + 0xae, 0x75, 0xec, 0x2a, 0xe9, 0x2b, 0x81, 0x92, 0xfc, 0x2f, 0x25, 0x48, 0x51, 0x9e, 0x96, 0xb1, + 0xab, 0x86, 0xe6, 0x50, 0xda, 0xff, 0x1c, 0x1e, 0x05, 0x60, 0x64, 0x1c, 0xed, 0x3a, 0xe6, 0x9a, + 0x95, 0xa2, 0x35, 0xeb, 0xda, 0x75, 0x8c, 0xce, 0x7a, 0x02, 0x8f, 0x77, 0x16, 0xb8, 0xd8, 0x71, + 0xe2, 0x62, 0x3f, 0x08, 0x83, 0xf4, 0xdb, 0x8b, 0xd7, 0x1c, 0x9e, 0x11, 0x0e, 0x18, 0x8d, 0xfa, + 0xc6, 0x35, 0x47, 0x7e, 0x01, 0x06, 0x37, 0xae, 0xb1, 0x4d, 0x7f, 0x1a, 0xb1, 0x4d, 0xbe, 0x1e, + 0x65, 0x5e, 0x32, 0x49, 0x2a, 0xe8, 0xf2, 0xab, 0x45, 0xf0, 0xf7, 0x77, 0xea, 0xe3, 0x3d, 0xed, + 0xd4, 0x9f, 0xf8, 0x0f, 0x12, 0x0c, 0x05, 0xbc, 0x0d, 0x7a, 0x18, 0x0e, 0x14, 0x97, 0x56, 0xe7, + 0x2e, 0x96, 0x17, 0xe7, 0xcb, 0xe7, 0x97, 0x0a, 0x0b, 0xfe, 0xe3, 0xe4, 0xdc, 0xe4, 0xcb, 0x37, + 0x66, 0x50, 0x00, 0xf6, 0x92, 0x41, 0x8f, 0x4a, 0xd0, 0x29, 0x98, 0x08, 0xa3, 0x14, 0x8a, 0xeb, + 0xa5, 0x95, 0x8d, 0x8c, 0x94, 0x3b, 0xf0, 0xf2, 0x8d, 0x99, 0xb1, 0x00, 0x46, 0x61, 0xd3, 0xc1, + 0x86, 0xdb, 0x8c, 0x30, 0xb7, 0xba, 0xbc, 0xbc, 0xb8, 0x91, 0x89, 0x35, 0x21, 0x70, 0xf7, 0x7f, + 0x3f, 0x8c, 0x85, 0x11, 0x56, 0x16, 0x97, 0x32, 0xf1, 0x1c, 0x7a, 0xf9, 0xc6, 0xcc, 0x48, 0x00, + 0x7a, 0x45, 0xd3, 0x73, 0xc9, 0x0f, 0x7c, 0x7a, 0xaa, 0xef, 0xd7, 0x7f, 0x6d, 0x4a, 0x22, 0x23, + 0x1b, 0x0e, 0xf9, 0x08, 0xf4, 0x20, 0x1c, 0x5c, 0x5f, 0x5c, 0x58, 0x29, 0xcd, 0x97, 0x97, 0xd7, + 0x17, 0xc4, 0xe1, 0xaa, 0x18, 0xdd, 0xe8, 0xcb, 0x37, 0x66, 0x86, 0xf8, 0x90, 0xda, 0x41, 0xaf, + 0x29, 0xa5, 0xcb, 0xab, 0x1b, 0xa5, 0x8c, 0xc4, 0xa0, 0xd7, 0x6c, 0x4c, 0x1c, 0x18, 0x85, 0x7e, + 0x08, 0x0e, 0xb5, 0x80, 0xf6, 0x06, 0x36, 0xf6, 0xf2, 0x8d, 0x99, 0xe1, 0x35, 0x1b, 0x33, 0xfb, + 0xa1, 0x18, 0xb3, 0x90, 0x6d, 0xc6, 0x58, 0x5d, 0x5b, 0x5d, 0x2f, 0x2c, 0x65, 0x66, 0x72, 0x99, + 0x97, 0x6f, 0xcc, 0xa4, 0x85, 0x33, 0xa4, 0x27, 0xd8, 0xde, 0xc8, 0xee, 0xe4, 0x6e, 0xdf, 0x9f, + 0x9d, 0x84, 0x7b, 0xda, 0x5c, 0x9e, 0x10, 0xc7, 0xee, 0xfb, 0xba, 0x3e, 0xd1, 0xf6, 0x00, 0x39, + 0xd7, 0xe5, 0x5c, 0xb5, 0xfb, 0xb6, 0xe1, 0xfe, 0xaf, 0x66, 0xe4, 0x3a, 0x6e, 0x6c, 0xca, 0x1f, + 0x94, 0x60, 0xe4, 0x82, 0xe6, 0xb8, 0xa6, 0xad, 0x55, 0x54, 0x9d, 0x3e, 0x49, 0x3e, 0xdb, 0xab, + 0x6f, 0x8d, 0x98, 0xfa, 0x53, 0x30, 0x70, 0x45, 0xd5, 0x99, 0x53, 0x8b, 0xd3, 0x2f, 0xa8, 0xb5, + 0xb9, 0xcb, 0xe0, 0xb9, 0x36, 0x41, 0x80, 0xa1, 0xc9, 0xbf, 0x11, 0x83, 0x51, 0x6a, 0x0c, 0x0e, + 0xfb, 0xb6, 0xa6, 0x8b, 0x49, 0x78, 0x4f, 0xd8, 0xaa, 0xcb, 0x4f, 0xc3, 0x8a, 0xb3, 0xfc, 0x5a, + 0xcd, 0x7d, 0x3d, 0x5c, 0x12, 0x99, 0xc7, 0x15, 0x85, 0xe2, 0xa2, 0xb7, 0x43, 0xb2, 0xae, 0x5e, + 0x2b, 0x53, 0x3a, 0x6c, 0xd7, 0xae, 0xb0, 0x37, 0x3a, 0xb7, 0x6e, 0x4e, 0x8f, 0xee, 0xaa, 0x75, + 0x3d, 0x2f, 0x0b, 0x3a, 0xb2, 0x32, 0x58, 0x57, 0xaf, 0x11, 0x16, 0x91, 0x05, 0xa3, 0xa4, 0xb6, + 0xb2, 0xad, 0x1a, 0x35, 0xcc, 0x3a, 0xa1, 0x67, 0x7b, 0xc5, 0x0b, 0x7b, 0xee, 0x64, 0xd2, 0xef, + 0x24, 0x40, 0x4e, 0x56, 0x86, 0xeb, 0xea, 0xb5, 0x39, 0x5a, 0x41, 0x7a, 0xcc, 0x27, 0x3f, 0xfa, + 0xea, 0x74, 0x1f, 0xbd, 0xaa, 0xf4, 0x1d, 0x09, 0xc0, 0x97, 0x18, 0x7a, 0x3b, 0x64, 0x2a, 0x5e, + 0x89, 0xe2, 0x3a, 0xde, 0x1a, 0xb8, 0xcd, 0x5c, 0x44, 0xe4, 0xcd, 0x62, 0xf3, 0xb7, 0x6f, 0x4e, + 0x4b, 0xca, 0x68, 0x25, 0x32, 0x15, 0x6f, 0x83, 0xa1, 0x86, 0x55, 0x25, 0xab, 0x6c, 0xba, 0x87, + 0x19, 0xeb, 0x1a, 0xe7, 0xa7, 0x08, 0xad, 0x5b, 0x37, 0xa7, 0x11, 0x1b, 0x56, 0x00, 0x59, 0xa6, + 0xd1, 0x1f, 0x58, 0x0d, 0x41, 0x08, 0x8c, 0xe9, 0x1b, 0x12, 0x0c, 0xcd, 0x07, 0x1e, 0x0b, 0x64, + 0x61, 0xb0, 0x6e, 0x1a, 0xda, 0x0e, 0xd7, 0xc7, 0x94, 0x22, 0x8a, 0x28, 0x07, 0x49, 0xf6, 0x95, + 0x06, 0x77, 0x57, 0x7c, 0x26, 0x54, 0x94, 0x09, 0xd6, 0x55, 0xbc, 0xe9, 0x68, 0x62, 0x36, 0x14, + 0x51, 0x44, 0xe7, 0x21, 0xe3, 0xe0, 0x4a, 0xc3, 0xd6, 0xdc, 0xdd, 0x72, 0xc5, 0x34, 0x5c, 0xb5, + 0xe2, 0xb2, 0xf7, 0xfe, 0xc5, 0xc3, 0xb7, 0x6e, 0x4e, 0x1f, 0x64, 0xbc, 0x46, 0x21, 0x64, 0x65, + 0x54, 0x54, 0xcd, 0xb1, 0x1a, 0xd2, 0x43, 0x15, 0xbb, 0xaa, 0xa6, 0x3b, 0x59, 0x76, 0xeb, 0x4e, + 0x14, 0x03, 0x63, 0xf9, 0xfc, 0x60, 0xf0, 0x50, 0xe7, 0x3c, 0x64, 0x4c, 0x0b, 0xdb, 0xa1, 0xb4, + 0x56, 0x8a, 0xf6, 0x1c, 0x85, 0x90, 0x95, 0x51, 0x51, 0x25, 0x52, 0x5e, 0x97, 0x4c, 0xb3, 0xd8, + 0x24, 0xb5, 0x1a, 0x9b, 0xfe, 0x59, 0xd0, 0x44, 0xd3, 0x6c, 0x14, 0x8c, 0xdd, 0xe2, 0x23, 0x3e, + 0xf5, 0x28, 0x9e, 0xfc, 0xcd, 0x2f, 0x9f, 0x9c, 0xe0, 0xaa, 0xe1, 0x9f, 0xcd, 0x5c, 0xc4, 0xbb, + 0x64, 0xfa, 0x39, 0xe8, 0x1a, 0x85, 0x24, 0x69, 0xe7, 0x0b, 0xaa, 0xa6, 0x8b, 0xef, 0xd6, 0x28, + 0xbc, 0x84, 0xf2, 0x30, 0xe0, 0xb8, 0xaa, 0xdb, 0x70, 0xf8, 0x15, 0x26, 0xb9, 0x9d, 0xaa, 0x15, + 0x4d, 0xa3, 0xba, 0x4e, 0x21, 0x15, 0x8e, 0x81, 0xce, 0xc3, 0x00, 0xbf, 0x1b, 0xd6, 0xbf, 0x67, + 0xfb, 0xa6, 0x97, 0x00, 0x19, 0x36, 0x91, 0x48, 0x15, 0xeb, 0xb8, 0xc6, 0xd2, 0xaa, 0x6d, 0x95, + 0xac, 0x65, 0xe8, 0x47, 0x65, 0x8b, 0x8b, 0x7b, 0x36, 0x42, 0x2e, 0xa9, 0x28, 0x3d, 0x59, 0x19, + 0xf5, 0xaa, 0xd6, 0x69, 0x0d, 0xba, 0x18, 0x7a, 0xd5, 0xc2, 0xbf, 0xbc, 0x7c, 0x77, 0xbb, 0xe1, + 0x07, 0x74, 0x5a, 0xec, 0xcd, 0x07, 0xdf, 0xc4, 0x9c, 0x87, 0x4c, 0xc3, 0xd8, 0x34, 0x0d, 0xfa, + 0x71, 0x09, 0x9e, 0xdf, 0x93, 0x05, 0x73, 0x3c, 0xa8, 0x1c, 0x51, 0x08, 0x59, 0x19, 0xf5, 0xaa, + 0xf8, 0xee, 0x5e, 0x15, 0x46, 0x7c, 0x28, 0x6a, 0xa8, 0xa9, 0xae, 0x86, 0x7a, 0x17, 0x37, 0xd4, + 0x03, 0xd1, 0x5e, 0x7c, 0x5b, 0x1d, 0xf6, 0x2a, 0x09, 0x1a, 0xba, 0x00, 0xe0, 0xbb, 0x07, 0xba, + 0x47, 0x3f, 0xd4, 0x7e, 0xe2, 0x7d, 0x1f, 0x23, 0x56, 0x8f, 0x3e, 0x2e, 0x7a, 0x27, 0x8c, 0xd7, + 0x35, 0x83, 0x2d, 0xbe, 0xb9, 0x80, 0x09, 0x49, 0xfa, 0x6d, 0xc0, 0xe2, 0xd2, 0xde, 0xf4, 0xe1, + 0xd6, 0xcd, 0xe9, 0x1c, 0x77, 0xa1, 0xcd, 0x24, 0x65, 0x65, 0xac, 0xae, 0x19, 0x64, 0x09, 0x3f, + 0xef, 0xd5, 0xe5, 0xd3, 0x1f, 0x78, 0x75, 0xba, 0x8f, 0x9b, 0x6b, 0x9f, 0x7c, 0x96, 0x9e, 0x1b, + 0x73, 0x33, 0xc3, 0x0e, 0x59, 0x93, 0xa8, 0xa2, 0xc0, 0xef, 0xd0, 0xf9, 0x15, 0xcc, 0xcc, 0x5f, + 0xfa, 0xc3, 0x19, 0x49, 0xfe, 0xbc, 0x04, 0x03, 0xf3, 0x97, 0xd7, 0x54, 0xcd, 0x46, 0x8b, 0x30, + 0xe6, 0x6b, 0x4e, 0xd8, 0xc8, 0x8f, 0xdc, 0xba, 0x39, 0x9d, 0x8d, 0x2a, 0x97, 0x67, 0xe5, 0xbe, + 0x02, 0x0b, 0x33, 0x5f, 0x6c, 0xb7, 0x0c, 0x0e, 0x91, 0x6a, 0x02, 0x91, 0x9b, 0x17, 0xc9, 0x91, + 0x61, 0x96, 0x60, 0x90, 0x71, 0xeb, 0xa0, 0x3c, 0xf4, 0x5b, 0xe4, 0x07, 0xdf, 0xc0, 0x9b, 0x6a, + 0xab, 0xbc, 0x14, 0xde, 0x3b, 0xc4, 0x23, 0x28, 0xf2, 0x87, 0x63, 0x00, 0xf3, 0x97, 0x2f, 0x6f, + 0xd8, 0x9a, 0xa5, 0x63, 0xf7, 0x76, 0x8e, 0x7c, 0x03, 0x0e, 0x04, 0x56, 0x49, 0x76, 0x25, 0x32, + 0xfa, 0x99, 0x5b, 0x37, 0xa7, 0x8f, 0x44, 0x47, 0x1f, 0x00, 0x93, 0x95, 0x71, 0x7f, 0xbd, 0x64, + 0x57, 0x5a, 0x52, 0xad, 0x3a, 0xae, 0x47, 0x35, 0xde, 0x9e, 0x6a, 0x00, 0x2c, 0x48, 0x75, 0xde, + 0x71, 0x5b, 0x8b, 0x76, 0x1d, 0x86, 0x7c, 0x91, 0x38, 0x68, 0x1e, 0x92, 0x2e, 0xff, 0xcd, 0x25, + 0x2c, 0xb7, 0x97, 0xb0, 0x40, 0x13, 0x3b, 0xb7, 0x02, 0x53, 0xfe, 0x73, 0x09, 0xc0, 0xd7, 0xd9, + 0x9f, 0x4f, 0x15, 0x23, 0xae, 0x9c, 0x3b, 0xde, 0xf8, 0xbe, 0x52, 0x35, 0x8e, 0x1d, 0x91, 0xe7, + 0x2f, 0xc6, 0x60, 0xfc, 0x92, 0xf0, 0x3c, 0x3f, 0xf7, 0x32, 0x58, 0x83, 0x41, 0x6c, 0xb8, 0xb6, + 0x86, 0xc5, 0x61, 0xca, 0x43, 0xed, 0x66, 0xbb, 0xc5, 0x98, 0xe8, 0xd7, 0x11, 0xc5, 0x81, 0x33, + 0x27, 0x13, 0x91, 0xc6, 0x2f, 0xc7, 0x21, 0xdb, 0x0e, 0x13, 0xcd, 0xc1, 0x68, 0xc5, 0xc6, 0xec, + 0x46, 0x71, 0x70, 0x1f, 0xb1, 0x98, 0xf3, 0x33, 0xcb, 0x08, 0x80, 0xac, 0x8c, 0x88, 0x1a, 0x1e, + 0x3d, 0x6a, 0x40, 0xd2, 0x3e, 0xa2, 0x76, 0xf4, 0x62, 0x72, 0x6f, 0x79, 0x9e, 0xcc, 0xc3, 0x87, + 0xe8, 0x24, 0x4c, 0x80, 0xc5, 0x8f, 0x11, 0xbf, 0x96, 0x06, 0x90, 0x17, 0x61, 0x54, 0x33, 0x34, + 0x57, 0x53, 0xf5, 0xf2, 0xa6, 0xaa, 0xab, 0xe2, 0xb0, 0x72, 0x6f, 0x59, 0x33, 0x73, 0xf9, 0xbc, + 0xdb, 0x08, 0x39, 0x59, 0x19, 0xe1, 0x35, 0x45, 0x56, 0x81, 0x2e, 0xc0, 0xa0, 0xe8, 0x2a, 0xb1, + 0xaf, 0x6c, 0x43, 0xa0, 0x07, 0x12, 0xbc, 0x5f, 0x8a, 0xc3, 0x98, 0x82, 0xab, 0xff, 0x7f, 0x2a, + 0xf6, 0x36, 0x15, 0xcb, 0x00, 0xcc, 0xdc, 0x89, 0x83, 0xdd, 0xc7, 0x6c, 0x10, 0x87, 0x91, 0x62, + 0x14, 0xe6, 0x1d, 0x37, 0x30, 0x1f, 0x37, 0x63, 0x90, 0x0e, 0xce, 0xc7, 0x5f, 0xd2, 0xa8, 0x84, + 0x16, 0x7d, 0x4f, 0x94, 0xe0, 0xdf, 0x94, 0x6f, 0xe3, 0x89, 0x9a, 0xb4, 0xb7, 0xb3, 0x0b, 0xfa, + 0x9f, 0x31, 0x18, 0x58, 0x53, 0x6d, 0xb5, 0xee, 0xa0, 0x4a, 0x53, 0xa6, 0x29, 0xb6, 0x1f, 0x9b, + 0xfe, 0x72, 0x08, 0xdf, 0xed, 0xe8, 0x92, 0x68, 0x7e, 0xb4, 0x45, 0xa2, 0xf9, 0x16, 0x18, 0x21, + 0xcb, 0xe1, 0xc0, 0x31, 0x35, 0x91, 0xf6, 0x70, 0xf1, 0x90, 0x4f, 0x25, 0xdc, 0xce, 0x56, 0xcb, + 0x97, 0x83, 0xf7, 0xf7, 0x86, 0x08, 0x84, 0xef, 0x98, 0x09, 0xfa, 0xa4, 0xbf, 0x2c, 0x0d, 0x34, + 0xca, 0x0a, 0xd4, 0xd5, 0x6b, 0x25, 0x56, 0x40, 0x4b, 0x80, 0xb6, 0xbd, 0x9d, 0x91, 0xb2, 0x2f, + 0x4e, 0x82, 0x7f, 0xf4, 0xd6, 0xcd, 0xe9, 0x43, 0x0c, 0xbf, 0x19, 0x46, 0x56, 0xc6, 0xfc, 0x4a, + 0x41, 0xed, 0x51, 0x00, 0x32, 0xae, 0x32, 0x7b, 0x9b, 0xc4, 0x96, 0x3b, 0x07, 0x6e, 0xdd, 0x9c, + 0x1e, 0x63, 0x54, 0xfc, 0x36, 0x59, 0x49, 0x91, 0xc2, 0x3c, 0xf9, 0x1d, 0xd0, 0xec, 0x4f, 0x4b, + 0x80, 0x7c, 0x97, 0xaf, 0x60, 0xc7, 0x22, 0xeb, 0x33, 0x92, 0x88, 0x07, 0xb2, 0x66, 0xa9, 0x73, + 0x22, 0xee, 0xe3, 0x8b, 0x44, 0x3c, 0x60, 0x29, 0x4f, 0xf8, 0xee, 0x31, 0xd6, 0xed, 0xa1, 0x0e, + 0x57, 0x91, 0xa8, 0x3f, 0xec, 0x93, 0xff, 0xb5, 0x04, 0x87, 0x9a, 0x34, 0xca, 0x63, 0xf6, 0xaf, + 0x00, 0xb2, 0x03, 0x8d, 0xfc, 0x03, 0xc1, 0x8c, 0xe9, 0x3d, 0x2b, 0xe8, 0x98, 0xdd, 0xe4, 0x77, + 0x6f, 0x9f, 0x87, 0x67, 0x2f, 0xc1, 0xfe, 0x85, 0x04, 0x13, 0xc1, 0xee, 0xbd, 0x81, 0xac, 0x40, + 0x3a, 0xd8, 0x3b, 0x1f, 0xc2, 0x3d, 0xbd, 0x0c, 0x81, 0x73, 0x1f, 0xc2, 0x47, 0xcf, 0xf8, 0xe6, + 0xca, 0xf6, 0xce, 0x1e, 0xee, 0x59, 0x1a, 0x82, 0xa7, 0xa8, 0xd9, 0x26, 0xe8, 0x7c, 0xfc, 0x1f, + 0x09, 0x12, 0x6b, 0xa6, 0xa9, 0x23, 0x13, 0xc6, 0x0c, 0xd3, 0x2d, 0x13, 0xcd, 0xc2, 0xd5, 0xe0, + 0x83, 0xac, 0x54, 0x71, 0x6e, 0x6f, 0x42, 0xfa, 0xc1, 0xcd, 0xe9, 0x66, 0x52, 0xca, 0xa8, 0x61, + 0xba, 0x45, 0x5a, 0xc3, 0xdf, 0x64, 0xbd, 0x13, 0x86, 0xc3, 0x9d, 0x31, 0x2f, 0xf9, 0xec, 0x9e, + 0x3b, 0x0b, 0x93, 0xb9, 0x75, 0x73, 0x7a, 0xc2, 0xb7, 0x18, 0xaf, 0x5a, 0x56, 0xd2, 0x9b, 0x81, + 0xde, 0xd9, 0xd5, 0xe6, 0x1f, 0xbd, 0x3a, 0x2d, 0x9d, 0xf8, 0x8a, 0x04, 0xe0, 0xef, 0x3c, 0xa0, + 0x07, 0xe1, 0x60, 0x71, 0x75, 0x65, 0xbe, 0xbc, 0xbe, 0x51, 0xd8, 0xb8, 0xb4, 0x1e, 0x7e, 0xbc, + 0x24, 0xb6, 0xc7, 0x1d, 0x0b, 0x57, 0xb4, 0x2d, 0x0d, 0x57, 0xd1, 0x7d, 0x30, 0x11, 0x86, 0x26, + 0xa5, 0xd2, 0x7c, 0x46, 0xca, 0xa5, 0x5f, 0xbe, 0x31, 0x93, 0x64, 0xb9, 0x18, 0xae, 0xa2, 0xe3, + 0x70, 0xa0, 0x19, 0x6e, 0x71, 0x65, 0x21, 0x13, 0xcb, 0x0d, 0xbf, 0x7c, 0x63, 0x26, 0xe5, 0x25, + 0x6d, 0x48, 0x06, 0x14, 0x84, 0xe4, 0xf4, 0xe2, 0x39, 0x78, 0xf9, 0xc6, 0xcc, 0x00, 0x13, 0x60, + 0x2e, 0xf1, 0x81, 0x4f, 0x4f, 0xf5, 0xdd, 0xf6, 0x27, 0x4e, 0x7f, 0x3a, 0xd8, 0x76, 0xd7, 0xbb, + 0x86, 0x0d, 0xec, 0x68, 0xce, 0xbe, 0x76, 0xbd, 0x7b, 0xda, 0x49, 0x97, 0x7f, 0xaf, 0x1f, 0xd2, + 0x0b, 0xac, 0x17, 0x7a, 0xf1, 0x04, 0xbd, 0x09, 0x06, 0x2c, 0x1a, 0x46, 0xbc, 0x63, 0xb4, 0x36, + 0x0a, 0xcf, 0x82, 0x8d, 0x77, 0x8f, 0x99, 0x85, 0x1e, 0x87, 0x5f, 0x64, 0x64, 0xf7, 0x8e, 0xfc, + 0x1b, 0xc3, 0xe9, 0x3d, 0xed, 0xf7, 0xb0, 0x9c, 0x85, 0x6f, 0xad, 0x44, 0xe9, 0xc9, 0xec, 0x4e, + 0xe4, 0x06, 0xa9, 0x61, 0x37, 0x97, 0xde, 0x27, 0xc1, 0x01, 0x0a, 0x15, 0xb9, 0x38, 0x26, 0x92, + 0xfd, 0x13, 0xed, 0x86, 0xb0, 0xa4, 0x3a, 0xfe, 0x3d, 0x47, 0x76, 0x97, 0xf9, 0x1e, 0x1e, 0x08, + 0x8f, 0x04, 0x3a, 0x8f, 0x92, 0x95, 0x95, 0x71, 0xbd, 0x09, 0xd3, 0x41, 0x0b, 0xa1, 0xcb, 0xec, + 0x89, 0xbd, 0x6d, 0xb5, 0x07, 0x2f, 0xb6, 0x3f, 0x0d, 0x43, 0xbe, 0x2f, 0x71, 0xf8, 0x1f, 0x34, + 0xeb, 0x3d, 0x76, 0x04, 0x91, 0xd1, 0xfb, 0x25, 0x38, 0xe0, 0x47, 0xf3, 0x20, 0x59, 0xf6, 0x87, + 0xdf, 0x1e, 0xd8, 0xc3, 0x42, 0x28, 0x2a, 0x9c, 0x96, 0x74, 0x65, 0x65, 0xa2, 0xd1, 0x8c, 0x4a, + 0x96, 0x60, 0xc3, 0x41, 0xcf, 0xea, 0x64, 0xc5, 0xb7, 0x8d, 0x7b, 0x77, 0xcd, 0x61, 0x02, 0xec, + 0x8f, 0x51, 0x59, 0xa6, 0xed, 0xe2, 0x2a, 0xdd, 0x90, 0x4b, 0x2a, 0x5e, 0x59, 0x5e, 0x01, 0xd4, + 0x3c, 0xb9, 0xd1, 0xcb, 0xfb, 0xfe, 0xc3, 0x4b, 0x34, 0x01, 0xfd, 0xc1, 0xeb, 0xed, 0xac, 0x90, + 0x4f, 0x7e, 0x80, 0x87, 0xcf, 0xdb, 0x6e, 0xf3, 0xdf, 0x8d, 0xc1, 0x89, 0xe0, 0xf1, 0xd0, 0x8b, + 0x0d, 0x6c, 0xef, 0x7a, 0x26, 0x6a, 0xa9, 0x35, 0xcd, 0x08, 0x3e, 0xef, 0x3b, 0x14, 0x0c, 0xf8, + 0x14, 0x56, 0xc8, 0x49, 0xfe, 0x80, 0x04, 0x43, 0x6b, 0x6a, 0x0d, 0x2b, 0xf8, 0xc5, 0x06, 0x76, + 0xdc, 0x16, 0xcf, 0xa7, 0x26, 0x61, 0xc0, 0xdc, 0xda, 0x12, 0x67, 0xda, 0x09, 0x85, 0x97, 0xc8, + 0x98, 0x75, 0xad, 0xae, 0xb1, 0xab, 0xd0, 0x09, 0x85, 0x15, 0xd0, 0x34, 0x0c, 0x55, 0xcc, 0x86, + 0xc1, 0x4d, 0x2e, 0x9b, 0x10, 0x1f, 0x11, 0x6b, 0x18, 0xcc, 0xe4, 0x88, 0x10, 0x6d, 0x7c, 0x05, + 0xdb, 0x0e, 0xfb, 0x6c, 0x72, 0x52, 0x11, 0x45, 0xf9, 0x29, 0x48, 0x33, 0x4e, 0x78, 0x30, 0x3e, + 0x04, 0x49, 0x7a, 0xcb, 0xd8, 0xe7, 0x67, 0x90, 0x94, 0x2f, 0xb2, 0x47, 0x58, 0x8c, 0x3e, 0x63, + 0x89, 0x15, 0x8a, 0xc5, 0xb6, 0x52, 0x3e, 0xde, 0xdd, 0x6b, 0x30, 0x19, 0x7a, 0x12, 0xfe, 0xed, + 0x7e, 0x38, 0xc0, 0x0f, 0xef, 0x54, 0x4b, 0x3b, 0xb5, 0xed, 0xba, 0xe2, 0x51, 0x20, 0xf0, 0x2c, + 0x58, 0xb5, 0x34, 0x79, 0x17, 0x12, 0x17, 0x5c, 0xd7, 0x42, 0x27, 0xa0, 0xdf, 0x6e, 0xe8, 0x58, + 0x6c, 0x06, 0x79, 0xdb, 0xf5, 0xaa, 0xa5, 0xcd, 0x12, 0x00, 0xa5, 0xa1, 0x63, 0x85, 0x81, 0xa0, + 0x12, 0x4c, 0x6f, 0x35, 0x74, 0x7d, 0xb7, 0x5c, 0xc5, 0xf4, 0xef, 0x40, 0x7a, 0x7f, 0x49, 0x09, + 0x5f, 0xb3, 0x54, 0xf1, 0x3d, 0x66, 0x22, 0x98, 0x23, 0x14, 0x6c, 0x9e, 0x42, 0x89, 0xbf, 0xa2, + 0x54, 0x12, 0x30, 0xf2, 0x1f, 0xc4, 0x20, 0x29, 0x48, 0x13, 0x5d, 0x76, 0xb0, 0x8e, 0x2b, 0xae, + 0x29, 0x0e, 0x53, 0xbc, 0x32, 0x42, 0x10, 0xaf, 0xf1, 0xc9, 0x4b, 0x5d, 0xe8, 0x53, 0x48, 0x81, + 0xd4, 0x79, 0x6f, 0xd5, 0x48, 0x9d, 0xd5, 0x20, 0xf3, 0x99, 0xb0, 0x4c, 0xb1, 0x6a, 0xbb, 0xd0, + 0xa7, 0xd0, 0x12, 0xca, 0xc2, 0x00, 0x31, 0x1a, 0x97, 0xcd, 0x16, 0xa9, 0xe7, 0x65, 0x34, 0x09, + 0xfd, 0x96, 0xea, 0x56, 0xd8, 0x4d, 0x73, 0xd2, 0xc0, 0x8a, 0xe8, 0x31, 0x18, 0x60, 0x9f, 0x1b, + 0x89, 0xfe, 0x91, 0x35, 0x22, 0x0c, 0xf6, 0x5d, 0x57, 0xc2, 0xf7, 0x9a, 0xea, 0xba, 0xd8, 0x36, + 0x08, 0x41, 0x06, 0x8e, 0x10, 0x24, 0x36, 0xcd, 0xea, 0x2e, 0xff, 0xc3, 0x6f, 0xf4, 0x37, 0xff, + 0x4b, 0x53, 0x54, 0x1f, 0xca, 0xb4, 0x91, 0xfd, 0xbd, 0xcb, 0xb4, 0xa8, 0x2c, 0x12, 0xa0, 0x12, + 0x8c, 0xab, 0xd5, 0xaa, 0xc6, 0xfe, 0x06, 0x5b, 0x79, 0x53, 0xa3, 0xce, 0xc3, 0xa1, 0x7f, 0xcd, + 0xb4, 0xdd, 0x5c, 0x20, 0x1f, 0xa1, 0xc8, 0xe1, 0x8b, 0x29, 0x18, 0xb4, 0x18, 0x53, 0xf2, 0x39, + 0x18, 0x6b, 0xe2, 0x94, 0xf0, 0xb7, 0xa3, 0x19, 0x55, 0xf1, 0x80, 0x8f, 0xfc, 0x26, 0x75, 0xf4, + 0x4b, 0xcc, 0xec, 0x98, 0x8a, 0xfe, 0x2e, 0xbe, 0xa7, 0xfd, 0x3b, 0xcf, 0x91, 0xc0, 0x3b, 0x4f, + 0xd5, 0xd2, 0x8a, 0x29, 0x4a, 0x9f, 0xbf, 0xee, 0x2c, 0x34, 0xbf, 0xee, 0xac, 0x61, 0x43, 0x04, + 0x66, 0xd2, 0xa4, 0x5a, 0x9a, 0x43, 0xd5, 0xd1, 0xff, 0x32, 0xb4, 0x73, 0x2e, 0xf0, 0x9b, 0x3e, + 0xf6, 0x4c, 0x2c, 0x14, 0xd6, 0x16, 0x3d, 0x3d, 0xfe, 0x5a, 0x0c, 0x8e, 0x04, 0xf4, 0x38, 0x00, + 0xdc, 0xac, 0xce, 0xb9, 0xd6, 0x1a, 0xdf, 0xc3, 0x47, 0x37, 0x2e, 0x42, 0x82, 0xc0, 0xa3, 0x2e, + 0x7f, 0x07, 0x2a, 0xfb, 0x85, 0x6f, 0xfe, 0x73, 0x39, 0x7c, 0xa0, 0x15, 0x9a, 0x15, 0x4a, 0xa4, + 0xf8, 0xfe, 0xde, 0xe5, 0x97, 0xf1, 0x3f, 0x8a, 0xed, 0xdc, 0x3e, 0x31, 0x46, 0x65, 0xf8, 0xfa, + 0x99, 0xb6, 0x1f, 0x65, 0x60, 0xce, 0xb4, 0x73, 0x7e, 0xb5, 0x07, 0x4f, 0xdd, 0xee, 0x59, 0x5c, + 0xa7, 0x19, 0xec, 0x31, 0x53, 0xbb, 0x06, 0x93, 0xcf, 0x90, 0xbe, 0xfd, 0x15, 0xb4, 0x70, 0xf9, + 0x93, 0xde, 0x41, 0x9f, 0xc4, 0xff, 0x98, 0xac, 0x38, 0xc4, 0x03, 0x9f, 0x3f, 0xbe, 0x76, 0xbc, + 0x6f, 0xb6, 0x6d, 0x28, 0x99, 0x0d, 0x84, 0x11, 0x25, 0x80, 0x29, 0x7f, 0x4e, 0x82, 0x83, 0x4d, + 0x5d, 0x73, 0x1f, 0xbf, 0xd0, 0xe2, 0x05, 0xdf, 0xbe, 0x92, 0x9e, 0x85, 0x16, 0xcc, 0x1e, 0xeb, + 0xca, 0x2c, 0xe3, 0x22, 0xc4, 0xed, 0x93, 0x70, 0x20, 0xcc, 0xac, 0x10, 0xd3, 0xbd, 0x30, 0x12, + 0xde, 0x2c, 0xe6, 0xe2, 0x1a, 0x0e, 0x6d, 0x17, 0xcb, 0xe5, 0xa8, 0x9c, 0xbd, 0xb1, 0x96, 0x20, + 0xe5, 0x81, 0xf2, 0xec, 0xb8, 0xe7, 0xa1, 0xfa, 0x98, 0xf2, 0x87, 0x25, 0x98, 0x09, 0xf7, 0x10, + 0xc8, 0x93, 0xf6, 0xc6, 0xec, 0x6d, 0x9b, 0xe2, 0xef, 0x4b, 0x70, 0x57, 0x07, 0x9e, 0xb8, 0x00, + 0xae, 0xc3, 0x44, 0x60, 0x93, 0x40, 0xb8, 0x70, 0x31, 0xed, 0x27, 0xba, 0x67, 0xa8, 0xde, 0x9a, + 0xf8, 0x30, 0x11, 0xca, 0x67, 0xbf, 0x3b, 0x3d, 0xde, 0xdc, 0xe6, 0x28, 0xe3, 0xcd, 0x0b, 0xfb, + 0xdb, 0xa8, 0x1f, 0xaf, 0x48, 0x70, 0x7f, 0x78, 0xa8, 0x2d, 0x52, 0xdd, 0x9f, 0xd5, 0x3c, 0xfc, + 0x47, 0x09, 0x4e, 0xf4, 0xc2, 0x1c, 0x9f, 0x90, 0x4d, 0x18, 0xf7, 0x93, 0xf0, 0xe8, 0x7c, 0xec, + 0x29, 0xb5, 0x67, 0x5a, 0x8a, 0x3c, 0x6a, 0x77, 0x40, 0xf0, 0x16, 0x37, 0xac, 0xe0, 0x94, 0x7b, + 0x42, 0x0e, 0x6f, 0xf4, 0x0a, 0x21, 0x87, 0xb6, 0x7a, 0x5b, 0xcc, 0x45, 0xac, 0xc5, 0x5c, 0xf8, + 0x59, 0xbb, 0x7c, 0x85, 0xfb, 0xad, 0x16, 0xdb, 0x73, 0x6f, 0x83, 0xf1, 0x16, 0xaa, 0xcc, 0xad, + 0x7a, 0x0f, 0x9a, 0xac, 0xa0, 0x66, 0x65, 0x95, 0x77, 0x61, 0x9a, 0xf6, 0xdb, 0x42, 0xd0, 0x77, + 0x7a, 0xc8, 0x75, 0xee, 0x5b, 0x5a, 0x76, 0xcd, 0xc7, 0xbe, 0x08, 0x03, 0x6c, 0x9e, 0xf9, 0x70, + 0xf7, 0xa1, 0x28, 0x9c, 0x80, 0xfc, 0x71, 0xe1, 0xcb, 0xe6, 0x05, 0xdb, 0xad, 0x6d, 0xa8, 0x97, + 0xb1, 0xde, 0x26, 0x1b, 0x0a, 0x08, 0xe3, 0x3b, 0xc2, 0xab, 0xb5, 0xe6, 0x8e, 0x8b, 0xa3, 0x72, + 0xdb, 0xbc, 0x1a, 0x93, 0xcd, 0x9d, 0x75, 0x5f, 0xbf, 0x26, 0xdc, 0x97, 0x37, 0xa6, 0x2e, 0xee, + 0xeb, 0x67, 0x23, 0x7a, 0xcf, 0x91, 0x75, 0x61, 0xf3, 0x2f, 0xa2, 0x23, 0xfb, 0x91, 0x04, 0x87, + 0xe8, 0xd8, 0x82, 0x7b, 0x14, 0x7b, 0x15, 0xf9, 0x83, 0x80, 0x1c, 0xbb, 0x52, 0x6e, 0x69, 0xdd, + 0x19, 0xc7, 0xae, 0x5c, 0x0e, 0xc5, 0x97, 0x07, 0x01, 0x55, 0x43, 0x3b, 0x51, 0x14, 0x9a, 0x5d, + 0xa0, 0xcb, 0x54, 0x03, 0x1b, 0x1d, 0x2d, 0xa6, 0x33, 0x71, 0x1b, 0xa6, 0xf3, 0xdb, 0x12, 0xe4, + 0x5a, 0x0d, 0x99, 0x4f, 0x9f, 0x06, 0x93, 0xa1, 0xf3, 0x83, 0xe8, 0x0c, 0x3e, 0xd8, 0xcb, 0x2e, + 0x4f, 0xc4, 0x8c, 0x0e, 0xd8, 0xf8, 0x4e, 0xe7, 0x01, 0xd3, 0x61, 0x0d, 0x6d, 0xce, 0xac, 0x7f, + 0x66, 0xe6, 0xf3, 0xe5, 0x26, 0xbf, 0xfa, 0x17, 0x22, 0xf7, 0xbe, 0x06, 0x53, 0x6d, 0xb8, 0xbe, + 0xd3, 0x71, 0x6f, 0xbb, 0xed, 0x64, 0xde, 0xee, 0xf4, 0xfd, 0x51, 0x6e, 0x09, 0xe1, 0xcb, 0xd9, + 0x81, 0xb5, 0x58, 0xab, 0xb7, 0x62, 0xf2, 0x5b, 0xe1, 0x70, 0x4b, 0x2c, 0xce, 0x5b, 0x1e, 0x12, + 0xdb, 0xec, 0xb9, 0x66, 0x48, 0x77, 0xa2, 0x6c, 0x45, 0xb0, 0x29, 0x8e, 0x8c, 0x20, 0x43, 0x49, + 0xaf, 0x99, 0xa6, 0xce, 0xd9, 0x90, 0x2f, 0xc2, 0x58, 0xa0, 0x8e, 0x77, 0x72, 0x16, 0x12, 0x96, + 0x69, 0xea, 0xde, 0x13, 0xe6, 0x76, 0x1b, 0xfb, 0xa6, 0xa9, 0xf3, 0x61, 0x53, 0x78, 0x79, 0x02, + 0x10, 0x23, 0x46, 0xf7, 0xf8, 0x45, 0x17, 0xeb, 0x30, 0x1e, 0xaa, 0xe5, 0x9d, 0xbc, 0xa1, 0xf3, + 0x83, 0xd3, 0x3f, 0x38, 0x00, 0xfd, 0x94, 0x2a, 0xfa, 0x98, 0x14, 0xfa, 0x66, 0xde, 0x6c, 0x3b, + 0x32, 0xad, 0xd7, 0xc4, 0xb9, 0x53, 0x3d, 0xc3, 0xf3, 0x9c, 0xed, 0xc4, 0x7b, 0xfe, 0xdd, 0xeb, + 0x1f, 0x89, 0xdd, 0x83, 0xe4, 0x53, 0x6d, 0x56, 0xe3, 0x01, 0x7b, 0xf9, 0x4c, 0xe8, 0x93, 0x30, + 0x27, 0x7b, 0xeb, 0x4a, 0x70, 0x36, 0xdb, 0x2b, 0x38, 0x67, 0xec, 0x1c, 0x65, 0xec, 0x0c, 0x7a, + 0xa4, 0x3b, 0x63, 0xa7, 0xde, 0x11, 0x36, 0x9a, 0x77, 0xa1, 0xdf, 0x93, 0x60, 0xa2, 0xd5, 0x92, + 0x0e, 0x3d, 0xde, 0x1b, 0x17, 0xcd, 0x29, 0x45, 0xee, 0x89, 0x7d, 0x60, 0xf2, 0xa1, 0x2c, 0xd0, + 0xa1, 0x14, 0xd0, 0x53, 0xfb, 0x18, 0xca, 0xa9, 0xe0, 0xd6, 0xff, 0xff, 0x96, 0xe0, 0x68, 0xc7, + 0x15, 0x12, 0x2a, 0xf4, 0xc6, 0x65, 0x87, 0xdc, 0x29, 0x57, 0x7c, 0x23, 0x24, 0xf8, 0x88, 0x9f, + 0xa1, 0x23, 0xbe, 0x88, 0x16, 0xf7, 0x33, 0xe2, 0x96, 0xe7, 0x2b, 0xe8, 0x77, 0xc2, 0x97, 0x0e, + 0x3b, 0xab, 0x53, 0xd3, 0xc2, 0xa3, 0x8b, 0x61, 0x34, 0x27, 0xb5, 0xf2, 0x73, 0x74, 0x08, 0x0a, + 0x5a, 0x7b, 0x83, 0x93, 0x76, 0xea, 0x1d, 0x61, 0xc7, 0xff, 0x2e, 0xf4, 0xbf, 0xa4, 0xd6, 0x77, + 0x08, 0x1f, 0xeb, 0xc8, 0x62, 0xfb, 0x45, 0x55, 0xee, 0xf1, 0xbd, 0x23, 0xf2, 0x41, 0xd6, 0xe9, + 0x20, 0x6b, 0x08, 0xdf, 0xee, 0x41, 0xb6, 0x9c, 0x44, 0xf4, 0x0d, 0x09, 0x26, 0x5a, 0xad, 0x49, + 0xba, 0x98, 0x65, 0x87, 0x45, 0x56, 0x17, 0xb3, 0xec, 0xb4, 0x00, 0x92, 0xdf, 0x44, 0x07, 0x7f, + 0x16, 0x3d, 0xda, 0x6e, 0xf0, 0x1d, 0x67, 0x91, 0xd8, 0x62, 0xc7, 0x24, 0xbf, 0x8b, 0x2d, 0xf6, + 0xb2, 0x8e, 0xe9, 0x62, 0x8b, 0x3d, 0xad, 0x31, 0xba, 0xdb, 0xa2, 0x37, 0xb2, 0x1e, 0xa7, 0xd1, + 0x41, 0x5f, 0x93, 0x60, 0x38, 0x94, 0x11, 0xa3, 0x87, 0x3b, 0x32, 0xda, 0x6a, 0xc1, 0x90, 0x3b, + 0xbd, 0x17, 0x14, 0x3e, 0x96, 0x45, 0x3a, 0x96, 0x39, 0x54, 0xd8, 0xcf, 0x58, 0xc2, 0xc7, 0xa8, + 0xdf, 0x96, 0x60, 0xbc, 0x45, 0x96, 0xd9, 0xc5, 0x0a, 0xdb, 0x27, 0xcd, 0xb9, 0xc7, 0xf7, 0x8e, + 0xc8, 0x47, 0x75, 0x9e, 0x8e, 0xea, 0x2d, 0xe8, 0xc9, 0xfd, 0x8c, 0x2a, 0x10, 0x9f, 0x6f, 0xfa, + 0x57, 0xb2, 0x02, 0xfd, 0xa0, 0xb3, 0x7b, 0x64, 0x4c, 0x0c, 0xe8, 0xb1, 0x3d, 0xe3, 0xf1, 0xf1, + 0x3c, 0x4b, 0xc7, 0xf3, 0x0c, 0x5a, 0x7d, 0x63, 0xe3, 0x69, 0x0e, 0xeb, 0x5f, 0x6a, 0x7e, 0x1c, + 0xd8, 0x59, 0x8b, 0x5a, 0x26, 0xab, 0xb9, 0x47, 0xf6, 0x84, 0xc3, 0x07, 0xf5, 0x38, 0x1d, 0xd4, + 0x69, 0xf4, 0x50, 0xbb, 0x41, 0x05, 0xee, 0xdd, 0x69, 0xc6, 0x96, 0x79, 0xea, 0x1d, 0x2c, 0x05, + 0x7e, 0x17, 0x7a, 0xb7, 0xb8, 0xf3, 0x74, 0xbc, 0x63, 0xbf, 0x81, 0x3c, 0x36, 0x77, 0x7f, 0x0f, + 0x90, 0x9c, 0xaf, 0x7b, 0x28, 0x5f, 0x53, 0xe8, 0x48, 0x3b, 0xbe, 0x48, 0x2e, 0x8b, 0x3e, 0x28, + 0x79, 0xd7, 0x24, 0x4f, 0x74, 0xa6, 0x1d, 0x4c, 0x76, 0x73, 0x0f, 0xf4, 0x04, 0xcb, 0x39, 0xb9, + 0x8f, 0x72, 0x32, 0x83, 0xa6, 0xda, 0x72, 0xc2, 0x52, 0xdf, 0xdb, 0x7d, 0xa9, 0xe0, 0xe5, 0x83, + 0x30, 0xdd, 0xa6, 0x47, 0xf7, 0x5a, 0x97, 0x33, 0xae, 0x0e, 0x6f, 0x64, 0xbb, 0xbe, 0x81, 0xbd, + 0xdd, 0x1f, 0x2d, 0xef, 0xf1, 0x40, 0xec, 0x5b, 0x09, 0x40, 0xcb, 0x4e, 0x6d, 0xce, 0xc6, 0xec, + 0x0f, 0x28, 0x73, 0x2b, 0x8f, 0x3c, 0xfe, 0x92, 0xde, 0xd0, 0xe3, 0xaf, 0xe5, 0xd0, 0x73, 0xaa, + 0xd8, 0xde, 0x9e, 0x6c, 0xf6, 0xfc, 0xa6, 0x2a, 0xfe, 0x53, 0x79, 0x53, 0xd5, 0xfa, 0xca, 0x75, + 0xe2, 0xf6, 0xbd, 0xcd, 0xe8, 0xdf, 0xef, 0xfb, 0x14, 0xfe, 0x54, 0x72, 0xa0, 0xc3, 0x53, 0xc9, + 0x6c, 0xdb, 0xf7, 0x90, 0x1c, 0x1b, 0x9d, 0x11, 0x9f, 0xf0, 0x1e, 0xec, 0xed, 0x92, 0x2c, 0xff, + 0xc6, 0xb7, 0xbf, 0x85, 0x70, 0x04, 0x72, 0xcd, 0xea, 0xe4, 0x19, 0xf5, 0x47, 0xe2, 0x90, 0x59, + 0x76, 0x6a, 0xa5, 0xaa, 0xe6, 0xde, 0x21, 0x5d, 0x7b, 0xaa, 0xfd, 0x7b, 0x17, 0x74, 0xeb, 0xe6, + 0xf4, 0x08, 0x93, 0x69, 0x07, 0x49, 0xd6, 0x61, 0x34, 0xf2, 0xca, 0x98, 0x6b, 0xd6, 0xfc, 0x7e, + 0x1e, 0x3b, 0x47, 0x48, 0xc9, 0xf4, 0x79, 0x42, 0x40, 0xbf, 0xd1, 0xb5, 0xd6, 0xca, 0xcc, 0x14, + 0xea, 0xc2, 0x9d, 0x7c, 0x1c, 0xe8, 0xcf, 0x59, 0x0e, 0xb2, 0xd1, 0x49, 0xf1, 0x66, 0xec, 0x8f, + 0x25, 0x18, 0x5a, 0x76, 0x44, 0x2a, 0x88, 0x7f, 0x4e, 0x9f, 0x26, 0x3d, 0xe6, 0xfd, 0xfd, 0x8b, + 0x78, 0x6f, 0x7a, 0x2b, 0xfe, 0x26, 0x86, 0x2f, 0x84, 0x03, 0x30, 0x1e, 0x18, 0xa7, 0x37, 0xfe, + 0xdf, 0x8d, 0x51, 0xff, 0x58, 0xc4, 0x35, 0xcd, 0xf0, 0xb2, 0x48, 0xfc, 0x97, 0xf5, 0xe1, 0x85, + 0x2f, 0xe7, 0xc4, 0x7e, 0xe5, 0xbc, 0x43, 0x1d, 0x44, 0x44, 0x9e, 0xde, 0xc6, 0xd7, 0x72, 0xf3, + 0xb3, 0x20, 0x69, 0x0f, 0x5f, 0xdc, 0x89, 0x3c, 0xfe, 0x91, 0xbf, 0x2f, 0xc1, 0xf0, 0xb2, 0x53, + 0xbb, 0x64, 0x54, 0xff, 0x9f, 0xd7, 0xdf, 0x2d, 0x38, 0x10, 0x1a, 0xe9, 0x1d, 0x12, 0xe9, 0xe9, + 0x57, 0x12, 0x10, 0x5f, 0x76, 0x6a, 0xe8, 0x45, 0x18, 0x8d, 0x26, 0x0d, 0x6d, 0x73, 0xc1, 0xe6, + 0x88, 0xd0, 0x7e, 0xbd, 0xd6, 0x3e, 0x7a, 0xa0, 0x1d, 0x18, 0x0e, 0x47, 0x8e, 0xe3, 0x1d, 0x88, + 0x84, 0x20, 0x73, 0x0f, 0xf5, 0x0a, 0xe9, 0x75, 0xf6, 0x76, 0x48, 0x7a, 0x4e, 0xef, 0xee, 0x0e, + 0xd8, 0x02, 0xa8, 0x7d, 0x76, 0xdb, 0xc2, 0xad, 0x10, 0xe9, 0x45, 0x5d, 0x4a, 0x27, 0xe9, 0x45, + 0x60, 0x3b, 0x4a, 0xaf, 0x9d, 0x69, 0x6d, 0x02, 0x04, 0xec, 0xe0, 0xde, 0x0e, 0x14, 0x7c, 0xb0, + 0xdc, 0xc9, 0x9e, 0xc0, 0xbc, 0x43, 0xa7, 0xdb, 0x9c, 0x8c, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xf4, 0x7d, 0x2d, 0x10, 0xb6, 0x9e, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) From 8059146d6e3759431c48c3401911f791487f28e7 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 20:29:30 -0600 Subject: [PATCH 5/8] use default config when adding flags --- server/start.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/start.go b/server/start.go index 774b75f68957..f0d0c5123929 100644 --- a/server/start.go +++ b/server/start.go @@ -12,6 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" abciclient "github.com/tendermint/tendermint/abci/client" + tmcfg "github.com/tendermint/tendermint/config" "github.com/spf13/cobra" "google.golang.org/grpc" @@ -165,10 +166,8 @@ which accepts a path for the resulting pprof file. cmd.Flags().Uint64(FlagStateSyncSnapshotInterval, 0, "State sync snapshot interval") cmd.Flags().Uint32(FlagStateSyncSnapshotKeepRecent, 2, "State sync snapshot to keep") - serverCtx := GetServerContextFromCmd(cmd) - // add support for all Tendermint-specific command line options - tcmd.AddNodeFlags(cmd, serverCtx.Config) + tcmd.AddNodeFlags(cmd, tmcfg.DefaultConfig()) return cmd } From e73ef97142b76f62c1641a96c5e830c1abc042bb Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 20:45:11 -0600 Subject: [PATCH 6/8] use latest version of celestia-core --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7e18ab607f3f..670899e5faa3 100644 --- a/go.mod +++ b/go.mod @@ -63,4 +63,4 @@ replace github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210 // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 replace github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 -replace github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165 +replace github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v0.0.2-0.20220215024343-11120b432118 diff --git a/go.sum b/go.sum index 24746154cb7e..a29ab3bbad81 100644 --- a/go.sum +++ b/go.sum @@ -186,8 +186,8 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165 h1:ULEU0DqgcmxKosONdR5dPpwS0lu+sYgAQyKFdhzBK4s= -github.com/celestiaorg/celestia-core v0.0.2-0.20220215003001-d78a80914165/go.mod h1:cU7pJ1D3h6gd1jItA5T4QGfw8XcUAoZqYj92WcccQb8= +github.com/celestiaorg/celestia-core v0.0.2-0.20220215024343-11120b432118 h1:0euuGzd4Ttc61ZVgk3fCqD4cLa7+RcQuMgqIkKWBUfM= +github.com/celestiaorg/celestia-core v0.0.2-0.20220215024343-11120b432118/go.mod h1:cU7pJ1D3h6gd1jItA5T4QGfw8XcUAoZqYj92WcccQb8= github.com/celestiaorg/go-leopard v0.1.0 h1:28z2EkvKJIez5J9CEaiiUEC+OxalRLtTGJJ1oScfE1g= github.com/celestiaorg/go-leopard v0.1.0/go.mod h1:NtO/rjlB8dw2aq7jr06vZFKGvryQcTDXaNHelmPNOAM= github.com/celestiaorg/merkletree v0.0.0-20210714075610-a84dc3ddbbe4 h1:CJdIpo8n5MFP2MwK0gSRcOVlDlFdQJO1p+FqdxYzmvc= From 1caf9c3cf4c9609800bf732390902ff673033b17 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Feb 2022 20:51:27 -0600 Subject: [PATCH 7/8] update go version in CI --- .github/workflows/lint.yml | 2 +- .github/workflows/sims.yml | 12 ++++++------ .github/workflows/tag.yml | 2 +- .github/workflows/test.yml | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a205981912b2..97cd90d025c9 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.4 with: - go-version: 1.16 + go-version: 1.17 - uses: technote-space/get-diff-action@v5 id: git_diff with: diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml index f239c877f050..21b7df21a4d7 100644 --- a/.github/workflows/sims.yml +++ b/.github/workflows/sims.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - run: make build @@ -26,7 +26,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - name: Install runsim @@ -43,7 +43,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - uses: technote-space/get-diff-action@v4 @@ -69,7 +69,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - uses: technote-space/get-diff-action@v4 @@ -97,7 +97,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - uses: technote-space/get-diff-action@v4 @@ -125,7 +125,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - uses: technote-space/get-diff-action@v4 diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index 70365ef17923..19d2d9f1f5ed 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -15,7 +15,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Unshallow run: git fetch --prune --unshallow - name: Create release diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 782458272335..c739260a1653 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - name: install tparse @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - uses: technote-space/get-diff-action@v4 id: git_diff with: @@ -49,7 +49,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - name: Display go version run: go version - uses: technote-space/get-diff-action@v4 @@ -102,7 +102,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - uses: technote-space/get-diff-action@v4 with: PATTERNS: | @@ -180,7 +180,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - uses: technote-space/get-diff-action@v4 with: PATTERNS: | @@ -224,7 +224,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: - go-version: 1.16 + go-version: 1.17 - uses: technote-space/get-diff-action@v4 id: git_diff with: From 80bd0e936f8aa6ccc6b33ac60849f5b029c3f086 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Tue, 15 Feb 2022 15:37:28 -0600 Subject: [PATCH 8/8] switch to using the newer encoding config and networking testutil --- baseapp/block_gas_test.go | 2 +- client/context_test.go | 3 +- client/grpc/tmservice/service_test.go | 2 +- client/grpc_query_test.go | 3 +- client/keys/add_test.go | 2 +- client/rpc/rpc_test.go | 2 +- codec/any_test.go | 18 +- crypto/keys/multisig/multisig_test.go | 2 +- go.mod | 2 +- server/export_test.go | 2 +- server/grpc/grpc_web_test.go | 2 +- server/grpc/server_test.go | 3 +- simapp/app.go | 2 +- simapp/app_test.go | 4 +- simapp/params/encoding.go | 7 +- simapp/params/proto.go | 6 +- simapp/simd/cmd/genaccounts_test.go | 5 +- simapp/simd/cmd/root.go | 4 +- simapp/simd/cmd/testnet_test.go | 6 +- simapp/test_helpers.go | 2 +- testutil/network/network.go | 299 ++++++++++++++---- testutil/network/network_test.go | 10 +- x/auth/client/cli/encode_test.go | 4 +- x/auth/client/testutil/suite.go | 2 +- x/auth/keeper/keeper_test.go | 2 +- x/auth/legacy/v040/migrate_test.go | 2 +- x/auth/legacy/v043/store_test.go | 2 +- x/auth/simulation/decoder_test.go | 2 +- x/auth/tx/service_test.go | 2 +- x/auth/types/account_retriever_test.go | 3 +- x/auth/types/common_test.go | 2 +- x/auth/vesting/client/testutil/suite.go | 2 +- x/authz/client/rest/grpc_query_test.go | 3 +- x/authz/client/testutil/tx.go | 2 +- x/authz/simulation/decoder_test.go | 2 +- x/bank/client/rest/query_test.go | 3 +- x/bank/client/testutil/suite.go | 2 +- x/bank/keeper/keeper_test.go | 2 +- x/bank/legacy/v040/migrate_test.go | 2 +- x/bank/legacy/v043/json_test.go | 2 +- x/bank/legacy/v043/store_test.go | 10 +- x/capability/simulation/decoder_test.go | 2 +- x/crisis/client/testsuite/suite.go | 2 +- x/distribution/client/cli/tx_test.go | 2 +- x/distribution/client/rest/grpc_query_test.go | 2 +- x/distribution/client/testutil/suite.go | 2 +- x/distribution/simulation/decoder_test.go | 2 +- x/evidence/client/testutil/suite.go | 2 +- x/evidence/keeper/querier_test.go | 2 +- x/evidence/legacy/v040/migrate_test.go | 2 +- x/feegrant/client/testutil/suite.go | 2 +- x/feegrant/simulation/decoder_test.go | 2 +- x/genutil/client/testutil/suite.go | 2 +- x/genutil/config/priv_validator_key.json | 11 + x/genutil/data/priv_validator_state.json | 5 + x/genutil/gentx_test.go | 4 +- x/gov/client/rest/grpc_query_test.go | 3 +- x/gov/client/testutil/deposits.go | 2 +- x/gov/client/testutil/suite.go | 2 +- x/gov/keeper/common_test.go | 2 +- x/gov/legacy/v040/migrate_test.go | 2 +- x/gov/legacy/v043/json_test.go | 2 +- x/gov/legacy/v043/store_test.go | 2 +- x/gov/simulation/decoder_test.go | 2 +- x/mint/client/rest/grpc_query_test.go | 3 +- x/mint/client/testutil/suite.go | 2 +- x/mint/simulation/decoder_test.go | 2 +- x/params/client/rest/grpc_query_test.go | 2 +- x/params/client/testutil/suite.go | 2 +- x/params/keeper/common_test.go | 2 +- x/params/types/subspace_test.go | 4 +- x/slashing/client/rest/grpc_query_test.go | 2 +- x/slashing/client/testutil/suite.go | 2 +- x/slashing/legacy/v040/migrate_test.go | 2 +- x/slashing/simulation/decoder_test.go | 2 +- x/staking/client/rest/grpc_query_test.go | 3 +- x/staking/client/testutil/suite.go | 2 +- x/staking/keeper/grpc_query_test.go | 2 +- x/staking/legacy/v040/migrate_test.go | 2 +- x/staking/simulation/decoder_test.go | 2 +- x/upgrade/client/testutil/suite.go | 2 +- 81 files changed, 363 insertions(+), 175 deletions(-) create mode 100644 x/genutil/config/priv_validator_key.json create mode 100644 x/genutil/data/priv_validator_state.json diff --git a/baseapp/block_gas_test.go b/baseapp/block_gas_test.go index 9a1be3a5f48f..8f64795bee11 100644 --- a/baseapp/block_gas_test.go +++ b/baseapp/block_gas_test.go @@ -67,7 +67,7 @@ func TestBaseApp_BlockGas(t *testing.T) { &testdata.TestMsg{}, ) app = simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, map[int64]bool{}, "", 0, encCfg, simapp.EmptyAppOptions{}, routerOpt) - genState := simapp.NewDefaultGenesisState(encCfg.Marshaler) + genState := simapp.NewDefaultGenesisState(encCfg.Codec) stateBytes, err := json.MarshalIndent(genState, "", " ") require.NoError(t, err) app.InitChain(abci.RequestInitChain{ diff --git a/client/context_test.go b/client/context_test.go index 9c2e8d4ab19e..89912e8753b9 100644 --- a/client/context_test.go +++ b/client/context_test.go @@ -105,7 +105,8 @@ func TestCLIQueryConn(t *testing.T) { cfg := network.DefaultConfig() cfg.NumValidators = 1 - n := network.New(t, cfg) + n, _ := network.New(t, t.TempDir(), network.DefaultConfig()) + require.NotNil(t, n) defer n.Cleanup() testClient := testdata.NewQueryClient(n.Validators[0].ClientCtx) diff --git a/client/grpc/tmservice/service_test.go b/client/grpc/tmservice/service_test.go index 3de92411c9f7..f28d2b2064e0 100644 --- a/client/grpc/tmservice/service_test.go +++ b/client/grpc/tmservice/service_test.go @@ -32,7 +32,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) s.Require().NotNil(s.network) diff --git a/client/grpc_query_test.go b/client/grpc_query_test.go index c4d2f024a07b..54f9f450bcd6 100644 --- a/client/grpc_query_test.go +++ b/client/grpc_query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package client_test @@ -27,7 +28,7 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), network.DefaultConfig()) + s.network, _ = network.New(s.T(), s.T().TempDir(), network.DefaultConfig()) s.Require().NotNil(s.network) _, err := s.network.WaitForHeight(2) diff --git a/client/keys/add_test.go b/client/keys/add_test.go index f59848a8d1cf..01ee10f03811 100644 --- a/client/keys/add_test.go +++ b/client/keys/add_test.go @@ -193,7 +193,7 @@ func Test_runAddCmdDryRun(t *testing.T) { kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn) require.NoError(t, err) - appCodec := simapp.MakeTestEncodingConfig().Marshaler + appCodec := simapp.MakeTestEncodingConfig().Codec clientCtx := client.Context{}. WithJSONCodec(appCodec). WithKeyringDir(kbHome). diff --git a/client/rpc/rpc_test.go b/client/rpc/rpc_test.go index 34eebde868fb..d04dcdd8bbe1 100644 --- a/client/rpc/rpc_test.go +++ b/client/rpc/rpc_test.go @@ -23,7 +23,7 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), network.DefaultConfig()) + s.network, _ = network.New(s.T(), s.T().TempDir(), network.DefaultConfig()) s.Require().NotNil(s.network) s.Require().NoError(s.network.WaitForNextBlock()) diff --git a/codec/any_test.go b/codec/any_test.go index 8b5ecaca3c07..92bb9d0d5004 100644 --- a/codec/any_test.go +++ b/codec/any_test.go @@ -68,11 +68,11 @@ func TestMarshalProtoPubKey(t *testing.T) { pkAny, err := codectypes.NewAnyWithValue(pk) require.NoError(err) - bz, err := ccfg.Marshaler.MarshalJSON(pkAny) + bz, err := ccfg.Codec.MarshalJSON(pkAny) require.NoError(err) var pkAny2 codectypes.Any - err = ccfg.Marshaler.UnmarshalJSON(bz, &pkAny2) + err = ccfg.Codec.UnmarshalJSON(bz, &pkAny2) require.NoError(err) // Before getting a cached value we need to unpack it. // Normally this happens in types which implement UnpackInterfaces @@ -84,11 +84,11 @@ func TestMarshalProtoPubKey(t *testing.T) { // **** test binary serialization **** - bz, err = ccfg.Marshaler.Marshal(pkAny) + bz, err = ccfg.Codec.Marshal(pkAny) require.NoError(err) var pkAny3 codectypes.Any - err = ccfg.Marshaler.Unmarshal(bz, &pkAny3) + err = ccfg.Codec.Unmarshal(bz, &pkAny3) require.NoError(err) err = ccfg.InterfaceRegistry.UnpackAny(&pkAny3, &pkI) require.NoError(err) @@ -106,11 +106,11 @@ func TestMarshalProtoInterfacePubKey(t *testing.T) { // **** test JSON serialization **** - bz, err := ccfg.Marshaler.MarshalInterfaceJSON(pk) + bz, err := ccfg.Codec.MarshalInterfaceJSON(pk) require.NoError(err) var pk3 cryptotypes.PubKey - err = ccfg.Marshaler.UnmarshalInterfaceJSON(bz, &pk3) + err = ccfg.Codec.UnmarshalInterfaceJSON(bz, &pk3) require.NoError(err) require.True(pk3.Equals(pk)) @@ -119,18 +119,18 @@ func TestMarshalProtoInterfacePubKey(t *testing.T) { // Any can't implement UnpackInterfacesMessage interface. So Any is not // automatically unpacked and we won't get a value. var pkAny codectypes.Any - err = ccfg.Marshaler.UnmarshalJSON(bz, &pkAny) + err = ccfg.Codec.UnmarshalJSON(bz, &pkAny) require.NoError(err) ifc := pkAny.GetCachedValue() require.Nil(ifc) // **** test binary serialization **** - bz, err = ccfg.Marshaler.MarshalInterface(pk) + bz, err = ccfg.Codec.MarshalInterface(pk) require.NoError(err) var pk2 cryptotypes.PubKey - err = ccfg.Marshaler.UnmarshalInterface(bz, &pk2) + err = ccfg.Codec.UnmarshalInterface(bz, &pk2) require.NoError(err) require.True(pk2.Equals(pk)) } diff --git a/crypto/keys/multisig/multisig_test.go b/crypto/keys/multisig/multisig_test.go index 8fb93d3524c4..93ef120fabd5 100644 --- a/crypto/keys/multisig/multisig_test.go +++ b/crypto/keys/multisig/multisig_test.go @@ -352,7 +352,7 @@ func TestDisplay(t *testing.T) { func() { require.Empty(msig.String()) }, ) ccfg := simapp.MakeTestEncodingConfig() - bz, err := ccfg.Marshaler.MarshalInterfaceJSON(msig) + bz, err := ccfg.Codec.MarshalInterfaceJSON(msig) require.NoError(err) expectedPrefix := `{"@type":"/cosmos.crypto.multisig.LegacyAminoPubKey","threshold":2,"public_keys":[{"@type":"/cosmos.crypto.secp256k1.PubKey"` require.True(strings.HasPrefix(string(bz), expectedPrefix)) diff --git a/go.mod b/go.mod index 670899e5faa3..c2900979bb3a 100644 --- a/go.mod +++ b/go.mod @@ -63,4 +63,4 @@ replace github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210 // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 replace github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 -replace github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v0.0.2-0.20220215024343-11120b432118 +replace github.com/tendermint/tendermint => /home/evan/go/src/github.com/celestiaorg/celestia-core // v0.0.2-0.20220215024343-11120b432118 diff --git a/server/export_test.go b/server/export_test.go index 61863fa6830d..b08a3ea58d0b 100644 --- a/server/export_test.go +++ b/server/export_test.go @@ -135,7 +135,7 @@ func setupApp(t *testing.T, tempDir string) (*simapp.SimApp, context.Context, *t serverCtx.Config.RootDir = tempDir clientCtx := client.Context{}.WithCodec(app.AppCodec()) - genDoc := newDefaultGenesisDoc(encCfg.Marshaler) + genDoc := newDefaultGenesisDoc(encCfg.Codec) require.NoError(t, saveGenesisFile(genDoc, serverCtx.Config.GenesisFile())) app.InitChain( diff --git a/server/grpc/grpc_web_test.go b/server/grpc/grpc_web_test.go index fa657ae941ad..5a5bc77c1c50 100644 --- a/server/grpc/grpc_web_test.go +++ b/server/grpc/grpc_web_test.go @@ -45,7 +45,7 @@ func (s *GRPCWebTestSuite) SetupSuite() { cfg := network.DefaultConfig() cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) s.Require().NotNil(s.network) _, err := s.network.WaitForHeight(2) diff --git a/server/grpc/server_test.go b/server/grpc/server_test.go index 2c18754e03c0..11f920cfe488 100644 --- a/server/grpc/server_test.go +++ b/server/grpc/server_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package grpc_test @@ -48,7 +49,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.app = simapp.Setup(false) s.cfg = network.DefaultConfig() s.cfg.NumValidators = 1 - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) s.Require().NotNil(s.network) _, err := s.network.WaitForHeight(2) diff --git a/simapp/app.go b/simapp/app.go index d30301c14c8d..32eddc26f537 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -192,7 +192,7 @@ func NewSimApp( appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), ) *SimApp { - appCodec := encodingConfig.Marshaler + appCodec := encodingConfig.Codec legacyAmino := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry diff --git a/simapp/app_test.go b/simapp/app_test.go index 33ff7748d1c1..e5c3e46bbabc 100644 --- a/simapp/app_test.go +++ b/simapp/app_test.go @@ -48,7 +48,7 @@ func TestSimAppExportAndBlockedAddrs(t *testing.T) { ) } - genesisState := NewDefaultGenesisState(encCfg.Marshaler) + genesisState := NewDefaultGenesisState(encCfg.Codec) stateBytes, err := json.MarshalIndent(genesisState, "", " ") require.NoError(t, err) @@ -244,7 +244,7 @@ func TestUpgradeStateOnGenesis(t *testing.T) { db := dbm.NewMemDB() logger, _ := log.NewDefaultLogger("plain", "info") app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, encCfg, EmptyAppOptions{}) - genesisState := NewDefaultGenesisState(encCfg.Marshaler) + genesisState := NewDefaultGenesisState(encCfg.Codec) stateBytes, err := json.MarshalIndent(genesisState, "", " ") require.NoError(t, err) diff --git a/simapp/params/encoding.go b/simapp/params/encoding.go index 2cd16263a899..8ff9ea04b39b 100644 --- a/simapp/params/encoding.go +++ b/simapp/params/encoding.go @@ -10,8 +10,7 @@ import ( // This is provided for compatibility between protobuf and amino implementations. type EncodingConfig struct { InterfaceRegistry types.InterfaceRegistry - // NOTE: this field will be renamed to Codec - Marshaler codec.Codec - TxConfig client.TxConfig - Amino *codec.LegacyAmino + Codec codec.Codec + TxConfig client.TxConfig + Amino *codec.LegacyAmino } diff --git a/simapp/params/proto.go b/simapp/params/proto.go index a752d1079077..2a38fff04008 100644 --- a/simapp/params/proto.go +++ b/simapp/params/proto.go @@ -16,12 +16,12 @@ import ( func MakeTestEncodingConfig() EncodingConfig { cdc := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() - marshaler := codec.NewProtoCodec(interfaceRegistry) + codec := codec.NewProtoCodec(interfaceRegistry) return EncodingConfig{ InterfaceRegistry: interfaceRegistry, - Marshaler: marshaler, - TxConfig: tx.NewTxConfig(marshaler, tx.DefaultSignModes), + Codec: codec, + TxConfig: tx.NewTxConfig(codec, tx.DefaultSignModes), Amino: cdc, } } diff --git a/simapp/simd/cmd/genaccounts_test.go b/simapp/simd/cmd/genaccounts_test.go index 8ed82d0918ab..bdb6a7a562a7 100644 --- a/simapp/simd/cmd/genaccounts_test.go +++ b/simapp/simd/cmd/genaccounts_test.go @@ -3,10 +3,11 @@ package cmd_test import ( "context" "fmt" + "testing" + "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" - "testing" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -72,7 +73,7 @@ func TestAddGenesisAccountCmd(t *testing.T) { cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) - appCodec := simapp.MakeTestEncodingConfig().Marshaler + appCodec := simapp.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, appCodec) require.NoError(t, err) diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 679723c0bc68..e85734ca6225 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -39,7 +39,7 @@ import ( func NewRootCmd() (*cobra.Command, params.EncodingConfig) { encodingConfig := simapp.MakeTestEncodingConfig() initClientCtx := client.Context{}. - WithCodec(encodingConfig.Marshaler). + WithCodec(encodingConfig.Codec). WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). @@ -166,7 +166,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { ) // add rosetta - rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler)) + rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec)) } func addModuleInitFlags(startCmd *cobra.Command) { diff --git a/simapp/simd/cmd/testnet_test.go b/simapp/simd/cmd/testnet_test.go index da58fd454d82..01b25a464124 100644 --- a/simapp/simd/cmd/testnet_test.go +++ b/simapp/simd/cmd/testnet_test.go @@ -24,12 +24,12 @@ func Test_TestnetCmd(t *testing.T) { cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) - err = genutiltest.ExecInitCmd(simapp.ModuleBasics, home, encodingConfig.Marshaler) + err = genutiltest.ExecInitCmd(simapp.ModuleBasics, home, encodingConfig.Codec) require.NoError(t, err) serverCtx := server.NewContext(viper.New(), cfg, logger) clientCtx := client.Context{}. - WithCodec(encodingConfig.Marshaler). + WithCodec(encodingConfig.Codec). WithHomeDir(home). WithTxConfig(encodingConfig.TxConfig) @@ -45,6 +45,6 @@ func Test_TestnetCmd(t *testing.T) { appState, _, err := genutiltypes.GenesisStateFromGenFile(genFile) require.NoError(t, err) - bankGenState := banktypes.GetGenesisStateFromAppState(encodingConfig.Marshaler, appState) + bankGenState := banktypes.GetGenesisStateFromAppState(encodingConfig.Codec, appState) require.NotEmpty(t, bankGenState.Supply.String()) } diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index 42f7d02eeba0..fd7fb8cb86c8 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -56,7 +56,7 @@ func setup(withGenesis bool, invCheckPeriod uint) (*SimApp, GenesisState) { encCdc := MakeTestEncodingConfig() app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, encCdc, EmptyAppOptions{}) if withGenesis { - return app, NewDefaultGenesisState(encCdc.Marshaler) + return app, NewDefaultGenesisState(encCdc.Codec) } return app, GenesisState{} } diff --git a/testutil/network/network.go b/testutil/network/network.go index 941b8247553d..194f6d19f833 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -6,19 +6,18 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "net/http" "net/url" "os" "path/filepath" + "strings" "sync" "testing" "time" - tmflags "github.com/cosmos/cosmos-sdk/libs/flags" - "github.com/stretchr/testify/require" - tmcfg "github.com/tendermint/tendermint/config" - "github.com/tendermint/tendermint/libs/log" + "github.com/rs/zerolog" + "github.com/spf13/cobra" + "github.com/tendermint/tendermint/config" tmrand "github.com/tendermint/tendermint/libs/rand" "github.com/tendermint/tendermint/libs/service" tmclient "github.com/tendermint/tendermint/rpc/client" @@ -89,10 +88,14 @@ type Config struct { StakingTokens sdk.Int // the amount of tokens each validator has available to stake BondedTokens sdk.Int // the amount of tokens each validator stakes PruningStrategy string // the pruning strategy each validator will have - EnableLogging bool // enable Tendermint logging to STDOUT + EnableTMLogging bool // enable Tendermint logging to STDOUT CleanupDir bool // remove base temporary directory during cleanup SigningAlgo string // signing algorithm for keys - KeyringOptions []keyring.Option + KeyringOptions []keyring.Option // keyring configuration options + RPCAddress string // RPC listen address (including port) + APIAddress string // REST API listen address (including port) + GRPCAddress string // GRPC server listen address (including port) + PrintMnemonic bool // print the mnemonic of first validator as log output for testing } // DefaultConfig returns a sane default configuration suitable for nearly all @@ -100,18 +103,16 @@ type Config struct { func DefaultConfig() Config { encCfg := simapp.MakeTestEncodingConfig() - rnd := tmrand.NewRand().Int63() - return Config{ - Codec: encCfg.Marshaler, + Codec: encCfg.Codec, TxConfig: encCfg.TxConfig, LegacyAmino: encCfg.Amino, InterfaceRegistry: encCfg.InterfaceRegistry, AccountRetriever: authtypes.AccountRetriever{}, AppConstructor: NewAppConstructor(encCfg), - GenesisState: simapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), + GenesisState: simapp.ModuleBasics.DefaultGenesis(encCfg.Codec), TimeoutCommit: 2 * time.Second, - ChainID: "chain-" + fmt.Sprintf("%d", rnd), + ChainID: "chain-" + tmrand.Str(6), NumValidators: 4, BondDenom: sdk.DefaultBondDenom, MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), @@ -122,6 +123,7 @@ func DefaultConfig() Config { CleanupDir: true, SigningAlgo: string(hd.Secp256k1Type), KeyringOptions: []keyring.Option{}, + PrintMnemonic: false, } } @@ -137,11 +139,14 @@ type ( // to create networks. In addition, only the first validator will have a valid // RPC and API server/client. Network struct { - T *testing.T + Logger Logger BaseDir string Validators []*Validator Config Config + + ctx context.Context + cancel context.CancelFunc } // Validator defines an in-process Tendermint validator node. Through this object, @@ -169,24 +174,50 @@ type ( } ) -// New creates a new Network for integration tests. -func New(t *testing.T, cfg Config) *Network { +// Logger is a network logger interface that exposes testnet-level Log() methods for an in-process testing network +// This is not to be confused with logging that may happen at an individual node or validator level +type Logger interface { + Log(args ...interface{}) + Logf(format string, args ...interface{}) +} + +var _ Logger = (*testing.T)(nil) +var _ Logger = (*CLILogger)(nil) + +type CLILogger struct { + cmd *cobra.Command +} + +func (s CLILogger) Log(args ...interface{}) { + s.cmd.Println(args...) +} + +func (s CLILogger) Logf(format string, args ...interface{}) { + s.cmd.Printf(format, args...) +} + +func NewCLILogger(cmd *cobra.Command) CLILogger { + return CLILogger{cmd} +} + +// New creates a new Network for integration tests or in-process testnets run via the CLI +func New(l Logger, baseDir string, cfg Config) (*Network, error) { // only one caller/test can create and use a network at a time - t.Log("acquiring test network lock") + l.Log("acquiring test network lock") lock.Lock() - baseDir, err := ioutil.TempDir(t.TempDir(), cfg.ChainID) - require.NoError(t, err) - t.Logf("created temporary directory: %s", baseDir) + ctx, cancel := context.WithCancel(context.TODO()) network := &Network{ - T: t, + Logger: l, BaseDir: baseDir, Validators: make([]*Validator, cfg.NumValidators), Config: cfg, + ctx: ctx, + cancel: cancel, } - t.Log("preparing test network...") + l.Logf("preparing test network with chain-id \"%s\"\n", cfg.ChainID) monikers := make([]string, cfg.NumValidators) nodeIDs := make([]string, cfg.NumValidators) @@ -212,6 +243,7 @@ func New(t *testing.T, cfg Config) *Network { ctx := server.NewDefaultContext() tmCfg := ctx.Config tmCfg.Consensus.TimeoutCommit = cfg.TimeoutCommit + tmCfg.Mode = config.ModeValidator // Only allow the first validator to expose an RPC, API and gRPC // server/client due to Tendermint in-process constraints. @@ -219,34 +251,58 @@ func New(t *testing.T, cfg Config) *Network { tmCfg.RPC.ListenAddress = "" appCfg.GRPC.Enable = false appCfg.GRPCWeb.Enable = false + apiListenAddr := "" if i == 0 { - apiListenAddr, _, err := server.FreeTCPAddr() - require.NoError(t, err) - appCfg.API.Address = apiListenAddr + if cfg.APIAddress != "" { + apiListenAddr = cfg.APIAddress + } else { + var err error + apiListenAddr, _, err = server.FreeTCPAddr() + if err != nil { + return nil, err + } + } + appCfg.API.Address = apiListenAddr apiURL, err := url.Parse(apiListenAddr) - require.NoError(t, err) + if err != nil { + return nil, err + } apiAddr = fmt.Sprintf("http://%s:%s", apiURL.Hostname(), apiURL.Port()) - rpcAddr, _, err := server.FreeTCPAddr() - require.NoError(t, err) - tmCfg.RPC.ListenAddress = rpcAddr + if cfg.RPCAddress != "" { + tmCfg.RPC.ListenAddress = cfg.RPCAddress + } else { + rpcAddr, _, err := server.FreeTCPAddr() + if err != nil { + return nil, err + } + tmCfg.RPC.ListenAddress = rpcAddr + } - _, grpcPort, err := server.FreeTCPAddr() - require.NoError(t, err) - appCfg.GRPC.Address = fmt.Sprintf("0.0.0.0:%s", grpcPort) + if cfg.GRPCAddress != "" { + appCfg.GRPC.Address = cfg.GRPCAddress + } else { + _, grpcPort, err := server.FreeTCPAddr() + if err != nil { + return nil, err + } + appCfg.GRPC.Address = fmt.Sprintf("0.0.0.0:%s", grpcPort) + } appCfg.GRPC.Enable = true _, grpcWebPort, err := server.FreeTCPAddr() - require.NoError(t, err) + if err != nil { + return nil, err + } appCfg.GRPCWeb.Address = fmt.Sprintf("0.0.0.0:%s", grpcWebPort) appCfg.GRPCWeb.Enable = true } - logger := log.NewNopLogger() - if cfg.EnableLogging { - logger = log.MustNewDefaultLogger("plain", "info") - logger, _ = tmflags.ParseLogLevel("info", logger, tmcfg.DefaultLogLevel) + logger := server.ZeroLogWrapper{Logger: zerolog.Nop()} + if cfg.EnableTMLogging { + logWriter := zerolog.ConsoleWriter{Out: os.Stderr} + logger = server.ZeroLogWrapper{Logger: zerolog.New(logWriter).Level(zerolog.InfoLevel).With().Timestamp().Logger()} } ctx.Logger = logger @@ -256,35 +312,53 @@ func New(t *testing.T, cfg Config) *Network { clientDir := filepath.Join(network.BaseDir, nodeDirName, "simcli") gentxsDir := filepath.Join(network.BaseDir, "gentxs") - require.NoError(t, os.MkdirAll(filepath.Join(nodeDir, "config"), 0755)) - require.NoError(t, os.MkdirAll(clientDir, 0755)) + err := os.MkdirAll(filepath.Join(nodeDir, "config"), 0755) + if err != nil { + return nil, err + } + + err = os.MkdirAll(clientDir, 0755) + if err != nil { + return nil, err + } tmCfg.SetRoot(nodeDir) tmCfg.Moniker = nodeDirName monikers[i] = nodeDirName proxyAddr, _, err := server.FreeTCPAddr() - require.NoError(t, err) + if err != nil { + return nil, err + } tmCfg.ProxyApp = proxyAddr p2pAddr, _, err := server.FreeTCPAddr() - require.NoError(t, err) + if err != nil { + return nil, err + } tmCfg.P2P.ListenAddress = p2pAddr // tmCfg.P2P.AddrBookStrict = false tmCfg.P2P.AllowDuplicateIP = true nodeID, pubKey, err := genutil.InitializeNodeValidatorFiles(tmCfg) - require.NoError(t, err) + if err != nil { + return nil, err + } + nodeIDs[i] = nodeID valPubKeys[i] = pubKey kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, clientDir, buf, cfg.KeyringOptions...) - require.NoError(t, err) + if err != nil { + return nil, err + } keyringAlgos, _ := kb.SupportedAlgorithms() algo, err := keyring.NewSigningAlgoFromString(cfg.SigningAlgo, keyringAlgos) - require.NoError(t, err) + if err != nil { + return nil, err + } var mnemonic string if i < len(cfg.Mnemonics) { @@ -292,14 +366,27 @@ func New(t *testing.T, cfg Config) *Network { } addr, secret, err := testutil.GenerateSaveCoinKey(kb, nodeDirName, mnemonic, true, algo) - require.NoError(t, err) + if err != nil { + return nil, err + } + + // if PrintMnemonic is set to true, we print the first validator node's secret to the network's logger + // for debugging and manual testing + if cfg.PrintMnemonic && i == 0 { + printMnemonic(l, secret) + } info := map[string]string{"secret": secret} infoBz, err := json.Marshal(info) - require.NoError(t, err) + if err != nil { + return nil, err + } // save private key seed words - require.NoError(t, writeFile(fmt.Sprintf("%v.json", "key_seed"), clientDir, infoBz)) + err = writeFile(fmt.Sprintf("%v.json", "key_seed"), clientDir, infoBz) + if err != nil { + return nil, err + } balances := sdk.NewCoins( sdk.NewCoin(fmt.Sprintf("%stoken", nodeDirName), cfg.AccountTokens), @@ -311,7 +398,9 @@ func New(t *testing.T, cfg Config) *Network { genAccounts = append(genAccounts, authtypes.NewBaseAccount(addr, nil, 0, 0)) commission, err := sdk.NewDecFromStr("0.5") - require.NoError(t, err) + if err != nil { + return nil, err + } createValMsg, err := stakingtypes.NewMsgCreateValidator( sdk.ValAddress(addr), @@ -321,15 +410,22 @@ func New(t *testing.T, cfg Config) *Network { stakingtypes.NewCommissionRates(commission, sdk.OneDec(), sdk.OneDec()), sdk.OneInt(), ) - require.NoError(t, err) + if err != nil { + return nil, err + } p2pURL, err := url.Parse(p2pAddr) - require.NoError(t, err) + if err != nil { + return nil, err + } memo := fmt.Sprintf("%s@%s:%s", nodeIDs[i], p2pURL.Hostname(), p2pURL.Port()) fee := sdk.NewCoins(sdk.NewCoin(fmt.Sprintf("%stoken", nodeDirName), sdk.NewInt(0))) txBuilder := cfg.TxConfig.NewTxBuilder() - require.NoError(t, txBuilder.SetMsgs(createValMsg)) + err = txBuilder.SetMsgs(createValMsg) + if err != nil { + return nil, err + } txBuilder.SetFeeAmount(fee) // Arbitrary fee txBuilder.SetGasLimit(1000000) // Need at least 100386 txBuilder.SetMemo(memo) @@ -342,13 +438,19 @@ func New(t *testing.T, cfg Config) *Network { WithTxConfig(cfg.TxConfig) err = tx.Sign(txFactory, nodeDirName, txBuilder, true) - require.NoError(t, err) + if err != nil { + return nil, err + } txBz, err := cfg.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) - require.NoError(t, err) - require.NoError(t, writeFile(fmt.Sprintf("%v.json", nodeDirName), gentxsDir, txBz)) - - srvconfig.WriteConfigFile(filepath.Join(nodeDir, "config/app.toml"), appCfg) + if err != nil { + return nil, err + } + err = writeFile(fmt.Sprintf("%v.json", nodeDirName), gentxsDir, txBz) + if err != nil { + return nil, err + } + srvconfig.WriteConfigFile(filepath.Join(nodeDir, "config", "app.toml"), appCfg) clientCtx := client.Context{}. WithKeyringDir(clientDir). @@ -377,21 +479,36 @@ func New(t *testing.T, cfg Config) *Network { } } - require.NoError(t, initGenFiles(cfg, genAccounts, genBalances, genFiles)) - require.NoError(t, collectGenFiles(cfg, network.Validators, network.BaseDir)) + err := initGenFiles(cfg, genAccounts, genBalances, genFiles) + if err != nil { + return nil, err + } + err = collectGenFiles(cfg, network.Validators, network.BaseDir) + if err != nil { + return nil, err + } - t.Log("starting test network...") - for _, v := range network.Validators { - require.NoError(t, startInProcess(context.TODO(), cfg, v)) + l.Log("starting test network...") + for idx, v := range network.Validators { + err := startInProcess(network.ctx, cfg, v) + if err != nil { + return nil, err + } + l.Log("started validator", idx) } - t.Log("started test network") + height, err := network.LatestHeight() + if err != nil { + return nil, err + } + + l.Log("started test network at height:", height) // Ensure we cleanup incase any test was abruptly halted (e.g. SIGINT) as any // defer in a test would not be called. server.TrapSignal(network.Cleanup) - return network + return network, nil } // LatestHeight returns the latest height of the network or an error if the @@ -420,7 +537,10 @@ func (n *Network) WaitForHeight(h int64) (int64, error) { // provide a custom timeout. func (n *Network) WaitForHeightWithTimeout(h int64, t time.Duration) (int64, error) { ticker := time.NewTicker(time.Second) - timeout := time.After(t) + defer ticker.Stop() + + timeout := time.NewTimer(t) + defer timeout.Stop() if len(n.Validators) == 0 { return 0, errors.New("no validators available") @@ -431,8 +551,7 @@ func (n *Network) WaitForHeightWithTimeout(h int64, t time.Duration) (int64, err for { select { - case <-timeout: - ticker.Stop() + case <-timeout.C: return latestHeight, errors.New("timeout exceeded waiting for block") case <-ticker.C: status, err := val.RPCClient.Status(context.Background()) @@ -469,14 +588,14 @@ func (n *Network) WaitForNextBlock() error { func (n *Network) Cleanup() { defer func() { lock.Unlock() - n.T.Log("released test network lock") + n.Logger.Log("released test network lock") }() - n.T.Log("cleaning up test network...") + n.Logger.Log("cleaning up test network...") for _, v := range n.Validators { if v.tmNode != nil && v.tmNode.IsRunning() { - // _ = v.tmNode.Stop() + n.cancel() } if v.api != nil { @@ -495,5 +614,47 @@ func (n *Network) Cleanup() { _ = os.RemoveAll(n.BaseDir) } - n.T.Log("finished cleaning up test network") + n.Logger.Log("finished cleaning up test network") +} + +// printMnemonic prints a provided mnemonic seed phrase on a network logger +// for debugging and manual testing +func printMnemonic(l Logger, secret string) { + lines := []string{ + "THIS MNEMONIC IS FOR TESTING PURPOSES ONLY", + "DO NOT USE IN PRODUCTION", + "", + strings.Join(strings.Fields(secret)[0:8], " "), + strings.Join(strings.Fields(secret)[8:16], " "), + strings.Join(strings.Fields(secret)[16:24], " "), + } + + lineLengths := make([]int, len(lines)) + for i, line := range lines { + lineLengths[i] = len(line) + } + + maxLineLength := 0 + for _, lineLen := range lineLengths { + if lineLen > maxLineLength { + maxLineLength = lineLen + } + } + + l.Log("\n") + l.Log(strings.Repeat("+", maxLineLength+8)) + for _, line := range lines { + l.Logf("++ %s ++\n", centerText(line, maxLineLength)) + } + l.Log(strings.Repeat("+", maxLineLength+8)) + l.Log("\n") +} + +// centerText centers text across a fixed width, filling either side with whitespace buffers +func centerText(text string, width int) string { + textLen := len(text) + leftBuffer := strings.Repeat(" ", (width-textLen)/2) + rightBuffer := strings.Repeat(" ", (width-textLen)/2+(width-textLen)%2) + + return fmt.Sprintf("%s%s%s", leftBuffer, text, rightBuffer) } diff --git a/testutil/network/network_test.go b/testutil/network/network_test.go index 3e45309f2f12..c7b5e4291ccc 100644 --- a/testutil/network/network_test.go +++ b/testutil/network/network_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package network_test @@ -20,11 +21,12 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), network.DefaultConfig()) - s.Require().NotNil(s.network) - - _, err := s.network.WaitForHeight(1) + var err error + s.network, err = network.New(s.T(), s.T().TempDir(), network.DefaultConfig()) s.Require().NoError(err) + + h, err := s.network.WaitForHeight(1) + s.Require().NoError(err, "stalled at height %d", h) } func (s *IntegrationTestSuite) TearDownSuite() { diff --git a/x/auth/client/cli/encode_test.go b/x/auth/client/cli/encode_test.go index ed3566aaf2c6..a0b5a7427ee8 100644 --- a/x/auth/client/cli/encode_test.go +++ b/x/auth/client/cli/encode_test.go @@ -39,7 +39,7 @@ func TestGetCommandEncode(t *testing.T) { ctx := context.Background() clientCtx := client.Context{}. WithTxConfig(encodingConfig.TxConfig). - WithCodec(encodingConfig.Marshaler) + WithCodec(encodingConfig.Codec) ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) cmd.SetArgs([]string{txFileName}) @@ -52,7 +52,7 @@ func TestGetCommandDecode(t *testing.T) { clientCtx := client.Context{}. WithTxConfig(encodingConfig.TxConfig). - WithCodec(encodingConfig.Marshaler) + WithCodec(encodingConfig.Codec) cmd := GetDecodeCommand() _ = testutil.ApplyMockIODiscardOutErr(cmd) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 626e0130f42a..fb4cc3289a81 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -48,7 +48,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) kb := s.network.Validators[0].ClientCtx.Keyring _, _, err := kb.NewMnemonic("newAccount", keyring.English, sdk.FullFundraiserPath, keyring.DefaultBIP39Passphrase, hd.Secp256k1) diff --git a/x/auth/keeper/keeper_test.go b/x/auth/keeper/keeper_test.go index 16cf53a253cf..7b9cd99c3cca 100644 --- a/x/auth/keeper/keeper_test.go +++ b/x/auth/keeper/keeper_test.go @@ -129,7 +129,7 @@ func TestSupply_ValidatePermissions(t *testing.T) { maccPerms[multiPerm] = []string{types.Burner, types.Minter, types.Staking} maccPerms[randomPerm] = []string{"random"} - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec keeper := keeper.NewAccountKeeper( cdc, app.GetKey(types.StoreKey), app.GetSubspace(types.ModuleName), types.ProtoBaseAccount, maccPerms, diff --git a/x/auth/legacy/v040/migrate_test.go b/x/auth/legacy/v040/migrate_test.go index 9b09d6e18a02..0b5788dde0f1 100644 --- a/x/auth/legacy/v040/migrate_test.go +++ b/x/auth/legacy/v040/migrate_test.go @@ -22,7 +22,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) coins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) diff --git a/x/auth/legacy/v043/store_test.go b/x/auth/legacy/v043/store_test.go index 3daa2d52fc53..bb2cdfdee448 100644 --- a/x/auth/legacy/v043/store_test.go +++ b/x/auth/legacy/v043/store_test.go @@ -661,7 +661,7 @@ func createValidator(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers i addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, valTokens) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) pks := simapp.CreateTestPubKeys(1) - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec app.StakingKeeper = stakingkeeper.NewKeeper( cdc, diff --git a/x/auth/simulation/decoder_test.go b/x/auth/simulation/decoder_test.go index 9e21df6e5791..ee78c511dd10 100644 --- a/x/auth/simulation/decoder_test.go +++ b/x/auth/simulation/decoder_test.go @@ -22,7 +22,7 @@ var ( func TestDecodeStore(t *testing.T) { app := simapp.Setup(false) - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec acc := types.NewBaseAccountWithAddress(delAddr1) dec := simulation.NewDecodeStore(app.AccountKeeper) diff --git a/x/auth/tx/service_test.go b/x/auth/tx/service_test.go index fd03df3411a7..76ee448b43d1 100644 --- a/x/auth/tx/service_test.go +++ b/x/auth/tx/service_test.go @@ -51,7 +51,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) s.Require().NotNil(s.network) val := s.network.Validators[0] diff --git a/x/auth/types/account_retriever_test.go b/x/auth/types/account_retriever_test.go index 1053ffdcbdf6..bd96c4a3f40e 100644 --- a/x/auth/types/account_retriever_test.go +++ b/x/auth/types/account_retriever_test.go @@ -13,7 +13,8 @@ func TestAccountRetriever(t *testing.T) { cfg := network.DefaultConfig() cfg.NumValidators = 1 - network := network.New(t, cfg) + network, _ := network.New(t, t.TempDir(), cfg) + require.NotNil(t, network) defer network.Cleanup() _, err := network.WaitForHeight(3) diff --git a/x/auth/types/common_test.go b/x/auth/types/common_test.go index 8588778994ec..6c045029fd5b 100644 --- a/x/auth/types/common_test.go +++ b/x/auth/types/common_test.go @@ -7,5 +7,5 @@ import ( var ( app = simapp.Setup(false) ecdc = simapp.MakeTestEncodingConfig() - appCodec, legacyAmino = ecdc.Marshaler, ecdc.Amino + appCodec, legacyAmino = ecdc.Codec, ecdc.Amino ) diff --git a/x/auth/vesting/client/testutil/suite.go b/x/auth/vesting/client/testutil/suite.go index f619f31165c8..b298f94b7d6b 100644 --- a/x/auth/vesting/client/testutil/suite.go +++ b/x/auth/vesting/client/testutil/suite.go @@ -27,7 +27,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/authz/client/rest/grpc_query_test.go b/x/authz/client/rest/grpc_query_test.go index 614e283a15ed..5ae366d0a68a 100644 --- a/x/authz/client/rest/grpc_query_test.go +++ b/x/authz/client/rest/grpc_query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package rest_test @@ -40,7 +41,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) val := s.network.Validators[0] // Create new account in the keyring. diff --git a/x/authz/client/testutil/tx.go b/x/authz/client/testutil/tx.go index ebc3e3c31d2b..f9db9a5f03c3 100644 --- a/x/authz/client/testutil/tx.go +++ b/x/authz/client/testutil/tx.go @@ -38,7 +38,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) val := s.network.Validators[0] diff --git a/x/authz/simulation/decoder_test.go b/x/authz/simulation/decoder_test.go index cfda286a8377..4851b6ec2ca2 100644 --- a/x/authz/simulation/decoder_test.go +++ b/x/authz/simulation/decoder_test.go @@ -17,7 +17,7 @@ import ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) grant, _ := authz.NewGrant(banktypes.NewSendAuthorization(sdk.NewCoins(sdk.NewInt64Coin("foo", 123))), time.Now().UTC()) diff --git a/x/bank/client/rest/query_test.go b/x/bank/client/rest/query_test.go index a9e43a53db86..af73af7a8585 100644 --- a/x/bank/client/rest/query_test.go +++ b/x/bank/client/rest/query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package rest_test @@ -60,7 +61,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.GenesisState = genesisState s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err = s.network.WaitForHeight(2) s.Require().NoError(err) diff --git a/x/bank/client/testutil/suite.go b/x/bank/client/testutil/suite.go index 19be5401c672..dd96f05adf6e 100644 --- a/x/bank/client/testutil/suite.go +++ b/x/bank/client/testutil/suite.go @@ -80,7 +80,7 @@ func (s *IntegrationTestSuite) SetupSuite() { genesisState[types.ModuleName] = bankGenesisBz s.cfg.GenesisState = genesisState - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 2461fdf286c9..46636448b46d 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -75,7 +75,7 @@ type IntegrationTestSuite struct { func (suite *IntegrationTestSuite) initKeepersWithmAccPerms(blockedAddrs map[string]bool) (authkeeper.AccountKeeper, keeper.BaseKeeper) { app := suite.app maccPerms := simapp.GetMaccPerms() - appCodec := simapp.MakeTestEncodingConfig().Marshaler + appCodec := simapp.MakeTestEncodingConfig().Codec maccPerms[holder] = nil maccPerms[authtypes.Burner] = []string{authtypes.Burner} diff --git a/x/bank/legacy/v040/migrate_test.go b/x/bank/legacy/v040/migrate_test.go index e30299ff9251..d787cbdb53fb 100644 --- a/x/bank/legacy/v040/migrate_test.go +++ b/x/bank/legacy/v040/migrate_test.go @@ -21,7 +21,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) coins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) addr1, _ := sdk.AccAddressFromBech32("cosmos1xxkueklal9vejv9unqu80w9vptyepfa95pd53u") diff --git a/x/bank/legacy/v043/json_test.go b/x/bank/legacy/v043/json_test.go index d56ce35195a6..0efd4c01f3c9 100644 --- a/x/bank/legacy/v043/json_test.go +++ b/x/bank/legacy/v043/json_test.go @@ -18,7 +18,7 @@ func TestMigrateJSON(t *testing.T) { clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). - WithCodec(encodingConfig.Marshaler) + WithCodec(encodingConfig.Codec) voter, err := sdk.AccAddressFromBech32("cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh") require.NoError(t, err) diff --git a/x/bank/legacy/v043/store_test.go b/x/bank/legacy/v043/store_test.go index 2b6af2c6ed9b..2983569283c0 100644 --- a/x/bank/legacy/v043/store_test.go +++ b/x/bank/legacy/v043/store_test.go @@ -28,12 +28,12 @@ func TestSupplyMigration(t *testing.T) { // Old supply was stored as a single blob under the `SupplyKey`. var oldSupply v040bank.SupplyI oldSupply = &types.Supply{Total: sdk.Coins{oldFooCoin, oldBarCoin, oldFooBarCoin}} - oldSupplyBz, err := encCfg.Marshaler.MarshalInterface(oldSupply) + oldSupplyBz, err := encCfg.Codec.MarshalInterface(oldSupply) require.NoError(t, err) store.Set(v040bank.SupplyKey, oldSupplyBz) // Run migration. - err = v043bank.MigrateStore(ctx, bankKey, encCfg.Marshaler) + err = v043bank.MigrateStore(ctx, bankKey, encCfg.Codec) require.NoError(t, err) // New supply is indexed by denom. @@ -75,19 +75,19 @@ func TestBalanceKeysMigration(t *testing.T) { // set 10 foo coin fooCoin := sdk.NewCoin("foo", sdk.NewInt(10)) oldFooKey := append(append(v040bank.BalancesPrefix, addr...), []byte(fooCoin.Denom)...) - fooBz, err := encCfg.Marshaler.Marshal(&fooCoin) + fooBz, err := encCfg.Codec.Marshal(&fooCoin) require.NoError(t, err) store.Set(oldFooKey, fooBz) // set 0 foobar coin fooBarCoin := sdk.NewCoin("foobar", sdk.NewInt(0)) oldKeyFooBar := append(append(v040bank.BalancesPrefix, addr...), []byte(fooBarCoin.Denom)...) - fooBarBz, err := encCfg.Marshaler.Marshal(&fooBarCoin) + fooBarBz, err := encCfg.Codec.Marshal(&fooBarCoin) require.NoError(t, err) store.Set(oldKeyFooBar, fooBarBz) require.NotNil(t, store.Get(oldKeyFooBar)) // before store migation zero values can also exist in store. - err = v043bank.MigrateStore(ctx, bankKey, encCfg.Marshaler) + err = v043bank.MigrateStore(ctx, bankKey, encCfg.Codec) require.NoError(t, err) newKey := append(types.CreateAccountBalancesPrefix(addr), []byte(fooCoin.Denom)...) diff --git a/x/capability/simulation/decoder_test.go b/x/capability/simulation/decoder_test.go index a18bcd56115d..093cf5f2daad 100644 --- a/x/capability/simulation/decoder_test.go +++ b/x/capability/simulation/decoder_test.go @@ -14,7 +14,7 @@ import ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) capOwners := types.CapabilityOwners{ diff --git a/x/crisis/client/testsuite/suite.go b/x/crisis/client/testsuite/suite.go index d0d82f62120b..e725d51fd070 100644 --- a/x/crisis/client/testsuite/suite.go +++ b/x/crisis/client/testsuite/suite.go @@ -27,7 +27,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) } diff --git a/x/distribution/client/cli/tx_test.go b/x/distribution/client/cli/tx_test.go index 36a946e7cca7..7176c6bf9578 100644 --- a/x/distribution/client/cli/tx_test.go +++ b/x/distribution/client/cli/tx_test.go @@ -77,7 +77,7 @@ func TestParseProposal(t *testing.T) { } `) - proposal, err := ParseCommunityPoolSpendProposalWithDeposit(encodingConfig.Marshaler, okJSON.Name()) + proposal, err := ParseCommunityPoolSpendProposalWithDeposit(encodingConfig.Codec, okJSON.Name()) require.NoError(t, err) require.Equal(t, "Community Pool Spend", proposal.Title) diff --git a/x/distribution/client/rest/grpc_query_test.go b/x/distribution/client/rest/grpc_query_test.go index ec8e2a7666dd..c222d53db78f 100644 --- a/x/distribution/client/rest/grpc_query_test.go +++ b/x/distribution/client/rest/grpc_query_test.go @@ -30,7 +30,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/distribution/client/testutil/suite.go b/x/distribution/client/testutil/suite.go index 3dcfca70aa68..6a54b08656d0 100644 --- a/x/distribution/client/testutil/suite.go +++ b/x/distribution/client/testutil/suite.go @@ -50,7 +50,7 @@ func (s *IntegrationTestSuite) SetupTest() { genesisState[minttypes.ModuleName] = mintDataBz s.cfg.GenesisState = genesisState - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/distribution/simulation/decoder_test.go b/x/distribution/simulation/decoder_test.go index 69bb6b3b77a0..01e986fe53eb 100644 --- a/x/distribution/simulation/decoder_test.go +++ b/x/distribution/simulation/decoder_test.go @@ -22,7 +22,7 @@ var ( ) func TestDecodeDistributionStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) decCoins := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.OneDec())} diff --git a/x/evidence/client/testutil/suite.go b/x/evidence/client/testutil/suite.go index d12083b64789..1d24f0ad333f 100644 --- a/x/evidence/client/testutil/suite.go +++ b/x/evidence/client/testutil/suite.go @@ -24,7 +24,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/evidence/keeper/querier_test.go b/x/evidence/keeper/querier_test.go index 40a9f94e5fb0..709340d24168 100644 --- a/x/evidence/keeper/querier_test.go +++ b/x/evidence/keeper/querier_test.go @@ -37,7 +37,7 @@ func (suite *KeeperTestSuite) TestQuerier_QueryEvidence_Existing() { func (suite *KeeperTestSuite) TestQuerier_QueryEvidence_NonExisting() { ctx := suite.ctx.WithIsCheckTx(false) - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec numEvidence := 100 suite.populateEvidence(ctx, numEvidence) diff --git a/x/evidence/legacy/v040/migrate_test.go b/x/evidence/legacy/v040/migrate_test.go index 43d3d9db7e2e..7d1e0dc58971 100644 --- a/x/evidence/legacy/v040/migrate_test.go +++ b/x/evidence/legacy/v040/migrate_test.go @@ -18,7 +18,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) addr1, _ := sdk.AccAddressFromBech32("cosmos1xxkueklal9vejv9unqu80w9vptyepfa95pd53u") diff --git a/x/feegrant/client/testutil/suite.go b/x/feegrant/client/testutil/suite.go index 47724a38cae5..4c37b931431d 100644 --- a/x/feegrant/client/testutil/suite.go +++ b/x/feegrant/client/testutil/suite.go @@ -51,7 +51,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/feegrant/simulation/decoder_test.go b/x/feegrant/simulation/decoder_test.go index 57ed0dfa1a17..bb6fc789d76b 100644 --- a/x/feegrant/simulation/decoder_test.go +++ b/x/feegrant/simulation/decoder_test.go @@ -22,7 +22,7 @@ var ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) grant, err := feegrant.NewGrant(granterAddr, granteeAddr, &feegrant.BasicAllowance{ diff --git a/x/genutil/client/testutil/suite.go b/x/genutil/client/testutil/suite.go index 084a5f530f8d..a78f48cd6ab0 100644 --- a/x/genutil/client/testutil/suite.go +++ b/x/genutil/client/testutil/suite.go @@ -35,7 +35,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/genutil/config/priv_validator_key.json b/x/genutil/config/priv_validator_key.json new file mode 100644 index 000000000000..4f66d79b3376 --- /dev/null +++ b/x/genutil/config/priv_validator_key.json @@ -0,0 +1,11 @@ +{ + "address": "275D129B1E2A5C4063E42C4E7910B11735510B0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7c8cTnfgfhbsr5UZnSxT3IpP70tgHtKFCbKb7B2IKFo=" + }, + "priv_key": { + "type": "tendermint/PrivKeyEd25519", + "value": "3P9fwMdm03oSPwrWGHO240AgqVCPf3rAARgq1MhUSlHtzxxOd+B+FuyvlRmdLFPcik/vS2Ae0oUJspvsHYgoWg==" + } +} \ No newline at end of file diff --git a/x/genutil/data/priv_validator_state.json b/x/genutil/data/priv_validator_state.json new file mode 100644 index 000000000000..48f3b67e3f85 --- /dev/null +++ b/x/genutil/data/priv_validator_state.json @@ -0,0 +1,5 @@ +{ + "height": "0", + "round": 0, + "step": 0 +} \ No newline at end of file diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index 8de5bc4afe41..5fe7658a34b6 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -110,7 +110,7 @@ func (suite *GenTxTestSuite) TestSetGenTxsInAppGenesisState() { for _, tc := range testCases { suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { suite.SetupTest() - cdc := suite.encodingConfig.Marshaler + cdc := suite.encodingConfig.Codec txJSONEncoder := suite.encodingConfig.TxConfig.TxJSONEncoder() tc.malleate() @@ -177,7 +177,7 @@ func (suite *GenTxTestSuite) TestValidateAccountInGenesis() { for _, tc := range testCases { suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { suite.SetupTest() - cdc := suite.encodingConfig.Marshaler + cdc := suite.encodingConfig.Codec suite.app.StakingKeeper.SetParams(suite.ctx, stakingtypes.DefaultParams()) stakingGenesisState := staking.ExportGenesis(suite.ctx, suite.app.StakingKeeper) diff --git a/x/gov/client/rest/grpc_query_test.go b/x/gov/client/rest/grpc_query_test.go index 12247aeb9a91..b48dbba8a120 100644 --- a/x/gov/client/rest/grpc_query_test.go +++ b/x/gov/client/rest/grpc_query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package rest_test @@ -32,7 +33,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.cfg = network.DefaultConfig() s.cfg.NumValidators = 1 - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/gov/client/testutil/deposits.go b/x/gov/client/testutil/deposits.go index 57c3c9363330..b68a426d0988 100644 --- a/x/gov/client/testutil/deposits.go +++ b/x/gov/client/testutil/deposits.go @@ -28,7 +28,7 @@ func NewDepositTestSuite(cfg network.Config) *DepositTestSuite { func (s *DepositTestSuite) SetupSuite() { s.T().Log("setting up test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/gov/client/testutil/suite.go b/x/gov/client/testutil/suite.go index ee2634e3d188..c5a6c6603e9a 100644 --- a/x/gov/client/testutil/suite.go +++ b/x/gov/client/testutil/suite.go @@ -33,7 +33,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/gov/keeper/common_test.go b/x/gov/keeper/common_test.go index e39ca9c70380..89da4e06074d 100644 --- a/x/gov/keeper/common_test.go +++ b/x/gov/keeper/common_test.go @@ -21,7 +21,7 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers addrs := simapp.AddTestAddrsIncremental(app, ctx, 5, sdk.NewInt(30000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) pks := simapp.CreateTestPubKeys(5) - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec app.StakingKeeper = stakingkeeper.NewKeeper( cdc, diff --git a/x/gov/legacy/v040/migrate_test.go b/x/gov/legacy/v040/migrate_test.go index 664696bf296e..b26ebe9be7b8 100644 --- a/x/gov/legacy/v040/migrate_test.go +++ b/x/gov/legacy/v040/migrate_test.go @@ -22,7 +22,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) recipient, err := sdk.AccAddressFromBech32("cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh") require.NoError(t, err) diff --git a/x/gov/legacy/v043/json_test.go b/x/gov/legacy/v043/json_test.go index d9f045774661..4fa05b941398 100644 --- a/x/gov/legacy/v043/json_test.go +++ b/x/gov/legacy/v043/json_test.go @@ -19,7 +19,7 @@ func TestMigrateJSON(t *testing.T) { clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). - WithCodec(encodingConfig.Marshaler) + WithCodec(encodingConfig.Codec) voter, err := sdk.AccAddressFromBech32("cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh") require.NoError(t, err) diff --git a/x/gov/legacy/v043/store_test.go b/x/gov/legacy/v043/store_test.go index b65b126b03ec..3501395010e6 100644 --- a/x/gov/legacy/v043/store_test.go +++ b/x/gov/legacy/v043/store_test.go @@ -17,7 +17,7 @@ import ( ) func TestMigrateStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec govKey := sdk.NewKVStoreKey("gov") ctx := testutil.DefaultContext(govKey, sdk.NewTransientStoreKey("transient_test")) store := ctx.KVStore(govKey) diff --git a/x/gov/simulation/decoder_test.go b/x/gov/simulation/decoder_test.go index 188fe9e540f0..44752440f041 100644 --- a/x/gov/simulation/decoder_test.go +++ b/x/gov/simulation/decoder_test.go @@ -22,7 +22,7 @@ var ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) endTime := time.Now().UTC() diff --git a/x/mint/client/rest/grpc_query_test.go b/x/mint/client/rest/grpc_query_test.go index fdbb4ff75998..c6d74150a77e 100644 --- a/x/mint/client/rest/grpc_query_test.go +++ b/x/mint/client/rest/grpc_query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package rest_test @@ -45,7 +46,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.GenesisState = genesisState s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/mint/client/testutil/suite.go b/x/mint/client/testutil/suite.go index 24e74267608c..6076d10ca39b 100644 --- a/x/mint/client/testutil/suite.go +++ b/x/mint/client/testutil/suite.go @@ -44,7 +44,7 @@ func (s *IntegrationTestSuite) SetupSuite() { genesisState[minttypes.ModuleName] = mintDataBz s.cfg.GenesisState = genesisState - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/mint/simulation/decoder_test.go b/x/mint/simulation/decoder_test.go index 43a8cfbd42c4..9ee8315f000d 100644 --- a/x/mint/simulation/decoder_test.go +++ b/x/mint/simulation/decoder_test.go @@ -14,7 +14,7 @@ import ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) minter := types.NewMinter(sdk.OneDec(), sdk.NewDec(15)) diff --git a/x/params/client/rest/grpc_query_test.go b/x/params/client/rest/grpc_query_test.go index f2c4440e29d5..2057d6530548 100644 --- a/x/params/client/rest/grpc_query_test.go +++ b/x/params/client/rest/grpc_query_test.go @@ -26,7 +26,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/params/client/testutil/suite.go b/x/params/client/testutil/suite.go index e539b8791df6..fca78ddb2914 100644 --- a/x/params/client/testutil/suite.go +++ b/x/params/client/testutil/suite.go @@ -26,7 +26,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/params/keeper/common_test.go b/x/params/keeper/common_test.go index 3ba444173588..e5bebaf09b06 100644 --- a/x/params/keeper/common_test.go +++ b/x/params/keeper/common_test.go @@ -9,7 +9,7 @@ import ( ) func testComponents() (*codec.LegacyAmino, sdk.Context, sdk.StoreKey, sdk.StoreKey, paramskeeper.Keeper) { - marshaler := simapp.MakeTestEncodingConfig().Marshaler + marshaler := simapp.MakeTestEncodingConfig().Codec legacyAmino := createTestCodec() mkey := sdk.NewKVStoreKey("test") tkey := sdk.NewTransientStoreKey("transient_test") diff --git a/x/params/types/subspace_test.go b/x/params/types/subspace_test.go index a347a5f5427e..664c70df1801 100644 --- a/x/params/types/subspace_test.go +++ b/x/params/types/subspace_test.go @@ -35,9 +35,9 @@ func (suite *SubspaceTestSuite) SetupTest() { suite.NoError(ms.LoadLatestVersion()) encCfg := simapp.MakeTestEncodingConfig() - ss := types.NewSubspace(encCfg.Marshaler, encCfg.Amino, key, tkey, "testsubspace") + ss := types.NewSubspace(encCfg.Codec, encCfg.Amino, key, tkey, "testsubspace") - suite.cdc = encCfg.Marshaler + suite.cdc = encCfg.Codec suite.amino = encCfg.Amino suite.ctx = sdk.NewContext(ms, tmproto.Header{}, false, log.NewNopLogger()) suite.ss = ss.WithKeyTable(paramKeyTable()) diff --git a/x/slashing/client/rest/grpc_query_test.go b/x/slashing/client/rest/grpc_query_test.go index 39daf06f69c5..8bf12c00343e 100644 --- a/x/slashing/client/rest/grpc_query_test.go +++ b/x/slashing/client/rest/grpc_query_test.go @@ -30,7 +30,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/slashing/client/testutil/suite.go b/x/slashing/client/testutil/suite.go index cf5cf997b6c3..ff9c731eaa51 100644 --- a/x/slashing/client/testutil/suite.go +++ b/x/slashing/client/testutil/suite.go @@ -31,7 +31,7 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/slashing/legacy/v040/migrate_test.go b/x/slashing/legacy/v040/migrate_test.go index f11d2e9d26ee..f90e56a3b2d6 100644 --- a/x/slashing/legacy/v040/migrate_test.go +++ b/x/slashing/legacy/v040/migrate_test.go @@ -19,7 +19,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) addr1, err := sdk.ConsAddressFromBech32("cosmosvalcons104cjmxkrg8y8lmrp25de02e4zf00zle4mzs685") require.NoError(t, err) diff --git a/x/slashing/simulation/decoder_test.go b/x/slashing/simulation/decoder_test.go index 94b9f5a1c88c..883b3874d2f7 100644 --- a/x/slashing/simulation/decoder_test.go +++ b/x/slashing/simulation/decoder_test.go @@ -25,7 +25,7 @@ var ( ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) info := types.NewValidatorSigningInfo(consAddr1, 0, 1, time.Now().UTC(), false, 0) diff --git a/x/staking/client/rest/grpc_query_test.go b/x/staking/client/rest/grpc_query_test.go index 55a10194f603..9ec378d03548 100644 --- a/x/staking/client/rest/grpc_query_test.go +++ b/x/staking/client/rest/grpc_query_test.go @@ -1,3 +1,4 @@ +//go:build norace // +build norace package rest_test @@ -37,7 +38,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 2 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go index 1de4d9009cc5..03126f20242d 100644 --- a/x/staking/client/testutil/suite.go +++ b/x/staking/client/testutil/suite.go @@ -43,7 +43,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.network = network.New(s.T(), s.cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) diff --git a/x/staking/keeper/grpc_query_test.go b/x/staking/keeper/grpc_query_test.go index ba43269e2e32..1b06f8588641 100644 --- a/x/staking/keeper/grpc_query_test.go +++ b/x/staking/keeper/grpc_query_test.go @@ -773,7 +773,7 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers addrs := simapp.AddTestAddrsIncremental(app, ctx, 5, app.StakingKeeper.TokensFromConsensusPower(ctx, 300)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) pks := simapp.CreateTestPubKeys(5) - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec app.StakingKeeper = keeper.NewKeeper( cdc, app.GetKey(types.StoreKey), diff --git a/x/staking/legacy/v040/migrate_test.go b/x/staking/legacy/v040/migrate_test.go index af409dde26b8..29d733f51977 100644 --- a/x/staking/legacy/v040/migrate_test.go +++ b/x/staking/legacy/v040/migrate_test.go @@ -20,7 +20,7 @@ func TestMigrate(t *testing.T) { WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). - WithJSONCodec(encodingConfig.Marshaler) + WithJSONCodec(encodingConfig.Codec) consPubKey := ed25519.GenPrivKeyFromSecret([]byte("val0")).PubKey() stakingGenState := v038staking.GenesisState{ diff --git a/x/staking/simulation/decoder_test.go b/x/staking/simulation/decoder_test.go index 6584df24f508..3d7546369d6b 100644 --- a/x/staking/simulation/decoder_test.go +++ b/x/staking/simulation/decoder_test.go @@ -32,7 +32,7 @@ func makeTestCodec() (cdc *codec.LegacyAmino) { } func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler + cdc := simapp.MakeTestEncodingConfig().Codec dec := simulation.NewDecodeStore(cdc) bondTime := time.Now().UTC() diff --git a/x/upgrade/client/testutil/suite.go b/x/upgrade/client/testutil/suite.go index 6b559e823c77..e6a3c184d72c 100644 --- a/x/upgrade/client/testutil/suite.go +++ b/x/upgrade/client/testutil/suite.go @@ -36,7 +36,7 @@ func (s *IntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) } func (s *IntegrationTestSuite) TearDownSuite() {