From 696fd8724abaecd5c5b935d625f81c38c6553397 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Mon, 18 Sep 2023 15:06:31 +0200 Subject: [PATCH 1/8] remove tips --- .../tx/signing/v1beta1/signing.pulsar.go | 3 +- api/cosmos/tx/v1beta1/tx.pulsar.go | 1296 +++------------ baseapp/baseapp.go | 2 +- client/tx/aux_builder.go | 21 +- client/tx/aux_builder_test.go | 8 - client/tx/factory.go | 21 - client/tx/legacy_test.go | 2 - client/tx/tx.go | 7 - client/tx/tx_test.go | 14 - client/tx_config.go | 1 - docs/docs/develop/advanced/00-baseapp.md | 3 +- docs/docs/develop/advanced/01-transactions.md | 1 - docs/docs/develop/advanced/14-tips.md | 214 --- proto/cosmos/tx/signing/v1beta1/signing.proto | 3 +- proto/cosmos/tx/v1beta1/tx.proto | 31 - simapp/app.go | 7 +- simapp/simd/cmd/commands.go | 1 - tests/e2e/auth/suite.go | 6 - .../integration/auth/client/cli/suite_test.go | 7 - .../tx/aminojson/aminojson_test.go | 9 - types/tx/direct_aux.go | 6 - types/tx/direct_aux_test.go | 5 +- types/tx/signing/signing.pb.go | 3 +- types/tx/tips.go | 11 - types/tx/tx.pb.go | 502 +----- x/auth/README.md | 11 - x/auth/client/cli/tips.go | 93 -- x/auth/client/testutil/helpers.go | 9 - x/auth/migrations/legacytx/stdsign.go | 14 +- x/auth/migrations/legacytx/stdtx.go | 4 - x/auth/migrations/legacytx/stdtx_builder.go | 4 - x/auth/migrations/legacytx/stdtx_test.go | 26 +- x/auth/posthandler/tips.go | 58 - x/auth/signing/sig_verifiable_tx.go | 2 - x/auth/tx/adapter.go | 18 - x/auth/tx/aux_test.go | 84 +- x/auth/tx/builder.go | 22 - x/auth/tx/legacy_amino_json.go | 16 +- x/auth/tx/legacy_amino_json_test.go | 41 +- x/authz/msgs_test.go | 2 +- x/feegrant/msgs_test.go | 4 +- x/staking/types/staking.pb.go | 1408 +++++++++-------- x/tx/decode/decode_test.go | 4 - x/tx/decode/fuzz_test.go | 4 - x/tx/signing/aminojson/aminojson.go | 33 +- x/tx/signing/aminojson/aminojson_test.go | 5 - x/tx/signing/aminojson/fuzz_test.go | 8 +- .../internal/aminojsonpb/aminojson.proto | 5 +- .../internal/aminojsonpb/aminojson.pulsar.go | 173 +- .../aminojson/internal/testpb/test.proto | 2 +- x/tx/signing/directaux/direct_aux.go | 1 - x/tx/signing/directaux/direct_aux_test.go | 4 - x/tx/signing/testutil/util.go | 2 - x/tx/signing/textual/tx.go | 11 +- 54 files changed, 1138 insertions(+), 3114 deletions(-) delete mode 100644 docs/docs/develop/advanced/14-tips.md delete mode 100644 types/tx/tips.go delete mode 100644 x/auth/client/cli/tips.go delete mode 100644 x/auth/posthandler/tips.go diff --git a/api/cosmos/tx/signing/v1beta1/signing.pulsar.go b/api/cosmos/tx/signing/v1beta1/signing.pulsar.go index 0e6c12827053..7885b82a8ab8 100644 --- a/api/cosmos/tx/signing/v1beta1/signing.pulsar.go +++ b/api/cosmos/tx/signing/v1beta1/signing.pulsar.go @@ -2729,8 +2729,7 @@ const ( SignMode_SIGN_MODE_TEXTUAL SignMode = 2 // SIGN_MODE_DIRECT_AUX specifies a signing mode which uses // SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not - // require signers signing over other signers' `signer_info`. It also allows - // for adding Tips in transactions. + // require signers signing over other signers' `signer_info`. // // Since: cosmos-sdk 0.46 SignMode_SIGN_MODE_DIRECT_AUX SignMode = 3 diff --git a/api/cosmos/tx/v1beta1/tx.pulsar.go b/api/cosmos/tx/v1beta1/tx.pulsar.go index e96c797a907f..c13de3351e69 100644 --- a/api/cosmos/tx/v1beta1/tx.pulsar.go +++ b/api/cosmos/tx/v1beta1/tx.pulsar.go @@ -1876,7 +1876,6 @@ var ( fd_SignDocDirectAux_chain_id protoreflect.FieldDescriptor fd_SignDocDirectAux_account_number protoreflect.FieldDescriptor fd_SignDocDirectAux_sequence protoreflect.FieldDescriptor - fd_SignDocDirectAux_tip protoreflect.FieldDescriptor ) func init() { @@ -1887,7 +1886,6 @@ func init() { fd_SignDocDirectAux_chain_id = md_SignDocDirectAux.Fields().ByName("chain_id") fd_SignDocDirectAux_account_number = md_SignDocDirectAux.Fields().ByName("account_number") fd_SignDocDirectAux_sequence = md_SignDocDirectAux.Fields().ByName("sequence") - fd_SignDocDirectAux_tip = md_SignDocDirectAux.Fields().ByName("tip") } var _ protoreflect.Message = (*fastReflection_SignDocDirectAux)(nil) @@ -1985,12 +1983,6 @@ func (x *fastReflection_SignDocDirectAux) Range(f func(protoreflect.FieldDescrip return } } - if x.Tip != nil { - value := protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) - if !f(fd_SignDocDirectAux_tip, value) { - return - } - } } // Has reports whether a field is populated. @@ -2016,8 +2008,6 @@ func (x *fastReflection_SignDocDirectAux) Has(fd protoreflect.FieldDescriptor) b return x.AccountNumber != uint64(0) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": return x.Sequence != uint64(0) - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - return x.Tip != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2044,8 +2034,6 @@ func (x *fastReflection_SignDocDirectAux) Clear(fd protoreflect.FieldDescriptor) x.AccountNumber = uint64(0) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": x.Sequence = uint64(0) - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - x.Tip = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2077,9 +2065,6 @@ func (x *fastReflection_SignDocDirectAux) Get(descriptor protoreflect.FieldDescr case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": value := x.Sequence return protoreflect.ValueOfUint64(value) - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - value := x.Tip - return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2110,8 +2095,6 @@ func (x *fastReflection_SignDocDirectAux) Set(fd protoreflect.FieldDescriptor, v x.AccountNumber = value.Uint() case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": x.Sequence = value.Uint() - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - x.Tip = value.Message().Interface().(*Tip) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2137,11 +2120,6 @@ func (x *fastReflection_SignDocDirectAux) Mutable(fd protoreflect.FieldDescripto x.PublicKey = new(anypb.Any) } return protoreflect.ValueOfMessage(x.PublicKey.ProtoReflect()) - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - if x.Tip == nil { - x.Tip = new(Tip) - } - return protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) case "cosmos.tx.v1beta1.SignDocDirectAux.body_bytes": panic(fmt.Errorf("field body_bytes of message cosmos.tx.v1beta1.SignDocDirectAux is not mutable")) case "cosmos.tx.v1beta1.SignDocDirectAux.chain_id": @@ -2174,9 +2152,6 @@ func (x *fastReflection_SignDocDirectAux) NewField(fd protoreflect.FieldDescript return protoreflect.ValueOfUint64(uint64(0)) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": return protoreflect.ValueOfUint64(uint64(0)) - case "cosmos.tx.v1beta1.SignDocDirectAux.tip": - m := new(Tip) - return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2264,10 +2239,6 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { if x.Sequence != 0 { n += 1 + runtime.Sov(uint64(x.Sequence)) } - if x.Tip != nil { - l = options.Size(x.Tip) - n += 1 + l + runtime.Sov(uint64(l)) - } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2297,20 +2268,6 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.Tip != nil { - encoded, err := options.Marshal(x.Tip) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x32 - } if x.Sequence != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.Sequence)) i-- @@ -2538,42 +2495,6 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { break } } - case 6: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if x.Tip == nil { - x.Tip = &Tip{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Tip); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -3550,7 +3471,6 @@ var ( md_AuthInfo protoreflect.MessageDescriptor fd_AuthInfo_signer_infos protoreflect.FieldDescriptor fd_AuthInfo_fee protoreflect.FieldDescriptor - fd_AuthInfo_tip protoreflect.FieldDescriptor ) func init() { @@ -3558,7 +3478,6 @@ func init() { md_AuthInfo = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuthInfo") fd_AuthInfo_signer_infos = md_AuthInfo.Fields().ByName("signer_infos") fd_AuthInfo_fee = md_AuthInfo.Fields().ByName("fee") - fd_AuthInfo_tip = md_AuthInfo.Fields().ByName("tip") } var _ protoreflect.Message = (*fastReflection_AuthInfo)(nil) @@ -3638,12 +3557,6 @@ func (x *fastReflection_AuthInfo) Range(f func(protoreflect.FieldDescriptor, pro return } } - if x.Tip != nil { - value := protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) - if !f(fd_AuthInfo_tip, value) { - return - } - } } // Has reports whether a field is populated. @@ -3663,8 +3576,6 @@ func (x *fastReflection_AuthInfo) Has(fd protoreflect.FieldDescriptor) bool { return len(x.SignerInfos) != 0 case "cosmos.tx.v1beta1.AuthInfo.fee": return x.Fee != nil - case "cosmos.tx.v1beta1.AuthInfo.tip": - return x.Tip != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3685,8 +3596,6 @@ func (x *fastReflection_AuthInfo) Clear(fd protoreflect.FieldDescriptor) { x.SignerInfos = nil case "cosmos.tx.v1beta1.AuthInfo.fee": x.Fee = nil - case "cosmos.tx.v1beta1.AuthInfo.tip": - x.Tip = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3712,9 +3621,6 @@ func (x *fastReflection_AuthInfo) Get(descriptor protoreflect.FieldDescriptor) p case "cosmos.tx.v1beta1.AuthInfo.fee": value := x.Fee return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cosmos.tx.v1beta1.AuthInfo.tip": - value := x.Tip - return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3741,8 +3647,6 @@ func (x *fastReflection_AuthInfo) Set(fd protoreflect.FieldDescriptor, value pro x.SignerInfos = *clv.list case "cosmos.tx.v1beta1.AuthInfo.fee": x.Fee = value.Message().Interface().(*Fee) - case "cosmos.tx.v1beta1.AuthInfo.tip": - x.Tip = value.Message().Interface().(*Tip) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3774,11 +3678,6 @@ func (x *fastReflection_AuthInfo) Mutable(fd protoreflect.FieldDescriptor) proto x.Fee = new(Fee) } return protoreflect.ValueOfMessage(x.Fee.ProtoReflect()) - case "cosmos.tx.v1beta1.AuthInfo.tip": - if x.Tip == nil { - x.Tip = new(Tip) - } - return protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3798,9 +3697,6 @@ func (x *fastReflection_AuthInfo) NewField(fd protoreflect.FieldDescriptor) prot case "cosmos.tx.v1beta1.AuthInfo.fee": m := new(Fee) return protoreflect.ValueOfMessage(m.ProtoReflect()) - case "cosmos.tx.v1beta1.AuthInfo.tip": - m := new(Tip) - return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3880,10 +3776,6 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { l = options.Size(x.Fee) n += 1 + l + runtime.Sov(uint64(l)) } - if x.Tip != nil { - l = options.Size(x.Tip) - n += 1 + l + runtime.Sov(uint64(l)) - } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -3913,20 +3805,6 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.Tip != nil { - encoded, err := options.Marshal(x.Tip) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x1a - } if x.Fee != nil { encoded, err := options.Marshal(x.Fee) if err != nil { @@ -4076,42 +3954,6 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex - case 3: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if x.Tip == nil { - x.Tip = &Tip{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Tip); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -5307,7 +5149,7 @@ func (x *ModeInfo_Single) ProtoReflect() protoreflect.Message { } func (x *ModeInfo_Single) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5764,7 +5606,7 @@ func (x *ModeInfo_Multi) ProtoReflect() protoreflect.Message { } func (x *ModeInfo_Multi) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[12] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6934,79 +6776,32 @@ func (x *fastReflection_Fee) ProtoMethods() *protoiface.Methods { } } -var _ protoreflect.List = (*_Tip_1_list)(nil) - -type _Tip_1_list struct { - list *[]*v1beta12.Coin -} - -func (x *_Tip_1_list) Len() int { - if x.list == nil { - return 0 - } - return len(*x.list) -} - -func (x *_Tip_1_list) Get(i int) protoreflect.Value { - return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) -} - -func (x *_Tip_1_list) Set(i int, value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*v1beta12.Coin) - (*x.list)[i] = concreteValue -} - -func (x *_Tip_1_list) Append(value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*v1beta12.Coin) - *x.list = append(*x.list, concreteValue) -} - -func (x *_Tip_1_list) AppendMutable() protoreflect.Value { - v := new(v1beta12.Coin) - *x.list = append(*x.list, v) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Tip_1_list) Truncate(n int) { - for i := n; i < len(*x.list); i++ { - (*x.list)[i] = nil - } - *x.list = (*x.list)[:n] -} - -func (x *_Tip_1_list) NewElement() protoreflect.Value { - v := new(v1beta12.Coin) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Tip_1_list) IsValid() bool { - return x.list != nil -} - var ( - md_Tip protoreflect.MessageDescriptor - fd_Tip_amount protoreflect.FieldDescriptor - fd_Tip_tipper protoreflect.FieldDescriptor + md_AuxSignerData protoreflect.MessageDescriptor + fd_AuxSignerData_address protoreflect.FieldDescriptor + fd_AuxSignerData_sign_doc protoreflect.FieldDescriptor + fd_AuxSignerData_mode protoreflect.FieldDescriptor + fd_AuxSignerData_sig protoreflect.FieldDescriptor ) func init() { file_cosmos_tx_v1beta1_tx_proto_init() - md_Tip = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("Tip") - fd_Tip_amount = md_Tip.Fields().ByName("amount") - fd_Tip_tipper = md_Tip.Fields().ByName("tipper") + md_AuxSignerData = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuxSignerData") + fd_AuxSignerData_address = md_AuxSignerData.Fields().ByName("address") + fd_AuxSignerData_sign_doc = md_AuxSignerData.Fields().ByName("sign_doc") + fd_AuxSignerData_mode = md_AuxSignerData.Fields().ByName("mode") + fd_AuxSignerData_sig = md_AuxSignerData.Fields().ByName("sig") } -var _ protoreflect.Message = (*fastReflection_Tip)(nil) +var _ protoreflect.Message = (*fastReflection_AuxSignerData)(nil) -type fastReflection_Tip Tip +type fastReflection_AuxSignerData AuxSignerData -func (x *Tip) ProtoReflect() protoreflect.Message { - return (*fastReflection_Tip)(x) +func (x *AuxSignerData) ProtoReflect() protoreflect.Message { + return (*fastReflection_AuxSignerData)(x) } -func (x *Tip) slowProtoReflect() protoreflect.Message { +func (x *AuxSignerData) slowProtoReflect() protoreflect.Message { mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7018,43 +6813,43 @@ func (x *Tip) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_Tip_messageType fastReflection_Tip_messageType -var _ protoreflect.MessageType = fastReflection_Tip_messageType{} +var _fastReflection_AuxSignerData_messageType fastReflection_AuxSignerData_messageType +var _ protoreflect.MessageType = fastReflection_AuxSignerData_messageType{} -type fastReflection_Tip_messageType struct{} +type fastReflection_AuxSignerData_messageType struct{} -func (x fastReflection_Tip_messageType) Zero() protoreflect.Message { - return (*fastReflection_Tip)(nil) +func (x fastReflection_AuxSignerData_messageType) Zero() protoreflect.Message { + return (*fastReflection_AuxSignerData)(nil) } -func (x fastReflection_Tip_messageType) New() protoreflect.Message { - return new(fastReflection_Tip) +func (x fastReflection_AuxSignerData_messageType) New() protoreflect.Message { + return new(fastReflection_AuxSignerData) } -func (x fastReflection_Tip_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_Tip +func (x fastReflection_AuxSignerData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AuxSignerData } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_Tip) Descriptor() protoreflect.MessageDescriptor { - return md_Tip +func (x *fastReflection_AuxSignerData) Descriptor() protoreflect.MessageDescriptor { + return md_AuxSignerData } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_Tip) Type() protoreflect.MessageType { - return _fastReflection_Tip_messageType +func (x *fastReflection_AuxSignerData) Type() protoreflect.MessageType { + return _fastReflection_AuxSignerData_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_Tip) New() protoreflect.Message { - return new(fastReflection_Tip) +func (x *fastReflection_AuxSignerData) New() protoreflect.Message { + return new(fastReflection_AuxSignerData) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_Tip) Interface() protoreflect.ProtoMessage { - return (*Tip)(x) +func (x *fastReflection_AuxSignerData) Interface() protoreflect.ProtoMessage { + return (*AuxSignerData)(x) } // Range iterates over every populated field in an undefined order, @@ -7062,16 +6857,28 @@ func (x *fastReflection_Tip) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_Tip) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if len(x.Amount) != 0 { - value := protoreflect.ValueOfList(&_Tip_1_list{list: &x.Amount}) - if !f(fd_Tip_amount, value) { +func (x *fastReflection_AuxSignerData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_AuxSignerData_address, value) { + return + } + } + if x.SignDoc != nil { + value := protoreflect.ValueOfMessage(x.SignDoc.ProtoReflect()) + if !f(fd_AuxSignerData_sign_doc, value) { + return + } + } + if x.Mode != 0 { + value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.Mode)) + if !f(fd_AuxSignerData_mode, value) { return } } - if x.Tipper != "" { - value := protoreflect.ValueOfString(x.Tipper) - if !f(fd_Tip_tipper, value) { + if len(x.Sig) != 0 { + value := protoreflect.ValueOfBytes(x.Sig) + if !f(fd_AuxSignerData_sig, value) { return } } @@ -7088,17 +6895,21 @@ func (x *fastReflection_Tip) Range(f func(protoreflect.FieldDescriptor, protoref // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_Tip) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_AuxSignerData) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - return len(x.Amount) != 0 - case "cosmos.tx.v1beta1.Tip.tipper": - return x.Tipper != "" + case "cosmos.tx.v1beta1.AuxSignerData.address": + return x.Address != "" + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + return x.SignDoc != nil + case "cosmos.tx.v1beta1.AuxSignerData.mode": + return x.Mode != 0 + case "cosmos.tx.v1beta1.AuxSignerData.sig": + return len(x.Sig) != 0 default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) } } @@ -7108,17 +6919,21 @@ func (x *fastReflection_Tip) Has(fd protoreflect.FieldDescriptor) bool { // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Tip) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_AuxSignerData) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - x.Amount = nil - case "cosmos.tx.v1beta1.Tip.tipper": - x.Tipper = "" + case "cosmos.tx.v1beta1.AuxSignerData.address": + x.Address = "" + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + x.SignDoc = nil + case "cosmos.tx.v1beta1.AuxSignerData.mode": + x.Mode = 0 + case "cosmos.tx.v1beta1.AuxSignerData.sig": + x.Sig = nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) } } @@ -7128,22 +6943,25 @@ func (x *fastReflection_Tip) Clear(fd protoreflect.FieldDescriptor) { // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_Tip) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_AuxSignerData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - if len(x.Amount) == 0 { - return protoreflect.ValueOfList(&_Tip_1_list{}) - } - listValue := &_Tip_1_list{list: &x.Amount} - return protoreflect.ValueOfList(listValue) - case "cosmos.tx.v1beta1.Tip.tipper": - value := x.Tipper + case "cosmos.tx.v1beta1.AuxSignerData.address": + value := x.Address return protoreflect.ValueOfString(value) + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + value := x.SignDoc + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.tx.v1beta1.AuxSignerData.mode": + value := x.Mode + return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) + case "cosmos.tx.v1beta1.AuxSignerData.sig": + value := x.Sig + return protoreflect.ValueOfBytes(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", descriptor.FullName())) } } @@ -7157,19 +6975,21 @@ func (x *fastReflection_Tip) Get(descriptor protoreflect.FieldDescriptor) protor // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Tip) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_AuxSignerData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - lv := value.List() - clv := lv.(*_Tip_1_list) - x.Amount = *clv.list - case "cosmos.tx.v1beta1.Tip.tipper": - x.Tipper = value.Interface().(string) + case "cosmos.tx.v1beta1.AuxSignerData.address": + x.Address = value.Interface().(string) + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + x.SignDoc = value.Message().Interface().(*SignDocDirectAux) + case "cosmos.tx.v1beta1.AuxSignerData.mode": + x.Mode = (v1beta1.SignMode)(value.Enum()) + case "cosmos.tx.v1beta1.AuxSignerData.sig": + x.Sig = value.Bytes() default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) } } @@ -7183,543 +7003,7 @@ func (x *fastReflection_Tip) Set(fd protoreflect.FieldDescriptor, value protoref // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Tip) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - if x.Amount == nil { - x.Amount = []*v1beta12.Coin{} - } - value := &_Tip_1_list{list: &x.Amount} - return protoreflect.ValueOfList(value) - case "cosmos.tx.v1beta1.Tip.tipper": - panic(fmt.Errorf("field tipper of message cosmos.tx.v1beta1.Tip is not mutable")) - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) - } -} - -// NewField returns a new value that is assignable to the field -// for the given descriptor. For scalars, this returns the default value. -// For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_Tip) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cosmos.tx.v1beta1.Tip.amount": - list := []*v1beta12.Coin{} - return protoreflect.ValueOfList(&_Tip_1_list{list: &list}) - case "cosmos.tx.v1beta1.Tip.tipper": - return protoreflect.ValueOfString("") - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) - } -} - -// WhichOneof reports which field within the oneof is populated, -// returning nil if none are populated. -// It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_Tip) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { - switch d.FullName() { - default: - panic(fmt.Errorf("%s is not a oneof field in cosmos.tx.v1beta1.Tip", d.FullName())) - } - panic("unreachable") -} - -// GetUnknown retrieves the entire list of unknown fields. -// The caller may only mutate the contents of the RawFields -// if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_Tip) GetUnknown() protoreflect.RawFields { - return x.unknownFields -} - -// SetUnknown stores an entire list of unknown fields. -// The raw fields must be syntactically valid according to the wire format. -// An implementation may panic if this is not the case. -// Once stored, the caller must not mutate the content of the RawFields. -// An empty RawFields may be passed to clear the fields. -// -// SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Tip) SetUnknown(fields protoreflect.RawFields) { - x.unknownFields = fields -} - -// IsValid reports whether the message is valid. -// -// An invalid message is an empty, read-only value. -// -// An invalid message often corresponds to a nil pointer of the concrete -// message type, but the details are implementation dependent. -// Validity is not part of the protobuf data model, and may not -// be preserved in marshaling or other operations. -func (x *fastReflection_Tip) IsValid() bool { - return x != nil -} - -// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. -// This method may return nil. -// -// The returned methods type is identical to -// "google.golang.org/protobuf/runtime/protoiface".Methods. -// Consult the protoiface package documentation for details. -func (x *fastReflection_Tip) ProtoMethods() *protoiface.Methods { - size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*Tip) - if x == nil { - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: 0, - } - } - options := runtime.SizeInputToOptions(input) - _ = options - var n int - var l int - _ = l - if len(x.Amount) > 0 { - for _, e := range x.Amount { - l = options.Size(e) - n += 1 + l + runtime.Sov(uint64(l)) - } - } - l = len(x.Tipper) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.unknownFields != nil { - n += len(x.unknownFields) - } - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: n, - } - } - - marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*Tip) - if x == nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - options := runtime.MarshalInputToOptions(input) - _ = options - size := options.Size(x) - dAtA := make([]byte, size) - i := len(dAtA) - _ = i - var l int - _ = l - if x.unknownFields != nil { - i -= len(x.unknownFields) - copy(dAtA[i:], x.unknownFields) - } - if len(x.Tipper) > 0 { - i -= len(x.Tipper) - copy(dAtA[i:], x.Tipper) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Tipper))) - i-- - dAtA[i] = 0x12 - } - if len(x.Amount) > 0 { - for iNdEx := len(x.Amount) - 1; iNdEx >= 0; iNdEx-- { - encoded, err := options.Marshal(x.Amount[iNdEx]) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0xa - } - } - if input.Buf != nil { - input.Buf = append(input.Buf, dAtA...) - } else { - input.Buf = dAtA - } - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*Tip) - if x == nil { - return protoiface.UnmarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Flags: input.Flags, - }, nil - } - options := runtime.UnmarshalInputToOptions(input) - _ = options - dAtA := input.Buf - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tip: wiretype end group for non-group") - } - if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tip: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - x.Amount = append(x.Amount, &v1beta12.Coin{}) - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount[len(x.Amount)-1]); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tipper", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - x.Tipper = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := runtime.Skip(dAtA[iNdEx:]) - if err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if (iNdEx + skippy) > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if !options.DiscardUnknown { - x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - } - iNdEx += skippy - } - } - - if iNdEx > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil - } - return &protoiface.Methods{ - NoUnkeyedLiterals: struct{}{}, - Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, - Size: size, - Marshal: marshal, - Unmarshal: unmarshal, - Merge: nil, - CheckInitialized: nil, - } -} - -var ( - md_AuxSignerData protoreflect.MessageDescriptor - fd_AuxSignerData_address protoreflect.FieldDescriptor - fd_AuxSignerData_sign_doc protoreflect.FieldDescriptor - fd_AuxSignerData_mode protoreflect.FieldDescriptor - fd_AuxSignerData_sig protoreflect.FieldDescriptor -) - -func init() { - file_cosmos_tx_v1beta1_tx_proto_init() - md_AuxSignerData = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuxSignerData") - fd_AuxSignerData_address = md_AuxSignerData.Fields().ByName("address") - fd_AuxSignerData_sign_doc = md_AuxSignerData.Fields().ByName("sign_doc") - fd_AuxSignerData_mode = md_AuxSignerData.Fields().ByName("mode") - fd_AuxSignerData_sig = md_AuxSignerData.Fields().ByName("sig") -} - -var _ protoreflect.Message = (*fastReflection_AuxSignerData)(nil) - -type fastReflection_AuxSignerData AuxSignerData - -func (x *AuxSignerData) ProtoReflect() protoreflect.Message { - return (*fastReflection_AuxSignerData)(x) -} - -func (x *AuxSignerData) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -var _fastReflection_AuxSignerData_messageType fastReflection_AuxSignerData_messageType -var _ protoreflect.MessageType = fastReflection_AuxSignerData_messageType{} - -type fastReflection_AuxSignerData_messageType struct{} - -func (x fastReflection_AuxSignerData_messageType) Zero() protoreflect.Message { - return (*fastReflection_AuxSignerData)(nil) -} -func (x fastReflection_AuxSignerData_messageType) New() protoreflect.Message { - return new(fastReflection_AuxSignerData) -} -func (x fastReflection_AuxSignerData_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_AuxSignerData -} - -// Descriptor returns message descriptor, which contains only the protobuf -// type information for the message. -func (x *fastReflection_AuxSignerData) Descriptor() protoreflect.MessageDescriptor { - return md_AuxSignerData -} - -// Type returns the message type, which encapsulates both Go and protobuf -// type information. If the Go type information is not needed, -// it is recommended that the message descriptor be used instead. -func (x *fastReflection_AuxSignerData) Type() protoreflect.MessageType { - return _fastReflection_AuxSignerData_messageType -} - -// New returns a newly allocated and mutable empty message. -func (x *fastReflection_AuxSignerData) New() protoreflect.Message { - return new(fastReflection_AuxSignerData) -} - -// Interface unwraps the message reflection interface and -// returns the underlying ProtoMessage interface. -func (x *fastReflection_AuxSignerData) Interface() protoreflect.ProtoMessage { - return (*AuxSignerData)(x) -} - -// Range iterates over every populated field in an undefined order, -// calling f for each field descriptor and value encountered. -// Range returns immediately if f returns false. -// While iterating, mutating operations may only be performed -// on the current field descriptor. -func (x *fastReflection_AuxSignerData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Address != "" { - value := protoreflect.ValueOfString(x.Address) - if !f(fd_AuxSignerData_address, value) { - return - } - } - if x.SignDoc != nil { - value := protoreflect.ValueOfMessage(x.SignDoc.ProtoReflect()) - if !f(fd_AuxSignerData_sign_doc, value) { - return - } - } - if x.Mode != 0 { - value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.Mode)) - if !f(fd_AuxSignerData_mode, value) { - return - } - } - if len(x.Sig) != 0 { - value := protoreflect.ValueOfBytes(x.Sig) - if !f(fd_AuxSignerData_sig, value) { - return - } - } -} - -// Has reports whether a field is populated. -// -// Some fields have the property of nullability where it is possible to -// distinguish between the default value of a field and whether the field -// was explicitly populated with the default value. Singular message fields, -// member fields of a oneof, and proto2 scalar fields are nullable. Such -// fields are populated only if explicitly set. -// -// In other cases (aside from the nullable cases above), -// a proto3 scalar field is populated if it contains a non-zero value, and -// a repeated field is populated if it is non-empty. -func (x *fastReflection_AuxSignerData) Has(fd protoreflect.FieldDescriptor) bool { - switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - return x.Address != "" - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - return x.SignDoc != nil - case "cosmos.tx.v1beta1.AuxSignerData.mode": - return x.Mode != 0 - case "cosmos.tx.v1beta1.AuxSignerData.sig": - return len(x.Sig) != 0 - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) - } -} - -// Clear clears the field such that a subsequent Has call reports false. -// -// Clearing an extension field clears both the extension type and value -// associated with the given field number. -// -// Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Clear(fd protoreflect.FieldDescriptor) { - switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - x.Address = "" - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - x.SignDoc = nil - case "cosmos.tx.v1beta1.AuxSignerData.mode": - x.Mode = 0 - case "cosmos.tx.v1beta1.AuxSignerData.sig": - x.Sig = nil - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) - } -} - -// Get retrieves the value for a field. -// -// For unpopulated scalars, it returns the default value, where -// the default value of a bytes scalar is guaranteed to be a copy. -// For unpopulated composite types, it returns an empty, read-only view -// of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_AuxSignerData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { - switch descriptor.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - value := x.Address - return protoreflect.ValueOfString(value) - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - value := x.SignDoc - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cosmos.tx.v1beta1.AuxSignerData.mode": - value := x.Mode - return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) - case "cosmos.tx.v1beta1.AuxSignerData.sig": - value := x.Sig - return protoreflect.ValueOfBytes(value) - default: - if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", descriptor.FullName())) - } -} - -// Set stores the value for a field. -// -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType. -// When setting a composite type, it is unspecified whether the stored value -// aliases the source's memory in any way. If the composite value is an -// empty, read-only value, then it panics. -// -// Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { - switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - x.Address = value.Interface().(string) - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - x.SignDoc = value.Message().Interface().(*SignDocDirectAux) - case "cosmos.tx.v1beta1.AuxSignerData.mode": - x.Mode = (v1beta1.SignMode)(value.Enum()) - case "cosmos.tx.v1beta1.AuxSignerData.sig": - x.Sig = value.Bytes() - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) - } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) - } -} - -// Mutable returns a mutable reference to a composite type. -// -// If the field is unpopulated, it may allocate a composite value. -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType -// if not already stored. -// It panics if the field does not contain a composite type. -// -// Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_AuxSignerData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": if x.SignDoc == nil { @@ -8329,13 +7613,6 @@ type SignDocDirectAux struct { AccountNumber uint64 `protobuf:"varint,4,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` // sequence is the sequence number of the signing account. Sequence uint64 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` - // Tip is the optional tip used for transactions fees paid in another denom. - // It should be left empty if the signer is not the tipper for this - // transaction. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - Tip *Tip `protobuf:"bytes,6,opt,name=tip,proto3" json:"tip,omitempty"` } func (x *SignDocDirectAux) Reset() { @@ -8393,13 +7670,6 @@ func (x *SignDocDirectAux) GetSequence() uint64 { return 0 } -func (x *SignDocDirectAux) GetTip() *Tip { - if x != nil { - return x.Tip - } - return nil -} - // TxBody is the body of a transaction that all signers sign over. type TxBody struct { state protoimpl.MessageState @@ -8503,13 +7773,6 @@ type AuthInfo struct { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee *Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` - // Tip is the optional tip used for transactions fees paid in another denom. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - // - // Since: cosmos-sdk 0.46 - Tip *Tip `protobuf:"bytes,3,opt,name=tip,proto3" json:"tip,omitempty"` } func (x *AuthInfo) Reset() { @@ -8546,13 +7809,6 @@ func (x *AuthInfo) GetFee() *Fee { return nil } -func (x *AuthInfo) GetTip() *Tip { - if x != nil { - return x.Tip - } - return nil -} - // SignerInfo describes the public key and signing mode of a single top-level // signer. type SignerInfo struct { @@ -8760,54 +8016,6 @@ func (x *Fee) GetGranter() string { return "" } -// Tip is the tip used for meta-transactions. -// -// Since: cosmos-sdk 0.46 -type Tip struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // amount is the amount of the tip - Amount []*v1beta12.Coin `protobuf:"bytes,1,rep,name=amount,proto3" json:"amount,omitempty"` - // tipper is the address of the account paying for the tip - Tipper string `protobuf:"bytes,2,opt,name=tipper,proto3" json:"tipper,omitempty"` -} - -func (x *Tip) Reset() { - *x = Tip{} - if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Tip) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Tip) ProtoMessage() {} - -// Deprecated: Use Tip.ProtoReflect.Descriptor instead. -func (*Tip) Descriptor() ([]byte, []int) { - return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{9} -} - -func (x *Tip) GetAmount() []*v1beta12.Coin { - if x != nil { - return x.Amount - } - return nil -} - -func (x *Tip) GetTipper() string { - if x != nil { - return x.Tipper - } - return "" -} - // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected @@ -8836,7 +8044,7 @@ type AuxSignerData struct { func (x *AuxSignerData) Reset() { *x = AuxSignerData{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8850,7 +8058,7 @@ func (*AuxSignerData) ProtoMessage() {} // Deprecated: Use AuxSignerData.ProtoReflect.Descriptor instead. func (*AuxSignerData) Descriptor() ([]byte, []int) { - return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{10} + return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{9} } func (x *AuxSignerData) GetAddress() string { @@ -8896,7 +8104,7 @@ type ModeInfo_Single struct { func (x *ModeInfo_Single) Reset() { *x = ModeInfo_Single{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8936,7 +8144,7 @@ type ModeInfo_Multi struct { func (x *ModeInfo_Multi) Reset() { *x = ModeInfo_Multi{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[12] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9011,7 +8219,7 @@ var file_cosmos_tx_v1beta1_tx_proto_rawDesc = []byte{ 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xee, 0x01, 0x0a, 0x10, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xc4, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, @@ -9024,121 +8232,105 @@ var file_cosmos_tx_v1beta1_tx_proto_rawDesc = []byte{ 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x54, 0x69, 0x70, 0x52, 0x03, 0x74, 0x69, 0x70, 0x22, 0x95, 0x02, 0x0a, - 0x06, 0x54, 0x78, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x1e, 0x6e, 0x6f, 0x6e, 0x5f, - 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, 0x0f, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x1b, 0x6e, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x28, 0x0a, - 0x03, 0x74, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, - 0x69, 0x70, 0x52, 0x03, 0x74, 0x69, 0x70, 0x22, 0x97, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6d, - 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x6f, 0x64, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0xe0, 0x02, 0x0a, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, - 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x05, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x48, 0x00, - 0x52, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x1a, 0x41, 0x0a, 0x06, 0x53, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x90, 0x01, 0x0a, 0x05, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x12, 0x4b, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x73, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, - 0x69, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x52, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, - 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x42, 0x05, 0x0a, - 0x03, 0x73, 0x75, 0x6d, 0x22, 0x81, 0x02, 0x0a, 0x03, 0x46, 0x65, 0x65, 0x12, 0x79, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, - 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x70, - 0x61, 0x79, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x22, 0xb2, 0x01, 0x0a, 0x03, 0x54, 0x69, 0x70, - 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, - 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, - 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, - 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, - 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x74, - 0x69, 0x70, 0x70, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, - 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, 0x69, 0x70, 0x70, 0x65, 0x72, 0x22, 0xce, 0x01, - 0x0a, 0x0d, 0x41, 0x75, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x63, 0x65, 0x22, 0x95, 0x02, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, + 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, + 0x65, 0x6d, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0xff, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x10, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, + 0x0a, 0x1e, 0x6e, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0xff, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x1b, 0x6e, + 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x76, 0x0a, 0x08, 0x41, 0x75, + 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, + 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, + 0x65, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xe0, 0x02, 0x0a, + 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x48, 0x00, 0x52, + 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x1a, 0x41, 0x0a, 0x06, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x04, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x90, 0x01, 0x0a, 0x05, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, + 0x4b, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x73, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x69, 0x74, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x52, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x3a, 0x0a, 0x0a, + 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x6d, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x22, + 0x81, 0x02, 0x0a, 0x03, 0x46, 0x65, 0x65, 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x2e, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x32, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x64, 0x6f, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, - 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, - 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, - 0x44, 0x6f, 0x63, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, - 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x73, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x42, 0xb4, - 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x74, 0x78, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xa2, 0x02, 0x03, 0x43, 0x54, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x54, 0x78, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x11, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, - 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x54, 0x78, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0xce, 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x69, 0x67, + 0x6e, 0x5f, 0x64, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, + 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x03, 0x73, 0x69, 0x67, 0x42, 0xb4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, + 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x74, 0x78, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x54, 0x58, 0xaa, 0x02, 0x11, + 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x54, 0x78, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0xca, 0x02, 0x11, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, + 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, + 0x54, 0x78, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -9153,7 +8345,7 @@ func file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP() []byte { return file_cosmos_tx_v1beta1_tx_proto_rawDescData } -var file_cosmos_tx_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_cosmos_tx_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_cosmos_tx_v1beta1_tx_proto_goTypes = []interface{}{ (*Tx)(nil), // 0: cosmos.tx.v1beta1.Tx (*TxRaw)(nil), // 1: cosmos.tx.v1beta1.TxRaw @@ -9164,42 +8356,38 @@ var file_cosmos_tx_v1beta1_tx_proto_goTypes = []interface{}{ (*SignerInfo)(nil), // 6: cosmos.tx.v1beta1.SignerInfo (*ModeInfo)(nil), // 7: cosmos.tx.v1beta1.ModeInfo (*Fee)(nil), // 8: cosmos.tx.v1beta1.Fee - (*Tip)(nil), // 9: cosmos.tx.v1beta1.Tip - (*AuxSignerData)(nil), // 10: cosmos.tx.v1beta1.AuxSignerData - (*ModeInfo_Single)(nil), // 11: cosmos.tx.v1beta1.ModeInfo.Single - (*ModeInfo_Multi)(nil), // 12: cosmos.tx.v1beta1.ModeInfo.Multi - (*anypb.Any)(nil), // 13: google.protobuf.Any - (*v1beta12.Coin)(nil), // 14: cosmos.base.v1beta1.Coin - (v1beta1.SignMode)(0), // 15: cosmos.tx.signing.v1beta1.SignMode - (*v1beta11.CompactBitArray)(nil), // 16: cosmos.crypto.multisig.v1beta1.CompactBitArray + (*AuxSignerData)(nil), // 9: cosmos.tx.v1beta1.AuxSignerData + (*ModeInfo_Single)(nil), // 10: cosmos.tx.v1beta1.ModeInfo.Single + (*ModeInfo_Multi)(nil), // 11: cosmos.tx.v1beta1.ModeInfo.Multi + (*anypb.Any)(nil), // 12: google.protobuf.Any + (*v1beta12.Coin)(nil), // 13: cosmos.base.v1beta1.Coin + (v1beta1.SignMode)(0), // 14: cosmos.tx.signing.v1beta1.SignMode + (*v1beta11.CompactBitArray)(nil), // 15: cosmos.crypto.multisig.v1beta1.CompactBitArray } var file_cosmos_tx_v1beta1_tx_proto_depIdxs = []int32{ 4, // 0: cosmos.tx.v1beta1.Tx.body:type_name -> cosmos.tx.v1beta1.TxBody 5, // 1: cosmos.tx.v1beta1.Tx.auth_info:type_name -> cosmos.tx.v1beta1.AuthInfo - 13, // 2: cosmos.tx.v1beta1.SignDocDirectAux.public_key:type_name -> google.protobuf.Any - 9, // 3: cosmos.tx.v1beta1.SignDocDirectAux.tip:type_name -> cosmos.tx.v1beta1.Tip - 13, // 4: cosmos.tx.v1beta1.TxBody.messages:type_name -> google.protobuf.Any - 13, // 5: cosmos.tx.v1beta1.TxBody.extension_options:type_name -> google.protobuf.Any - 13, // 6: cosmos.tx.v1beta1.TxBody.non_critical_extension_options:type_name -> google.protobuf.Any - 6, // 7: cosmos.tx.v1beta1.AuthInfo.signer_infos:type_name -> cosmos.tx.v1beta1.SignerInfo - 8, // 8: cosmos.tx.v1beta1.AuthInfo.fee:type_name -> cosmos.tx.v1beta1.Fee - 9, // 9: cosmos.tx.v1beta1.AuthInfo.tip:type_name -> cosmos.tx.v1beta1.Tip - 13, // 10: cosmos.tx.v1beta1.SignerInfo.public_key:type_name -> google.protobuf.Any - 7, // 11: cosmos.tx.v1beta1.SignerInfo.mode_info:type_name -> cosmos.tx.v1beta1.ModeInfo - 11, // 12: cosmos.tx.v1beta1.ModeInfo.single:type_name -> cosmos.tx.v1beta1.ModeInfo.Single - 12, // 13: cosmos.tx.v1beta1.ModeInfo.multi:type_name -> cosmos.tx.v1beta1.ModeInfo.Multi - 14, // 14: cosmos.tx.v1beta1.Fee.amount:type_name -> cosmos.base.v1beta1.Coin - 14, // 15: cosmos.tx.v1beta1.Tip.amount:type_name -> cosmos.base.v1beta1.Coin - 3, // 16: cosmos.tx.v1beta1.AuxSignerData.sign_doc:type_name -> cosmos.tx.v1beta1.SignDocDirectAux - 15, // 17: cosmos.tx.v1beta1.AuxSignerData.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode - 15, // 18: cosmos.tx.v1beta1.ModeInfo.Single.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode - 16, // 19: cosmos.tx.v1beta1.ModeInfo.Multi.bitarray:type_name -> cosmos.crypto.multisig.v1beta1.CompactBitArray - 7, // 20: cosmos.tx.v1beta1.ModeInfo.Multi.mode_infos:type_name -> cosmos.tx.v1beta1.ModeInfo - 21, // [21:21] is the sub-list for method output_type - 21, // [21:21] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 12, // 2: cosmos.tx.v1beta1.SignDocDirectAux.public_key:type_name -> google.protobuf.Any + 12, // 3: cosmos.tx.v1beta1.TxBody.messages:type_name -> google.protobuf.Any + 12, // 4: cosmos.tx.v1beta1.TxBody.extension_options:type_name -> google.protobuf.Any + 12, // 5: cosmos.tx.v1beta1.TxBody.non_critical_extension_options:type_name -> google.protobuf.Any + 6, // 6: cosmos.tx.v1beta1.AuthInfo.signer_infos:type_name -> cosmos.tx.v1beta1.SignerInfo + 8, // 7: cosmos.tx.v1beta1.AuthInfo.fee:type_name -> cosmos.tx.v1beta1.Fee + 12, // 8: cosmos.tx.v1beta1.SignerInfo.public_key:type_name -> google.protobuf.Any + 7, // 9: cosmos.tx.v1beta1.SignerInfo.mode_info:type_name -> cosmos.tx.v1beta1.ModeInfo + 10, // 10: cosmos.tx.v1beta1.ModeInfo.single:type_name -> cosmos.tx.v1beta1.ModeInfo.Single + 11, // 11: cosmos.tx.v1beta1.ModeInfo.multi:type_name -> cosmos.tx.v1beta1.ModeInfo.Multi + 13, // 12: cosmos.tx.v1beta1.Fee.amount:type_name -> cosmos.base.v1beta1.Coin + 3, // 13: cosmos.tx.v1beta1.AuxSignerData.sign_doc:type_name -> cosmos.tx.v1beta1.SignDocDirectAux + 14, // 14: cosmos.tx.v1beta1.AuxSignerData.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode + 14, // 15: cosmos.tx.v1beta1.ModeInfo.Single.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode + 15, // 16: cosmos.tx.v1beta1.ModeInfo.Multi.bitarray:type_name -> cosmos.crypto.multisig.v1beta1.CompactBitArray + 7, // 17: cosmos.tx.v1beta1.ModeInfo.Multi.mode_infos:type_name -> cosmos.tx.v1beta1.ModeInfo + 18, // [18:18] is the sub-list for method output_type + 18, // [18:18] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_cosmos_tx_v1beta1_tx_proto_init() } @@ -9317,18 +8505,6 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { } } file_cosmos_tx_v1beta1_tx_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tip); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cosmos_tx_v1beta1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuxSignerData); i { case 0: return &v.state @@ -9340,7 +8516,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { return nil } } - file_cosmos_tx_v1beta1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_cosmos_tx_v1beta1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModeInfo_Single); i { case 0: return &v.state @@ -9352,7 +8528,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { return nil } } - file_cosmos_tx_v1beta1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_cosmos_tx_v1beta1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModeInfo_Multi); i { case 0: return &v.state @@ -9375,7 +8551,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_tx_v1beta1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 13, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 9b11f21a770b..4fb412c5b0ec 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -72,7 +72,7 @@ type BaseApp struct { mempool mempool.Mempool // application side mempool anteHandler sdk.AnteHandler // ante handler for fee and auth - postHandler sdk.PostHandler // post handler, optional, e.g. for tips + postHandler sdk.PostHandler // post handler, optional initChainer sdk.InitChainer // ABCI InitChain handler preBlocker sdk.PreBlocker // logic to run before BeginBlocker diff --git a/client/tx/aux_builder.go b/client/tx/aux_builder.go index 0500979b9853..be9616ae759e 100644 --- a/client/tx/aux_builder.go +++ b/client/tx/aux_builder.go @@ -6,7 +6,6 @@ import ( "github.com/cosmos/gogoproto/proto" "google.golang.org/protobuf/types/known/anypb" - basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" txsigning "cosmossdk.io/x/tx/signing" "cosmossdk.io/x/tx/signing/aminojson" @@ -130,12 +129,6 @@ func (b *AuxTxBuilder) SetSignMode(mode signing.SignMode) error { return nil } -// SetTip sets an optional tip in the AuxSignerData. -func (b *AuxTxBuilder) SetTip(tip *tx.Tip) { - b.checkEmptyFields() - b.auxSignerData.SignDoc.Tip = tip -} - // SetSignature sets the aux signer's signature in the AuxSignerData. func (b *AuxTxBuilder) SetSignature(sig []byte) { b.checkEmptyFields() @@ -214,11 +207,7 @@ func (b *AuxTxBuilder) GetSignBytes() ([]byte, error) { handler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{ FileResolver: proto.HybridResolver, }) - legacyTip := b.auxSignerData.SignDoc.Tip - tip := &txv1beta1.Tip{ - Amount: make([]*basev1beta1.Coin, len(legacyTip.Amount)), - Tipper: legacyTip.Tipper, - } + auxBody := &txv1beta1.TxBody{ Messages: body.Messages, Memo: body.Memo, @@ -230,12 +219,7 @@ func (b *AuxTxBuilder) GetSignBytes() ([]byte, error) { ExtensionOptions: nil, NonCriticalExtensionOptions: nil, } - for i, coin := range legacyTip.Amount { - tip.Amount[i] = &basev1beta1.Coin{ - Denom: coin.Denom, - Amount: coin.Amount.String(), - } - } + signBz, err = handler.GetSignBytes( context.Background(), txsigning.SignerData{ @@ -254,7 +238,6 @@ func (b *AuxTxBuilder) GetSignBytes() ([]byte, error) { // over empty fees. // ref: https://github.com/cosmos/cosmos-sdk/pull/10348 Fee: &txv1beta1.Fee{}, - Tip: tip, }, }, ) diff --git a/client/tx/aux_builder_test.go b/client/tx/aux_builder_test.go index 98f33c25a9f1..aa25b927826d 100644 --- a/client/tx/aux_builder_test.go +++ b/client/tx/aux_builder_test.go @@ -89,7 +89,6 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(&typestx.Tip{}) require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() @@ -102,7 +101,6 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() @@ -115,7 +113,6 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() @@ -131,7 +128,6 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) b.SetAddress(addr1.String()) require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) @@ -153,7 +149,6 @@ func TestAuxTxBuilder(t *testing.T) { b.SetChainID(chainID) require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) b.SetAddress(addr1.String()) err := b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX) require.NoError(t, err) @@ -176,7 +171,6 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) b.SetAddress(addr1.String()) err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) @@ -196,7 +190,6 @@ func TestAuxTxBuilder(t *testing.T) { b.SetChainID(chainID) require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - b.SetTip(tip) b.SetAddress(addr1.String()) err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) @@ -251,7 +244,6 @@ func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSi require.Equal(t, chainID, auxSignerData.SignDoc.ChainId) require.Equal(t, msgAny, body.GetMessages()[0]) require.Equal(t, pkAny, auxSignerData.SignDoc.PublicKey) - require.Equal(t, tip, auxSignerData.SignDoc.Tip) require.Equal(t, signMode, auxSignerData.Mode) require.Equal(t, rawSig, auxSignerData.Sig) } diff --git a/client/tx/factory.go b/client/tx/factory.go index f38160218f89..52e3abf0420d 100644 --- a/client/tx/factory.go +++ b/client/tx/factory.go @@ -19,7 +19,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -39,7 +38,6 @@ type Factory struct { generateOnly bool memo string fees sdk.Coins - tip *tx.Tip feeGranter sdk.AccAddress feePayer sdk.AccAddress gasPrices sdk.DecCoins @@ -114,11 +112,6 @@ func NewFactoryCLI(clientCtx client.Context, flagSet *pflag.FlagSet) (Factory, e feesStr := clientCtx.Viper.GetString(flags.FlagFees) f = f.WithFees(feesStr) - tipsStr := clientCtx.Viper.GetString(flags.FlagTip) - // Add tips to factory. The tipper is necessarily the Msg signer, i.e. - // the from address. - f = f.WithTips(tipsStr, clientCtx.FromAddress.String()) - gasPricesStr := clientCtx.Viper.GetString(flags.FlagGasPrices) f = f.WithGasPrices(gasPricesStr) @@ -178,20 +171,6 @@ func (f Factory) WithFees(fees string) Factory { return f } -// WithTips returns a copy of the Factory with an updated tip. -func (f Factory) WithTips(tip, tipper string) Factory { - parsedTips, err := sdk.ParseCoinsNormalized(tip) - if err != nil { - panic(err) - } - - f.tip = &tx.Tip{ - Tipper: tipper, - Amount: parsedTips, - } - return f -} - // WithGasPrices returns a copy of the Factory with updated gas prices. func (f Factory) WithGasPrices(gasPrices string) Factory { parsedGasPrices, err := sdk.ParseDecCoins(gasPrices) diff --git a/client/tx/legacy_test.go b/client/tx/legacy_test.go index 2e337088cf2f..53751d4d90da 100644 --- a/client/tx/legacy_test.go +++ b/client/tx/legacy_test.go @@ -3,7 +3,6 @@ package tx_test import ( "github.com/cosmos/cosmos-sdk/testutil/testdata" "github.com/cosmos/cosmos-sdk/types" - typestx "github.com/cosmos/cosmos-sdk/types/tx" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" ) @@ -19,5 +18,4 @@ var ( msg1 = banktypes.NewMsgSend(addr1, addr2, types.NewCoins(types.NewInt64Coin("wack", 2))) chainID = "test-chain" - tip = &typestx.Tip{Tipper: addr1.String(), Amount: testdata.NewTestFeeAmount()} ) diff --git a/client/tx/tx.go b/client/tx/tx.go index 4b633be52a7b..c3b678b6392b 100644 --- a/client/tx/tx.go +++ b/client/tx/tx.go @@ -393,13 +393,6 @@ func makeAuxSignerData(clientCtx client.Context, f Factory, msgs ...sdk.Msg) (tx return tx.AuxSignerData{}, err } - if f.tip != nil { - if _, err := clientCtx.AddressCodec.StringToBytes(f.tip.Tipper); err != nil { - return tx.AuxSignerData{}, sdkerrors.ErrInvalidAddress.Wrap("tipper must be a valid address") - } - b.SetTip(f.tip) - } - err = b.SetSignMode(f.SignMode()) if err != nil { return tx.AuxSignerData{}, err diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 1cb480b3c5b0..8e8e9f179c54 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -9,8 +9,6 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc" - "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/codec" @@ -388,22 +386,12 @@ func TestPreprocessHook(t *testing.T) { extAny, err := codectypes.NewAnyWithValue(extVal) requireT.NoError(err) - coin := sdk.Coin{ - Denom: "atom", - Amount: math.NewInt(20), - } - newTip := &txtypes.Tip{ - Amount: sdk.Coins{coin}, - Tipper: "galaxy", - } - preprocessHook := client.PreprocessTxFn(func(chainID string, key keyring.KeyType, tx client.TxBuilder) error { extensionBuilder, ok := tx.(authtx.ExtensionOptionsTxBuilder) requireT.True(ok) // Set new extension and tip extensionBuilder.SetExtensionOptions(extAny) - tx.SetTip(newTip) return nil }) @@ -436,8 +424,6 @@ func TestPreprocessHook(t *testing.T) { opt := hasExtOptsTx.GetExtensionOptions()[0] requireT.Equal(opt, extAny) - tip := txb.GetTx().GetTip() - requireT.Equal(tip, newTip) } func testSigners(require *require.Assertions, tr signing.Tx, pks ...cryptotypes.PubKey) []signingtypes.SignatureV2 { diff --git a/client/tx_config.go b/client/tx_config.go index 4f6af35fa2a4..4dd1caa01396 100644 --- a/client/tx_config.go +++ b/client/tx_config.go @@ -47,7 +47,6 @@ type ( SetFeeAmount(amount sdk.Coins) SetFeePayer(feePayer sdk.AccAddress) SetGasLimit(limit uint64) - SetTip(tip *tx.Tip) SetTimeoutHeight(height uint64) SetFeeGranter(feeGranter sdk.AccAddress) AddAuxSignerData(tx.AuxSignerData) error diff --git a/docs/docs/develop/advanced/00-baseapp.md b/docs/docs/develop/advanced/00-baseapp.md index 293a82928af7..7121991e9777 100644 --- a/docs/docs/develop/advanced/00-baseapp.md +++ b/docs/docs/develop/advanced/00-baseapp.md @@ -412,7 +412,8 @@ First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the ` `PostHandler` is similar to `AnteHandler`, but it, as the name suggests, executes custom post tx processing logic after [`RunMsgs`](#runmsgs) is called. `PostHandler` receives the `Result` of the the `RunMsgs` in order to enable this customizable behavior. -Like `AnteHandler`s, `PostHandler`s are theoretically optional, one use case for `PostHandler`s is transaction tips (enabled by default in simapp). +Like `AnteHandler`s, `PostHandler`s are theoretically optional. + Other use cases like unused gas refund can also be enabled by `PostHandler`s. ```go reference diff --git a/docs/docs/develop/advanced/01-transactions.md b/docs/docs/develop/advanced/01-transactions.md index eee4fae37976..1901675fbcb2 100644 --- a/docs/docs/develop/advanced/01-transactions.md +++ b/docs/docs/develop/advanced/01-transactions.md @@ -91,7 +91,6 @@ https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/proto/cosmos/tx/v1beta The use case is a multi-signer transaction, where one of the signers is appointed to gather all signatures, broadcast the signature and pay for fees, and the others only care about the transaction body. This generally allows for a better multi-signing UX. If Alice, Bob and Charlie are part of a 3-signer transaction, then Alice and Bob can both use `SIGN_MODE_DIRECT_AUX` to sign over the `TxBody` and their own signer info (no need an additional step to gather other signers' ones, like in `SIGN_MODE_DIRECT`), without specifying a fee in their SignDoc. Charlie can then gather both signatures from Alice and Bob, and create the final transaction by appending a fee. Note that the fee payer of the transaction (in our case Charlie) must sign over the fees, so must use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. -A concrete use case is implemented in [transaction tips](./14-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. #### `SIGN_MODE_TEXTUAL` diff --git a/docs/docs/develop/advanced/14-tips.md b/docs/docs/develop/advanced/14-tips.md deleted file mode 100644 index 90f0f2abcec9..000000000000 --- a/docs/docs/develop/advanced/14-tips.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Transaction Tips - -:::note Synopsis -Transaction tips are a mechanism to pay for transaction fees using another denom than the native fee denom of the chain. They are still in beta, and are not included by default in the SDK. -::: - -## Context - -In a Cosmos ecosystem where more and more chains are connected via [IBC](https://ibc.cosmos.network/), it happens that users want to perform actions on chains where they don't have native tokens yet. An example would be an Osmosis user who wants to vote on a proposal on the Cosmos Hub, but they don't have ATOMs in their wallet. A solution would be to swap OSMO for ATOM just for voting on this proposal, but that is cumbersome. Cross-chain DeFi project [Emeris](https://emeris.com/) is another use case. - -Transaction tips is a new solution for cross-chain transaction fees payment, whereby the transaction initiator signs a transaction without specifying fees, but uses a new `Tip` field. They send this signed transaction to a fee relayer who will choose the transaction fees and broadcast the final transaction, and the SDK provides a mechanism that will transfer the pre-defined `Tip` to the fee payer, to cover for fees. - -Assuming we have two chains, A and B, we define the following terms: - -* **the tipper**: this is the initiator of the transaction, who wants to execute a `Msg` on chain A, but doesn't have any native chain A tokens, only chain B tokens. In our example above, the tipper is the Osmosis (chain B) user wanting to vote on a Cosmos Hub (chain A) proposal. -* **the fee payer**: this is the party that will relay and broadcast the final transaction on chain A, and has chain A tokens. The tipper doesn't need to trust the feepayer. -* **the target chain**: the chain where the `Msg` is executed, chain A in this case. - -## Transaction Tips Flow - -The transaction tips flow happens in multiple steps. - -1. The tipper sends via IBC some chain B tokens to chain A. These tokens will cover for fees on the target chain A. This means that chain A's bank module holds some IBC tokens under the tipper's address. - -2. The tipper drafts a transaction to be executed on the chain A. It can include chain A `Msg`s. However, instead of creating a normal transaction, they create the following `AuxSignerData` document: - - ```protobuf reference - https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/proto/cosmos/tx/v1beta1/tx.proto#L231-L244 - ``` - - where we have defined `SignDocDirectAux` as: - - ```protobuf reference - https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/proto/cosmos/tx/v1beta1/tx.proto#L68-L98 - ``` - - where `Tip` is defined as - - ```protobuf reference - https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/proto/cosmos/tx/v1beta1/tx.proto#L233-L244 - ``` - - Notice that this document doesn't sign over the final chain A fees. Instead, it includes a `Tip` field. It also doesn't include the whole `AuthInfo` object as in `SIGN_MODE_DIRECT`, only the minimum information needed by the tipper - -3. The tipper signs the `SignDocDirectAux` document and attaches the signature to the `AuxSignerData`, then sends the signed `AuxSignerData` to the fee payer. - -4. From the signed `AuxSignerData` document, the fee payer constructs a transaction, using the following algorithm: - -* use as `TxBody` the exact `AuxSignerData.SignDocDirectAux.body_bytes`, to not alter the original intent of the tipper, -* create an `AuthInfo` with: - * `AuthInfo.Tip` copied from `AuxSignerData.SignDocDirectAux.Tip`, - * `AuthInfo.Fee` chosen by the fee payer, which should cover for the transaction gas, but also be small enough so that the tip/fee exchange rate is economically interesting for the fee payer, - * `AuthInfo.SignerInfos` has two signers: the first signer is the tipper, using the public key, sequence and sign mode specified in `AuxSignerData`; and the second signer is the fee payer, using their favorite sign mode, -* a `Signatures` array with two items: the tipper's signature from `AuxSignerData.Sig`, and the final fee payer's signature. - -5. Broadcast the final transaction signed by the two parties to the target chain. Once included, the Cosmos SDK will trigger a transfer of the `Tip` specified in the transaction from the tipper address to the fee payer address. - -### Fee Payers Market - -The benefit of transaction tips for the tipper is clear: there is no need to swap tokens before executing a cross-chain message. - -For the fee payer, the benefit is in the tip v.s. fee exchange. Put simply, the fee payer pays the fees of an unknown tipper's transaction, and gets in exchange the tip that the tipper chose. There is an economic incentive for the fee payer to do so only when the tip is greater than the transaction fees, given the exchange rates between the two tokens. - -In the future, we imagine a market where fee payers will compete to include transactions from tippers, who on their side will optimize by specifying the lowest tip possible. A number of automated services might spin up to perform transaction gas simulation and exchange rate monitoring to optimize both the tip and fee values in real-time. - -### Tipper and Fee Payer Sign Modes - -As we mentioned in the flow above, the tipper signs over the `SignDocDirectAux`, and the fee payer signs over the whole final transaction. As such, both parties might use different sign modes. - -* The tipper MUST use `SIGN_MODE_DIRECT_AUX` or `SIGN_MODE_LEGACY_AMINO_JSON`. That is because the tipper needs to sign over the body, the tip, but not the other signers' information and not over the fee (which is unknown to the tipper). -* The fee payer MUST use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. The fee payer signs over the whole transaction. - -For example, if the fee payer signs the whole transaction with `SIGN_MODE_DIRECT_AUX`, it will be rejected by the node, as that would introduce malleability issues (`SIGN_MODE_DIRECT_AUX` doesn't sign over fees). - -In both cases, using `SIGN_MODE_LEGACY_AMINO_JSON` is recommended only if hardware wallet signing is needed. - -## Enabling Tips on your Chain - -The transaction tips functionality is introduced in Cosmos SDK v0.46, so earlier versions do not have support for tips. It is however not included by default in a v0.46 app. Sending a transaction with tips to a chain which didn't enable tips will result in a no-op, i.e. the `tip` field in the transaction will be ignored. - -Enabling tips on a chain is done by adding the `TipDecorator` in the posthandler chain: - -```go -// HandlerOptions are the options required for constructing a SDK PostHandler which supports tips. -type HandlerOptions struct { - BankKeeper types.BankKeeper -} - -// MyPostHandler returns a posthandler chain with the TipDecorator. -func MyPostHandler(options HandlerOptions) (sdk.AnteHandler, error) { - if options.BankKeeper == nil { - return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for posthandler") - } - - postDecorators := []sdk.AnteDecorator{ - posthandler.NewTipDecorator(options.bankKeeper), - } - - return sdk.ChainAnteDecorators(postDecorators...), nil -} - -func (app *SimApp) setPostHandler() { - postHandler, err := MyPostHandler( - HandlerOptions{ - BankKeeper: app.BankKeeper, - }, - ) - if err != nil { - panic(err) - } - - app.SetPostHandler(postHandler) -} -``` - -Notice that `NewTipDecorator` needs a reference to the BankKeeper, for transferring the tip to the fee payer. - -## CLI Usage - -The Cosmos SDK also provides some CLI tooling for the transaction tips flow, both for the tipper and for the feepayer. - -For the tipper, the CLI `tx` subcommand has two new flags: `--aux` and `--tip`. The `--aux` flag is used to denote that we are creating an `AuxSignerData` instead of a `Tx`, and the `--tip` is used to populate its `Tip` field. - -```bash -$ simd tx gov vote 16 yes --from --aux --tip 50ibcdenom - - -### Prints the AuxSignerData as JSON: -### {"address":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2","sign_doc":{"body_bytes":"CosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKLWNvc21vczFxMGF5ZjV2cTZmZDJ4eHJ3aDMwdXBnMDVoeGRueXcyaDUyNDlhMhItY29zbW9zMXdlNWoyZXI2MHV5OXF3YzBta3ptdGdtdHA5Z3F5NXY2bjhnZGdlGgsKBXN0YWtlEgIxMA==","public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AojOF/1luQ5H/nZDSrE1w3CyzGJhJdQuS7hFX5wAA6uJ"},"chain_id":"","account_number":"0","sequence":"1","tip":{"amount":[{"denom":"ibcdenom","amount":"50"}],"tipper":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2"}},"mode":"SIGN_MODE_DIRECT_AUX","sig":"v/d/bGq9FGdecs6faMG2t//nRirFTiqwFtUB65M6kh0QdUeM6jg3r8oJX1o17xkoDxJ09EyJiSyvo6fbU7vUxg=="} -``` - -It is useful to pipe the JSON output to a file, `> aux_signed_tx.json` - -For the fee payer, the Cosmos SDK added a `tx aux-to-fee` subcommand to include an `AuxSignerData` into a transaction, add fees to it, and broadcast it. - -```bash -$ simd tx aux-to-fee aux_signed_tx.json --from --fees 30atom - -### Prints the broadcasted tx response: -### code: 0 -### codespace: sdk -### data: "" -### events: [] -### gas_used: "0" -### gas_wanted: "0" -### height: "0" -### info: "" -### logs: [] -### timestamp: "" -### tx: null -``` - -Upon completion of the second command, the fee payer's balance will be down the `30atom` fees, and up the `50ibcdenom` tip. - -For both commands, the flag `--sign-mode=amino-json` is still available for hardware wallet signing. - -## Programmatic Usage - -For the tipper, the SDK exposes a new transaction builder, the `AuxTxBuilder`, for generating an `AuxSignerData`. The API of `AuxTxBuilder` is defined [in `client/tx`](https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-alpha.0/client/tx/aux_builder.go#L22), and can be used as follows: - -```go -// Note: there's no need to use clientCtx.TxConfig anymore. - -bldr := clienttx.NewAuxTxBuilder() -err := bldr.SetMsgs(msgs...) -bldr.SetAddress("cosmos1...") -bldr.SetMemo(...) -bldr.SetTip(...) -bldr.SetPubKey(...) -err := bldr.SetSignMode(...) // DIRECT_AUX or AMINO, or else error -// ... other setters are also available - -// Get the bytes to sign. -signBz, err := bldr.GetSignBytes() - -// Sign the bz using your favorite method. -sig, err := privKey.sign(signBz) - -// Set the signature -bldr.SetSig(sig) - -// Get the final auxSignerData to be sent to the fee payer -auxSignerData, err:= bldr.GetAuxSignerData() -``` - -For the fee payer, the SDK added a new method on the existing `TxBuilder` to import data from an `AuxSignerData`: - -```go -// get `auxSignerData` from tipper, see code snippet above. - -txBuilder := clientCtx.TxConfig.NewTxBuilder() -err := txBuilder.AddAuxSignerData(auxSignerData) -if err != nil { - return err -} - -// A lot of fields will be populated in txBuilder, such as its Msgs, tip -// memo, etc... - -// The fee payer choses the fee to set on the transaction. -txBuilder.SetFeePayer() -txBuilder.SetFeeAmount(...) -txBuilder.SetGasLimit(...) - -// Usual signing code -err = authclient.SignTx(...) -if err != nil { - return err -} -``` diff --git a/proto/cosmos/tx/signing/v1beta1/signing.proto b/proto/cosmos/tx/signing/v1beta1/signing.proto index faad739b5aab..06ab80d80753 100644 --- a/proto/cosmos/tx/signing/v1beta1/signing.proto +++ b/proto/cosmos/tx/signing/v1beta1/signing.proto @@ -32,8 +32,7 @@ enum SignMode { // SIGN_MODE_DIRECT_AUX specifies a signing mode which uses // SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not - // require signers signing over other signers' `signer_info`. It also allows - // for adding Tips in transactions. + // require signers signing over other signers' `signer_info`. // // Since: cosmos-sdk 0.46 SIGN_MODE_DIRECT_AUX = 3; diff --git a/proto/cosmos/tx/v1beta1/tx.proto b/proto/cosmos/tx/v1beta1/tx.proto index 9ac0d932a3e1..e7671108c26f 100644 --- a/proto/cosmos/tx/v1beta1/tx.proto +++ b/proto/cosmos/tx/v1beta1/tx.proto @@ -87,14 +87,6 @@ message SignDocDirectAux { // sequence is the sequence number of the signing account. uint64 sequence = 5; - - // Tip is the optional tip used for transactions fees paid in another denom. - // It should be left empty if the signer is not the tipper for this - // transaction. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - Tip tip = 6; } // TxBody is the body of a transaction that all signers sign over. @@ -142,14 +134,6 @@ message AuthInfo { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee fee = 2; - - // Tip is the optional tip used for transactions fees paid in another denom. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - // - // Since: cosmos-sdk 0.46 - Tip tip = 3; } // SignerInfo describes the public key and signing mode of a single top-level @@ -228,21 +212,6 @@ message Fee { string granter = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } -// Tip is the tip used for meta-transactions. -// -// Since: cosmos-sdk 0.46 -message Tip { - // amount is the amount of the tip - repeated cosmos.base.v1beta1.Coin amount = 1 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", - (amino.dont_omitempty) = true, - (amino.encoding) = "legacy_coins" - ]; - // tipper is the address of the account paying for the tip - string tipper = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected diff --git a/simapp/app.go b/simapp/app.go index 0c24f4e1cc29..8e4a6338a55a 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -513,12 +513,7 @@ func NewSimApp( // meaning that both `runMsgs` and `postHandler` state will be committed if // both are successful, and both will be reverted if any of the two fails. // - // The SDK exposes a default postHandlers chain, which comprises of only - // one decorator: the Transaction Tips decorator. However, some chains do - // not need it by default, so feel free to comment the next line if you do - // not need tips. - // To read more about tips: - // https://docs.cosmos.network/main/core/tips.html + // The SDK exposes a default postHandlers chain // // Please note that changing any of the anteHandler or postHandler chain is // likely to be a state-machine breaking change, which needs a coordinated diff --git a/simapp/simd/cmd/commands.go b/simapp/simd/cmd/commands.go index 42208c3595f8..abfa351961da 100644 --- a/simapp/simd/cmd/commands.go +++ b/simapp/simd/cmd/commands.go @@ -117,7 +117,6 @@ func txCommand() *cobra.Command { authcmd.GetBroadcastCommand(), authcmd.GetEncodeCommand(), authcmd.GetDecodeCommand(), - authcmd.GetAuxToFeeCommand(), authcmd.GetSimulateCmd(), ) diff --git a/tests/e2e/auth/suite.go b/tests/e2e/auth/suite.go index e9cedd1491e6..a8e4a64c4511 100644 --- a/tests/e2e/auth/suite.go +++ b/tests/e2e/auth/suite.go @@ -1677,12 +1677,6 @@ func (s *E2ETestSuite) TestAuxToFeeWithTips() { genTxFile := testutil.WriteToNewTempFile(s.T(), string(res.Bytes())) defer genTxFile.Close() - // broadcast the tx - res, err = authclitestutil.TxAuxToFeeExec( - val.ClientCtx, - genTxFile.Name(), - tc.feePayerArgs..., - ) s.Require().NoError(s.network.WaitForNextBlock()) switch { diff --git a/tests/integration/auth/client/cli/suite_test.go b/tests/integration/auth/client/cli/suite_test.go index 43e3ca566726..80b0c7b24bd6 100644 --- a/tests/integration/auth/client/cli/suite_test.go +++ b/tests/integration/auth/client/cli/suite_test.go @@ -1208,13 +1208,6 @@ func (s *CLITestSuite) TestAuxToFeeWithTips() { genTxFile := testutil.WriteToNewTempFile(s.T(), string(res.Bytes())) defer genTxFile.Close() - // broadcast the tx - res, err = authtestutil.TxAuxToFeeExec( - s.clientCtx, - genTxFile.Name(), - tc.feePayerArgs..., - ) - switch { case tc.expectErrBroadCast: require.Error(err) diff --git a/tests/integration/tx/aminojson/aminojson_test.go b/tests/integration/tx/aminojson/aminojson_test.go index 3d9cc5e34dac..1e81da44dc52 100644 --- a/tests/integration/tx/aminojson/aminojson_test.go +++ b/tests/integration/tx/aminojson/aminojson_test.go @@ -49,7 +49,6 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/bech32" "github.com/cosmos/cosmos-sdk/types/module/testutil" - txtypes "github.com/cosmos/cosmos-sdk/types/tx" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" @@ -149,10 +148,6 @@ func TestAminoJSON_Equivalence(t *testing.T) { AccNum: 1, AccSeq: 2, SignerAddress: "signerAddress", - Tip: &txv1beta1.Tip{ - Tipper: "tipper", - Amount: []*v1beta1.Coin{{Denom: "uatom", Amount: "1000"}}, - }, Fee: &txv1beta1.Fee{ Amount: []*v1beta1.Coin{{Denom: "uatom", Amount: "1000"}}, }, @@ -170,10 +165,6 @@ func TestAminoJSON_Equivalence(t *testing.T) { require.NoError(t, txBuilder.SetMsgs([]types.Msg{tt.Gogo}...)) txBuilder.SetMemo(handlerOptions.Memo) txBuilder.SetFeeAmount(types.Coins{types.NewInt64Coin("uatom", 1000)}) - txBuilder.SetTip(&txtypes.Tip{ - Amount: types.Coins{types.NewInt64Coin("uatom", 1000)}, - Tipper: "tipper", - }) theTx := txBuilder.GetTx() legacySigningData := signing.SignerData{ diff --git a/types/tx/direct_aux.go b/types/tx/direct_aux.go index 73189ff840c5..de6346fbf03c 100644 --- a/types/tx/direct_aux.go +++ b/types/tx/direct_aux.go @@ -17,12 +17,6 @@ func (s *SignDocDirectAux) ValidateBasic() error { return sdkerrors.ErrInvalidPubKey.Wrap("public key cannot be empty") } - if s.Tip != nil { - if s.Tip.Tipper == "" { - return sdkerrors.ErrInvalidRequest.Wrap("tipper cannot be empty") - } - } - return nil } diff --git a/types/tx/direct_aux_test.go b/types/tx/direct_aux_test.go index 5f8c7aefc335..5e07907fcfdd 100644 --- a/types/tx/direct_aux_test.go +++ b/types/tx/direct_aux_test.go @@ -14,7 +14,7 @@ import ( func TestSignDocDirectAux(t *testing.T) { bodyBz := []byte{42} - _, pk, addr := testdata.KeyTestPubAddr() + _, pk, _ := testdata.KeyTestPubAddr() pkAny, err := codectypes.NewAnyWithValue(pk) require.NoError(t, err) @@ -25,12 +25,11 @@ func TestSignDocDirectAux(t *testing.T) { }{ {"empty bodyBz", tx.SignDocDirectAux{}, true}, {"empty pubkey", tx.SignDocDirectAux{BodyBytes: bodyBz}, true}, - {"empty tipper", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny, Tip: &tx.Tip{Amount: testdata.NewTestFeeAmount()}}, true}, + {"empty tipper", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}, true}, {"happy case w/o tip", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}, false}, {"happy case w/ tip", tx.SignDocDirectAux{ BodyBytes: bodyBz, PublicKey: pkAny, - Tip: &tx.Tip{Tipper: addr.String(), Amount: testdata.NewTestFeeAmount()}, }, false}, } diff --git a/types/tx/signing/signing.pb.go b/types/tx/signing/signing.pb.go index 54beb1b1fbf7..02f64a4824d4 100644 --- a/types/tx/signing/signing.pb.go +++ b/types/tx/signing/signing.pb.go @@ -49,8 +49,7 @@ const ( SignMode_SIGN_MODE_TEXTUAL SignMode = 2 // SIGN_MODE_DIRECT_AUX specifies a signing mode which uses // SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not - // require signers signing over other signers' `signer_info`. It also allows - // for adding Tips in transactions. + // require signers signing over other signers' `signer_info`. // // Since: cosmos-sdk 0.46 SignMode_SIGN_MODE_DIRECT_AUX SignMode = 3 diff --git a/types/tx/tips.go b/types/tx/tips.go deleted file mode 100644 index ca8afb36d5ae..000000000000 --- a/types/tx/tips.go +++ /dev/null @@ -1,11 +0,0 @@ -package tx - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// TipTx defines the interface to be implemented by Txs that handle Tips. -type TipTx interface { - sdk.FeeTx - GetTip() *Tip -} diff --git a/types/tx/tx.pb.go b/types/tx/tx.pb.go index 6782890cc9e4..42d86d988fe9 100644 --- a/types/tx/tx.pb.go +++ b/types/tx/tx.pb.go @@ -264,13 +264,6 @@ type SignDocDirectAux struct { AccountNumber uint64 `protobuf:"varint,4,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` // sequence is the sequence number of the signing account. Sequence uint64 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` - // Tip is the optional tip used for transactions fees paid in another denom. - // It should be left empty if the signer is not the tipper for this - // transaction. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - Tip *Tip `protobuf:"bytes,6,opt,name=tip,proto3" json:"tip,omitempty"` } func (m *SignDocDirectAux) Reset() { *m = SignDocDirectAux{} } @@ -341,13 +334,6 @@ func (m *SignDocDirectAux) GetSequence() uint64 { return 0 } -func (m *SignDocDirectAux) GetTip() *Tip { - if m != nil { - return m.Tip - } - return nil -} - // TxBody is the body of a transaction that all signers sign over. type TxBody struct { // messages is a list of messages to be executed. The required signers of @@ -456,13 +442,6 @@ type AuthInfo struct { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee *Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` - // Tip is the optional tip used for transactions fees paid in another denom. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - // - // Since: cosmos-sdk 0.46 - Tip *Tip `protobuf:"bytes,3,opt,name=tip,proto3" json:"tip,omitempty"` } func (m *AuthInfo) Reset() { *m = AuthInfo{} } @@ -512,13 +491,6 @@ func (m *AuthInfo) GetFee() *Fee { return nil } -func (m *AuthInfo) GetTip() *Tip { - if m != nil { - return m.Tip - } - return nil -} - // SignerInfo describes the public key and signing mode of a single top-level // signer. type SignerInfo struct { @@ -863,63 +835,6 @@ func (m *Fee) GetGranter() string { return "" } -// Tip is the tip used for meta-transactions. -// -// Since: cosmos-sdk 0.46 -type Tip struct { - // amount is the amount of the tip - Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount"` - // tipper is the address of the account paying for the tip - Tipper string `protobuf:"bytes,2,opt,name=tipper,proto3" json:"tipper,omitempty"` -} - -func (m *Tip) Reset() { *m = Tip{} } -func (m *Tip) String() string { return proto.CompactTextString(m) } -func (*Tip) ProtoMessage() {} -func (*Tip) Descriptor() ([]byte, []int) { - return fileDescriptor_96d1575ffde80842, []int{9} -} -func (m *Tip) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Tip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Tip.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Tip) XXX_Merge(src proto.Message) { - xxx_messageInfo_Tip.Merge(m, src) -} -func (m *Tip) XXX_Size() int { - return m.Size() -} -func (m *Tip) XXX_DiscardUnknown() { - xxx_messageInfo_Tip.DiscardUnknown(m) -} - -var xxx_messageInfo_Tip proto.InternalMessageInfo - -func (m *Tip) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Amount - } - return nil -} - -func (m *Tip) GetTipper() string { - if m != nil { - return m.Tipper - } - return "" -} - // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected @@ -945,7 +860,7 @@ func (m *AuxSignerData) Reset() { *m = AuxSignerData{} } func (m *AuxSignerData) String() string { return proto.CompactTextString(m) } func (*AuxSignerData) ProtoMessage() {} func (*AuxSignerData) Descriptor() ([]byte, []int) { - return fileDescriptor_96d1575ffde80842, []int{10} + return fileDescriptor_96d1575ffde80842, []int{9} } func (m *AuxSignerData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1014,80 +929,76 @@ func init() { proto.RegisterType((*ModeInfo_Single)(nil), "cosmos.tx.v1beta1.ModeInfo.Single") proto.RegisterType((*ModeInfo_Multi)(nil), "cosmos.tx.v1beta1.ModeInfo.Multi") proto.RegisterType((*Fee)(nil), "cosmos.tx.v1beta1.Fee") - proto.RegisterType((*Tip)(nil), "cosmos.tx.v1beta1.Tip") proto.RegisterType((*AuxSignerData)(nil), "cosmos.tx.v1beta1.AuxSignerData") } func init() { proto.RegisterFile("cosmos/tx/v1beta1/tx.proto", fileDescriptor_96d1575ffde80842) } var fileDescriptor_96d1575ffde80842 = []byte{ - // 1052 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x41, 0x6f, 0x1b, 0xc5, - 0x17, 0xf7, 0x7a, 0x6d, 0xc7, 0x7e, 0x4d, 0xda, 0x64, 0x14, 0xfd, 0xe5, 0x38, 0xaa, 0x9b, 0xbf, - 0xab, 0x82, 0x55, 0x29, 0xbb, 0x6d, 0x7a, 0xa0, 0x20, 0x04, 0xd8, 0x0d, 0x51, 0xaa, 0x52, 0x90, - 0x36, 0x39, 0xf5, 0xb2, 0x1a, 0xaf, 0x27, 0xeb, 0x51, 0xbd, 0x33, 0xcb, 0xce, 0x2c, 0x78, 0x8f, - 0x7c, 0x00, 0xa4, 0x0a, 0x09, 0x21, 0x71, 0xe2, 0x88, 0x38, 0x55, 0x88, 0x0f, 0xd1, 0x13, 0xaa, - 0x38, 0x71, 0x82, 0x2a, 0x39, 0xf4, 0xc6, 0x57, 0x00, 0xcd, 0xec, 0xec, 0x26, 0x2d, 0xa9, 0x0d, - 0x02, 0x89, 0x8b, 0x3d, 0xf3, 0xf6, 0xf7, 0xde, 0xfc, 0xe6, 0xbd, 0xdf, 0xbc, 0x07, 0x9d, 0x80, - 0x8b, 0x88, 0x0b, 0x57, 0xce, 0xdc, 0x4f, 0x6e, 0x8e, 0x88, 0xc4, 0x37, 0x5d, 0x39, 0x73, 0xe2, - 0x84, 0x4b, 0x8e, 0xd6, 0xf2, 0x6f, 0x8e, 0x9c, 0x39, 0xe6, 0x5b, 0x67, 0x0d, 0x47, 0x94, 0x71, - 0x57, 0xff, 0xe6, 0xa8, 0xce, 0x7a, 0xc8, 0x43, 0xae, 0x97, 0xae, 0x5a, 0x19, 0xeb, 0xb6, 0x89, - 0x1b, 0x24, 0x59, 0x2c, 0xb9, 0x1b, 0xa5, 0x53, 0x49, 0x05, 0x0d, 0xcb, 0x43, 0x0a, 0x83, 0x81, - 0x77, 0x0d, 0x7c, 0x84, 0x05, 0x29, 0x31, 0x01, 0xa7, 0xcc, 0x7c, 0x7f, 0xfd, 0x94, 0xa6, 0xa0, - 0x21, 0xa3, 0xec, 0x34, 0x92, 0xd9, 0x1b, 0xe0, 0x46, 0xc8, 0x79, 0x38, 0x25, 0xae, 0xde, 0x8d, - 0xd2, 0x23, 0x17, 0xb3, 0xac, 0xf8, 0x94, 0xc7, 0xf0, 0x73, 0xae, 0xe6, 0x6e, 0x7a, 0xd3, 0xfb, - 0xdc, 0x82, 0xea, 0xe1, 0x0c, 0x6d, 0x43, 0x6d, 0xc4, 0xc7, 0x59, 0xdb, 0xda, 0xb2, 0xfa, 0x17, - 0x76, 0x36, 0x9c, 0x3f, 0xdd, 0xdf, 0x39, 0x9c, 0x0d, 0xf9, 0x38, 0xf3, 0x34, 0x0c, 0xdd, 0x86, - 0x16, 0x4e, 0xe5, 0xc4, 0xa7, 0xec, 0x88, 0xb7, 0xab, 0xda, 0x67, 0xf3, 0x1c, 0x9f, 0x41, 0x2a, - 0x27, 0x77, 0xd9, 0x11, 0xf7, 0x9a, 0xd8, 0xac, 0x50, 0x17, 0x40, 0xd1, 0xc6, 0x32, 0x4d, 0x88, - 0x68, 0xdb, 0x5b, 0x76, 0x7f, 0xd9, 0x3b, 0x63, 0xe9, 0x31, 0xa8, 0x1f, 0xce, 0x3c, 0xfc, 0x29, - 0xba, 0x0c, 0xa0, 0x8e, 0xf2, 0x47, 0x99, 0x24, 0x42, 0xf3, 0x5a, 0xf6, 0x5a, 0xca, 0x32, 0x54, - 0x06, 0xf4, 0x1a, 0x5c, 0x2a, 0x19, 0x18, 0x4c, 0x55, 0x63, 0x56, 0x8a, 0xa3, 0x72, 0xdc, 0xa2, - 0xf3, 0xbe, 0xb0, 0x60, 0xe9, 0x80, 0x86, 0x6c, 0x97, 0x07, 0xff, 0xd6, 0x91, 0x1b, 0xd0, 0x0c, - 0x26, 0x98, 0x32, 0x9f, 0x8e, 0xdb, 0xf6, 0x96, 0xd5, 0x6f, 0x79, 0x4b, 0x7a, 0x7f, 0x77, 0x8c, - 0xae, 0xc1, 0x45, 0x1c, 0x04, 0x3c, 0x65, 0xd2, 0x67, 0x69, 0x34, 0x22, 0x49, 0xbb, 0xb6, 0x65, - 0xf5, 0x6b, 0xde, 0x8a, 0xb1, 0x7e, 0xa8, 0x8d, 0xbd, 0xdf, 0x2c, 0x58, 0x35, 0xa4, 0x76, 0x69, - 0x42, 0x02, 0x39, 0x48, 0x67, 0x8b, 0xd8, 0xdd, 0x02, 0x88, 0xd3, 0xd1, 0x94, 0x06, 0xfe, 0x43, - 0x92, 0x99, 0x9a, 0xac, 0x3b, 0xb9, 0x26, 0x9c, 0x42, 0x13, 0xce, 0x80, 0x65, 0x5e, 0x2b, 0xc7, - 0xdd, 0x23, 0xd9, 0x3f, 0xa7, 0x8a, 0x3a, 0xd0, 0x14, 0xe4, 0xe3, 0x94, 0xb0, 0x80, 0xb4, 0xeb, - 0x1a, 0x50, 0xee, 0x51, 0x1f, 0x6c, 0x49, 0xe3, 0x76, 0x43, 0x73, 0xf9, 0xdf, 0x79, 0x9a, 0xa2, - 0xb1, 0xa7, 0x20, 0xbd, 0x2f, 0xab, 0xd0, 0xc8, 0x05, 0x86, 0x6e, 0x40, 0x33, 0x22, 0x42, 0xe0, - 0x50, 0x5f, 0xd2, 0x7e, 0xe5, 0x2d, 0x4a, 0x14, 0x42, 0x50, 0x8b, 0x48, 0x94, 0xeb, 0xb0, 0xe5, - 0xe9, 0xb5, 0x62, 0x2f, 0x69, 0x44, 0x78, 0x2a, 0xfd, 0x09, 0xa1, 0xe1, 0x44, 0xea, 0xeb, 0xd5, - 0xbc, 0x15, 0x63, 0xdd, 0xd7, 0x46, 0x34, 0x84, 0x35, 0x32, 0x93, 0x84, 0x09, 0xca, 0x99, 0xcf, - 0x63, 0x49, 0x39, 0x13, 0xed, 0xdf, 0x97, 0xe6, 0x1c, 0xbb, 0x5a, 0xe2, 0x3f, 0xca, 0xe1, 0xe8, - 0x01, 0x74, 0x19, 0x67, 0x7e, 0x90, 0x50, 0x49, 0x03, 0x3c, 0xf5, 0xcf, 0x09, 0x78, 0x69, 0x4e, - 0xc0, 0x4d, 0xc6, 0xd9, 0x1d, 0xe3, 0xfb, 0xfe, 0x4b, 0xb1, 0x7b, 0xdf, 0x58, 0xd0, 0x2c, 0x1e, - 0x11, 0x7a, 0x0f, 0x96, 0x95, 0x70, 0x49, 0xa2, 0x15, 0x58, 0x64, 0xe7, 0xf2, 0x39, 0x79, 0x3d, - 0xd0, 0x30, 0xfd, 0xf2, 0x2e, 0x88, 0x72, 0x2d, 0x54, 0x41, 0x8e, 0x08, 0x31, 0xe2, 0x38, 0xaf, - 0x20, 0x7b, 0x84, 0x78, 0x0a, 0x52, 0x94, 0xce, 0x5e, 0x5c, 0xba, 0xaf, 0x2c, 0x80, 0xd3, 0xf3, - 0x5e, 0x92, 0xa1, 0xf5, 0xd7, 0x64, 0x78, 0x1b, 0x5a, 0x11, 0x1f, 0x93, 0x45, 0xed, 0xe4, 0x3e, - 0x1f, 0x93, 0xbc, 0x9d, 0x44, 0x66, 0xf5, 0x82, 0xfc, 0xec, 0x17, 0xe5, 0xd7, 0x7b, 0x56, 0x85, - 0x66, 0xe1, 0x82, 0xde, 0x86, 0x86, 0xa0, 0x2c, 0x9c, 0x12, 0xc3, 0xa9, 0x37, 0x27, 0xbe, 0x73, - 0xa0, 0x91, 0xfb, 0x15, 0xcf, 0xf8, 0xa0, 0x37, 0xa1, 0xae, 0xdb, 0xb6, 0x21, 0xf7, 0xff, 0x79, - 0xce, 0xf7, 0x15, 0x70, 0xbf, 0xe2, 0xe5, 0x1e, 0x9d, 0x01, 0x34, 0xf2, 0x70, 0xe8, 0x0d, 0xa8, - 0x29, 0xde, 0x9a, 0xc0, 0xc5, 0x9d, 0xab, 0x67, 0x62, 0x14, 0x8d, 0xfc, 0x6c, 0xfd, 0x54, 0x3c, - 0x4f, 0x3b, 0x74, 0x1e, 0x59, 0x50, 0xd7, 0x51, 0xd1, 0x3d, 0x68, 0x8e, 0xa8, 0xc4, 0x49, 0x82, - 0x8b, 0xdc, 0xba, 0x45, 0x98, 0x7c, 0xdc, 0x38, 0xe5, 0x74, 0x29, 0x62, 0xdd, 0xe1, 0x51, 0x8c, - 0x03, 0x39, 0xa4, 0x72, 0xa0, 0xdc, 0xbc, 0x32, 0x00, 0x7a, 0x0b, 0xa0, 0xcc, 0xba, 0x6a, 0x65, - 0xf6, 0xa2, 0xb4, 0xb7, 0x8a, 0xb4, 0x8b, 0x61, 0x1d, 0x6c, 0x91, 0x46, 0xbd, 0xcf, 0xaa, 0x60, - 0xef, 0x11, 0x82, 0x32, 0x68, 0xe0, 0x48, 0x75, 0x05, 0x23, 0xca, 0x72, 0x80, 0xa8, 0xa9, 0x76, - 0x86, 0x0a, 0x65, 0xc3, 0xbd, 0x27, 0xbf, 0x5c, 0xa9, 0x7c, 0xf7, 0xeb, 0x95, 0x7e, 0x48, 0xe5, - 0x24, 0x1d, 0x39, 0x01, 0x8f, 0xdc, 0x62, 0x62, 0xea, 0xbf, 0x6d, 0x31, 0x7e, 0xe8, 0xca, 0x2c, - 0x26, 0x42, 0x3b, 0x88, 0xaf, 0x9f, 0x3f, 0xbe, 0xbe, 0x3c, 0x25, 0x21, 0x0e, 0x32, 0x5f, 0xcd, - 0x45, 0xf1, 0xed, 0xf3, 0xc7, 0xd7, 0x2d, 0xcf, 0x1c, 0x88, 0x36, 0xa1, 0x15, 0x62, 0xe1, 0x4f, - 0x69, 0x44, 0xa5, 0x2e, 0x4f, 0xcd, 0x6b, 0x86, 0x58, 0x7c, 0xa0, 0xf6, 0xc8, 0x81, 0x7a, 0x8c, - 0x33, 0x92, 0xe4, 0xcd, 0x6d, 0xd8, 0xfe, 0xe9, 0x87, 0xed, 0x75, 0xc3, 0x6c, 0x30, 0x1e, 0x27, - 0x44, 0x88, 0x03, 0x99, 0x50, 0x16, 0x7a, 0x39, 0x0c, 0xed, 0xc0, 0x52, 0x98, 0x60, 0x26, 0x4d, - 0xb7, 0x9b, 0xe7, 0x51, 0x00, 0x7b, 0xdf, 0x5b, 0x60, 0x1f, 0xd2, 0xf8, 0xbf, 0xcc, 0xc1, 0x0d, - 0x68, 0x48, 0x1a, 0xc7, 0x24, 0xc9, 0x7b, 0xe0, 0x1c, 0xd6, 0x06, 0xd7, 0xfb, 0xd1, 0x82, 0x95, - 0x41, 0x3a, 0xcb, 0x1f, 0xee, 0x2e, 0x96, 0x58, 0x5d, 0x1d, 0xe7, 0x50, 0xad, 0xac, 0xb9, 0x57, - 0x37, 0x40, 0xf4, 0x0e, 0x34, 0x95, 0x74, 0xfd, 0x31, 0x0f, 0xcc, 0xcb, 0xb8, 0xfa, 0x8a, 0x6e, - 0x74, 0x76, 0x92, 0x79, 0x4b, 0xc2, 0x0c, 0xdc, 0xe2, 0x45, 0xd8, 0x7f, 0xf3, 0x45, 0xa0, 0x55, - 0xb0, 0x05, 0x0d, 0x75, 0x8d, 0x96, 0x3d, 0xb5, 0x1c, 0xbe, 0xfb, 0xe4, 0xb8, 0x6b, 0x3d, 0x3d, - 0xee, 0x5a, 0xcf, 0x8e, 0xbb, 0xd6, 0xa3, 0x93, 0x6e, 0xe5, 0xe9, 0x49, 0xb7, 0xf2, 0xf3, 0x49, - 0xb7, 0xf2, 0xe0, 0xda, 0xe2, 0x24, 0xbb, 0x72, 0x36, 0x6a, 0xe8, 0xe6, 0x74, 0xeb, 0x8f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x1f, 0x66, 0x4c, 0xda, 0x17, 0x0a, 0x00, 0x00, + // 1001 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xf6, 0x7a, 0xed, 0xc4, 0x7e, 0x4d, 0xda, 0x64, 0x14, 0x21, 0xc7, 0x51, 0xdd, 0xe0, 0xaa, + 0x60, 0x55, 0xca, 0x2e, 0x4d, 0x0f, 0x14, 0x84, 0x00, 0xbb, 0x21, 0x4a, 0x55, 0x0a, 0xd2, 0x24, + 0xa7, 0x5e, 0x56, 0xe3, 0xf5, 0x64, 0x3d, 0xaa, 0x77, 0xc6, 0xec, 0xcc, 0x16, 0xef, 0x91, 0x1f, + 0x80, 0x54, 0x21, 0x21, 0x24, 0x7e, 0x01, 0xe2, 0xd4, 0x03, 0x3f, 0x81, 0x43, 0x4f, 0xa8, 0xe2, + 0xc4, 0x09, 0xaa, 0xe4, 0xd0, 0x9f, 0x01, 0x9a, 0xd9, 0xd9, 0x4d, 0x08, 0xa9, 0x03, 0xa2, 0x17, + 0x7b, 0xe6, 0xcd, 0xf7, 0xbe, 0xf9, 0x76, 0xe6, 0x7b, 0x6f, 0xa0, 0x1d, 0x0a, 0x19, 0x0b, 0xe9, + 0xab, 0x99, 0xff, 0xf8, 0xd6, 0x90, 0x2a, 0x72, 0xcb, 0x57, 0x33, 0x6f, 0x9a, 0x08, 0x25, 0xd0, + 0x6a, 0xbe, 0xe6, 0xa9, 0x99, 0x67, 0xd7, 0xda, 0xab, 0x24, 0x66, 0x5c, 0xf8, 0xe6, 0x37, 0x47, + 0xb5, 0xd7, 0x22, 0x11, 0x09, 0x33, 0xf4, 0xf5, 0xc8, 0x46, 0xb7, 0x2c, 0x6f, 0x98, 0x64, 0x53, + 0x25, 0xfc, 0x38, 0x9d, 0x28, 0x26, 0x59, 0x54, 0x6e, 0x52, 0x04, 0x2c, 0xbc, 0x63, 0xe1, 0x43, + 0x22, 0x69, 0x89, 0x09, 0x05, 0xe3, 0x76, 0xfd, 0xed, 0x13, 0x99, 0x92, 0x45, 0x9c, 0xf1, 0x13, + 0x26, 0x3b, 0xb7, 0xc0, 0xf5, 0x48, 0x88, 0x68, 0x42, 0x7d, 0x33, 0x1b, 0xa6, 0x87, 0x3e, 0xe1, + 0x59, 0xb1, 0x94, 0x73, 0x04, 0xb9, 0x56, 0xfb, 0x6d, 0x66, 0xd2, 0xfd, 0xda, 0x81, 0xea, 0xc1, + 0x0c, 0x6d, 0x41, 0x6d, 0x28, 0x46, 0x59, 0xcb, 0xd9, 0x74, 0x7a, 0x97, 0xb6, 0xd7, 0xbd, 0x7f, + 0x7c, 0xbf, 0x77, 0x30, 0x1b, 0x88, 0x51, 0x86, 0x0d, 0x0c, 0xdd, 0x81, 0x26, 0x49, 0xd5, 0x38, + 0x60, 0xfc, 0x50, 0xb4, 0xaa, 0x26, 0x67, 0xe3, 0x9c, 0x9c, 0x7e, 0xaa, 0xc6, 0xf7, 0xf8, 0xa1, + 0xc0, 0x0d, 0x62, 0x47, 0xa8, 0x03, 0xa0, 0x65, 0x13, 0x95, 0x26, 0x54, 0xb6, 0xdc, 0x4d, 0xb7, + 0xb7, 0x84, 0x4f, 0x45, 0xba, 0x1c, 0xea, 0x07, 0x33, 0x4c, 0xbe, 0x44, 0x57, 0x01, 0xf4, 0x56, + 0xc1, 0x30, 0x53, 0x54, 0x1a, 0x5d, 0x4b, 0xb8, 0xa9, 0x23, 0x03, 0x1d, 0x40, 0x6f, 0xc1, 0x95, + 0x52, 0x81, 0xc5, 0x54, 0x0d, 0x66, 0xb9, 0xd8, 0x2a, 0xc7, 0x5d, 0xb4, 0xdf, 0x37, 0x0e, 0x2c, + 0xee, 0xb3, 0x88, 0xef, 0x88, 0xf0, 0x75, 0x6d, 0xb9, 0x0e, 0x8d, 0x70, 0x4c, 0x18, 0x0f, 0xd8, + 0xa8, 0xe5, 0x6e, 0x3a, 0xbd, 0x26, 0x5e, 0x34, 0xf3, 0x7b, 0x23, 0x74, 0x03, 0x2e, 0x93, 0x30, + 0x14, 0x29, 0x57, 0x01, 0x4f, 0xe3, 0x21, 0x4d, 0x5a, 0xb5, 0x4d, 0xa7, 0x57, 0xc3, 0xcb, 0x36, + 0xfa, 0x99, 0x09, 0x76, 0x7f, 0x76, 0x60, 0xc5, 0x8a, 0xda, 0x61, 0x09, 0x0d, 0x55, 0x3f, 0x9d, + 0x5d, 0xa4, 0xee, 0x36, 0xc0, 0x34, 0x1d, 0x4e, 0x58, 0x18, 0x3c, 0xa2, 0x99, 0xbd, 0x93, 0x35, + 0x2f, 0xf7, 0x84, 0x57, 0x78, 0xc2, 0xeb, 0xf3, 0x0c, 0x37, 0x73, 0xdc, 0x7d, 0x9a, 0xfd, 0x7f, + 0xa9, 0xa8, 0x0d, 0x0d, 0x49, 0xbf, 0x48, 0x29, 0x0f, 0x69, 0xab, 0x6e, 0x00, 0xe5, 0xbc, 0xfb, + 0x6d, 0x15, 0x16, 0x72, 0xdb, 0xa0, 0x77, 0xa0, 0x11, 0x53, 0x29, 0x49, 0x64, 0xa4, 0xbb, 0xaf, + 0xd4, 0x56, 0xa2, 0x10, 0x82, 0x5a, 0x4c, 0xe3, 0xdc, 0x5d, 0x4d, 0x6c, 0xc6, 0x5a, 0x93, 0x62, + 0x31, 0x15, 0xa9, 0x0a, 0xc6, 0x94, 0x45, 0x63, 0x65, 0x44, 0xd7, 0xf0, 0xb2, 0x8d, 0xee, 0x99, + 0x20, 0x1a, 0xc0, 0x2a, 0x9d, 0x29, 0xca, 0x25, 0x13, 0x3c, 0x10, 0x53, 0xc5, 0x04, 0x97, 0xad, + 0x3f, 0x17, 0xe7, 0x6c, 0xbb, 0x52, 0xe2, 0x3f, 0xcf, 0xe1, 0xe8, 0x21, 0x74, 0xb8, 0xe0, 0x41, + 0x98, 0x30, 0xc5, 0x42, 0x32, 0x09, 0xce, 0x21, 0xbc, 0x32, 0x87, 0x70, 0x83, 0x0b, 0x7e, 0xd7, + 0xe6, 0x7e, 0x72, 0x86, 0xbb, 0xfb, 0x18, 0x1a, 0x45, 0x65, 0xa0, 0x8f, 0x61, 0x49, 0xbb, 0x91, + 0x26, 0xc6, 0x56, 0xc5, 0xe1, 0x5c, 0x3d, 0xa7, 0x98, 0xf6, 0x0d, 0xcc, 0x94, 0xd3, 0x25, 0x59, + 0x8e, 0x25, 0xea, 0x81, 0x7b, 0x48, 0xa9, 0xbd, 0xf1, 0x37, 0xce, 0x49, 0xdc, 0xa5, 0x14, 0x6b, + 0x48, 0xf7, 0x3b, 0x07, 0xe0, 0x84, 0xe5, 0x8c, 0x63, 0x9c, 0x7f, 0xe7, 0x98, 0x3b, 0xd0, 0x8c, + 0xc5, 0x88, 0x5e, 0x54, 0xf9, 0x0f, 0xc4, 0x88, 0xe6, 0x95, 0x1f, 0xdb, 0xd1, 0xdf, 0x9c, 0xe2, + 0x9e, 0x71, 0xca, 0x8b, 0x2a, 0x34, 0x8a, 0x14, 0xf4, 0x01, 0x2c, 0x48, 0xc6, 0xa3, 0x09, 0xb5, + 0x9a, 0xba, 0x73, 0xf8, 0xbd, 0x7d, 0x83, 0xdc, 0xab, 0x60, 0x9b, 0x83, 0xde, 0x83, 0xba, 0xe9, + 0xb0, 0x56, 0xdc, 0x9b, 0xf3, 0x92, 0x1f, 0x68, 0xe0, 0x5e, 0x05, 0xe7, 0x19, 0xed, 0x3e, 0x2c, + 0xe4, 0x74, 0xe8, 0x5d, 0xa8, 0x69, 0xdd, 0x46, 0xc0, 0xe5, 0xed, 0xeb, 0xa7, 0x38, 0x8a, 0x9e, + 0x7b, 0xfa, 0x56, 0x34, 0x1f, 0x36, 0x09, 0xed, 0x27, 0x0e, 0xd4, 0x0d, 0x2b, 0xba, 0x0f, 0x8d, + 0x21, 0x53, 0x24, 0x49, 0x48, 0x71, 0xb6, 0x7e, 0x41, 0x93, 0xbf, 0x0c, 0x5e, 0xf9, 0x10, 0x14, + 0x5c, 0x77, 0x45, 0x3c, 0x25, 0xa1, 0x1a, 0x30, 0xd5, 0xd7, 0x69, 0xb8, 0x24, 0x40, 0xef, 0x03, + 0x94, 0xa7, 0xae, 0xbb, 0x8e, 0x7b, 0xd1, 0xb1, 0x37, 0x8b, 0x63, 0x97, 0x83, 0x3a, 0xb8, 0x32, + 0x8d, 0xbb, 0x5f, 0x55, 0xc1, 0xdd, 0xa5, 0x14, 0x65, 0xb0, 0x40, 0x62, 0x5d, 0xc0, 0xd6, 0x6a, + 0x65, 0xaf, 0xd7, 0x0f, 0xd0, 0x29, 0x29, 0x8c, 0x0f, 0x76, 0x9f, 0xfd, 0x7e, 0xad, 0xf2, 0xe3, + 0x1f, 0xd7, 0x7a, 0x11, 0x53, 0xe3, 0x74, 0xe8, 0x85, 0x22, 0xf6, 0x8b, 0xc7, 0xcd, 0xfc, 0x6d, + 0xc9, 0xd1, 0x23, 0x5f, 0x65, 0x53, 0x2a, 0x4d, 0x82, 0xfc, 0xfe, 0xe5, 0xd3, 0x9b, 0x4b, 0x13, + 0x1a, 0x91, 0x30, 0x0b, 0xf4, 0x13, 0x26, 0x7f, 0x78, 0xf9, 0xf4, 0xa6, 0x83, 0xed, 0x86, 0x68, + 0x03, 0x9a, 0x11, 0x91, 0xc1, 0x84, 0xc5, 0x4c, 0x99, 0xeb, 0xa9, 0xe1, 0x46, 0x44, 0xe4, 0xa7, + 0x7a, 0x8e, 0x3c, 0xa8, 0x4f, 0x49, 0x46, 0x93, 0xbc, 0x0f, 0x0d, 0x5a, 0xbf, 0xfe, 0xb4, 0xb5, + 0x66, 0x95, 0xf5, 0x47, 0xa3, 0x84, 0x4a, 0xb9, 0xaf, 0x12, 0xc6, 0x23, 0x9c, 0xc3, 0xd0, 0x36, + 0x2c, 0x46, 0x09, 0xe1, 0xca, 0x36, 0xa6, 0x79, 0x19, 0x05, 0xb0, 0xfb, 0x8b, 0x03, 0xcb, 0xfd, + 0x74, 0x96, 0xd7, 0xc0, 0x0e, 0x51, 0x44, 0xb3, 0x90, 0x1c, 0x6b, 0x2e, 0x69, 0x2e, 0x8b, 0x05, + 0xa2, 0x0f, 0xa1, 0xa1, 0x5d, 0x10, 0x8c, 0x44, 0x68, 0x4d, 0x76, 0xfd, 0x15, 0xe5, 0x7a, 0xba, + 0x7f, 0xe3, 0x45, 0x69, 0x9f, 0x99, 0xc2, 0x5c, 0xee, 0x7f, 0x34, 0x17, 0x5a, 0x01, 0x57, 0xb2, + 0xc8, 0x7c, 0xee, 0x12, 0xd6, 0xc3, 0xc1, 0x47, 0xcf, 0x8e, 0x3a, 0xce, 0xf3, 0xa3, 0x8e, 0xf3, + 0xe2, 0xa8, 0xe3, 0x3c, 0x39, 0xee, 0x54, 0x9e, 0x1f, 0x77, 0x2a, 0xbf, 0x1d, 0x77, 0x2a, 0x0f, + 0x6f, 0x5c, 0x7c, 0x67, 0xbe, 0x9a, 0x0d, 0x17, 0x4c, 0x9d, 0xdf, 0xfe, 0x2b, 0x00, 0x00, 0xff, + 0xff, 0x10, 0xe4, 0xe6, 0x17, 0x0d, 0x09, 0x00, 0x00, } func (m *Tx) Marshal() (dAtA []byte, err error) { @@ -1261,18 +1172,6 @@ func (m *SignDocDirectAux) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Tip != nil { - { - size, err := m.Tip.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } if m.Sequence != 0 { i = encodeVarintTx(dAtA, i, uint64(m.Sequence)) i-- @@ -1413,18 +1312,6 @@ func (m *AuthInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Tip != nil { - { - size, err := m.Tip.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } if m.Fee != nil { { size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i]) @@ -1713,50 +1600,6 @@ func (m *Fee) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *Tip) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Tip) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Tip) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Tipper) > 0 { - i -= len(m.Tipper) - copy(dAtA[i:], m.Tipper) - i = encodeVarintTx(dAtA, i, uint64(len(m.Tipper))) - i-- - dAtA[i] = 0x12 - } - if len(m.Amount) > 0 { - for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - func (m *AuxSignerData) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1916,10 +1759,6 @@ func (m *SignDocDirectAux) Size() (n int) { if m.Sequence != 0 { n += 1 + sovTx(uint64(m.Sequence)) } - if m.Tip != nil { - l = m.Tip.Size() - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -1973,10 +1812,6 @@ func (m *AuthInfo) Size() (n int) { l = m.Fee.Size() n += 1 + l + sovTx(uint64(l)) } - if m.Tip != nil { - l = m.Tip.Size() - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -2093,25 +1928,6 @@ func (m *Fee) Size() (n int) { return n } -func (m *Tip) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Amount) > 0 { - for _, e := range m.Amount { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = len(m.Tipper) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - func (m *AuxSignerData) Size() (n int) { if m == nil { return 0 @@ -2784,42 +2600,6 @@ func (m *SignDocDirectAux) Unmarshal(dAtA []byte) error { break } } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Tip == nil { - m.Tip = &Tip{} - } - if err := m.Tip.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3143,42 +2923,6 @@ func (m *AuthInfo) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Tip == nil { - m.Tip = &Tip{} - } - if err := m.Tip.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3817,122 +3561,6 @@ func (m *Fee) Unmarshal(dAtA []byte) error { } return nil } -func (m *Tip) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Tip: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Tip: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Amount = append(m.Amount, types2.Coin{}) - if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tipper", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Tipper = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *AuxSignerData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/auth/README.md b/x/auth/README.md index 4b5a2ad1f45b..1d5e22b5d874 100644 --- a/x/auth/README.md +++ b/x/auth/README.md @@ -481,17 +481,6 @@ simd tx broadcast tx.signed.json More information about the `broadcast` command can be found running `simd tx broadcast --help`. -#### `aux-to-fee` - -The `aux-to-fee` comamnds includes the aux signer data in the tx, broadcast the tx, and sends the tip amount to the broadcaster. -[Learn more about tip transaction](https://docs.cosmos.network/main/core/tips). - -```bash -# simd tx bank send --aux (optional: --tip --tipper ) -simd tx aux-to-fee tx.aux.signed.json -``` - -More information about the `aux-to-fee` command can be found running `simd tx aux-to-fee --help`. ### gRPC diff --git a/x/auth/client/cli/tips.go b/x/auth/client/cli/tips.go deleted file mode 100644 index 82904c6ab064..000000000000 --- a/x/auth/client/cli/tips.go +++ /dev/null @@ -1,93 +0,0 @@ -package cli - -import ( - "fmt" - "os" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - clienttx "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/types/tx" - authclient "github.com/cosmos/cosmos-sdk/x/auth/client" -) - -func GetAuxToFeeCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "aux-to-fee ", - Short: "Includes the aux signer data in the tx, broadcast the tx, and sends the tip amount to the broadcaster", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - auxSignerData := tx.AuxSignerData{} - err = readAuxSignerData(clientCtx.Codec, &auxSignerData, args[0]) - if err != nil { - return err - } - - if auxSignerData.SignDoc.ChainId != clientCtx.ChainID { - return fmt.Errorf("expected chain-id %s, got %s in aux signer data", clientCtx.ChainID, auxSignerData.SignDoc.ChainId) - } - - f, err := clienttx.NewFactoryCLI(clientCtx, cmd.Flags()) - if err != nil { - return err - } - - txBuilder := clientCtx.TxConfig.NewTxBuilder() - err = txBuilder.AddAuxSignerData(auxSignerData) - if err != nil { - return err - } - - txBuilder.SetFeePayer(clientCtx.FromAddress) - txBuilder.SetFeeAmount(f.Fees()) - txBuilder.SetGasLimit(f.Gas()) - - if clientCtx.GenerateOnly { - json, err := clientCtx.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) - if err != nil { - return err - } - return clientCtx.PrintString(fmt.Sprintf("%s\n", json)) - } - - err = authclient.SignTx(f, clientCtx, clientCtx.FromName, txBuilder, clientCtx.Offline, false) - if err != nil { - return err - } - - txBytes, err := clientCtx.TxConfig.TxEncoder()(txBuilder.GetTx()) - if err != nil { - return err - } - - // broadcast to a CometBFT node - res, err := clientCtx.BroadcastTx(txBytes) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - -func readAuxSignerData(cdc codec.Codec, auxSignerData *tx.AuxSignerData, filename string) error { - bytes, err := os.ReadFile(filename) - if err != nil { - return err - } - - return cdc.UnmarshalJSON(bytes, auxSignerData) -} diff --git a/x/auth/client/testutil/helpers.go b/x/auth/client/testutil/helpers.go index 8ca44048cbd1..092b061a83c2 100644 --- a/x/auth/client/testutil/helpers.go +++ b/x/auth/client/testutil/helpers.go @@ -80,15 +80,6 @@ func TxDecodeExec(clientCtx client.Context, encodedTx string, extraArgs ...strin return clitestutil.ExecTestCLICmd(clientCtx, cli.GetDecodeCommand(), append(args, extraArgs...)) } -// TxAuxToFeeExec executes `GetAuxToFeeCommand` cli command with given args. -func TxAuxToFeeExec(clientCtx client.Context, filename string, extraArgs ...string) (testutil.BufferWriter, error) { - args := []string{ - filename, - } - - return clitestutil.ExecTestCLICmd(clientCtx, cli.GetAuxToFeeCommand(), append(args, extraArgs...)) -} - func TxMultiSignBatchExec(clientCtx client.Context, filename, from, sigFile1, sigFile2 string, extraArgs ...string) (testutil.BufferWriter, error) { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest), diff --git a/x/auth/migrations/legacytx/stdsign.go b/x/auth/migrations/legacytx/stdsign.go index 5d489837bc86..e5a4e454cb90 100644 --- a/x/auth/migrations/legacytx/stdsign.go +++ b/x/auth/migrations/legacytx/stdsign.go @@ -14,7 +14,6 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -41,7 +40,6 @@ type StdSignDoc struct { Memo string `json:"memo" yaml:"memo"` Fee json.RawMessage `json:"fee" yaml:"fee"` Msgs []json.RawMessage `json:"msgs" yaml:"msgs"` - Tip *StdTip `json:"tip,omitempty" yaml:"tip"` } var RegressionTestingAminoCodec *codec.LegacyAmino @@ -62,7 +60,7 @@ func mustSortJSON(bz []byte) []byte { // StdSignBytes returns the bytes to sign for a transaction. // Deprecated: Please use x/tx/signing/aminojson instead. -func StdSignBytes(chainID string, accnum, sequence, timeout uint64, fee StdFee, msgs []sdk.Msg, memo string, tip *tx.Tip) []byte { +func StdSignBytes(chainID string, accnum, sequence, timeout uint64, fee StdFee, msgs []sdk.Msg, memo string) []byte { if RegressionTestingAminoCodec == nil { panic(fmt.Errorf("must set RegressionTestingAminoCodec before calling StdSignBytes")) } @@ -72,15 +70,6 @@ func StdSignBytes(chainID string, accnum, sequence, timeout uint64, fee StdFee, msgsBytes = append(msgsBytes, mustSortJSON(bz)) } - var stdTip *StdTip - if tip != nil { - if tip.Tipper == "" { - panic(fmt.Errorf("tipper cannot be empty")) - } - - stdTip = &StdTip{Amount: tip.Amount, Tipper: tip.Tipper} - } - bz, err := legacy.Cdc.MarshalJSON(StdSignDoc{ AccountNumber: accnum, ChainID: chainID, @@ -89,7 +78,6 @@ func StdSignBytes(chainID string, accnum, sequence, timeout uint64, fee StdFee, Msgs: msgsBytes, Sequence: sequence, TimeoutHeight: timeout, - Tip: stdTip, }) if err != nil { panic(err) diff --git a/x/auth/migrations/legacytx/stdtx.go b/x/auth/migrations/legacytx/stdtx.go index d2a16cfb0b14..900991c01450 100644 --- a/x/auth/migrations/legacytx/stdtx.go +++ b/x/auth/migrations/legacytx/stdtx.go @@ -8,7 +8,6 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -170,9 +169,6 @@ func (tx StdTx) FeeGranter() sdk.AccAddress { return nil } -// GetTip always returns nil for StdTx -func (tx StdTx) GetTip() *tx.Tip { return nil } - func (tx StdTx) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { for _, m := range tx.Msgs { err := codectypes.UnpackInterfaces(m, unpacker) diff --git a/x/auth/migrations/legacytx/stdtx_builder.go b/x/auth/migrations/legacytx/stdtx_builder.go index 80d3450a441b..3965c79cc723 100644 --- a/x/auth/migrations/legacytx/stdtx_builder.go +++ b/x/auth/migrations/legacytx/stdtx_builder.go @@ -45,10 +45,6 @@ func (s *StdTxBuilder) SetGasLimit(limit uint64) { s.StdTx.Fee.Gas = limit } -func (s *StdTxBuilder) SetTip(tip *tx.Tip) { - panic("StdTxBuilder does not support tips") -} - // SetMemo implements TxBuilder.SetMemo func (s *StdTxBuilder) SetMemo(memo string) { s.Memo = memo diff --git a/x/auth/migrations/legacytx/stdtx_test.go b/x/auth/migrations/legacytx/stdtx_test.go index b7ad91da34b1..fd6bc84869d8 100644 --- a/x/auth/migrations/legacytx/stdtx_test.go +++ b/x/auth/migrations/legacytx/stdtx_test.go @@ -39,16 +39,11 @@ func TestStdSignBytes(t *testing.T) { fee *txv1beta1.Fee msgs []sdk.Msg memo string - tip *txv1beta1.Tip } defaultFee := &txv1beta1.Fee{ Amount: []*basev1beta1.Coin{{Denom: "atom", Amount: "150"}}, GasLimit: 100000, } - defaultTip := &txv1beta1.Tip{ - Amount: []*basev1beta1.Coin{{Denom: "tiptoken", Amount: "150"}}, - Tipper: addr.String(), - } msgStr := fmt.Sprintf(`{"type":"testpb/TestMsg","value":{"signers":["%s"]}}`, addr) tests := []struct { name string @@ -57,52 +52,52 @@ func TestStdSignBytes(t *testing.T) { }{ { "with timeout height", - args{"1234", 3, 6, 10, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 10, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000"},"memo":"memo","msgs":[%s],"sequence":"6","timeout_height":"10"}`, msgStr), }, { "no timeout height (omitempty)", - args{"1234", 3, 6, 0, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000"},"memo":"memo","msgs":[%s],"sequence":"6"}`, msgStr), }, { "empty fee", - args{"1234", 3, 6, 0, &txv1beta1.Fee{}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[],"gas":"0"},"memo":"memo","msgs":[%s],"sequence":"6"}`, msgStr), }, { "no fee payer and fee granter (both omitempty)", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000"},"memo":"memo","msgs":[%s],"sequence":"6"}`, msgStr), }, { "with fee granter, no fee payer (omitempty)", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Granter: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Granter: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","granter":"%s"},"memo":"memo","msgs":[%s],"sequence":"6"}`, addr, msgStr), }, { "with fee payer, no fee granter (omitempty)", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","payer":"%s"},"memo":"memo","msgs":[%s],"sequence":"6"}`, addr, msgStr), }, { "with fee payer and fee granter", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String(), Granter: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", nil}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String(), Granter: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","granter":"%s","payer":"%s"},"memo":"memo","msgs":[%s],"sequence":"6"}`, addr, addr, msgStr), }, { "no fee, with tip", - args{"1234", 3, 6, 0, &txv1beta1.Fee{}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", defaultTip}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[],"gas":"0"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[{"amount":"150","denom":"tiptoken"}],"tipper":"%s"}}`, msgStr, addr), }, { "with fee and with tip", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", defaultTip}, + args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","payer":"%s"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[{"amount":"150","denom":"tiptoken"}],"tipper":"%s"}}`, addr, msgStr, addr), }, { "with empty tip (but not nil), tipper cannot be empty", - args{"1234", 3, 6, 0, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo", &txv1beta1.Tip{Tipper: addr.String()}}, + args{"1234", 3, 6, 0, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[],"tipper":"%s"}}`, msgStr, addr), }, } @@ -137,7 +132,6 @@ func TestStdSignBytes(t *testing.T) { }, AuthInfo: &txv1beta1.AuthInfo{ Fee: tc.args.fee, - Tip: tc.args.tip, }, }, ) diff --git a/x/auth/posthandler/tips.go b/x/auth/posthandler/tips.go deleted file mode 100644 index 33a5f69e9081..000000000000 --- a/x/auth/posthandler/tips.go +++ /dev/null @@ -1,58 +0,0 @@ -package posthandler - -import ( - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/x/auth/types" -) - -// ValidateBasicDecorator will call tx.ValidateBasic and return any non-nil error. -// If ValidateBasic passes, decorator calls next AnteHandler in chain. Note, -// ValidateBasicDecorator decorator will not get executed on ReCheckTx since it -// is not dependent on application state. -type tipDecorator struct { - bankKeeper types.BankKeeper -} - -// NewTipDecorator returns a new decorator for handling transactions with -// tips. -// -// IMPORTANT: This decorator is still in beta, please use it at your own risk. -func NewTipDecorator(bankKeeper types.BankKeeper) sdk.AnteDecorator { - return tipDecorator{ - bankKeeper: bankKeeper, - } -} - -func (d tipDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - err := d.transferTip(ctx, tx) - if err != nil { - return ctx, err - } - - return next(ctx, tx, simulate) -} - -// transferTip transfers the tip from the tipper to the fee payer. -func (d tipDecorator) transferTip(ctx sdk.Context, sdkTx sdk.Tx) error { - tipTx, ok := sdkTx.(tx.TipTx) - - // No-op if the tx doesn't have tips. - if !ok || tipTx.GetTip() == nil { - return nil - } - - tipper, err := sdk.AccAddressFromBech32(tipTx.GetTip().Tipper) - if err != nil { - return err - } - - coins := tipTx.GetTip().Amount - if err := d.bankKeeper.IsSendEnabledCoins(ctx, coins...); err != nil { - return fmt.Errorf("cannot tip these coins: %w", err) - } - - return d.bankKeeper.SendCoins(ctx, tipper, tipTx.FeePayer(), coins) -} diff --git a/x/auth/signing/sig_verifiable_tx.go b/x/auth/signing/sig_verifiable_tx.go index 7aa05219f1cd..0b6da14aff50 100644 --- a/x/auth/signing/sig_verifiable_tx.go +++ b/x/auth/signing/sig_verifiable_tx.go @@ -3,7 +3,6 @@ package signing import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -23,7 +22,6 @@ type Tx interface { types.TxWithMemo types.FeeTx - tx.TipTx types.TxWithTimeoutHeight types.HasValidateBasic } diff --git a/x/auth/tx/adapter.go b/x/auth/tx/adapter.go index 50081fdbde33..5ce5c8a91981 100644 --- a/x/auth/tx/adapter.go +++ b/x/auth/tx/adapter.go @@ -54,23 +54,6 @@ func (w *wrapper) GetSigningTxData() txsigning.TxData { } } - var txTip *txv1beta1.Tip - tip := authInfo.Tip - if tip != nil { - tipCoins := tip.GetAmount() - tipAmount := make([]*basev1beta1.Coin, len(tipCoins)) - for i, coin := range tipCoins { - tipAmount[i] = &basev1beta1.Coin{ - Denom: coin.Denom, - Amount: coin.Amount.String(), - } - } - txTip = &txv1beta1.Tip{ - Amount: tipAmount, - Tipper: tip.Tipper, - } - } - txSignerInfos := make([]*txv1beta1.SignerInfo, len(authInfo.SignerInfos)) for i, signerInfo := range authInfo.SignerInfos { modeInfo := &txv1beta1.ModeInfo{} @@ -94,7 +77,6 @@ func (w *wrapper) GetSigningTxData() txsigning.TxData { Payer: authInfo.Fee.Payer, Granter: authInfo.Fee.Granter, }, - Tip: txTip, } txBody := &txv1beta1.TxBody{ diff --git a/x/auth/tx/aux_test.go b/x/auth/tx/aux_test.go index 2a5e63a5053f..5e9bcdbbee64 100644 --- a/x/auth/tx/aux_test.go +++ b/x/auth/tx/aux_test.go @@ -6,15 +6,12 @@ import ( "github.com/stretchr/testify/require" - "cosmossdk.io/math" - clienttx "github.com/cosmos/cosmos-sdk/client/tx" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" _ "github.com/cosmos/cosmos-sdk/testutil/testdata/testpb" sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - txtypes "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" ) @@ -25,9 +22,9 @@ var ( aux2Priv, aux2Pk, aux2Addr = testdata.KeyTestPubAddr() feepayerPriv, feepayerPk, feepayerAddr = testdata.KeyTestPubAddr() - msg = testdata.NewTestMsg(tipperAddr, aux2Addr) - memo = "test-memo" - tip = &txtypes.Tip{Tipper: tipperAddr.String(), Amount: sdk.NewCoins(sdk.NewCoin("tip-denom", math.NewIntFromUint64(123)))} + msg = testdata.NewTestMsg(tipperAddr, aux2Addr) + memo = "test-memo" + chainID = "test-chain" gas = testdata.NewTestGasLimit() fee = testdata.NewTestFeeAmount() @@ -47,8 +44,8 @@ func TestBuilderWithAux(t *testing.T) { testdata.RegisterInterfaces(interfaceRegistry) // Create an AuxTxBuilder for tipper (1st signer) - tipperBuilder, tipperSig := makeTipperTxBuilder(t) - tipperSignerData, err := tipperBuilder.GetAuxSignerData() + txBuilder, txSig := makeTxBuilder(t) + txSignerData, err := txBuilder.GetAuxSignerData() require.NoError(t, err) // Create an AuxTxBuilder for aux2 (2nd signer) @@ -63,7 +60,6 @@ func TestBuilderWithAux(t *testing.T) { require.NoError(t, err) err = aux2Builder.SetPubKey(aux2Pk) require.NoError(t, err) - aux2Builder.SetTip(tip) extOptAny, err := codectypes.NewAnyWithValue(extOpt) require.NoError(t, err) aux2Builder.SetExtensionOptions(extOptAny) @@ -92,30 +88,28 @@ func TestBuilderWithAux(t *testing.T) { malleate func() expErr bool }{ - {"address and msg signer mistacher", func() { tipperBuilder.SetAddress("foobar") }, true}, - {"memo mismatch", func() { tipperBuilder.SetMemo("mismatch") }, true}, - {"timeout height mismatch", func() { tipperBuilder.SetTimeoutHeight(98) }, true}, - {"extension options length mismatch", func() { tipperBuilder.SetExtensionOptions() }, true}, - {"extension options member mismatch", func() { tipperBuilder.SetExtensionOptions(&codectypes.Any{}) }, true}, - {"non-critical extension options length mismatch", func() { tipperBuilder.SetNonCriticalExtensionOptions() }, true}, - {"non-critical extension options member mismatch", func() { tipperBuilder.SetNonCriticalExtensionOptions(&codectypes.Any{}) }, true}, - {"tip amount mismatch", func() { tipperBuilder.SetTip(&txtypes.Tip{Tipper: tip.Tipper, Amount: sdk.NewCoins()}) }, true}, - {"tipper mismatch", func() { tipperBuilder.SetTip(&txtypes.Tip{Tipper: "mismatch", Amount: tip.Amount}) }, true}, + {"address and msg signer mistacher", func() { txBuilder.SetAddress("foobar") }, true}, + {"memo mismatch", func() { txBuilder.SetMemo("mismatch") }, true}, + {"timeout height mismatch", func() { txBuilder.SetTimeoutHeight(98) }, true}, + {"extension options length mismatch", func() { txBuilder.SetExtensionOptions() }, true}, + {"extension options member mismatch", func() { txBuilder.SetExtensionOptions(&codectypes.Any{}) }, true}, + {"non-critical extension options length mismatch", func() { txBuilder.SetNonCriticalExtensionOptions() }, true}, + {"non-critical extension options member mismatch", func() { txBuilder.SetNonCriticalExtensionOptions(&codectypes.Any{}) }, true}, {"happy case", func() {}, false}, } for _, tc := range testcases { tc := tc t.Run(tc.name, func(t *testing.T) { - tipperBuilder, tipperSig = makeTipperTxBuilder(t) + txBuilder, txSig = makeTxBuilder(t) tc.malleate() - _, err := tipperBuilder.GetSignBytes() + _, err := txBuilder.GetSignBytes() require.NoError(t, err) - tipperSignerData, err = tipperBuilder.GetAuxSignerData() + txSignerData, err = txBuilder.GetAuxSignerData() require.NoError(t, err) - err = w.AddAuxSignerData(tipperSignerData) + err = w.AddAuxSignerData(txSignerData) if tc.expErr { require.Error(t, err) } else { @@ -129,10 +123,10 @@ func TestBuilderWithAux(t *testing.T) { w.SetGasLimit(gas) sigs, err := w.(authsigning.SigVerifiableTx).GetSignaturesV2() require.NoError(t, err) - tipperSigV2 := sigs[0] + txSigV2 := sigs[0] aux2SigV2 := sigs[1] // Set all signer infos. - err = w.SetSignatures(tipperSigV2, aux2SigV2, signing.SignatureV2{ + err = w.SetSignatures(txSigV2, aux2SigV2, signing.SignatureV2{ PubKey: feepayerPk, Sequence: 15, }) @@ -154,7 +148,7 @@ func TestBuilderWithAux(t *testing.T) { feepayerSig, err := feepayerPriv.Sign(signBz) require.NoError(t, err) // Set all signatures. - err = w.SetSignatures(tipperSigV2, aux2SigV2, signing.SignatureV2{ + err = w.SetSignatures(txSigV2, aux2SigV2, signing.SignatureV2{ PubKey: feepayerPk, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, @@ -172,7 +166,6 @@ func TestBuilderWithAux(t *testing.T) { require.Equal(t, tx.(sdk.FeeTx).FeePayer(), []byte(feepayerAddr)) require.Equal(t, tx.(sdk.FeeTx).GetFee(), fee) require.Equal(t, tx.(sdk.FeeTx).GetGas(), gas) - require.Equal(t, tip, tx.(txtypes.TipTx).GetTip()) require.Equal(t, msg, tx.GetMsgs()[0]) require.Equal(t, memo, tx.(sdk.TxWithMemo).GetMemo()) require.Equal(t, uint64(3), tx.(sdk.TxWithTimeoutHeight).GetTimeoutHeight()) @@ -181,7 +174,7 @@ func TestBuilderWithAux(t *testing.T) { require.Len(t, sigs, 3) require.Equal(t, signing.SignatureV2{ PubKey: tipperPk, - Data: &signing.SingleSignatureData{SignMode: signing.SignMode_SIGN_MODE_DIRECT_AUX, Signature: tipperSig}, + Data: &signing.SingleSignatureData{SignMode: signing.SignMode_SIGN_MODE_DIRECT_AUX, Signature: txSig}, Sequence: 2, }, sigs[0]) require.Equal(t, signing.SignatureV2{ @@ -196,31 +189,30 @@ func TestBuilderWithAux(t *testing.T) { }, sigs[2]) } -func makeTipperTxBuilder(t *testing.T) (clienttx.AuxTxBuilder, []byte) { +func makeTxBuilder(t *testing.T) (clienttx.AuxTxBuilder, []byte) { t.Helper() - tipperBuilder := clienttx.NewAuxTxBuilder() - tipperBuilder.SetAddress(tipperAddr.String()) - tipperBuilder.SetAccountNumber(1) - tipperBuilder.SetSequence(2) - tipperBuilder.SetTimeoutHeight(3) - tipperBuilder.SetMemo(memo) - tipperBuilder.SetChainID(chainID) - err := tipperBuilder.SetMsgs(msg) - require.NoError(t, err) - err = tipperBuilder.SetPubKey(tipperPk) - require.NoError(t, err) - tipperBuilder.SetTip(tip) + txBuilder := clienttx.NewAuxTxBuilder() + txBuilder.SetAddress(tipperAddr.String()) + txBuilder.SetAccountNumber(1) + txBuilder.SetSequence(2) + txBuilder.SetTimeoutHeight(3) + txBuilder.SetMemo(memo) + txBuilder.SetChainID(chainID) + err := txBuilder.SetMsgs(msg) + require.NoError(t, err) + err = txBuilder.SetPubKey(tipperPk) + require.NoError(t, err) extOptAny, err := codectypes.NewAnyWithValue(extOpt) require.NoError(t, err) - tipperBuilder.SetExtensionOptions(extOptAny) - tipperBuilder.SetNonCriticalExtensionOptions(extOptAny) - err = tipperBuilder.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX) + txBuilder.SetExtensionOptions(extOptAny) + txBuilder.SetNonCriticalExtensionOptions(extOptAny) + err = txBuilder.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX) require.NoError(t, err) - signBz, err := tipperBuilder.GetSignBytes() + signBz, err := txBuilder.GetSignBytes() require.NoError(t, err) tipperSig, err := tipperPriv.Sign(signBz) require.NoError(t, err) - tipperBuilder.SetSignature(tipperSig) + txBuilder.SetSignature(tipperSig) - return tipperBuilder, tipperSig + return txBuilder, tipperSig } diff --git a/x/auth/tx/builder.go b/x/auth/tx/builder.go index 7f3a398e0299..4d13c11e876f 100644 --- a/x/auth/tx/builder.go +++ b/x/auth/tx/builder.go @@ -45,10 +45,8 @@ type wrapper struct { var ( _ authsigning.Tx = &wrapper{} _ client.TxBuilder = &wrapper{} - _ tx.TipTx = &wrapper{} _ ante.HasExtensionOptionsTx = &wrapper{} _ ExtensionOptionsTxBuilder = &wrapper{} - _ tx.TipTx = &wrapper{} ) // ExtensionOptionsTxBuilder defines a TxBuilder that can also set extensions. @@ -214,10 +212,6 @@ func (w *wrapper) FeeGranter() []byte { return w.tx.FeeGranter(w.cdc) } -func (w *wrapper) GetTip() *tx.Tip { - return w.tx.AuthInfo.Tip -} - func (w *wrapper) GetMemo() string { return w.tx.Body.Memo } @@ -318,13 +312,6 @@ func (w *wrapper) SetFeeAmount(coins sdk.Coins) { w.authInfoBz = nil } -func (w *wrapper) SetTip(tip *tx.Tip) { - w.tx.AuthInfo.Tip = tip - - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil -} - func (w *wrapper) SetFeePayer(feePayer sdk.AccAddress) { if w.tx.AuthInfo.Fee == nil { w.tx.AuthInfo.Fee = &tx.Fee{} @@ -499,14 +486,6 @@ func (w *wrapper) AddAuxSignerData(data tx.AuxSignerData) error { } } } - if w.tx.AuthInfo.Tip != nil && data.SignDoc.Tip != nil { - if !w.tx.AuthInfo.Tip.Amount.Equal(data.SignDoc.Tip.Amount) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has tip %+v, got %+v in AuxSignerData", w.tx.AuthInfo.Tip.Amount, data.SignDoc.Tip.Amount) - } - if w.tx.AuthInfo.Tip.Tipper != data.SignDoc.Tip.Tipper { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has tipper %s, got %s in AuxSignerData", w.tx.AuthInfo.Tip.Tipper, data.SignDoc.Tip.Tipper) - } - } w.SetMemo(body.Memo) w.SetTimeoutHeight(body.TimeoutHeight) @@ -520,7 +499,6 @@ func (w *wrapper) AddAuxSignerData(data tx.AuxSignerData) error { if err != nil { return err } - w.SetTip(data.GetSignDoc().GetTip()) // Get the aux signer's index in GetSigners. signerIndex := -1 diff --git a/x/auth/tx/legacy_amino_json.go b/x/auth/tx/legacy_amino_json.go index 3d7f1efcae0c..0c76158e5d26 100644 --- a/x/auth/tx/legacy_amino_json.go +++ b/x/auth/tx/legacy_amino_json.go @@ -63,20 +63,6 @@ func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "got empty address in %s handler", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } - tip := protoTx.GetTip() - isTipper := tip != nil && tip.Tipper == addr - - // We set a convention that if the tipper signs with LEGACY_AMINO_JSON, then - // they sign over empty fees and 0 gas. - if isTipper { - return legacytx.StdSignBytes( - data.ChainID, data.AccountNumber, data.Sequence, protoTx.GetTimeoutHeight(), - // The tipper signs over 0 fee and 0 gas, no feepayer, no feegranter by convention. - legacytx.StdFee{}, - tx.GetMsgs(), protoTx.GetMemo(), tip, - ), nil - } - return legacytx.StdSignBytes( data.ChainID, data.AccountNumber, data.Sequence, protoTx.GetTimeoutHeight(), legacytx.StdFee{ @@ -85,6 +71,6 @@ func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, Payer: protoTx.tx.AuthInfo.Fee.Payer, Granter: protoTx.tx.AuthInfo.Fee.Granter, }, - tx.GetMsgs(), protoTx.GetMemo(), tip, + tx.GetMsgs(), protoTx.GetMemo(), ), nil } diff --git a/x/auth/tx/legacy_amino_json_test.go b/x/auth/tx/legacy_amino_json_test.go index f8f4c72ad6ac..b90d1d71ae03 100644 --- a/x/auth/tx/legacy_amino_json_test.go +++ b/x/auth/tx/legacy_amino_json_test.go @@ -14,7 +14,6 @@ import ( cdctypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" "github.com/cosmos/cosmos-sdk/x/auth/signing" @@ -47,7 +46,6 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { chainID = "test-chain" accNum uint64 = 7 seqNum uint64 = 7 - tip = &tx.Tip{Tipper: addr1.String(), Amount: coins} ) testcases := []struct { @@ -59,22 +57,18 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { { "signer which is also fee payer (no tips)", addr1.String(), func(w *wrapper) {}, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo, nil), - }, - { - "signer which is also fee payer (with tips)", addr2.String(), - func(w *wrapper) { w.SetTip(tip) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo, tip), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo), }, + { "explicit fee payer", addr1.String(), func(w *wrapper) { w.SetFeePayer(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo, nil), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo), }, { "explicit fee granter", addr1.String(), func(w *wrapper) { w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo, nil), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo), }, { "explicit fee payer and fee granter", addr1.String(), @@ -82,12 +76,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { w.SetFeePayer(addr2) w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo, nil), - }, - { - "signer which is also tipper", addr1.String(), - func(w *wrapper) { w.SetTip(tip) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{}, []sdk.Msg{msg}, memo, tip), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo), }, } @@ -152,7 +141,6 @@ func TestLegacyAminoJSONHandler_AllGetSignBytesComparison(t *testing.T) { chainID = "test-chain" accNum uint64 seqNum uint64 = 7 - tip = &tx.Tip{Tipper: addr1.String(), Amount: coins} ) modeHandler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{}) @@ -170,22 +158,18 @@ func TestLegacyAminoJSONHandler_AllGetSignBytesComparison(t *testing.T) { { "signer which is also fee payer (no tips)", addr1.String(), func(w *wrapper) {}, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo, nil), - }, - { - "signer which is also fee payer (with tips)", addr2.String(), - func(w *wrapper) { w.SetTip(tip) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo, tip), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo), }, + { "explicit fee payer", addr1.String(), func(w *wrapper) { w.SetFeePayer(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo, nil), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo), }, { "explicit fee granter", addr1.String(), func(w *wrapper) { w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo, nil), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo), }, { "explicit fee payer and fee granter", addr1.String(), @@ -193,12 +177,7 @@ func TestLegacyAminoJSONHandler_AllGetSignBytesComparison(t *testing.T) { w.SetFeePayer(addr2) w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo, nil), - }, - { - "signer which is also tipper", addr1.String(), - func(w *wrapper) { w.SetTip(tip) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{}, []sdk.Msg{msg}, memo, tip), + legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo), }, } diff --git a/x/authz/msgs_test.go b/x/authz/msgs_test.go index d460f191f905..96984d16e3eb 100644 --- a/x/authz/msgs_test.go +++ b/x/authz/msgs_test.go @@ -113,7 +113,7 @@ func TestAminoJSON(t *testing.T) { for i, tt := range tests { t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) { tx.Msgs = []sdk.Msg{tt.msg} - legacyJSON := string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{tt.msg}, "memo", nil)) + legacyJSON := string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{tt.msg}, "memo")) require.Equal(t, tt.exp, legacyJSON) legacyAny, err := cdctypes.NewAnyWithValue(tt.msg) diff --git a/x/feegrant/msgs_test.go b/x/feegrant/msgs_test.go index cee135b5ddb2..a0c19d0ff1c3 100644 --- a/x/feegrant/msgs_test.go +++ b/x/feegrant/msgs_test.go @@ -34,13 +34,13 @@ func TestAminoJSON(t *testing.T) { tx.Msgs = []sdk.Msg{msg} require.Equal(t, `{"account_number":"1","chain_id":"foo","fee":{"amount":[],"gas":"0"},"memo":"memo","msgs":[{"type":"cosmos-sdk/MsgGrantAllowance","value":{"allowance":{"type":"cosmos-sdk/BasicAllowance","value":{"spend_limit":[{"amount":"100","denom":"foo"}]}},"grantee":"cosmos1def","granter":"cosmos1abc"}}],"sequence":"1","timeout_height":"1"}`, - string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{msg}, "memo", nil)), + string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{msg}, "memo")), ) msg = &feegrant.MsgRevokeAllowance{Granter: "cosmos1abc", Grantee: "cosmos1def"} tx.Msgs = []sdk.Msg{msg} require.Equal(t, `{"account_number":"1","chain_id":"foo","fee":{"amount":[],"gas":"0"},"memo":"memo","msgs":[{"type":"cosmos-sdk/MsgRevokeAllowance","value":{"grantee":"cosmos1def","granter":"cosmos1abc"}}],"sequence":"1","timeout_height":"1"}`, - string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{msg}, "memo", nil)), + string(legacytx.StdSignBytes("foo", 1, 1, 1, legacytx.StdFee{}, []sdk.Msg{msg}, "memo")), ) } diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index c63094a3f590..4a1da323813d 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1404,705 +1404,715 @@ func (this *Pool) Description() (desc *github_com_cosmos_gogoproto_protoc_gen_go func StakingDescription() (desc *github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 11157 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x90, 0x1c, 0xc9, - 0x75, 0x18, 0x3c, 0x7d, 0x4c, 0x1f, 0xaf, 0xaf, 0x9a, 0x9c, 0x01, 0x30, 0x68, 0x2c, 0x66, 0x06, - 0xb5, 0xdc, 0x05, 0x16, 0xbb, 0x3b, 0xd8, 0xc5, 0x2e, 0xb0, 0xbb, 0x03, 0x92, 0xfb, 0x75, 0xf7, - 0x34, 0x06, 0x8d, 0x9d, 0x6b, 0xab, 0x7b, 0xb0, 0x87, 0x24, 0x96, 0x6a, 0xaa, 0x73, 0x7a, 0x6a, - 0xd1, 0x5d, 0xd5, 0xac, 0xaa, 0x06, 0x66, 0x36, 0xbe, 0x70, 0x50, 0xa6, 0x64, 0x53, 0xd0, 0x61, - 0xea, 0x08, 0x89, 0x12, 0x09, 0x89, 0x94, 0x2c, 0x91, 0x92, 0x2f, 0x1d, 0xb4, 0x0e, 0x2b, 0x2c, - 0x4b, 0x0e, 0x1f, 0x92, 0xc2, 0x07, 0xad, 0x1f, 0xb6, 0xc2, 0x11, 0x5a, 0x4b, 0xa4, 0xc2, 0xa2, - 0x29, 0xca, 0xd6, 0x41, 0xd9, 0x72, 0x30, 0xac, 0x70, 0xe4, 0x55, 0x47, 0x1f, 0xd3, 0x3d, 0xe0, - 0x72, 0x45, 0xcb, 0xfe, 0x03, 0x74, 0xbe, 0x7c, 0xef, 0x65, 0xe6, 0xcb, 0x97, 0x2f, 0xdf, 0x7b, - 0x99, 0x95, 0x03, 0xbf, 0x5b, 0x86, 0xa5, 0x96, 0x65, 0xb5, 0xda, 0xf8, 0x52, 0xd7, 0xb6, 0x5c, - 0x6b, 0xb7, 0xb7, 0x77, 0xa9, 0x89, 0x1d, 0xdd, 0x36, 0xba, 0xae, 0x65, 0x2f, 0x53, 0x18, 0x2a, - 0x30, 0x8c, 0x65, 0x81, 0x21, 0x6f, 0xc0, 0xcc, 0x75, 0xa3, 0x8d, 0x57, 0x3d, 0xc4, 0x3a, 0x76, - 0xd1, 0xf3, 0x10, 0xdf, 0x33, 0xda, 0x78, 0x3e, 0xb2, 0x14, 0xbb, 0x90, 0xb9, 0xfc, 0xae, 0xe5, - 0x3e, 0xa2, 0xe5, 0x30, 0xc5, 0x36, 0x01, 0x2b, 0x94, 0x42, 0xfe, 0x8b, 0x38, 0xcc, 0x0e, 0xa9, - 0x45, 0x08, 0xe2, 0xa6, 0xd6, 0x21, 0x1c, 0x23, 0x17, 0xd2, 0x0a, 0xfd, 0x8d, 0xe6, 0x21, 0xd9, - 0xd5, 0xf4, 0xdb, 0x5a, 0x0b, 0xcf, 0x47, 0x29, 0x58, 0x14, 0xd1, 0x02, 0x40, 0x13, 0x77, 0xb1, - 0xd9, 0xc4, 0xa6, 0x7e, 0x38, 0x1f, 0x5b, 0x8a, 0x5d, 0x48, 0x2b, 0x01, 0x08, 0x7a, 0x1c, 0x66, - 0xba, 0xbd, 0xdd, 0xb6, 0xa1, 0xab, 0x01, 0x34, 0x58, 0x8a, 0x5d, 0x98, 0x56, 0x24, 0x56, 0xb1, - 0xea, 0x23, 0x9f, 0x87, 0xc2, 0x5d, 0xac, 0xdd, 0x0e, 0xa2, 0x66, 0x28, 0x6a, 0x9e, 0x80, 0x03, - 0x88, 0x15, 0xc8, 0x76, 0xb0, 0xe3, 0x68, 0x2d, 0xac, 0xba, 0x87, 0x5d, 0x3c, 0x1f, 0xa7, 0xa3, - 0x5f, 0x1a, 0x18, 0x7d, 0xff, 0xc8, 0x33, 0x9c, 0xaa, 0x71, 0xd8, 0xc5, 0xa8, 0x04, 0x69, 0x6c, - 0xf6, 0x3a, 0x8c, 0xc3, 0xf4, 0x08, 0xf9, 0x55, 0xcd, 0x5e, 0xa7, 0x9f, 0x4b, 0x8a, 0x90, 0x71, - 0x16, 0x49, 0x07, 0xdb, 0x77, 0x0c, 0x1d, 0xcf, 0x27, 0x28, 0x83, 0xf3, 0x03, 0x0c, 0xea, 0xac, - 0xbe, 0x9f, 0x87, 0xa0, 0x43, 0x15, 0x48, 0xe3, 0x03, 0x17, 0x9b, 0x8e, 0x61, 0x99, 0xf3, 0x49, - 0xca, 0xe4, 0x91, 0x21, 0xb3, 0x88, 0xdb, 0xcd, 0x7e, 0x16, 0x3e, 0x1d, 0xba, 0x0a, 0x49, 0xab, - 0xeb, 0x1a, 0x96, 0xe9, 0xcc, 0xa7, 0x96, 0x22, 0x17, 0x32, 0x97, 0x1f, 0x1a, 0xaa, 0x08, 0x5b, - 0x0c, 0x47, 0x11, 0xc8, 0xa8, 0x06, 0x92, 0x63, 0xf5, 0x6c, 0x1d, 0xab, 0xba, 0xd5, 0xc4, 0xaa, - 0x61, 0xee, 0x59, 0xf3, 0x69, 0xca, 0x60, 0x71, 0x70, 0x20, 0x14, 0xb1, 0x62, 0x35, 0x71, 0xcd, - 0xdc, 0xb3, 0x94, 0xbc, 0x13, 0x2a, 0xa3, 0x93, 0x90, 0x70, 0x0e, 0x4d, 0x57, 0x3b, 0x98, 0xcf, - 0x52, 0x0d, 0xe1, 0x25, 0xa2, 0x3a, 0xb8, 0x69, 0x90, 0xe6, 0xe6, 0x73, 0x4c, 0x75, 0x78, 0x51, - 0xfe, 0xc5, 0x04, 0x14, 0x26, 0x51, 0xbe, 0x6b, 0x30, 0xbd, 0x47, 0xc6, 0x3f, 0x1f, 0x3d, 0x8e, - 0x74, 0x18, 0x4d, 0x58, 0xbc, 0x89, 0x07, 0x14, 0x6f, 0x09, 0x32, 0x26, 0x76, 0x5c, 0xdc, 0x64, - 0xba, 0x12, 0x9b, 0x50, 0xdb, 0x80, 0x11, 0x0d, 0x2a, 0x5b, 0xfc, 0x81, 0x94, 0xed, 0x55, 0x28, - 0x78, 0x5d, 0x52, 0x6d, 0xcd, 0x6c, 0x09, 0xad, 0xbd, 0x34, 0xae, 0x27, 0xcb, 0x55, 0x41, 0xa7, - 0x10, 0x32, 0x25, 0x8f, 0x43, 0x65, 0xb4, 0x0a, 0x60, 0x99, 0xd8, 0xda, 0x53, 0x9b, 0x58, 0x6f, - 0xcf, 0xa7, 0x46, 0x48, 0x69, 0x8b, 0xa0, 0x0c, 0x48, 0xc9, 0x62, 0x50, 0xbd, 0x8d, 0x5e, 0xf0, - 0x95, 0x30, 0x39, 0x42, 0x87, 0x36, 0xd8, 0xf2, 0x1b, 0xd0, 0xc3, 0x1d, 0xc8, 0xdb, 0x98, 0xac, - 0x08, 0xdc, 0xe4, 0x23, 0x4b, 0xd3, 0x4e, 0x2c, 0x8f, 0x1d, 0x99, 0xc2, 0xc9, 0xd8, 0xc0, 0x72, - 0x76, 0xb0, 0x88, 0x1e, 0x06, 0x0f, 0xa0, 0x52, 0xb5, 0x02, 0x6a, 0x9f, 0xb2, 0x02, 0xb8, 0xa9, - 0x75, 0x70, 0xf1, 0x4d, 0xc8, 0x87, 0xc5, 0x83, 0xe6, 0x60, 0xda, 0x71, 0x35, 0xdb, 0xa5, 0x5a, - 0x38, 0xad, 0xb0, 0x02, 0x92, 0x20, 0x86, 0xcd, 0x26, 0xb5, 0x7f, 0xd3, 0x0a, 0xf9, 0x89, 0xfe, - 0x3f, 0x7f, 0xc0, 0x31, 0x3a, 0xe0, 0x47, 0x07, 0x67, 0x34, 0xc4, 0xb9, 0x7f, 0xdc, 0xc5, 0xe7, - 0x20, 0x17, 0x1a, 0xc0, 0xa4, 0x4d, 0xcb, 0xff, 0x3f, 0x9c, 0x18, 0xca, 0x1a, 0xbd, 0x0a, 0x73, - 0x3d, 0xd3, 0x30, 0x5d, 0x6c, 0x77, 0x6d, 0x4c, 0x34, 0x96, 0x35, 0x35, 0xff, 0xfb, 0xc9, 0x11, - 0x3a, 0xb7, 0x13, 0xc4, 0x66, 0x5c, 0x94, 0xd9, 0xde, 0x20, 0xf0, 0x62, 0x3a, 0xf5, 0xf9, 0xa4, - 0xf4, 0x81, 0x0f, 0x7c, 0xe0, 0x03, 0x51, 0xf9, 0x57, 0x13, 0x30, 0x37, 0x6c, 0xcd, 0x0c, 0x5d, - 0xbe, 0x27, 0x21, 0x61, 0xf6, 0x3a, 0xbb, 0xd8, 0xa6, 0x42, 0x9a, 0x56, 0x78, 0x09, 0x95, 0x60, - 0xba, 0xad, 0xed, 0xe2, 0xf6, 0x7c, 0x7c, 0x29, 0x72, 0x21, 0x7f, 0xf9, 0xf1, 0x89, 0x56, 0xe5, - 0xf2, 0x3a, 0x21, 0x51, 0x18, 0x25, 0x7a, 0x2f, 0xc4, 0xb9, 0xf1, 0x26, 0x1c, 0x2e, 0x4e, 0xc6, - 0x81, 0xac, 0x25, 0x85, 0xd2, 0xa1, 0x33, 0x90, 0x26, 0xff, 0x33, 0xdd, 0x48, 0xd0, 0x3e, 0xa7, - 0x08, 0x80, 0xe8, 0x05, 0x2a, 0x42, 0x8a, 0x2e, 0x93, 0x26, 0x16, 0x9b, 0x9e, 0x57, 0x26, 0x8a, - 0xd5, 0xc4, 0x7b, 0x5a, 0xaf, 0xed, 0xaa, 0x77, 0xb4, 0x76, 0x0f, 0x53, 0x85, 0x4f, 0x2b, 0x59, - 0x0e, 0xbc, 0x45, 0x60, 0x68, 0x11, 0x32, 0x6c, 0x55, 0x19, 0x66, 0x13, 0x1f, 0x50, 0xbb, 0x3a, - 0xad, 0xb0, 0x85, 0x56, 0x23, 0x10, 0xd2, 0xfc, 0x1b, 0x8e, 0x65, 0x0a, 0xd5, 0xa4, 0x4d, 0x10, - 0x00, 0x6d, 0xfe, 0xb9, 0x7e, 0x93, 0x7e, 0x76, 0xf8, 0xf0, 0x06, 0xd6, 0xd2, 0x79, 0x28, 0x50, - 0x8c, 0x67, 0xf8, 0xd4, 0x6b, 0xed, 0xf9, 0x99, 0xa5, 0xc8, 0x85, 0x94, 0x92, 0x67, 0xe0, 0x2d, - 0x0e, 0x95, 0x7f, 0x2e, 0x0a, 0x71, 0x6a, 0x58, 0x0a, 0x90, 0x69, 0xbc, 0xb6, 0x5d, 0x55, 0x57, - 0xb7, 0x76, 0xca, 0xeb, 0x55, 0x29, 0x82, 0xf2, 0x00, 0x14, 0x70, 0x7d, 0x7d, 0xab, 0xd4, 0x90, - 0xa2, 0x5e, 0xb9, 0xb6, 0xd9, 0xb8, 0xfa, 0xac, 0x14, 0xf3, 0x08, 0x76, 0x18, 0x20, 0x1e, 0x44, - 0x78, 0xe6, 0xb2, 0x34, 0x8d, 0x24, 0xc8, 0x32, 0x06, 0xb5, 0x57, 0xab, 0xab, 0x57, 0x9f, 0x95, - 0x12, 0x61, 0xc8, 0x33, 0x97, 0xa5, 0x24, 0xca, 0x41, 0x9a, 0x42, 0xca, 0x5b, 0x5b, 0xeb, 0x52, - 0xca, 0xe3, 0x59, 0x6f, 0x28, 0xb5, 0xcd, 0x35, 0x29, 0xed, 0xf1, 0x5c, 0x53, 0xb6, 0x76, 0xb6, - 0x25, 0xf0, 0x38, 0x6c, 0x54, 0xeb, 0xf5, 0xd2, 0x5a, 0x55, 0xca, 0x78, 0x18, 0xe5, 0xd7, 0x1a, - 0xd5, 0xba, 0x94, 0x0d, 0x75, 0xeb, 0x99, 0xcb, 0x52, 0xce, 0x6b, 0xa2, 0xba, 0xb9, 0xb3, 0x21, - 0xe5, 0xd1, 0x0c, 0xe4, 0x58, 0x13, 0xa2, 0x13, 0x85, 0x3e, 0xd0, 0xd5, 0x67, 0x25, 0xc9, 0xef, - 0x08, 0xe3, 0x32, 0x13, 0x02, 0x5c, 0x7d, 0x56, 0x42, 0x72, 0x05, 0xa6, 0xa9, 0x1a, 0x22, 0x04, - 0xf9, 0xf5, 0x52, 0xb9, 0xba, 0xae, 0x6e, 0x6d, 0x37, 0x6a, 0x5b, 0x9b, 0xa5, 0x75, 0x29, 0xe2, - 0xc3, 0x94, 0xea, 0xcb, 0x3b, 0x35, 0xa5, 0xba, 0x2a, 0x45, 0x83, 0xb0, 0xed, 0x6a, 0xa9, 0x51, - 0x5d, 0x95, 0x62, 0xb2, 0x0e, 0x73, 0xc3, 0x0c, 0xea, 0xd0, 0x25, 0x14, 0xd0, 0x85, 0xe8, 0x08, - 0x5d, 0xa0, 0xbc, 0xfa, 0x75, 0x41, 0xfe, 0x5c, 0x14, 0x66, 0x87, 0x6c, 0x2a, 0x43, 0x1b, 0x79, - 0x11, 0xa6, 0x99, 0x2e, 0xb3, 0x6d, 0xf6, 0xb1, 0xa1, 0xbb, 0x13, 0xd5, 0xec, 0x81, 0xad, 0x96, - 0xd2, 0x05, 0x9d, 0x90, 0xd8, 0x08, 0x27, 0x84, 0xb0, 0x18, 0x50, 0xd8, 0x6f, 0x18, 0x30, 0xfe, - 0x6c, 0x7f, 0xbc, 0x3a, 0xc9, 0xfe, 0x48, 0x61, 0xc7, 0xdb, 0x04, 0xa6, 0x87, 0x6c, 0x02, 0xd7, - 0x60, 0x66, 0x80, 0xd1, 0xc4, 0xc6, 0xf8, 0x83, 0x11, 0x98, 0x1f, 0x25, 0x9c, 0x31, 0x26, 0x31, - 0x1a, 0x32, 0x89, 0xd7, 0xfa, 0x25, 0x78, 0x6e, 0xf4, 0x24, 0x0c, 0xcc, 0xf5, 0x27, 0x23, 0x70, - 0x72, 0xb8, 0xb3, 0x39, 0xb4, 0x0f, 0xef, 0x85, 0x44, 0x07, 0xbb, 0xfb, 0x96, 0x70, 0xab, 0x1e, - 0x1d, 0xb2, 0x59, 0x93, 0xea, 0xfe, 0xc9, 0xe6, 0x54, 0xc1, 0xdd, 0x3e, 0x36, 0xca, 0x63, 0x64, - 0xbd, 0x19, 0xe8, 0xe9, 0xb7, 0x46, 0xe1, 0xc4, 0x50, 0xe6, 0x43, 0x3b, 0x7a, 0x16, 0xc0, 0x30, - 0xbb, 0x3d, 0x97, 0xb9, 0x4e, 0xcc, 0x12, 0xa7, 0x29, 0x84, 0x1a, 0x2f, 0x62, 0x65, 0x7b, 0xae, - 0x57, 0x1f, 0xa3, 0xf5, 0xc0, 0x40, 0x14, 0xe1, 0x79, 0xbf, 0xa3, 0x71, 0xda, 0xd1, 0x85, 0x11, - 0x23, 0x1d, 0x50, 0xcc, 0xa7, 0x40, 0xd2, 0xdb, 0x06, 0x36, 0x5d, 0xd5, 0x71, 0x6d, 0xac, 0x75, - 0x0c, 0xb3, 0x45, 0xb7, 0x9a, 0xd4, 0xca, 0xf4, 0x9e, 0xd6, 0x76, 0xb0, 0x52, 0x60, 0xd5, 0x75, - 0x51, 0x4b, 0x28, 0xa8, 0x02, 0xd9, 0x01, 0x8a, 0x44, 0x88, 0x82, 0x55, 0x7b, 0x14, 0xf2, 0x77, - 0xa5, 0x21, 0x13, 0x70, 0xcd, 0xd1, 0x39, 0xc8, 0xbe, 0xa1, 0xdd, 0xd1, 0x54, 0x11, 0x6e, 0x31, - 0x49, 0x64, 0x08, 0x6c, 0x9b, 0x87, 0x5c, 0x4f, 0xc1, 0x1c, 0x45, 0xb1, 0x7a, 0x2e, 0xb6, 0x55, - 0xbd, 0xad, 0x39, 0x0e, 0x15, 0x5a, 0x8a, 0xa2, 0x22, 0x52, 0xb7, 0x45, 0xaa, 0x2a, 0xa2, 0x06, - 0x5d, 0x81, 0x59, 0x4a, 0xd1, 0xe9, 0xb5, 0x5d, 0xa3, 0xdb, 0xc6, 0x2a, 0x09, 0x00, 0x1d, 0xba, - 0xe5, 0x78, 0x3d, 0x9b, 0x21, 0x18, 0x1b, 0x1c, 0x81, 0xf4, 0xc8, 0x41, 0xab, 0x70, 0x96, 0x92, - 0xb5, 0xb0, 0x89, 0x6d, 0xcd, 0xc5, 0x2a, 0x7e, 0x7f, 0x4f, 0x6b, 0x3b, 0xaa, 0x66, 0x36, 0xd5, - 0x7d, 0xcd, 0xd9, 0x9f, 0x9f, 0x23, 0x0c, 0xca, 0xd1, 0xf9, 0x88, 0x72, 0x9a, 0x20, 0xae, 0x71, - 0xbc, 0x2a, 0x45, 0x2b, 0x99, 0xcd, 0x1b, 0x9a, 0xb3, 0x8f, 0x56, 0xe0, 0x24, 0xe5, 0xe2, 0xb8, - 0xb6, 0x61, 0xb6, 0x54, 0x7d, 0x1f, 0xeb, 0xb7, 0xd5, 0x9e, 0xbb, 0xf7, 0xfc, 0xfc, 0x99, 0x60, - 0xfb, 0xb4, 0x87, 0x75, 0x8a, 0x53, 0x21, 0x28, 0x3b, 0xee, 0xde, 0xf3, 0xa8, 0x0e, 0x59, 0x32, - 0x19, 0x1d, 0xe3, 0x4d, 0xac, 0xee, 0x59, 0x36, 0xdd, 0x43, 0xf3, 0x43, 0x4c, 0x53, 0x40, 0x82, - 0xcb, 0x5b, 0x9c, 0x60, 0xc3, 0x6a, 0xe2, 0x95, 0xe9, 0xfa, 0x76, 0xb5, 0xba, 0xaa, 0x64, 0x04, - 0x97, 0xeb, 0x96, 0x4d, 0x14, 0xaa, 0x65, 0x79, 0x02, 0xce, 0x30, 0x85, 0x6a, 0x59, 0x42, 0xbc, - 0x57, 0x60, 0x56, 0xd7, 0xd9, 0x98, 0x0d, 0x5d, 0xe5, 0x61, 0x9a, 0x33, 0x2f, 0x85, 0x84, 0xa5, - 0xeb, 0x6b, 0x0c, 0x81, 0xeb, 0xb8, 0x83, 0x5e, 0x80, 0x13, 0xbe, 0xb0, 0x82, 0x84, 0x33, 0x03, - 0xa3, 0xec, 0x27, 0xbd, 0x02, 0xb3, 0xdd, 0xc3, 0x41, 0x42, 0x14, 0x6a, 0xb1, 0x7b, 0xd8, 0x4f, - 0xf6, 0x1c, 0xcc, 0x75, 0xf7, 0xbb, 0x83, 0x74, 0x17, 0x83, 0x74, 0xa8, 0xbb, 0xdf, 0xed, 0x27, - 0x7c, 0x84, 0xc6, 0xec, 0x36, 0xd6, 0x35, 0x17, 0x37, 0xe7, 0x4f, 0x05, 0xd1, 0x03, 0x15, 0x68, - 0x19, 0x24, 0x5d, 0x57, 0xb1, 0xa9, 0xed, 0xb6, 0xb1, 0xaa, 0xd9, 0xd8, 0xd4, 0x9c, 0xf9, 0x45, - 0x8a, 0x1c, 0x77, 0xed, 0x1e, 0x56, 0xf2, 0xba, 0x5e, 0xa5, 0x95, 0x25, 0x5a, 0x87, 0x2e, 0xc2, - 0x8c, 0xb5, 0xfb, 0x86, 0xce, 0x34, 0x52, 0xed, 0xda, 0x78, 0xcf, 0x38, 0x98, 0x7f, 0x17, 0x15, - 0x6f, 0x81, 0x54, 0x50, 0x7d, 0xdc, 0xa6, 0x60, 0xf4, 0x18, 0x48, 0xba, 0xb3, 0xaf, 0xd9, 0x5d, - 0x6a, 0x92, 0x9d, 0xae, 0xa6, 0xe3, 0xf9, 0x47, 0x18, 0x2a, 0x83, 0x6f, 0x0a, 0x30, 0x59, 0x11, - 0xce, 0x5d, 0x63, 0xcf, 0x15, 0x1c, 0xcf, 0xb3, 0x15, 0x41, 0x61, 0x9c, 0xdb, 0x05, 0x90, 0x88, - 0x24, 0x42, 0x0d, 0x5f, 0xa0, 0x68, 0xf9, 0xee, 0x7e, 0x37, 0xd8, 0xee, 0xc3, 0x90, 0x23, 0x98, - 0x7e, 0xa3, 0x8f, 0x31, 0xc7, 0xad, 0xbb, 0x1f, 0x68, 0xf1, 0x59, 0x38, 0x49, 0x90, 0x3a, 0xd8, - 0xd5, 0x9a, 0x9a, 0xab, 0x05, 0xb0, 0x9f, 0xa0, 0xd8, 0x44, 0xec, 0x1b, 0xbc, 0x32, 0xd4, 0x4f, - 0xbb, 0xb7, 0x7b, 0xe8, 0x29, 0xd6, 0x93, 0xac, 0x9f, 0x04, 0x26, 0x54, 0xeb, 0xab, 0xe6, 0x9c, - 0xcb, 0x2b, 0x90, 0x0d, 0xea, 0x3d, 0x4a, 0x03, 0xd3, 0x7c, 0x29, 0x42, 0x9c, 0xa0, 0xca, 0xd6, - 0x2a, 0x71, 0x5f, 0x5e, 0xaf, 0x4a, 0x51, 0xe2, 0x46, 0xad, 0xd7, 0x1a, 0x55, 0x55, 0xd9, 0xd9, - 0x6c, 0xd4, 0x36, 0xaa, 0x52, 0x2c, 0xe0, 0xd8, 0xdf, 0x8c, 0xa7, 0x1e, 0x95, 0xce, 0xcb, 0xbf, - 0x14, 0x83, 0x7c, 0x38, 0x52, 0x43, 0xef, 0x86, 0x53, 0x22, 0xe1, 0xe2, 0x60, 0x57, 0xbd, 0x6b, - 0xd8, 0x74, 0x41, 0x76, 0x34, 0xb6, 0x39, 0x7a, 0xfa, 0x33, 0xc7, 0xb1, 0xea, 0xd8, 0x7d, 0xc5, - 0xb0, 0xc9, 0x72, 0xeb, 0x68, 0x2e, 0x5a, 0x87, 0x45, 0xd3, 0x52, 0x1d, 0x57, 0x33, 0x9b, 0x9a, - 0xdd, 0x54, 0xfd, 0x54, 0x97, 0xaa, 0xe9, 0x3a, 0x76, 0x1c, 0x8b, 0x6d, 0x84, 0x1e, 0x97, 0x87, - 0x4c, 0xab, 0xce, 0x91, 0xfd, 0x1d, 0xa2, 0xc4, 0x51, 0xfb, 0xd4, 0x37, 0x36, 0x4a, 0x7d, 0xcf, - 0x40, 0xba, 0xa3, 0x75, 0x55, 0x6c, 0xba, 0xf6, 0x21, 0xf5, 0xcf, 0x53, 0x4a, 0xaa, 0xa3, 0x75, - 0xab, 0xa4, 0x8c, 0x6e, 0xc1, 0xa3, 0x3e, 0xaa, 0xda, 0xc6, 0x2d, 0x4d, 0x3f, 0x54, 0xa9, 0x33, - 0x4e, 0xd3, 0x06, 0xaa, 0x6e, 0x99, 0x7b, 0x6d, 0x43, 0x77, 0x1d, 0x6a, 0x1f, 0x98, 0x8d, 0x93, - 0x7d, 0x8a, 0x75, 0x4a, 0x70, 0xd3, 0xb1, 0x4c, 0xea, 0x83, 0x57, 0x04, 0xf6, 0x3b, 0x12, 0x7e, - 0xdd, 0x8c, 0xa7, 0xe2, 0xd2, 0xf4, 0xcd, 0x78, 0x6a, 0x5a, 0x4a, 0xdc, 0x8c, 0xa7, 0x12, 0x52, - 0xf2, 0x66, 0x3c, 0x95, 0x92, 0xd2, 0x37, 0xe3, 0xa9, 0xb4, 0x04, 0xf2, 0xcf, 0xa7, 0x20, 0x1b, - 0x8c, 0x0c, 0x48, 0xa0, 0xa5, 0xd3, 0xbd, 0x31, 0x42, 0xad, 0xe7, 0xc3, 0x47, 0xc6, 0x11, 0xcb, - 0x15, 0xb2, 0x69, 0xae, 0x24, 0x98, 0x1b, 0xae, 0x30, 0x4a, 0xe2, 0xb0, 0x10, 0xb5, 0xc6, 0xcc, - 0xed, 0x49, 0x29, 0xbc, 0x84, 0xd6, 0x20, 0xf1, 0x86, 0x43, 0x79, 0x27, 0x28, 0xef, 0x77, 0x1d, - 0xcd, 0xfb, 0x66, 0x9d, 0x32, 0x4f, 0xdf, 0xac, 0xab, 0x9b, 0x5b, 0xca, 0x46, 0x69, 0x5d, 0xe1, - 0xe4, 0xe8, 0x34, 0xc4, 0xdb, 0xda, 0x9b, 0x87, 0xe1, 0xed, 0x95, 0x82, 0xd0, 0x32, 0x14, 0x7a, - 0xe6, 0x1d, 0x6c, 0x1b, 0x7b, 0x06, 0x99, 0x2a, 0x82, 0x55, 0x08, 0x62, 0xe5, 0xfd, 0xda, 0x75, - 0x82, 0x3f, 0xa1, 0x7a, 0x9c, 0x86, 0xf8, 0x5d, 0xac, 0xdd, 0x0e, 0x6f, 0x82, 0x14, 0x84, 0x2e, - 0x40, 0xb6, 0x89, 0x77, 0x7b, 0x2d, 0xd5, 0xc6, 0x4d, 0x4d, 0x77, 0xc3, 0xa6, 0x3f, 0x43, 0xab, - 0x14, 0x5a, 0x83, 0x5e, 0x82, 0x34, 0x99, 0x23, 0x93, 0xce, 0xf1, 0x0c, 0x15, 0xc1, 0x93, 0x47, - 0x8b, 0x80, 0x4f, 0xb1, 0x20, 0x52, 0x7c, 0x7a, 0x74, 0x1d, 0x12, 0xae, 0x66, 0xb7, 0xb0, 0x4b, - 0x2d, 0x7f, 0x7e, 0x48, 0xf2, 0x63, 0x08, 0xa7, 0x06, 0xa5, 0xa0, 0x31, 0x2d, 0xa7, 0xfe, 0x2a, - 0x5a, 0x99, 0x4b, 0x30, 0x4d, 0xd5, 0x03, 0x01, 0x70, 0x05, 0x91, 0xa6, 0x50, 0x0a, 0xe2, 0x95, - 0x2d, 0x85, 0x58, 0x1a, 0x09, 0xb2, 0x0c, 0xaa, 0x6e, 0xd7, 0xaa, 0x95, 0xaa, 0x14, 0x95, 0xaf, - 0x40, 0x82, 0xcd, 0x39, 0xb1, 0x42, 0xde, 0xac, 0x4b, 0x53, 0xbc, 0xc8, 0x79, 0x44, 0x44, 0xed, - 0xce, 0x46, 0xb9, 0xaa, 0x48, 0x51, 0x79, 0x07, 0x0a, 0x7d, 0x72, 0x42, 0x27, 0x60, 0x46, 0xa9, - 0x36, 0xaa, 0x9b, 0x24, 0xce, 0x52, 0x77, 0x36, 0x5f, 0xda, 0xdc, 0x7a, 0x65, 0x53, 0x9a, 0x0a, - 0x83, 0x85, 0x49, 0x8b, 0xa0, 0x39, 0x90, 0x7c, 0x70, 0x7d, 0x6b, 0x47, 0xa1, 0xbd, 0xf9, 0xf6, - 0x28, 0x48, 0xfd, 0x52, 0x43, 0xa7, 0x60, 0xb6, 0x51, 0x52, 0xd6, 0xaa, 0x0d, 0x95, 0xc5, 0x8e, - 0x1e, 0xeb, 0x39, 0x90, 0x82, 0x15, 0xd7, 0x6b, 0x34, 0x34, 0x5e, 0x84, 0x33, 0x41, 0x68, 0xf5, - 0xd5, 0x46, 0x75, 0xb3, 0x4e, 0x1b, 0x2f, 0x6d, 0xae, 0x11, 0xfb, 0xda, 0xc7, 0x4f, 0x44, 0xab, - 0x31, 0xd2, 0xd5, 0x30, 0xbf, 0xea, 0xfa, 0xaa, 0x14, 0xef, 0x07, 0x6f, 0x6d, 0x56, 0xb7, 0xae, - 0x4b, 0xd3, 0xfd, 0xad, 0xd3, 0x08, 0x36, 0x81, 0x8a, 0x70, 0xb2, 0x1f, 0xaa, 0x56, 0x37, 0x1b, - 0xca, 0x6b, 0x52, 0xb2, 0xbf, 0xe1, 0x7a, 0x55, 0xb9, 0x55, 0xab, 0x54, 0xa5, 0x14, 0x3a, 0x09, - 0x28, 0xdc, 0xa3, 0xc6, 0x8d, 0xad, 0x55, 0x29, 0x3d, 0x60, 0x51, 0x64, 0x07, 0xb2, 0xc1, 0x30, - 0xf2, 0x9d, 0xc9, 0x25, 0x7d, 0x24, 0x0a, 0x99, 0x40, 0x58, 0x48, 0xfc, 0x79, 0xad, 0xdd, 0xb6, - 0xee, 0xaa, 0x5a, 0xdb, 0xd0, 0x1c, 0x6e, 0x6f, 0x80, 0x82, 0x4a, 0x04, 0x32, 0xe9, 0xfa, 0x9e, - 0xdc, 0xc2, 0x27, 0xbe, 0x16, 0x2d, 0xfc, 0xb4, 0x94, 0x90, 0x7f, 0x28, 0x02, 0x52, 0x7f, 0xbc, - 0xd7, 0x37, 0xfc, 0xc8, 0xa8, 0xe1, 0xbf, 0x23, 0x73, 0xf7, 0xb1, 0x08, 0xe4, 0xc3, 0x41, 0x5e, - 0x5f, 0xf7, 0xce, 0xfd, 0xa5, 0x76, 0xef, 0x77, 0xa2, 0x90, 0x0b, 0x85, 0x76, 0x93, 0xf6, 0xee, - 0xfd, 0x30, 0x63, 0x34, 0x71, 0xa7, 0x6b, 0xb9, 0xd8, 0xd4, 0x0f, 0xd5, 0x36, 0xbe, 0x83, 0xdb, - 0xf3, 0x32, 0x35, 0xca, 0x97, 0x8e, 0x0e, 0x1e, 0x97, 0x6b, 0x3e, 0xdd, 0x3a, 0x21, 0x5b, 0x99, - 0xad, 0xad, 0x56, 0x37, 0xb6, 0xb7, 0x1a, 0xd5, 0xcd, 0xca, 0x6b, 0xc2, 0xba, 0x28, 0x92, 0xd1, - 0x87, 0xf6, 0x55, 0x34, 0xda, 0xdb, 0x20, 0xf5, 0x77, 0x8a, 0xd8, 0x8a, 0x21, 0xdd, 0x92, 0xa6, - 0xd0, 0x2c, 0x14, 0x36, 0xb7, 0xd4, 0x7a, 0x6d, 0xb5, 0xaa, 0x56, 0xaf, 0x5f, 0xaf, 0x56, 0x1a, - 0x75, 0x96, 0x0e, 0xf4, 0xb0, 0x1b, 0x52, 0x34, 0x28, 0xe2, 0x1f, 0x8c, 0xc1, 0xec, 0x90, 0x9e, - 0xa0, 0x12, 0x0f, 0xe4, 0x59, 0x6e, 0xe1, 0xc9, 0x49, 0x7a, 0xbf, 0x4c, 0x5c, 0xe9, 0x6d, 0xcd, - 0x76, 0x79, 0xdc, 0xff, 0x18, 0x10, 0x29, 0x99, 0x2e, 0xd9, 0xd9, 0x6d, 0x9e, 0x66, 0x65, 0xd1, - 0x7d, 0xc1, 0x87, 0xb3, 0x4c, 0xeb, 0x13, 0x80, 0xba, 0x96, 0x63, 0xb8, 0xc6, 0x1d, 0xac, 0x1a, - 0xa6, 0xc8, 0xc9, 0x92, 0x68, 0x3f, 0xae, 0x48, 0xa2, 0xa6, 0x66, 0xba, 0x1e, 0xb6, 0x89, 0x5b, - 0x5a, 0x1f, 0x36, 0xf1, 0x3c, 0x62, 0x8a, 0x24, 0x6a, 0x3c, 0xec, 0x73, 0x90, 0x6d, 0x5a, 0x3d, - 0x12, 0x02, 0x31, 0x3c, 0x62, 0x2d, 0x22, 0x4a, 0x86, 0xc1, 0x3c, 0x14, 0x1e, 0xdc, 0xfa, 0xc9, - 0xe0, 0xac, 0x92, 0x61, 0x30, 0x86, 0x72, 0x1e, 0x0a, 0x5a, 0xab, 0x65, 0x13, 0xe6, 0x82, 0x11, - 0x0b, 0xd7, 0xf3, 0x1e, 0x98, 0x22, 0x16, 0x6f, 0x42, 0x4a, 0xc8, 0x81, 0x78, 0xb0, 0x44, 0x12, - 0x6a, 0x97, 0xe5, 0xa0, 0xa2, 0x17, 0xd2, 0x4a, 0xca, 0x14, 0x95, 0xe7, 0x20, 0x6b, 0x38, 0xaa, - 0x7f, 0xb6, 0x15, 0x5d, 0x8a, 0x5e, 0x48, 0x29, 0x19, 0xc3, 0xf1, 0xce, 0x05, 0xe4, 0x4f, 0x46, - 0x21, 0x1f, 0x3e, 0xb5, 0x43, 0xab, 0x90, 0x6a, 0x5b, 0xba, 0x46, 0x55, 0x8b, 0x1d, 0x19, 0x5f, - 0x18, 0x73, 0xd0, 0xb7, 0xbc, 0xce, 0xf1, 0x15, 0x8f, 0xb2, 0xf8, 0x6f, 0x22, 0x90, 0x12, 0x60, - 0x74, 0x12, 0xe2, 0x5d, 0xcd, 0xdd, 0xa7, 0xec, 0xa6, 0xcb, 0x51, 0x29, 0xa2, 0xd0, 0x32, 0x81, - 0x3b, 0x5d, 0xcd, 0xa4, 0x2a, 0xc0, 0xe1, 0xa4, 0x4c, 0xe6, 0xb5, 0x8d, 0xb5, 0x26, 0xcd, 0x05, - 0x58, 0x9d, 0x0e, 0x36, 0x5d, 0x47, 0xcc, 0x2b, 0x87, 0x57, 0x38, 0x18, 0x3d, 0x0e, 0x33, 0xae, - 0xad, 0x19, 0xed, 0x10, 0x6e, 0x9c, 0xe2, 0x4a, 0xa2, 0xc2, 0x43, 0x5e, 0x81, 0xd3, 0x82, 0x6f, - 0x13, 0xbb, 0x9a, 0xbe, 0x8f, 0x9b, 0x3e, 0x51, 0x82, 0xe6, 0xfc, 0x4e, 0x71, 0x84, 0x55, 0x5e, - 0x2f, 0x68, 0xe5, 0xcf, 0x44, 0x61, 0x46, 0x64, 0x2f, 0x9a, 0x9e, 0xb0, 0x36, 0x00, 0x34, 0xd3, - 0xb4, 0xdc, 0xa0, 0xb8, 0x06, 0x55, 0x79, 0x80, 0x6e, 0xb9, 0xe4, 0x11, 0x29, 0x01, 0x06, 0xc5, - 0x3f, 0x88, 0x00, 0xf8, 0x55, 0x23, 0xe5, 0xb6, 0x08, 0x19, 0x7e, 0x26, 0x4b, 0x0f, 0xf6, 0x59, - 0xc2, 0x0b, 0x18, 0xe8, 0xba, 0xd1, 0xa6, 0x69, 0xc9, 0x5d, 0xdc, 0x32, 0x4c, 0x7e, 0x9e, 0xc2, - 0x0a, 0x22, 0x2d, 0x19, 0xf7, 0x8f, 0xa7, 0x14, 0x48, 0x39, 0xb8, 0xa3, 0x99, 0xae, 0xa1, 0xf3, - 0x13, 0x92, 0xab, 0xc7, 0xea, 0xfc, 0x72, 0x9d, 0x53, 0x2b, 0x1e, 0x1f, 0xf9, 0x02, 0xa4, 0x04, - 0x94, 0x38, 0x7e, 0x9b, 0x5b, 0x9b, 0x55, 0x69, 0x0a, 0x25, 0x21, 0x56, 0xaf, 0x36, 0xa4, 0x08, - 0x09, 0x3b, 0x4b, 0xeb, 0xb5, 0x52, 0x5d, 0x8a, 0x96, 0xff, 0x1a, 0xcc, 0xea, 0x56, 0xa7, 0xbf, - 0xc1, 0xb2, 0xd4, 0x97, 0xf2, 0x73, 0x6e, 0x44, 0x5e, 0x7f, 0x92, 0x23, 0xb5, 0xac, 0xb6, 0x66, - 0xb6, 0x96, 0x2d, 0xbb, 0xe5, 0x5f, 0x8b, 0x20, 0xd1, 0x81, 0x13, 0xb8, 0x1c, 0xd1, 0xdd, 0xfd, - 0xf3, 0x48, 0xe4, 0x47, 0xa2, 0xb1, 0xb5, 0xed, 0xf2, 0x4f, 0x46, 0x8b, 0x6b, 0x8c, 0x70, 0x5b, - 0x0c, 0x47, 0xc1, 0x7b, 0x6d, 0xac, 0x93, 0xce, 0xc3, 0x1f, 0x3e, 0x0e, 0x73, 0x2d, 0xab, 0x65, - 0x51, 0x4e, 0x97, 0xc8, 0x2f, 0x7e, 0xaf, 0x22, 0xed, 0x41, 0x8b, 0x63, 0x2f, 0x61, 0xac, 0x6c, - 0xc2, 0x2c, 0x47, 0x56, 0xe9, 0xf1, 0x2d, 0x4b, 0x2e, 0xa0, 0x23, 0x33, 0xdb, 0xf3, 0x3f, 0xfd, - 0x7b, 0xd4, 0x2b, 0x51, 0x66, 0x38, 0x29, 0xa9, 0x63, 0xf9, 0x87, 0x15, 0x05, 0x4e, 0x84, 0xf8, - 0x31, 0x1b, 0x81, 0xed, 0x31, 0x1c, 0xff, 0x39, 0xe7, 0x38, 0x1b, 0xe0, 0x58, 0xe7, 0xa4, 0x2b, - 0x15, 0xc8, 0x1d, 0x87, 0xd7, 0xbf, 0xe0, 0xbc, 0xb2, 0x38, 0xc8, 0x64, 0x0d, 0x0a, 0x94, 0x89, - 0xde, 0x73, 0x5c, 0xab, 0x43, 0x0d, 0xf0, 0xd1, 0x6c, 0xfe, 0xe5, 0xef, 0xb1, 0x45, 0x9b, 0x27, - 0x64, 0x15, 0x8f, 0x6a, 0x65, 0x05, 0xe8, 0x89, 0x75, 0x13, 0xeb, 0xed, 0x31, 0x1c, 0x7e, 0x8d, - 0x77, 0xc4, 0xc3, 0x5f, 0xb9, 0x05, 0x73, 0xe4, 0x37, 0xb5, 0x8f, 0xc1, 0x9e, 0x8c, 0x4f, 0x83, - 0xcf, 0xff, 0xbb, 0x0f, 0x32, 0xbb, 0x30, 0xeb, 0x31, 0x08, 0xf4, 0x29, 0x30, 0x8b, 0x2d, 0xec, - 0xba, 0xd8, 0x76, 0x54, 0xad, 0x3d, 0xac, 0x7b, 0x81, 0x3c, 0xe2, 0xfc, 0x0f, 0x7c, 0x31, 0x3c, - 0x8b, 0x6b, 0x8c, 0xb2, 0xd4, 0x6e, 0xaf, 0xec, 0xc0, 0xa9, 0x21, 0x5a, 0x31, 0x01, 0xcf, 0x1f, - 0xe4, 0x3c, 0xe7, 0x06, 0x34, 0x83, 0xb0, 0xdd, 0x06, 0x01, 0xf7, 0xe6, 0x72, 0x02, 0x9e, 0x1f, - 0xe5, 0x3c, 0x11, 0xa7, 0x15, 0x53, 0x4a, 0x38, 0xde, 0x84, 0x99, 0x3b, 0xd8, 0xde, 0xb5, 0x1c, - 0x9e, 0xbb, 0x9d, 0x80, 0xdd, 0xc7, 0x38, 0xbb, 0x02, 0x27, 0xa4, 0xc9, 0x5c, 0xc2, 0xeb, 0x05, - 0x48, 0xed, 0x69, 0x3a, 0x9e, 0x80, 0xc5, 0x7d, 0xce, 0x22, 0x49, 0xf0, 0x09, 0x69, 0x09, 0xb2, - 0x2d, 0x8b, 0x6f, 0x91, 0xe3, 0xc9, 0x7f, 0x88, 0x93, 0x67, 0x04, 0x0d, 0x67, 0xd1, 0xb5, 0xba, - 0xbd, 0x36, 0xd9, 0x3f, 0xc7, 0xb3, 0xf8, 0x61, 0xc1, 0x42, 0xd0, 0x70, 0x16, 0xc7, 0x10, 0xeb, - 0xc7, 0x05, 0x0b, 0x27, 0x20, 0xcf, 0x17, 0x21, 0x63, 0x99, 0xed, 0x43, 0xcb, 0x9c, 0xa4, 0x13, - 0x9f, 0xe0, 0x1c, 0x80, 0x93, 0x10, 0x06, 0xd7, 0x20, 0x3d, 0xe9, 0x44, 0xfc, 0xd8, 0x17, 0xc5, - 0xf2, 0x10, 0x33, 0xb0, 0x06, 0x05, 0x61, 0xa0, 0x0c, 0xcb, 0x9c, 0x80, 0xc5, 0x8f, 0x73, 0x16, - 0xf9, 0x00, 0x19, 0x1f, 0x86, 0x8b, 0x1d, 0xb7, 0x85, 0x27, 0x61, 0xf2, 0x49, 0x31, 0x0c, 0x4e, - 0xc2, 0x45, 0xb9, 0x8b, 0x4d, 0x7d, 0x7f, 0x32, 0x0e, 0x9f, 0x12, 0xa2, 0x14, 0x34, 0x84, 0x45, - 0x05, 0x72, 0x1d, 0xcd, 0x76, 0xf6, 0xb5, 0xf6, 0x44, 0xd3, 0xf1, 0x13, 0x9c, 0x47, 0xd6, 0x23, - 0xe2, 0x12, 0xe9, 0x99, 0xc7, 0x61, 0xf3, 0x93, 0x42, 0x22, 0x01, 0x32, 0xbe, 0xf4, 0x1c, 0x97, - 0x26, 0xba, 0x8f, 0xc3, 0xed, 0xef, 0x88, 0xa5, 0xc7, 0x68, 0x37, 0x82, 0x1c, 0xaf, 0x41, 0xda, - 0x31, 0xde, 0x9c, 0x88, 0xcd, 0xdf, 0x15, 0x33, 0x4d, 0x09, 0x08, 0xf1, 0x6b, 0x70, 0x7a, 0xe8, - 0x36, 0x31, 0x01, 0xb3, 0xbf, 0xc7, 0x99, 0x9d, 0x1c, 0xb2, 0x55, 0x70, 0x93, 0x70, 0x5c, 0x96, - 0x7f, 0x5f, 0x98, 0x04, 0xdc, 0xc7, 0x6b, 0x9b, 0x04, 0x2d, 0x8e, 0xb6, 0x77, 0x3c, 0xa9, 0xfd, - 0x03, 0x21, 0x35, 0x46, 0x1b, 0x92, 0x5a, 0x03, 0x4e, 0x72, 0x8e, 0xc7, 0x9b, 0xd7, 0x9f, 0x12, - 0x86, 0x95, 0x51, 0xef, 0x84, 0x67, 0xf7, 0xeb, 0xa0, 0xe8, 0x89, 0x53, 0x78, 0xc7, 0x8e, 0xda, - 0xd1, 0xba, 0x13, 0x70, 0xfe, 0x69, 0xce, 0x59, 0x58, 0x7c, 0xcf, 0xbd, 0x76, 0x36, 0xb4, 0x2e, - 0x61, 0xfe, 0x2a, 0xcc, 0x0b, 0xe6, 0x3d, 0xd3, 0xc6, 0xba, 0xd5, 0x32, 0x8d, 0x37, 0x71, 0x73, - 0x02, 0xd6, 0x3f, 0xd3, 0x37, 0x55, 0x3b, 0x01, 0x72, 0xc2, 0xb9, 0x06, 0x92, 0xe7, 0xab, 0xa8, - 0x46, 0xa7, 0x6b, 0xd9, 0xee, 0x18, 0x8e, 0x3f, 0x2b, 0x66, 0xca, 0xa3, 0xab, 0x51, 0xb2, 0x95, - 0x2a, 0xb0, 0xdb, 0x1f, 0x93, 0xaa, 0xe4, 0xa7, 0x39, 0xa3, 0x9c, 0x4f, 0xc5, 0x0d, 0x87, 0x6e, - 0x75, 0xba, 0x9a, 0x3d, 0x89, 0xfd, 0xfb, 0x87, 0xc2, 0x70, 0x70, 0x12, 0x6e, 0x38, 0x88, 0x47, - 0x47, 0x76, 0xfb, 0x09, 0x38, 0xfc, 0x9c, 0x30, 0x1c, 0x82, 0x86, 0xb3, 0x10, 0x0e, 0xc3, 0x04, - 0x2c, 0x7e, 0x5e, 0xb0, 0x10, 0x34, 0x84, 0xc5, 0xcb, 0xfe, 0x46, 0x6b, 0xe3, 0x96, 0xe1, 0xb8, - 0x36, 0x73, 0xc9, 0x8f, 0x66, 0xf5, 0x0b, 0x5f, 0x0c, 0x3b, 0x61, 0x4a, 0x80, 0x94, 0x58, 0x22, - 0x7e, 0xf4, 0x41, 0x43, 0xb6, 0xf1, 0x1d, 0xfb, 0x45, 0x61, 0x89, 0x02, 0x64, 0xa4, 0x6f, 0x01, - 0x0f, 0x91, 0x88, 0x5d, 0x27, 0x81, 0xca, 0x04, 0xec, 0xfe, 0x51, 0x5f, 0xe7, 0xea, 0x82, 0x96, - 0xf0, 0x0c, 0xf8, 0x3f, 0x3d, 0xf3, 0x36, 0x3e, 0x9c, 0x48, 0x3b, 0x7f, 0xa9, 0xcf, 0xff, 0xd9, - 0x61, 0x94, 0xcc, 0x86, 0x14, 0xfa, 0xfc, 0x29, 0x34, 0xee, 0xae, 0xdf, 0xfc, 0x37, 0x7d, 0x89, - 0x8f, 0x37, 0xec, 0x4e, 0xad, 0xac, 0x13, 0x25, 0x0f, 0x3b, 0x3d, 0xe3, 0x99, 0x7d, 0xf0, 0x4b, - 0x9e, 0x9e, 0x87, 0x7c, 0x9e, 0x95, 0xeb, 0x90, 0x0b, 0x39, 0x3c, 0xe3, 0x59, 0x7d, 0x33, 0x67, - 0x95, 0x0d, 0xfa, 0x3b, 0x2b, 0x57, 0x20, 0x4e, 0x9c, 0x97, 0xf1, 0xe4, 0xdf, 0xc2, 0xc9, 0x29, - 0xfa, 0xca, 0x7b, 0x20, 0x25, 0x9c, 0x96, 0xf1, 0xa4, 0x7f, 0x83, 0x93, 0x7a, 0x24, 0x84, 0x5c, - 0x38, 0x2c, 0xe3, 0xc9, 0xff, 0xa6, 0x20, 0x17, 0x24, 0x84, 0x7c, 0x72, 0x11, 0xfe, 0xca, 0xb7, - 0xc5, 0xf9, 0xa6, 0x23, 0x64, 0x77, 0x0d, 0x92, 0xdc, 0x53, 0x19, 0x4f, 0xfd, 0xad, 0xbc, 0x71, - 0x41, 0xb1, 0xf2, 0x1c, 0x4c, 0x4f, 0x28, 0xf0, 0xef, 0xe0, 0xa4, 0x0c, 0x7f, 0xa5, 0x02, 0x99, - 0x80, 0x77, 0x32, 0x9e, 0xfc, 0x3b, 0x39, 0x79, 0x90, 0x8a, 0x74, 0x9d, 0x7b, 0x27, 0xe3, 0x19, - 0xfc, 0x2d, 0xd1, 0x75, 0x4e, 0x41, 0xc4, 0x26, 0x1c, 0x93, 0xf1, 0xd4, 0x1f, 0x16, 0x52, 0x17, - 0x24, 0x2b, 0x2f, 0x42, 0xda, 0xdb, 0x6c, 0xc6, 0xd3, 0x7f, 0x17, 0xa7, 0xf7, 0x69, 0x88, 0x04, - 0x02, 0x9b, 0xdd, 0x78, 0x16, 0xdf, 0x2d, 0x24, 0x10, 0xa0, 0x22, 0xcb, 0xa8, 0xdf, 0x81, 0x19, - 0xcf, 0xe9, 0x7b, 0xc4, 0x32, 0xea, 0xf3, 0x5f, 0xc8, 0x6c, 0x52, 0x9b, 0x3f, 0x9e, 0xc5, 0xf7, - 0x8a, 0xd9, 0xa4, 0xf8, 0xa4, 0x1b, 0xfd, 0x1e, 0xc1, 0x78, 0x1e, 0xdf, 0x2f, 0xba, 0xd1, 0xe7, - 0x10, 0xac, 0x6c, 0x03, 0x1a, 0xf4, 0x06, 0xc6, 0xf3, 0xfb, 0x08, 0xe7, 0x37, 0x33, 0xe0, 0x0c, - 0xac, 0xbc, 0x02, 0x27, 0x87, 0x7b, 0x02, 0xe3, 0xb9, 0xfe, 0xc0, 0x97, 0xfa, 0x62, 0xb7, 0xa0, - 0x23, 0xb0, 0xd2, 0xf0, 0xb7, 0x94, 0xa0, 0x17, 0x30, 0x9e, 0xed, 0x0f, 0x7e, 0x29, 0x6c, 0xb8, - 0x83, 0x4e, 0xc0, 0x4a, 0x09, 0xc0, 0xdf, 0x80, 0xc7, 0xf3, 0xfa, 0x18, 0xe7, 0x15, 0x20, 0x22, - 0x4b, 0x83, 0xef, 0xbf, 0xe3, 0xe9, 0xef, 0x8b, 0xa5, 0xc1, 0x29, 0xc8, 0xd2, 0x10, 0x5b, 0xef, - 0x78, 0xea, 0x1f, 0x12, 0x4b, 0x43, 0x90, 0x10, 0xcd, 0x0e, 0xec, 0x6e, 0xe3, 0x39, 0x7c, 0x42, - 0x68, 0x76, 0x80, 0x6a, 0x65, 0x13, 0x66, 0x06, 0x36, 0xc4, 0xf1, 0xac, 0x7e, 0x84, 0xb3, 0x92, - 0xfa, 0xf7, 0xc3, 0xe0, 0xe6, 0xc5, 0x37, 0xc3, 0xf1, 0xdc, 0x7e, 0xb4, 0x6f, 0xf3, 0xe2, 0x7b, - 0xe1, 0xca, 0x35, 0x48, 0x99, 0xbd, 0x76, 0x9b, 0x2c, 0x1e, 0x74, 0xf4, 0xfd, 0xdc, 0xf9, 0xff, - 0xf2, 0x65, 0x2e, 0x1d, 0x41, 0xb0, 0x72, 0x05, 0xa6, 0x71, 0x67, 0x17, 0x37, 0xc7, 0x51, 0x7e, - 0xe1, 0xcb, 0xc2, 0x60, 0x12, 0xec, 0x95, 0x17, 0x01, 0x58, 0x6a, 0x84, 0x1e, 0x9c, 0x8f, 0xa1, - 0xfd, 0x83, 0x2f, 0xf3, 0x0b, 0x71, 0x3e, 0x89, 0xcf, 0x80, 0x5d, 0xaf, 0x3b, 0x9a, 0xc1, 0x17, - 0xc3, 0x0c, 0xe8, 0x8c, 0xbc, 0x00, 0xc9, 0x37, 0x1c, 0xcb, 0x74, 0xb5, 0xd6, 0x38, 0xea, 0x3f, - 0xe4, 0xd4, 0x02, 0x9f, 0x08, 0xac, 0x63, 0xd9, 0xd8, 0xd5, 0x5a, 0xce, 0x38, 0xda, 0xff, 0xca, - 0x69, 0x3d, 0x02, 0x42, 0xac, 0x6b, 0x8e, 0x3b, 0xc9, 0xb8, 0xff, 0x9b, 0x20, 0x16, 0x04, 0xa4, - 0xd3, 0xe4, 0xf7, 0x6d, 0x7c, 0x38, 0x8e, 0xf6, 0x8f, 0x44, 0xa7, 0x39, 0xfe, 0xca, 0x7b, 0x20, - 0x4d, 0x7e, 0xb2, 0x5b, 0xae, 0x63, 0x88, 0xff, 0x98, 0x13, 0xfb, 0x14, 0xa4, 0x65, 0xc7, 0x6d, - 0xba, 0xc6, 0x78, 0x61, 0xff, 0x09, 0x9f, 0x69, 0x81, 0xbf, 0x52, 0x82, 0x8c, 0xe3, 0x36, 0x9b, - 0x3d, 0xee, 0x9f, 0x8e, 0x21, 0xff, 0xd3, 0x2f, 0x7b, 0x29, 0x0b, 0x8f, 0x86, 0xcc, 0xf6, 0xdd, - 0xdb, 0x6e, 0xd7, 0xa2, 0xe7, 0x2d, 0xe3, 0x38, 0x7c, 0x89, 0x73, 0x08, 0x90, 0xac, 0x54, 0x20, - 0x4b, 0xc6, 0x62, 0xe3, 0x2e, 0xa6, 0x87, 0x63, 0x63, 0x58, 0xfc, 0x19, 0x17, 0x40, 0x88, 0xa8, - 0xfc, 0x8d, 0xbf, 0xf6, 0xd9, 0x85, 0xc8, 0x67, 0x3e, 0xbb, 0x10, 0xf9, 0x9d, 0xcf, 0x2e, 0x44, - 0x3e, 0xfc, 0xb9, 0x85, 0xa9, 0xcf, 0x7c, 0x6e, 0x61, 0xea, 0xb7, 0x3e, 0xb7, 0x30, 0x35, 0x3c, - 0x4b, 0x0c, 0x6b, 0xd6, 0x9a, 0xc5, 0xf2, 0xc3, 0xaf, 0x3f, 0xd2, 0x32, 0xdc, 0xfd, 0xde, 0xee, - 0xb2, 0x6e, 0x75, 0x2e, 0xe9, 0x96, 0xd3, 0xb1, 0x9c, 0x4b, 0xe1, 0xbc, 0x2e, 0xfd, 0x05, 0xff, - 0x2b, 0x42, 0x62, 0xe6, 0x70, 0x3a, 0x57, 0x33, 0x0f, 0x47, 0x7d, 0x4c, 0x77, 0x15, 0x62, 0x25, - 0xf3, 0x10, 0x9d, 0x66, 0x06, 0x4e, 0xed, 0xd9, 0x6d, 0x7e, 0xd5, 0x32, 0x49, 0xca, 0x3b, 0x76, - 0x1b, 0xcd, 0xf9, 0xf7, 0xa1, 0x23, 0x17, 0xb2, 0xfc, 0x92, 0x73, 0xf9, 0x3b, 0x23, 0xc7, 0x1b, - 0x49, 0xaa, 0x64, 0x1e, 0xd2, 0x81, 0x6c, 0x47, 0x5e, 0x7f, 0x62, 0x6c, 0x9e, 0xfb, 0xb6, 0x69, - 0xdd, 0x35, 0x49, 0xb7, 0xbb, 0xbb, 0x22, 0xc7, 0xbd, 0xd0, 0x9f, 0xe3, 0x7e, 0x05, 0xb7, 0xdb, - 0x2f, 0x11, 0xbc, 0x06, 0x21, 0xd9, 0x4d, 0xb0, 0x5b, 0xfd, 0xf0, 0x3d, 0x51, 0x58, 0x18, 0x48, - 0x67, 0x73, 0x25, 0x18, 0x25, 0x84, 0x15, 0x48, 0xad, 0x0a, 0xdd, 0x9a, 0x87, 0xa4, 0x83, 0x75, - 0xcb, 0x6c, 0x3a, 0x54, 0x10, 0x31, 0x45, 0x14, 0x89, 0x20, 0x4c, 0xcd, 0xb4, 0x1c, 0x7e, 0x59, - 0x99, 0x15, 0xca, 0x1f, 0x3d, 0xa6, 0x20, 0x72, 0xa2, 0x25, 0x21, 0x8d, 0xa7, 0x27, 0x94, 0x86, - 0x18, 0x44, 0x28, 0xf3, 0x3f, 0xa9, 0x54, 0xbe, 0x3f, 0x0a, 0x8b, 0xfd, 0x52, 0x21, 0x2b, 0xcb, - 0x71, 0xb5, 0x4e, 0x77, 0x94, 0x58, 0xae, 0x41, 0xba, 0x21, 0x70, 0x8e, 0x2d, 0x97, 0xfb, 0xc7, - 0x94, 0x4b, 0xde, 0x6b, 0x4a, 0x08, 0xe6, 0xf2, 0x84, 0x82, 0xf1, 0xc6, 0xf1, 0x40, 0x92, 0xf9, - 0x9f, 0x09, 0x38, 0xcd, 0x96, 0x93, 0xca, 0x96, 0x12, 0x2b, 0x70, 0x99, 0x64, 0x83, 0x55, 0xe3, - 0xcf, 0x49, 0xe4, 0x97, 0x60, 0xb6, 0x46, 0xac, 0x05, 0x89, 0x82, 0xfc, 0x13, 0x9e, 0xa1, 0xf7, - 0xb9, 0x97, 0x42, 0x0e, 0x3f, 0x3f, 0xdf, 0x0a, 0x82, 0xe4, 0x6f, 0x8a, 0x80, 0x54, 0xd7, 0xb5, - 0xb6, 0x66, 0x7f, 0xa5, 0xac, 0xd0, 0x73, 0x00, 0xec, 0xba, 0x87, 0xf7, 0xe1, 0x5e, 0xfe, 0xf2, - 0xfc, 0x72, 0x70, 0x70, 0xcb, 0xac, 0x25, 0x7a, 0x83, 0x2a, 0x4d, 0x71, 0xc9, 0xcf, 0x8b, 0xaf, - 0x02, 0xf8, 0x15, 0xe8, 0x0c, 0x9c, 0xaa, 0x57, 0x4a, 0xeb, 0x25, 0x45, 0x5c, 0x12, 0xaa, 0x6f, - 0x57, 0x2b, 0xb5, 0xeb, 0xb5, 0xea, 0xaa, 0x34, 0x85, 0x4e, 0x02, 0x0a, 0x56, 0x7a, 0x97, 0x9a, - 0x4e, 0xc0, 0x4c, 0x10, 0xce, 0xbe, 0x52, 0x89, 0x12, 0x4f, 0xd1, 0xe8, 0x74, 0xdb, 0x98, 0x9e, - 0x3c, 0xaa, 0x86, 0x90, 0xda, 0x78, 0x27, 0xe4, 0xd7, 0xff, 0x3d, 0xfb, 0x72, 0x61, 0xd6, 0x27, - 0xf7, 0x64, 0xbe, 0xb2, 0x0e, 0x33, 0x9a, 0xae, 0xe3, 0x6e, 0x88, 0xe5, 0x18, 0x53, 0x4d, 0x18, - 0xd2, 0xb3, 0x54, 0x4e, 0xe9, 0x73, 0x7b, 0x0e, 0x12, 0x0e, 0x1d, 0xfd, 0x38, 0x16, 0xbf, 0xc1, - 0x59, 0x70, 0xf4, 0x15, 0x13, 0x66, 0x88, 0xe7, 0xa7, 0xd9, 0x38, 0xd0, 0x8d, 0xa3, 0xf3, 0x0c, - 0xff, 0xf8, 0x67, 0x9f, 0xa2, 0x27, 0xab, 0xe7, 0xc2, 0xd3, 0x32, 0x44, 0x9d, 0x14, 0x89, 0xf3, - 0xf6, 0x3b, 0x8a, 0x21, 0x2f, 0xda, 0xe3, 0x1d, 0x3e, 0xba, 0xb1, 0x5f, 0xe6, 0x8d, 0x2d, 0x0c, - 0xd3, 0x81, 0x40, 0x4b, 0x39, 0xce, 0x95, 0x55, 0x94, 0xab, 0xa3, 0xd6, 0xf4, 0xeb, 0x8f, 0x0f, - 0xee, 0x4e, 0xec, 0xbf, 0x27, 0x29, 0xe7, 0x6b, 0xc1, 0x66, 0xbc, 0xb5, 0xf7, 0xd1, 0x38, 0xcc, - 0x68, 0x1d, 0xc3, 0xb4, 0x2e, 0xd1, 0x7f, 0xf9, 0x9a, 0x9b, 0xa6, 0x85, 0x09, 0x0e, 0x25, 0xaf, - 0xb2, 0xa5, 0x30, 0x5e, 0x63, 0xfe, 0xf8, 0xdb, 0x7f, 0x7c, 0xda, 0x5f, 0x2e, 0x2b, 0x1b, 0x20, - 0x89, 0x4b, 0xbc, 0xd8, 0xd4, 0xad, 0xe6, 0x44, 0x59, 0x8a, 0x3f, 0x11, 0x3c, 0x44, 0x7e, 0xab, - 0xca, 0x49, 0x57, 0xde, 0x0d, 0x29, 0x8f, 0xcd, 0x38, 0xcf, 0x44, 0x30, 0xf1, 0x28, 0x88, 0x5f, - 0xc2, 0x56, 0xe6, 0x24, 0x5e, 0xe8, 0x97, 0x04, 0x3d, 0x5b, 0xa1, 0x9b, 0x64, 0x34, 0x6b, 0x90, - 0x6f, 0x5a, 0xa6, 0xab, 0x5a, 0x1d, 0xc3, 0xc5, 0x9d, 0xae, 0x3b, 0xd6, 0xaf, 0xfb, 0x33, 0xc6, - 0x24, 0xa5, 0xe4, 0x08, 0xdd, 0x96, 0x20, 0x23, 0x3d, 0x61, 0xdf, 0xe9, 0x4d, 0xd2, 0x93, 0xff, - 0xee, 0xf5, 0x84, 0xd2, 0x90, 0x9e, 0x3c, 0x90, 0x76, 0x38, 0xcd, 0xdb, 0xdc, 0x98, 0xbb, 0x07, - 0x4c, 0x0b, 0x3c, 0xed, 0xf8, 0x64, 0x0c, 0x16, 0x38, 0xf2, 0xae, 0xe6, 0xe0, 0x4b, 0x77, 0x9e, - 0xde, 0xc5, 0xae, 0xf6, 0xf4, 0x25, 0xdd, 0x32, 0xc4, 0x4e, 0x3e, 0xcb, 0x8d, 0x35, 0xa9, 0x5f, - 0xe6, 0xf5, 0xc5, 0xa1, 0xc7, 0xdd, 0xc5, 0xd1, 0x46, 0xbe, 0x38, 0xa8, 0x83, 0x72, 0x1b, 0xe2, - 0x15, 0xcb, 0x30, 0xc9, 0xde, 0xd6, 0xc4, 0xa6, 0xd5, 0xe1, 0xe6, 0x96, 0x15, 0xd0, 0x0d, 0x48, - 0x68, 0x1d, 0xab, 0x67, 0xba, 0xcc, 0xd4, 0x96, 0x9f, 0xfa, 0xb5, 0xb7, 0x16, 0xa7, 0xfe, 0xe3, - 0x5b, 0x8b, 0x27, 0x18, 0x5b, 0xa7, 0x79, 0x7b, 0xd9, 0xb0, 0x2e, 0x75, 0x34, 0x77, 0x9f, 0x2c, - 0xdf, 0xdf, 0xfc, 0xf4, 0x93, 0xc0, 0xdb, 0xab, 0x99, 0xee, 0xa7, 0x7e, 0xff, 0xa7, 0x2e, 0x46, - 0x14, 0x4e, 0xbf, 0x12, 0xff, 0xfc, 0xc7, 0x17, 0x23, 0x72, 0x17, 0x92, 0xab, 0x58, 0x3f, 0xa2, - 0xc1, 0x5a, 0x5f, 0x83, 0x4f, 0xf3, 0x06, 0xcf, 0x0c, 0x36, 0xc8, 0x2e, 0xec, 0xad, 0x62, 0x3d, - 0xd0, 0xec, 0x2a, 0xd6, 0xc3, 0x2d, 0x96, 0x57, 0x7f, 0xeb, 0x77, 0x17, 0xa6, 0x3e, 0xf0, 0xd9, - 0x85, 0xa9, 0x91, 0x53, 0x26, 0x8f, 0x9f, 0x32, 0x6f, 0xa6, 0x7e, 0x3c, 0x0e, 0x67, 0xe9, 0x17, - 0xa1, 0x76, 0xc7, 0x30, 0xdd, 0x4b, 0xba, 0x7d, 0xd8, 0x75, 0x2d, 0xb2, 0x70, 0xad, 0x3d, 0x3e, - 0x51, 0x33, 0x7e, 0xf5, 0x32, 0xab, 0x1e, 0x3e, 0x4d, 0xf2, 0x1e, 0x4c, 0x6f, 0x13, 0x3a, 0x22, - 0x08, 0xd7, 0x72, 0xb5, 0x36, 0xf7, 0x36, 0x58, 0x81, 0x40, 0xd9, 0x57, 0xa4, 0x51, 0x06, 0x35, - 0xc4, 0x07, 0xa4, 0x6d, 0xac, 0xed, 0xb1, 0x8f, 0x71, 0x62, 0xd4, 0x4d, 0x4d, 0x11, 0x00, 0xfd, - 0xee, 0x66, 0x0e, 0xa6, 0xb5, 0x1e, 0xbb, 0x30, 0x13, 0x23, 0xfe, 0x2b, 0x2d, 0xc8, 0x2f, 0x41, - 0x92, 0x9f, 0x9b, 0x23, 0x09, 0x62, 0xb7, 0xf1, 0x21, 0x6d, 0x27, 0xab, 0x90, 0x9f, 0x68, 0x19, - 0xa6, 0x69, 0xe7, 0xf9, 0x57, 0x86, 0xf3, 0xcb, 0x03, 0xbd, 0x5f, 0xa6, 0x9d, 0x54, 0x18, 0x9a, - 0x7c, 0x13, 0x52, 0xab, 0x16, 0xd1, 0x9e, 0x30, 0xb7, 0x34, 0xe3, 0x46, 0xfb, 0xdc, 0xed, 0xf1, - 0xb9, 0x53, 0x58, 0x01, 0x9d, 0x84, 0x04, 0xfb, 0x38, 0x8b, 0x5f, 0xfa, 0xe1, 0x25, 0xb9, 0x02, - 0x49, 0xca, 0x7b, 0xab, 0x4b, 0xb6, 0x7a, 0xef, 0xbe, 0x7a, 0x9a, 0x7f, 0xaa, 0xcb, 0xd9, 0x47, - 0xfd, 0xce, 0x22, 0x88, 0x37, 0x35, 0x57, 0xe3, 0xe3, 0xa6, 0xbf, 0xe5, 0xf7, 0x42, 0x8a, 0x33, - 0x71, 0xd0, 0x65, 0x88, 0x59, 0x5d, 0x87, 0x5f, 0xdb, 0x29, 0x8e, 0x1a, 0xca, 0x56, 0xb7, 0x1c, - 0x27, 0x4a, 0xa5, 0x10, 0xe4, 0xf2, 0xe6, 0x48, 0xb5, 0x78, 0x36, 0xa4, 0x16, 0x1d, 0xec, 0xee, - 0xee, 0xb9, 0xfe, 0x0f, 0x36, 0x9d, 0x03, 0xaa, 0xe0, 0x29, 0xca, 0xfd, 0x28, 0x2c, 0x04, 0x6a, - 0xef, 0x60, 0xdb, 0x31, 0x2c, 0x93, 0x69, 0x13, 0xd7, 0x14, 0x14, 0xe8, 0x20, 0xaf, 0x1f, 0xa1, - 0x2a, 0xef, 0x81, 0x58, 0xa9, 0xdb, 0x45, 0x45, 0x48, 0xd1, 0xb2, 0x6e, 0x31, 0x5d, 0x89, 0x2b, - 0x5e, 0x99, 0xd4, 0x39, 0xd6, 0x9e, 0x7b, 0x57, 0xb3, 0xbd, 0x6f, 0x97, 0x45, 0x59, 0x7e, 0x01, - 0xd2, 0x15, 0xcb, 0x74, 0xb0, 0xe9, 0xf4, 0xa8, 0x0f, 0xbb, 0xdb, 0xb6, 0xf4, 0xdb, 0x9c, 0x03, - 0x2b, 0x10, 0x61, 0x6b, 0xdd, 0x2e, 0xa5, 0x8c, 0x2b, 0xe4, 0x27, 0x5f, 0x3d, 0x5b, 0x23, 0xc5, - 0x73, 0xe5, 0x78, 0xe2, 0xe1, 0x03, 0xf4, 0x9d, 0xd1, 0x08, 0x3c, 0x34, 0xb8, 0x90, 0x6e, 0xe3, - 0x43, 0xe7, 0xb8, 0xeb, 0xe8, 0x55, 0x48, 0x6f, 0xd3, 0x67, 0x45, 0x5e, 0xc2, 0x87, 0xa8, 0x08, - 0x49, 0xdc, 0xbc, 0x7c, 0xe5, 0xca, 0xd3, 0x2f, 0x30, 0x2d, 0xbf, 0x31, 0xa5, 0x08, 0x00, 0x5a, - 0x80, 0xb4, 0x83, 0xf5, 0xee, 0xe5, 0x2b, 0x57, 0x6f, 0x3f, 0xcd, 0xd4, 0xea, 0xc6, 0x94, 0xe2, - 0x83, 0x56, 0x52, 0x64, 0xc4, 0x9f, 0xff, 0xc4, 0x62, 0xa4, 0x3c, 0x0d, 0x31, 0xa7, 0xd7, 0xf9, - 0xaa, 0xe9, 0xc6, 0x1f, 0x25, 0x60, 0x29, 0x50, 0xcb, 0x36, 0x85, 0x3b, 0x5a, 0xdb, 0x68, 0x6a, - 0xfe, 0x63, 0x30, 0x52, 0x60, 0xfc, 0x14, 0x63, 0x84, 0xb5, 0x3f, 0x52, 0x8a, 0xf2, 0xcf, 0x44, - 0x20, 0x7b, 0x4b, 0x70, 0xae, 0x63, 0x17, 0x5d, 0x03, 0xf0, 0x5a, 0x12, 0x4b, 0xe5, 0xcc, 0x72, - 0x7f, 0x5b, 0xcb, 0x1e, 0x8d, 0x12, 0x40, 0x47, 0xcf, 0x51, 0x05, 0xec, 0x5a, 0x0e, 0xff, 0x8e, - 0x75, 0x0c, 0xa9, 0x87, 0x8c, 0x9e, 0x00, 0x44, 0xad, 0x9a, 0x7a, 0xc7, 0x72, 0x0d, 0xb3, 0xa5, - 0x76, 0xad, 0xbb, 0xfc, 0x75, 0x80, 0x98, 0x22, 0xd1, 0x9a, 0x5b, 0xb4, 0x62, 0x9b, 0xc0, 0x49, - 0xa7, 0xd3, 0x1e, 0x17, 0x12, 0x8e, 0x69, 0xcd, 0xa6, 0x8d, 0x1d, 0x87, 0x1b, 0x2e, 0x51, 0x44, - 0xd7, 0x20, 0xd9, 0xed, 0xed, 0xaa, 0xc2, 0x4a, 0x64, 0x2e, 0x3f, 0x34, 0x6c, 0xcd, 0x0b, 0xdd, - 0xe0, 0xab, 0x3e, 0xd1, 0xed, 0xed, 0x12, 0x4d, 0x39, 0x07, 0xd9, 0x21, 0x9d, 0xc9, 0xdc, 0xf1, - 0xfb, 0x41, 0x5f, 0xb2, 0xe1, 0x23, 0x50, 0xbb, 0xb6, 0x61, 0xd9, 0x86, 0x7b, 0x48, 0xaf, 0xdb, - 0xc5, 0x14, 0x49, 0x54, 0x6c, 0x73, 0xb8, 0x7c, 0x1b, 0x0a, 0x75, 0xea, 0xa6, 0xfb, 0x3d, 0xbf, - 0xe2, 0xf7, 0x2f, 0x32, 0xbe, 0x7f, 0x23, 0x7b, 0x16, 0x1d, 0xe8, 0xd9, 0xc5, 0xff, 0x10, 0x81, - 0x4c, 0x99, 0x2c, 0xdc, 0xda, 0xea, 0xf5, 0xb6, 0xd6, 0x42, 0x4f, 0xc3, 0x89, 0xf2, 0xfa, 0x56, - 0xe5, 0x25, 0xb5, 0xb6, 0xaa, 0x5e, 0x5f, 0x2f, 0xad, 0xf9, 0xf7, 0x7b, 0x8b, 0x27, 0xef, 0xdd, - 0x5f, 0x42, 0x01, 0xdc, 0x1d, 0x93, 0xc6, 0x92, 0xe8, 0x12, 0xcc, 0x85, 0x49, 0x4a, 0xe5, 0x7a, - 0x75, 0xb3, 0x21, 0x45, 0x8a, 0x27, 0xee, 0xdd, 0x5f, 0x9a, 0x09, 0x50, 0x94, 0x76, 0x1d, 0x6c, - 0xba, 0x83, 0x04, 0x95, 0xad, 0x8d, 0x8d, 0x5a, 0x43, 0x8a, 0x0e, 0x10, 0x54, 0xac, 0x4e, 0xc7, - 0x70, 0xd1, 0x63, 0x30, 0x13, 0x26, 0xd8, 0xac, 0xad, 0x4b, 0xb1, 0x22, 0xba, 0x77, 0x7f, 0x29, - 0x1f, 0xc0, 0xde, 0x34, 0xda, 0xc5, 0xd4, 0x87, 0x7e, 0x74, 0x61, 0xea, 0x53, 0x7f, 0x7b, 0x21, - 0x52, 0xde, 0x18, 0xb9, 0xe6, 0x9e, 0x39, 0xde, 0x9a, 0x0b, 0xef, 0xdb, 0x5f, 0x7e, 0x28, 0x64, - 0x6e, 0xb8, 0x1f, 0x16, 0x30, 0xc6, 0x93, 0x2e, 0xb7, 0x71, 0xb9, 0x85, 0xe2, 0xd1, 0xee, 0x41, - 0x71, 0xcc, 0xa6, 0x50, 0x1c, 0x6b, 0x18, 0xe4, 0x17, 0x20, 0xb7, 0xad, 0xd9, 0x6e, 0x1d, 0xbb, - 0x37, 0xb0, 0xd6, 0xc4, 0x76, 0xd8, 0x7f, 0xc8, 0x09, 0xff, 0x01, 0x41, 0x9c, 0x3a, 0x09, 0x6c, - 0xff, 0xa4, 0xbf, 0xe5, 0x7d, 0x88, 0xd3, 0x9b, 0xc4, 0x9e, 0x6f, 0xc1, 0x29, 0x98, 0x6f, 0x41, - 0x76, 0x86, 0x43, 0x17, 0x3b, 0x22, 0xfd, 0x45, 0x0b, 0xe8, 0x59, 0xe1, 0x21, 0xc4, 0x8e, 0xf6, - 0x10, 0xf8, 0xf2, 0xe2, 0x7e, 0x42, 0x1b, 0x92, 0x7c, 0x8a, 0xbd, 0x8e, 0x44, 0xfc, 0x8e, 0xa0, - 0x0d, 0x28, 0x74, 0x35, 0xdb, 0xa5, 0x5f, 0x16, 0xee, 0xd3, 0x51, 0xf0, 0x15, 0xbc, 0x38, 0x68, - 0x4f, 0x42, 0x83, 0xe5, 0xad, 0xe4, 0xba, 0x41, 0xa0, 0xfc, 0x9f, 0xe3, 0x90, 0xe0, 0xc2, 0x78, - 0x0f, 0x24, 0xb9, 0x58, 0xf9, 0x9a, 0x3b, 0xbb, 0x3c, 0xb8, 0xcd, 0x2e, 0x7b, 0xdb, 0x21, 0xe7, - 0x27, 0x68, 0xd0, 0xa3, 0x90, 0xd2, 0xf7, 0x35, 0xc3, 0x54, 0x8d, 0x26, 0x77, 0x40, 0x33, 0x9f, - 0x7d, 0x6b, 0x31, 0x59, 0x21, 0xb0, 0xda, 0xaa, 0x92, 0xa4, 0x95, 0xb5, 0x26, 0xf1, 0x69, 0xf6, - 0xb1, 0xd1, 0xda, 0x77, 0xb9, 0xdd, 0xe0, 0x25, 0xf4, 0x3c, 0xc4, 0x89, 0x42, 0xf0, 0xef, 0xce, - 0x8b, 0x03, 0x91, 0x85, 0x97, 0xfa, 0x29, 0xa7, 0x48, 0xc3, 0x1f, 0xfe, 0x4f, 0x8b, 0x11, 0x85, - 0x52, 0xa0, 0x0a, 0xe4, 0xda, 0x9a, 0xe3, 0xaa, 0x74, 0x3f, 0x26, 0xcd, 0x4f, 0x53, 0x16, 0xa7, - 0x07, 0x05, 0xc2, 0x05, 0xcb, 0xbb, 0x9e, 0x21, 0x54, 0x0c, 0xd4, 0x44, 0x17, 0x40, 0xa2, 0x4c, - 0x74, 0xba, 0x02, 0x99, 0x97, 0x98, 0xa0, 0x72, 0xcf, 0x13, 0x38, 0x5b, 0x98, 0xd4, 0x57, 0x3c, - 0x03, 0x69, 0xfa, 0xa5, 0x2b, 0x45, 0x61, 0xd7, 0xd7, 0x53, 0x04, 0x40, 0x2b, 0xcf, 0x43, 0xc1, - 0xb7, 0xfa, 0x0c, 0x25, 0xc5, 0xb8, 0xf8, 0x60, 0x8a, 0xf8, 0x14, 0xcc, 0x99, 0xf8, 0x80, 0x5e, - 0xa8, 0x0f, 0x61, 0xa7, 0x29, 0x36, 0x22, 0x75, 0xb7, 0xc2, 0x14, 0x8f, 0x40, 0x5e, 0x17, 0xc2, - 0x67, 0xb8, 0x40, 0x71, 0x73, 0x1e, 0x94, 0xa2, 0x9d, 0x86, 0x94, 0xd6, 0xed, 0x32, 0x84, 0x0c, - 0xb7, 0xfa, 0xdd, 0x2e, 0xad, 0xba, 0x08, 0x33, 0x74, 0x8c, 0x36, 0x76, 0x7a, 0x6d, 0x97, 0x33, - 0xc9, 0x52, 0x9c, 0x02, 0xa9, 0x50, 0x18, 0x9c, 0xe2, 0x3e, 0x0c, 0x39, 0x7c, 0xc7, 0x68, 0x62, - 0x53, 0xc7, 0x0c, 0x2f, 0x47, 0xf1, 0xb2, 0x02, 0x48, 0x91, 0x1e, 0x03, 0xcf, 0x9a, 0xab, 0x62, - 0xa7, 0xc9, 0x33, 0x7e, 0x02, 0x5e, 0x62, 0x60, 0x79, 0x1e, 0xe2, 0xab, 0x9a, 0xab, 0x11, 0x77, - 0xc9, 0x3d, 0x60, 0xdb, 0x67, 0x56, 0x21, 0x3f, 0xe5, 0x9f, 0x8f, 0x41, 0xfc, 0x96, 0xe5, 0x62, - 0xf4, 0x4c, 0xc0, 0x95, 0xcd, 0x0f, 0xd3, 0xe7, 0xba, 0xd1, 0x32, 0x71, 0x73, 0xc3, 0x69, 0x05, - 0x9e, 0xa5, 0xf1, 0xd5, 0x29, 0x1a, 0x52, 0xa7, 0x39, 0x98, 0xb6, 0xad, 0x9e, 0xd9, 0x14, 0x17, - 0xbf, 0x69, 0x01, 0x55, 0x21, 0xe5, 0x69, 0x49, 0x7c, 0x9c, 0x96, 0x14, 0x88, 0x96, 0x10, 0x1d, - 0xe6, 0x00, 0x25, 0xb9, 0xcb, 0x95, 0xa5, 0x0c, 0x69, 0xcf, 0x78, 0x71, 0x6d, 0x9b, 0x4c, 0x61, - 0x7d, 0x32, 0xb2, 0x45, 0x7a, 0x73, 0xef, 0x09, 0x8f, 0x69, 0x9c, 0xe4, 0x55, 0x70, 0xe9, 0x85, - 0xd4, 0x8a, 0x3f, 0x91, 0x93, 0xa4, 0xe3, 0xf2, 0xd5, 0x8a, 0x3d, 0x93, 0xf3, 0x10, 0xa4, 0x1d, - 0xa3, 0x65, 0x6a, 0x6e, 0xcf, 0xc6, 0x5c, 0xf3, 0x7c, 0x00, 0xa9, 0xf5, 0x3f, 0x82, 0x60, 0x9a, - 0x16, 0x78, 0xb9, 0xeb, 0x12, 0xcc, 0xfa, 0x6f, 0x66, 0xf9, 0x5c, 0x98, 0x96, 0x21, 0xaf, 0xaa, - 0x2e, 0x6a, 0xe4, 0x5f, 0x89, 0x40, 0x82, 0xef, 0x58, 0xfe, 0x34, 0x44, 0x86, 0x4f, 0x43, 0x74, - 0xd4, 0x34, 0xc4, 0x1e, 0x7c, 0x1a, 0x4a, 0x00, 0x5e, 0x37, 0x1d, 0xfe, 0x10, 0xca, 0x10, 0xb7, - 0x8a, 0x75, 0xb1, 0x6e, 0xb4, 0xf8, 0xba, 0x0f, 0x10, 0xc9, 0xbf, 0x1d, 0x21, 0x1e, 0x3e, 0xaf, - 0x47, 0x25, 0xc8, 0x89, 0x7e, 0xa9, 0x7b, 0x6d, 0xad, 0xc5, 0x55, 0xf1, 0xec, 0xc8, 0xce, 0x91, - 0x5d, 0x58, 0xc9, 0xf0, 0xfe, 0x50, 0x7f, 0x62, 0xe8, 0xb4, 0x46, 0x47, 0x4c, 0x6b, 0x48, 0x8f, - 0x62, 0x0f, 0xa6, 0x47, 0xa1, 0x19, 0x8f, 0xf7, 0xcd, 0xb8, 0xfc, 0xbb, 0x11, 0xfe, 0x62, 0x57, - 0x93, 0x7d, 0xc1, 0xf1, 0x97, 0x35, 0x55, 0xaf, 0x73, 0xdd, 0x6a, 0xe2, 0xa6, 0x3a, 0x30, 0x67, - 0x0f, 0x0f, 0x72, 0x0c, 0xf7, 0xd9, 0x9f, 0x3b, 0x24, 0xb8, 0xd4, 0xfd, 0x39, 0xfc, 0x74, 0x14, - 0x66, 0x06, 0xf0, 0xff, 0xea, 0xcd, 0x65, 0x78, 0xf5, 0x4e, 0x4f, 0xb8, 0x7a, 0x13, 0x23, 0x57, - 0xef, 0xcf, 0x46, 0x69, 0x02, 0xa0, 0x6b, 0x39, 0x5a, 0xfb, 0x9d, 0xb0, 0xbd, 0x67, 0x20, 0xdd, - 0xb5, 0xda, 0x2a, 0xab, 0x61, 0x9f, 0xde, 0xa4, 0xba, 0x56, 0x5b, 0x19, 0x50, 0xb3, 0xe9, 0xb7, - 0xc9, 0x30, 0x27, 0xde, 0x86, 0x49, 0x48, 0xf6, 0x2f, 0x28, 0x1b, 0xb2, 0x4c, 0x14, 0xdc, 0x6b, - 0x7a, 0x8a, 0xc8, 0x80, 0xba, 0x61, 0x91, 0x41, 0x2f, 0x8f, 0x75, 0x9b, 0x61, 0x2a, 0x1c, 0x8f, - 0x50, 0x30, 0x27, 0x63, 0x58, 0xe6, 0x28, 0x68, 0xb1, 0x14, 0x8e, 0x27, 0x7f, 0x5f, 0x04, 0x60, - 0x9d, 0x48, 0x96, 0x8e, 0x97, 0xf8, 0x3b, 0x0e, 0xed, 0x82, 0x1a, 0x6a, 0x79, 0x61, 0xd4, 0xa4, - 0xf1, 0xf6, 0xb3, 0x4e, 0xb0, 0xdf, 0x15, 0xc8, 0xf9, 0xba, 0xed, 0x60, 0xd1, 0x99, 0x85, 0x23, - 0xa2, 0xd2, 0x3a, 0x76, 0x95, 0xec, 0x9d, 0x40, 0x49, 0xfe, 0xa7, 0x11, 0x48, 0xd3, 0x3e, 0x6d, - 0x60, 0x57, 0x0b, 0xcd, 0x61, 0xe4, 0xc1, 0xe7, 0xf0, 0x2c, 0x00, 0x63, 0xe3, 0x18, 0x6f, 0x62, - 0xae, 0x59, 0x69, 0x0a, 0xa9, 0x1b, 0x6f, 0x62, 0x74, 0xd5, 0x13, 0x78, 0xec, 0x68, 0x81, 0x8b, - 0xa8, 0x95, 0x8b, 0xfd, 0x14, 0x24, 0xe9, 0x9b, 0x92, 0x07, 0x0e, 0x0f, 0x44, 0x13, 0x66, 0xaf, - 0xd3, 0x38, 0x70, 0xe4, 0x37, 0x20, 0xd9, 0x38, 0x60, 0xf9, 0xc4, 0x33, 0x90, 0xb6, 0x2d, 0x8b, - 0x7b, 0x7f, 0xcc, 0xeb, 0x4e, 0x11, 0x00, 0x75, 0x76, 0x44, 0x0e, 0x2d, 0xea, 0xe7, 0xd0, 0xfc, - 0x24, 0x60, 0x6c, 0xa2, 0x24, 0x20, 0x89, 0x3e, 0x73, 0xa1, 0x95, 0x84, 0x9e, 0x80, 0x53, 0xf5, - 0xda, 0xda, 0x66, 0x75, 0x55, 0xdd, 0xa8, 0xaf, 0xf5, 0x7d, 0x56, 0x5f, 0x2c, 0xdc, 0xbb, 0xbf, - 0x94, 0xe1, 0x61, 0xe7, 0x28, 0xec, 0x6d, 0xa5, 0x7a, 0x6b, 0xab, 0x51, 0x95, 0x22, 0x0c, 0x7b, - 0xdb, 0xc6, 0x77, 0x2c, 0x97, 0x3d, 0xda, 0xfa, 0x14, 0x9c, 0x1e, 0x82, 0xed, 0x05, 0x9f, 0x33, - 0xf7, 0xee, 0x2f, 0xe5, 0xb6, 0x6d, 0xcc, 0xb4, 0x8c, 0x52, 0x2c, 0xc3, 0xfc, 0x20, 0xc5, 0xd6, - 0xf6, 0x56, 0xbd, 0xb4, 0x2e, 0x2d, 0x15, 0xa5, 0x7b, 0xf7, 0x97, 0xb2, 0xc2, 0x64, 0x10, 0xfc, - 0xaf, 0x7e, 0xf4, 0xf9, 0xad, 0xa9, 0x50, 0xd6, 0x98, 0xc5, 0x75, 0x5d, 0xcd, 0xd6, 0x3a, 0xc7, - 0x0d, 0x3f, 0xc7, 0x1c, 0xf8, 0xcb, 0x3f, 0x13, 0x85, 0x82, 0x17, 0xdc, 0x6c, 0xd3, 0x16, 0xd0, - 0x33, 0xc1, 0x8c, 0x5f, 0x66, 0xe4, 0xde, 0xc1, 0xb0, 0x45, 0x42, 0xf0, 0xdd, 0x90, 0x12, 0x4e, - 0x32, 0x5f, 0x54, 0x4b, 0x43, 0xf6, 0x37, 0x8e, 0xc1, 0x49, 0x3d, 0x0a, 0xf4, 0x22, 0xa4, 0xbd, - 0x25, 0xe6, 0x3d, 0x6c, 0x36, 0x7a, 0x4d, 0x72, 0x7a, 0x9f, 0x06, 0xbd, 0xe0, 0x87, 0x71, 0xf1, - 0x51, 0x81, 0xe1, 0x2d, 0x86, 0xc0, 0x89, 0xbd, 0x10, 0xee, 0x29, 0x88, 0x6b, 0xbb, 0xba, 0xc1, - 0x0d, 0xf0, 0x43, 0x83, 0x74, 0xa5, 0x72, 0xa5, 0xc6, 0x89, 0x28, 0xa6, 0x5c, 0xe3, 0xc9, 0x14, - 0x2e, 0x2f, 0xfa, 0x8c, 0xcc, 0x81, 0xca, 0x62, 0x61, 0xe6, 0x5d, 0xa4, 0x3a, 0xda, 0x41, 0x99, - 0x86, 0xc3, 0xa7, 0x20, 0x49, 0x2a, 0x5b, 0xfc, 0xa1, 0x82, 0x98, 0x92, 0xe8, 0x68, 0x07, 0x6b, - 0x9a, 0x73, 0x33, 0x9e, 0x8a, 0x49, 0x71, 0xf9, 0x27, 0x88, 0xa7, 0x12, 0x92, 0x0a, 0x7a, 0x1c, - 0x10, 0xa1, 0xd0, 0x5a, 0x58, 0x25, 0x4b, 0x97, 0x8a, 0x57, 0xf0, 0x2d, 0x74, 0xb4, 0x83, 0x52, - 0x0b, 0x6f, 0xf6, 0x3a, 0xb4, 0x03, 0x0e, 0xda, 0x00, 0x49, 0x20, 0x8b, 0x99, 0xe5, 0xe2, 0x3f, - 0x3d, 0xf8, 0x30, 0x2a, 0x47, 0x60, 0x1b, 0xc0, 0x47, 0xc8, 0x06, 0x90, 0x67, 0xfc, 0xbc, 0x2b, - 0x1e, 0xa1, 0xa1, 0xc4, 0xc2, 0x43, 0x91, 0x5f, 0x84, 0x42, 0xdf, 0x0c, 0x20, 0x19, 0x72, 0x3c, - 0x63, 0x45, 0x8f, 0xcf, 0x59, 0x84, 0x93, 0x56, 0x32, 0x2c, 0x33, 0x45, 0xaf, 0x13, 0xac, 0xa4, - 0x7e, 0xe1, 0xe3, 0x8b, 0x11, 0x7a, 0x98, 0xf3, 0x38, 0xe4, 0x42, 0x73, 0x20, 0xb2, 0xc8, 0x11, - 0x3f, 0x8b, 0xec, 0x23, 0xbf, 0x0e, 0x59, 0x62, 0x80, 0x70, 0x93, 0xe3, 0x3e, 0x0a, 0x05, 0x66, - 0x20, 0xfb, 0x65, 0xcd, 0x1c, 0x9e, 0x0d, 0x21, 0x70, 0x59, 0x78, 0x40, 0x61, 0xb1, 0x67, 0x04, - 0xd6, 0x9a, 0xe6, 0xc8, 0x5b, 0x00, 0xfe, 0xa4, 0xa2, 0x12, 0x9c, 0x25, 0xc6, 0x23, 0x78, 0xdd, - 0x93, 0x3f, 0x69, 0x15, 0xf2, 0x18, 0x8b, 0x04, 0xc9, 0xbf, 0xd2, 0xc9, 0x1e, 0xb6, 0xba, 0x41, - 0x31, 0xca, 0x2f, 0x7f, 0xea, 0xb3, 0x0b, 0x91, 0xaf, 0x8e, 0x2d, 0xf8, 0xee, 0x57, 0xe0, 0x4c, - 0xa0, 0x92, 0x28, 0x60, 0x28, 0x11, 0x55, 0x08, 0xe8, 0x2b, 0xa9, 0x1c, 0x97, 0x50, 0x3a, 0x32, - 0xff, 0x5b, 0x3c, 0xda, 0xec, 0x8c, 0xcf, 0x36, 0x8d, 0xcf, 0x77, 0x0d, 0x4f, 0xca, 0xff, 0x93, - 0x34, 0x24, 0x15, 0xfc, 0xfe, 0x1e, 0x76, 0x5c, 0x74, 0x19, 0xe2, 0x58, 0xdf, 0xb7, 0x86, 0xe5, - 0x40, 0xc9, 0x00, 0x97, 0x39, 0x5e, 0x55, 0xdf, 0xb7, 0x6e, 0x4c, 0x29, 0x14, 0x17, 0x5d, 0x81, - 0xe9, 0xbd, 0x76, 0x8f, 0xa7, 0xaf, 0xfa, 0x6c, 0x56, 0x90, 0xe8, 0x3a, 0x41, 0xba, 0x31, 0xa5, - 0x30, 0x6c, 0xd2, 0x14, 0x7d, 0xd1, 0x3a, 0x76, 0x74, 0x53, 0x35, 0x73, 0x8f, 0x36, 0x45, 0x70, - 0x51, 0x19, 0xc0, 0x30, 0x0d, 0x57, 0xa5, 0xa9, 0x1d, 0x6e, 0x35, 0xce, 0x8d, 0xa6, 0x34, 0x5c, - 0x9a, 0x0c, 0xba, 0x31, 0xa5, 0xa4, 0x0d, 0x51, 0x20, 0xdd, 0x7d, 0x7f, 0x0f, 0xdb, 0x87, 0xdc, - 0x5b, 0x1b, 0xd9, 0xdd, 0x97, 0x09, 0x12, 0xe9, 0x2e, 0xc5, 0x26, 0x46, 0x96, 0x3d, 0x8e, 0xe7, - 0x1e, 0xf0, 0x27, 0x5f, 0x17, 0x47, 0x51, 0xd2, 0x17, 0xf2, 0x1a, 0x07, 0x37, 0xa6, 0x94, 0xa4, - 0xce, 0x7e, 0xa2, 0xe7, 0x3d, 0x17, 0x2c, 0x33, 0xe8, 0xf5, 0x84, 0x68, 0x59, 0xda, 0x67, 0x4a, - 0xb8, 0x62, 0x68, 0x13, 0xf2, 0x6d, 0xc3, 0x71, 0x55, 0xc7, 0xd4, 0xba, 0xce, 0xbe, 0xe5, 0x3a, - 0x34, 0x7f, 0x92, 0xb9, 0xfc, 0xc8, 0x28, 0x0e, 0xeb, 0x86, 0xe3, 0xd6, 0x05, 0xf2, 0x8d, 0x29, - 0x25, 0xd7, 0x0e, 0x02, 0x08, 0x3f, 0x6b, 0x6f, 0x0f, 0xdb, 0x1e, 0x43, 0x9a, 0x67, 0x39, 0x82, - 0xdf, 0x16, 0xc1, 0x16, 0xf4, 0x84, 0x9f, 0x15, 0x04, 0xa0, 0xaf, 0x83, 0xd9, 0xb6, 0xa5, 0x35, - 0x3d, 0x76, 0xaa, 0xbe, 0xdf, 0x33, 0x6f, 0xd3, 0xa4, 0x4c, 0xe6, 0xf2, 0x63, 0x23, 0x3b, 0x69, - 0x69, 0x4d, 0xc1, 0xa2, 0x42, 0x08, 0x6e, 0x4c, 0x29, 0x33, 0xed, 0x7e, 0x20, 0x7a, 0x1f, 0xcc, - 0x69, 0xdd, 0x6e, 0xfb, 0xb0, 0x9f, 0x7b, 0x81, 0x72, 0xbf, 0x38, 0x8a, 0x7b, 0x89, 0xd0, 0xf4, - 0xb3, 0x47, 0xda, 0x00, 0x14, 0x35, 0x40, 0xea, 0xda, 0x98, 0x7e, 0x31, 0xd5, 0xe5, 0x5e, 0x06, - 0x7d, 0x4f, 0x2a, 0x73, 0xf9, 0xfc, 0x28, 0xde, 0xdb, 0x0c, 0x5f, 0x38, 0x25, 0x37, 0xa6, 0x94, - 0x42, 0x37, 0x0c, 0x62, 0x5c, 0x2d, 0x1d, 0xd3, 0xe7, 0xee, 0x38, 0xd7, 0x99, 0x71, 0x5c, 0x29, - 0x7e, 0x98, 0x6b, 0x08, 0x84, 0xaa, 0x90, 0x61, 0xa1, 0xa8, 0x4a, 0x8c, 0x21, 0x7d, 0x85, 0x2a, - 0x73, 0x59, 0x1e, 0xb9, 0x42, 0x29, 0xea, 0x2d, 0xcb, 0xc5, 0x37, 0xa6, 0x14, 0xc0, 0x5e, 0x09, - 0x69, 0x70, 0x82, 0x3e, 0xc8, 0x75, 0xa8, 0x86, 0x0d, 0xef, 0xfc, 0x2c, 0x65, 0xf8, 0xf8, 0x28, - 0x86, 0xb7, 0x28, 0xd1, 0xad, 0xa0, 0x1d, 0xbe, 0x31, 0xa5, 0xcc, 0xde, 0x19, 0x04, 0x13, 0x15, - 0xdb, 0x33, 0x4c, 0xad, 0x6d, 0xbc, 0x89, 0xd9, 0x16, 0x4a, 0x9f, 0xa2, 0x3c, 0x42, 0xc5, 0xae, - 0x73, 0x6c, 0xba, 0xb1, 0x12, 0x15, 0xdb, 0x0b, 0x02, 0xca, 0x49, 0x7e, 0xd7, 0xd3, 0x7b, 0x5a, - 0x2d, 0x29, 0xa5, 0xd8, 0x73, 0x6a, 0x37, 0xe3, 0x29, 0x90, 0x32, 0xf2, 0x79, 0xc8, 0x04, 0x0c, - 0x13, 0x9a, 0x87, 0x24, 0xbf, 0x0d, 0x23, 0x6e, 0x8d, 0xf2, 0xa2, 0x9c, 0x87, 0x6c, 0xd0, 0x18, - 0xc9, 0x1f, 0x8e, 0x78, 0x94, 0xf4, 0x4d, 0x89, 0xf9, 0x70, 0x46, 0x3a, 0xed, 0x7b, 0x2a, 0x0f, - 0x8b, 0xad, 0x4d, 0xd4, 0xb3, 0xe3, 0xd7, 0x2c, 0x05, 0xf2, 0x9d, 0x15, 0x2d, 0x42, 0xa6, 0x7b, - 0xb9, 0xeb, 0xa1, 0xc4, 0x28, 0x0a, 0x74, 0x2f, 0x77, 0x05, 0xc2, 0x39, 0xc8, 0x92, 0x71, 0xab, - 0x41, 0x7f, 0x29, 0xad, 0x64, 0x08, 0x8c, 0xa3, 0xc8, 0xff, 0x2a, 0x0a, 0x52, 0xbf, 0x01, 0xf3, - 0x52, 0xd5, 0x91, 0x63, 0xa7, 0xaa, 0x4f, 0xf7, 0x27, 0xc9, 0xfd, 0xbc, 0xf8, 0x3a, 0x48, 0x7e, - 0x7a, 0x97, 0x6d, 0x35, 0xa3, 0xfd, 0xbf, 0x3e, 0x47, 0x55, 0x29, 0xe8, 0x7d, 0x9e, 0xeb, 0xf5, - 0xd0, 0x61, 0xa5, 0xf8, 0x93, 0x0f, 0xfd, 0x13, 0xee, 0x39, 0x31, 0x3b, 0xdd, 0xa6, 0xe6, 0x62, - 0x91, 0x1f, 0x0b, 0x9c, 0x5b, 0x3e, 0x0a, 0x05, 0xad, 0xdb, 0x55, 0x1d, 0x57, 0x73, 0x31, 0xf7, - 0x35, 0x58, 0xe6, 0x21, 0xa7, 0x75, 0xbb, 0x75, 0x02, 0x65, 0xbe, 0xc6, 0x23, 0x90, 0x27, 0x36, - 0xdd, 0xd0, 0xda, 0xc2, 0x55, 0x48, 0x30, 0x97, 0x84, 0x43, 0x99, 0x77, 0x20, 0x37, 0xbd, 0x19, - 0xa7, 0xf6, 0xdc, 0x8b, 0xa9, 0x22, 0x81, 0x98, 0x0a, 0xf1, 0xb7, 0x3e, 0x98, 0x7c, 0xc4, 0xfb, - 0x28, 0xc3, 0x0f, 0x0d, 0xe6, 0x68, 0xfc, 0x75, 0x87, 0x25, 0x4b, 0x52, 0x0a, 0x2b, 0xc8, 0x0a, - 0xe4, 0xc3, 0xb6, 0x1f, 0xe5, 0x21, 0xea, 0x1e, 0xf0, 0x56, 0xa2, 0xee, 0x01, 0xf1, 0x74, 0xbd, - 0x17, 0x72, 0xf3, 0x43, 0x76, 0x3b, 0x4e, 0xe7, 0xe7, 0x3a, 0xe4, 0x02, 0xe4, 0x42, 0x7b, 0x82, - 0x7c, 0x12, 0xe6, 0x86, 0x99, 0x78, 0x79, 0xdf, 0x83, 0x87, 0x4c, 0x35, 0xba, 0x02, 0x29, 0xcf, - 0xc6, 0x0f, 0x89, 0x8e, 0x69, 0xb3, 0x02, 0x59, 0xf1, 0x50, 0x43, 0xe9, 0xfc, 0x68, 0x28, 0x9d, - 0x2f, 0x7f, 0x23, 0xcc, 0x8f, 0xb2, 0xdf, 0x7d, 0x49, 0xbe, 0xb8, 0x27, 0xb0, 0x93, 0x90, 0xe0, - 0x4f, 0x51, 0x46, 0xe9, 0x01, 0x16, 0x2f, 0x11, 0x41, 0x32, 0x5b, 0x1e, 0x63, 0xe7, 0x5a, 0xb4, - 0x20, 0xab, 0x70, 0x7a, 0xa4, 0x0d, 0x1f, 0x7d, 0x14, 0xc6, 0x18, 0xf1, 0xa3, 0x30, 0x5d, 0x74, - 0xc7, 0xa1, 0x63, 0x15, 0x17, 0x59, 0x58, 0x49, 0xfe, 0x48, 0x0c, 0x4e, 0x0e, 0xb7, 0xe4, 0x68, - 0x09, 0xb2, 0xc4, 0x6f, 0x75, 0xc3, 0x2e, 0x2e, 0x74, 0xb4, 0x83, 0x06, 0xf7, 0x6f, 0xf9, 0x51, - 0x42, 0xd4, 0x3b, 0x4a, 0x40, 0x3b, 0x30, 0xd3, 0xb6, 0x74, 0xad, 0xad, 0x06, 0x8e, 0x72, 0xf8, - 0x22, 0x7a, 0x78, 0x40, 0xd8, 0xe1, 0x94, 0x21, 0x31, 0x38, 0x5c, 0xff, 0x0b, 0x94, 0xc7, 0xba, - 0x77, 0xea, 0x83, 0x56, 0x21, 0xd3, 0x31, 0x9c, 0x5d, 0xbc, 0xaf, 0xdd, 0x31, 0x2c, 0x9b, 0xaf, - 0xa6, 0x41, 0xa5, 0xd9, 0xf0, 0x71, 0xc4, 0x09, 0x53, 0x80, 0x2c, 0x30, 0x25, 0xd3, 0x43, 0x0f, - 0xbe, 0x12, 0xc7, 0xb6, 0x26, 0xa3, 0xce, 0x90, 0x92, 0x23, 0xcf, 0x90, 0x86, 0x1d, 0xd8, 0xa4, - 0x86, 0x1f, 0xd8, 0x7c, 0x28, 0x38, 0x35, 0xe1, 0xbd, 0x6f, 0xe0, 0x0c, 0x07, 0xd5, 0x61, 0x8e, - 0xd3, 0x37, 0x43, 0xb2, 0x1f, 0x72, 0xd5, 0x81, 0xad, 0xaf, 0x7e, 0x99, 0x23, 0x41, 0x3e, 0x5a, - 0xec, 0xb1, 0x07, 0x13, 0xbb, 0x38, 0x44, 0x8d, 0x07, 0x0e, 0x51, 0xff, 0x0f, 0x9b, 0x8a, 0x17, - 0x61, 0x66, 0xc0, 0x8f, 0x18, 0x7a, 0x38, 0x3c, 0x22, 0x21, 0x2b, 0x7f, 0x2c, 0x02, 0xc5, 0xd1, - 0x8e, 0xc3, 0x50, 0x56, 0xc7, 0xca, 0x7d, 0x8f, 0x32, 0xcf, 0x8f, 0x40, 0xbe, 0xcf, 0xad, 0x61, - 0xb3, 0x90, 0x0b, 0x05, 0x90, 0xf2, 0x37, 0xc7, 0x3c, 0x9b, 0x19, 0xf2, 0x3d, 0x86, 0x28, 0xda, - 0xcb, 0x30, 0xdb, 0xc4, 0xba, 0xd1, 0x7c, 0x50, 0x3d, 0x9b, 0xe1, 0xd4, 0xff, 0x4f, 0xcd, 0x06, - 0xd5, 0xec, 0x7b, 0x01, 0x52, 0x0a, 0x76, 0xba, 0xc4, 0x95, 0x40, 0x65, 0x48, 0xe3, 0x03, 0x1d, - 0x77, 0x5d, 0xff, 0x3e, 0xc0, 0x30, 0xef, 0x96, 0x61, 0x57, 0x05, 0x26, 0x89, 0xed, 0x3c, 0x32, - 0xf4, 0x0c, 0x0f, 0x5f, 0x47, 0x47, 0xa2, 0x9c, 0x3c, 0x18, 0xbf, 0x5e, 0x15, 0xf1, 0x6b, 0x6c, - 0x64, 0x68, 0xc6, 0xa8, 0xfa, 0x02, 0xd8, 0x67, 0x78, 0x00, 0x1b, 0x1f, 0xd3, 0x58, 0x28, 0x82, - 0xad, 0x84, 0x22, 0xd8, 0xc4, 0x98, 0x61, 0x8e, 0x08, 0x61, 0xaf, 0x8a, 0x10, 0x36, 0x39, 0xa6, - 0xc7, 0x7d, 0x31, 0xec, 0x7b, 0x02, 0x31, 0x6c, 0x7a, 0x30, 0x51, 0x18, 0x22, 0x1d, 0x12, 0xc4, - 0xbe, 0xe0, 0x05, 0xb1, 0xd9, 0x91, 0x01, 0x30, 0x27, 0xee, 0x8f, 0x62, 0xb7, 0x06, 0xa2, 0xd8, - 0x1c, 0xff, 0x9b, 0x3c, 0xa3, 0x58, 0x8c, 0x09, 0x63, 0xb7, 0x06, 0xc2, 0xd8, 0xfc, 0x18, 0x86, - 0x63, 0xe2, 0xd8, 0xaf, 0x1f, 0x1e, 0xc7, 0x8e, 0x8e, 0x34, 0x79, 0x37, 0x27, 0x0b, 0x64, 0xd5, - 0x11, 0x81, 0xac, 0x34, 0x32, 0xe8, 0x62, 0xec, 0x27, 0x8e, 0x64, 0x77, 0x86, 0x44, 0xb2, 0x2c, - 0xe6, 0xbc, 0x30, 0x92, 0xf9, 0x04, 0xa1, 0xec, 0xce, 0x90, 0x50, 0x16, 0x8d, 0x65, 0x3b, 0x36, - 0x96, 0xbd, 0x1e, 0x8e, 0x65, 0x67, 0x47, 0x38, 0x4c, 0xfe, 0x6a, 0x1f, 0x11, 0xcc, 0xee, 0x8e, - 0x0a, 0x66, 0x59, 0xc0, 0xf9, 0xc4, 0x48, 0x8e, 0xc7, 0x88, 0x66, 0xb7, 0x06, 0xa2, 0xd9, 0x13, - 0x63, 0x34, 0x6d, 0xf2, 0x70, 0x96, 0xbd, 0x11, 0xce, 0x5e, 0x07, 0x07, 0x29, 0x73, 0x33, 0x9e, - 0xca, 0x48, 0x59, 0xf9, 0x31, 0xb2, 0xfb, 0xf6, 0xd9, 0x39, 0xe2, 0xe6, 0x62, 0xdb, 0xb6, 0x6c, - 0x71, 0x05, 0x9f, 0x16, 0xe4, 0x0b, 0x24, 0xbc, 0xf1, 0x6d, 0xda, 0x11, 0xa1, 0x2f, 0x0d, 0x27, - 0x02, 0x76, 0x4c, 0xfe, 0x85, 0x88, 0x4f, 0x4b, 0x83, 0xdf, 0x60, 0x68, 0x94, 0xe6, 0xa1, 0x51, - 0x20, 0x20, 0x8e, 0x86, 0x03, 0xe2, 0x45, 0xc8, 0x90, 0x30, 0xa1, 0x2f, 0xd6, 0xd5, 0xba, 0x5e, - 0xac, 0x2b, 0xee, 0xfe, 0xb0, 0xb0, 0x99, 0x6f, 0x4b, 0xec, 0x20, 0xac, 0xe0, 0xdd, 0x83, 0x62, - 0x51, 0x1a, 0x7a, 0x12, 0x66, 0x03, 0xb8, 0x5e, 0xf8, 0xc1, 0x02, 0x3f, 0xc9, 0xc3, 0x2e, 0xf1, - 0x38, 0xe4, 0x9f, 0x45, 0x7c, 0x09, 0xf9, 0x41, 0xf2, 0xb0, 0x78, 0x36, 0xf2, 0x36, 0xc5, 0xb3, - 0xd1, 0x07, 0x8e, 0x67, 0x83, 0xe1, 0x54, 0x2c, 0x1c, 0x4e, 0xfd, 0x8f, 0x88, 0x3f, 0x27, 0x5e, - 0x74, 0xaa, 0x5b, 0x4d, 0xcc, 0x03, 0x1c, 0xfa, 0x9b, 0xb8, 0x24, 0x6d, 0xab, 0xc5, 0xc3, 0x18, - 0xf2, 0x93, 0x60, 0x79, 0x1b, 0x4f, 0x9a, 0xef, 0x2b, 0x5e, 0x6c, 0x34, 0x1d, 0xfc, 0x04, 0x81, - 0xdf, 0xcb, 0x4f, 0xf8, 0xf7, 0xf2, 0xbd, 0xef, 0x66, 0x93, 0x81, 0xef, 0x66, 0xd1, 0xf3, 0x90, - 0xa6, 0x79, 0x6a, 0xd5, 0xea, 0x8a, 0x3f, 0x68, 0x75, 0x66, 0xf4, 0x9d, 0x7c, 0x87, 0xde, 0x16, - 0x66, 0xf7, 0xf8, 0x7d, 0x8f, 0x23, 0x1d, 0xf2, 0x38, 0x1e, 0x82, 0x34, 0xe9, 0x3d, 0xfb, 0xc3, - 0x0c, 0xc0, 0x3f, 0xba, 0x16, 0x00, 0xf9, 0x27, 0xa3, 0x50, 0xe8, 0xdb, 0x68, 0x86, 0x8e, 0x7d, - 0xd8, 0x09, 0xe8, 0x64, 0xf2, 0x58, 0x00, 0x68, 0x69, 0x8e, 0x7a, 0x57, 0x33, 0x5d, 0xdc, 0xe4, - 0x42, 0x09, 0x40, 0x50, 0x11, 0x52, 0xa4, 0xd4, 0x73, 0x70, 0x93, 0x27, 0x0e, 0xbc, 0x32, 0xba, - 0x01, 0x09, 0x7c, 0x87, 0x3e, 0x4c, 0xca, 0x9e, 0xf7, 0x3d, 0x39, 0x18, 0xc9, 0x91, 0xea, 0xf2, - 0x3c, 0x99, 0xec, 0x2f, 0xbc, 0xb5, 0x28, 0x31, 0xec, 0x27, 0xbc, 0x6f, 0x9d, 0x14, 0x4e, 0x1f, - 0x96, 0x42, 0xaa, 0x4f, 0x0a, 0x34, 0x85, 0x95, 0x15, 0x91, 0x29, 0x91, 0x29, 0xbb, 0x9e, 0xac, - 0xe4, 0x3a, 0xb8, 0xd3, 0xb5, 0xac, 0xb6, 0xca, 0xd6, 0x78, 0x09, 0xf2, 0xe1, 0x7d, 0x95, 0xfd, - 0xd1, 0x24, 0x57, 0x33, 0x4c, 0x35, 0xe4, 0x04, 0x67, 0x19, 0x90, 0xad, 0xa9, 0x9b, 0xf1, 0x54, - 0x44, 0x8a, 0xde, 0x8c, 0xa7, 0xa2, 0x52, 0x4c, 0xde, 0x86, 0x13, 0x43, 0xf7, 0x55, 0xf4, 0x1c, - 0xa4, 0xfd, 0x2d, 0x99, 0xdd, 0x30, 0x3f, 0x22, 0x49, 0xe0, 0xe3, 0xca, 0xbf, 0x1c, 0xf1, 0x59, - 0x86, 0xd3, 0x0e, 0x55, 0x48, 0xb0, 0xeb, 0x7e, 0xfc, 0x6a, 0xc7, 0x93, 0x93, 0xed, 0xc8, 0xcb, - 0xec, 0x2e, 0xa0, 0xc2, 0x89, 0xe5, 0xf7, 0x41, 0x82, 0x41, 0x50, 0x06, 0x92, 0xfe, 0x13, 0xc8, - 0x00, 0x89, 0x52, 0xa5, 0x52, 0xdd, 0x16, 0xef, 0x99, 0x96, 0xb7, 0x94, 0x86, 0x14, 0x25, 0x60, - 0xa5, 0x7a, 0xb3, 0x5a, 0x69, 0x48, 0x31, 0x34, 0x03, 0x39, 0xf6, 0x5b, 0xbd, 0xbe, 0xa5, 0x6c, - 0x94, 0x1a, 0x52, 0x3c, 0x00, 0xaa, 0x57, 0x37, 0x57, 0xab, 0x8a, 0x34, 0x2d, 0x3f, 0x0d, 0xa7, - 0x47, 0xee, 0xe1, 0x7e, 0x4e, 0x21, 0x12, 0xc8, 0x29, 0xc8, 0x1f, 0x89, 0x92, 0xa0, 0x66, 0xd4, - 0xc6, 0x8c, 0x6e, 0xf6, 0x0d, 0xfc, 0xf2, 0x31, 0x76, 0xf5, 0xbe, 0xd1, 0x93, 0x38, 0xc6, 0xc6, - 0x7b, 0xd8, 0xd5, 0xf7, 0x99, 0xa3, 0xc0, 0x2c, 0x50, 0x4e, 0xc9, 0x71, 0x28, 0x25, 0x72, 0x18, - 0xda, 0x1b, 0x58, 0x77, 0x55, 0xa6, 0x44, 0x0e, 0xff, 0x1b, 0xaf, 0x39, 0x06, 0xad, 0x33, 0xa0, - 0xfc, 0x8d, 0xc7, 0x92, 0x65, 0x1a, 0xa6, 0x95, 0x6a, 0x43, 0x79, 0x4d, 0x8a, 0x21, 0x04, 0x79, - 0xfa, 0x53, 0xad, 0x6f, 0x96, 0xb6, 0xeb, 0x37, 0xb6, 0x88, 0x2c, 0x67, 0xa1, 0x20, 0x64, 0x29, - 0x80, 0xd3, 0xf2, 0xe3, 0x70, 0x6a, 0x84, 0x57, 0x31, 0xe4, 0xfe, 0xe5, 0x27, 0x22, 0x41, 0xec, - 0xb0, 0x67, 0xb0, 0x05, 0x09, 0xc7, 0xd5, 0xdc, 0x9e, 0xc3, 0x85, 0xf8, 0xdc, 0xa4, 0x6e, 0xc6, - 0xb2, 0xf8, 0x51, 0xa7, 0xe4, 0x0a, 0x67, 0x23, 0x5f, 0x81, 0x7c, 0xb8, 0x66, 0xb4, 0x0c, 0x7c, - 0x25, 0x8a, 0xca, 0xd7, 0x00, 0x0d, 0x7a, 0x1f, 0x43, 0xc2, 0xcb, 0xc8, 0xb0, 0xf0, 0xf2, 0xc7, - 0x22, 0x70, 0xe6, 0x08, 0x4f, 0x03, 0xbd, 0xdc, 0x37, 0xc8, 0x17, 0x8e, 0xe3, 0xa7, 0x2c, 0x33, - 0x58, 0xdf, 0x30, 0x9f, 0x81, 0x6c, 0x10, 0x3e, 0xd9, 0x20, 0xbf, 0x10, 0xf5, 0x17, 0x71, 0x38, - 0x0e, 0xf6, 0x4d, 0x60, 0xe4, 0x2b, 0x34, 0x81, 0xef, 0x06, 0x70, 0x0f, 0xc4, 0x05, 0x60, 0xbe, - 0x8f, 0x9e, 0x1d, 0x92, 0x1a, 0xc3, 0x7a, 0xe3, 0x80, 0x2f, 0x82, 0xb4, 0xcb, 0x7f, 0x39, 0xa8, - 0x1e, 0x4c, 0x0a, 0xf4, 0xe8, 0x1e, 0xeb, 0x78, 0x7f, 0xe1, 0x75, 0xb2, 0xcd, 0xd8, 0x4f, 0x1e, - 0x30, 0xb0, 0x83, 0x5e, 0x83, 0x53, 0x7d, 0x8e, 0x82, 0xc7, 0x3a, 0x3e, 0xa9, 0xbf, 0x70, 0x22, - 0xec, 0x2f, 0x08, 0xd6, 0xc1, 0xdd, 0x7e, 0x3a, 0xbc, 0xdb, 0xbf, 0x06, 0xe0, 0x27, 0x07, 0xfc, - 0x1b, 0x6b, 0x91, 0xe0, 0x8d, 0xb5, 0x2b, 0x30, 0x4d, 0x34, 0x49, 0xc8, 0x69, 0xd0, 0x14, 0x13, - 0x4d, 0x08, 0x24, 0x17, 0x18, 0xb6, 0x6c, 0x00, 0x1a, 0xcc, 0x2d, 0x8e, 0x68, 0xe2, 0x3d, 0xe1, - 0x26, 0xce, 0x8d, 0xcc, 0x52, 0x0e, 0x6f, 0xea, 0x4d, 0x98, 0xa6, 0x33, 0x3f, 0xf4, 0x33, 0xc0, - 0x6f, 0x00, 0xd0, 0x5c, 0xd7, 0x36, 0x76, 0x7b, 0x7e, 0x03, 0x8b, 0xc3, 0x35, 0xa7, 0x24, 0xf0, - 0xca, 0x0f, 0x71, 0x15, 0x9a, 0xf3, 0x49, 0x03, 0x6a, 0x14, 0x60, 0x28, 0x6f, 0x42, 0x3e, 0x4c, - 0x3b, 0xfc, 0xb3, 0x46, 0xff, 0x5d, 0x90, 0xb4, 0xf0, 0x6f, 0x3c, 0xef, 0x88, 0xbf, 0xd5, 0x43, - 0x0b, 0xf2, 0x5f, 0x44, 0x20, 0x1b, 0x54, 0xbc, 0xb7, 0xd9, 0x05, 0x39, 0x3b, 0xc4, 0x05, 0x49, - 0xb7, 0x34, 0xe7, 0x15, 0xe6, 0x81, 0x9c, 0x1e, 0xf0, 0x40, 0x92, 0x2d, 0xcd, 0xd9, 0x79, 0x07, - 0x1d, 0x10, 0xf9, 0x5b, 0x22, 0x90, 0xf2, 0x06, 0x7f, 0xc4, 0x2d, 0x5d, 0xff, 0xe3, 0x56, 0x2f, - 0xeb, 0xce, 0xce, 0x37, 0x62, 0xde, 0xf9, 0xc6, 0x35, 0x6f, 0xf3, 0x1b, 0x95, 0x0e, 0x09, 0x4a, - 0x5a, 0xdc, 0x94, 0xe3, 0x7b, 0xfd, 0xb5, 0xc9, 0xbe, 0x21, 0x9b, 0x83, 0xe9, 0xe0, 0xf7, 0x5f, - 0xac, 0x20, 0x37, 0x03, 0x57, 0x63, 0xd8, 0x32, 0x0c, 0x7e, 0x6c, 0x16, 0x39, 0xf6, 0xc7, 0x66, - 0x5e, 0x2b, 0xd1, 0x60, 0x2b, 0xdf, 0x13, 0x81, 0x94, 0x58, 0x11, 0xe8, 0xbd, 0xc1, 0x2b, 0x53, - 0xe2, 0x4c, 0x6e, 0xa4, 0x35, 0xe2, 0xfc, 0x03, 0x37, 0xa6, 0x06, 0x6e, 0x0a, 0xc7, 0x8e, 0x7b, - 0x53, 0x98, 0xfb, 0x75, 0x7f, 0x1a, 0x01, 0xa9, 0x7f, 0xbd, 0x7e, 0xc5, 0xbd, 0x1b, 0xdc, 0xe4, - 0x62, 0x43, 0x36, 0xb9, 0x51, 0xd7, 0x7f, 0xe3, 0xa3, 0xae, 0xff, 0x0e, 0x8e, 0x7a, 0xfa, 0x01, - 0x47, 0xfd, 0xc1, 0x28, 0x64, 0x02, 0xc9, 0x51, 0xf4, 0x6c, 0xe8, 0x2a, 0xf1, 0xd2, 0x51, 0x89, - 0xd4, 0xc0, 0x5d, 0xe2, 0x90, 0x98, 0xa2, 0xc7, 0x17, 0xd3, 0xdb, 0xff, 0x59, 0xd1, 0xf0, 0x2f, - 0x2f, 0xa7, 0x47, 0x7c, 0x79, 0xf9, 0xd7, 0x23, 0x90, 0xf2, 0x9c, 0xee, 0xe3, 0x9e, 0xbe, 0x9d, - 0x84, 0x04, 0xf7, 0x2b, 0xd9, 0xf1, 0x1b, 0x2f, 0x0d, 0x4d, 0x2a, 0x17, 0x21, 0x25, 0xfe, 0xd8, - 0x1e, 0xdf, 0xd3, 0xbc, 0xf2, 0xc5, 0x17, 0x20, 0x13, 0x38, 0xb9, 0x24, 0x86, 0x71, 0xb3, 0xfa, - 0x8a, 0x34, 0x55, 0x4c, 0xde, 0xbb, 0xbf, 0x14, 0xdb, 0xc4, 0x77, 0xc9, 0x6a, 0x56, 0xaa, 0x95, - 0x1b, 0xd5, 0xca, 0x4b, 0x52, 0xa4, 0x98, 0xb9, 0x77, 0x7f, 0x29, 0xa9, 0x60, 0x9a, 0x4f, 0xbc, - 0xf8, 0x12, 0x14, 0xfa, 0x26, 0x26, 0xec, 0xb4, 0x20, 0xc8, 0xaf, 0xee, 0x6c, 0xaf, 0xd7, 0x2a, - 0xa5, 0x46, 0x55, 0x65, 0x17, 0x4e, 0xd1, 0x29, 0x98, 0x5d, 0xaf, 0xad, 0xdd, 0x68, 0xa8, 0x95, - 0xf5, 0x5a, 0x75, 0xb3, 0xa1, 0x96, 0x1a, 0x8d, 0x52, 0xe5, 0x25, 0x29, 0x7a, 0xf9, 0x7e, 0x06, - 0xe2, 0xa5, 0x72, 0xa5, 0x86, 0x2a, 0x10, 0xa7, 0x89, 0x90, 0x23, 0xaf, 0x2e, 0x15, 0x8f, 0xce, - 0x0c, 0xa3, 0xeb, 0x30, 0x4d, 0x73, 0x24, 0xe8, 0xe8, 0xbb, 0x4c, 0xc5, 0x31, 0xa9, 0x62, 0xd2, - 0x19, 0xba, 0x22, 0x8f, 0xbc, 0xdc, 0x54, 0x3c, 0x3a, 0x73, 0x8c, 0xd6, 0x21, 0x29, 0x42, 0xe4, - 0x71, 0x37, 0x8e, 0x8a, 0x63, 0xd3, 0xb9, 0x64, 0x68, 0x2c, 0xd5, 0x70, 0xf4, 0xbd, 0xa7, 0xe2, - 0x98, 0x9c, 0x32, 0xaa, 0x79, 0x1f, 0xe2, 0x8c, 0xb9, 0xca, 0x54, 0x1c, 0x97, 0x25, 0x46, 0x0a, - 0xa4, 0xfd, 0x24, 0xce, 0xf8, 0xdb, 0x5c, 0xc5, 0x09, 0xd2, 0xe5, 0xe8, 0x7d, 0x90, 0x0b, 0x07, - 0xba, 0x93, 0x5d, 0x97, 0x2a, 0x4e, 0x98, 0x8f, 0x26, 0xfc, 0xc3, 0x51, 0xef, 0x64, 0xd7, 0xa7, - 0x8a, 0x13, 0xa6, 0xa7, 0xd1, 0x1b, 0x30, 0x33, 0x18, 0x95, 0x4e, 0x7e, 0x9b, 0xaa, 0x78, 0x8c, - 0x84, 0x35, 0xea, 0x00, 0x1a, 0x12, 0xcd, 0x1e, 0xe3, 0x72, 0x55, 0xf1, 0x38, 0xf9, 0x6b, 0xd4, - 0x84, 0x42, 0x7f, 0x88, 0x38, 0xe9, 0x65, 0xab, 0xe2, 0xc4, 0xb9, 0x6c, 0xd6, 0x4a, 0x38, 0xb4, - 0x9c, 0xf4, 0xf2, 0x55, 0x71, 0xe2, 0xd4, 0x36, 0xda, 0x01, 0x08, 0x44, 0x87, 0x13, 0x5c, 0xc6, - 0x2a, 0x4e, 0x92, 0xe4, 0x46, 0x5d, 0x98, 0x1d, 0x16, 0x36, 0x1e, 0xe7, 0x6e, 0x56, 0xf1, 0x58, - 0xb9, 0x6f, 0xa2, 0xcf, 0xe1, 0x00, 0x70, 0xb2, 0xbb, 0x5a, 0xc5, 0x09, 0x93, 0xe0, 0xe5, 0xd2, - 0xc8, 0x0b, 0xba, 0xe7, 0x8f, 0xbc, 0xa0, 0xeb, 0x5f, 0xb9, 0xf5, 0x2e, 0xe5, 0xfe, 0xdb, 0x4b, - 0xf0, 0x2e, 0xfe, 0xf4, 0x8b, 0xe3, 0x6a, 0xb7, 0x0d, 0xb3, 0xe5, 0xbd, 0xc1, 0xc3, 0xcb, 0xfc, - 0x76, 0xee, 0x49, 0xfe, 0xce, 0x8c, 0x80, 0x8e, 0x79, 0x89, 0x67, 0xe4, 0xf3, 0x84, 0xe3, 0x2e, - 0xf2, 0x8f, 0xbf, 0x77, 0x7b, 0xc4, 0x2b, 0x3f, 0x63, 0xde, 0x12, 0x1a, 0xf2, 0x0a, 0x50, 0xf1, - 0xc8, 0x8f, 0xe3, 0x8b, 0x47, 0x5d, 0x58, 0x26, 0x5e, 0x6c, 0xfe, 0x86, 0xe1, 0xb8, 0x96, 0x6d, - 0xe8, 0x5a, 0x9b, 0x6e, 0x2f, 0xd7, 0x26, 0xfd, 0x9c, 0xa8, 0x9c, 0x26, 0xee, 0x0a, 0x7f, 0x28, - 0x88, 0x7f, 0xe2, 0xb2, 0x0a, 0x89, 0x3b, 0x5a, 0x9b, 0x7d, 0xcc, 0x13, 0x7c, 0x25, 0xac, 0x5f, - 0xe6, 0x01, 0x3f, 0x2a, 0xc8, 0x85, 0xd1, 0xca, 0xdf, 0x47, 0x3f, 0x84, 0xe8, 0x74, 0x0c, 0x87, - 0xe8, 0xa2, 0x42, 0x03, 0xe9, 0x9b, 0x10, 0xb7, 0x35, 0x97, 0x87, 0x97, 0xe5, 0xab, 0xc7, 0x7e, - 0x59, 0x88, 0xb5, 0x40, 0x79, 0xa0, 0x97, 0x21, 0xd5, 0xd1, 0x0e, 0x54, 0xca, 0x2f, 0xfa, 0x15, - 0xf1, 0x4b, 0x76, 0xb4, 0x03, 0xd2, 0x3f, 0xf4, 0x3e, 0x28, 0x10, 0x96, 0xfa, 0xbe, 0x66, 0xb6, - 0x30, 0xe3, 0x1c, 0xfb, 0x8a, 0x38, 0xe7, 0x3a, 0xda, 0x41, 0x85, 0x72, 0x23, 0xfc, 0xf9, 0x0b, - 0x4c, 0xbf, 0x1a, 0xe1, 0x39, 0x03, 0x2a, 0x18, 0xa4, 0x81, 0xa4, 0x7b, 0x25, 0xda, 0xa8, 0x38, - 0xe0, 0x38, 0x3f, 0x4a, 0xee, 0x7d, 0x62, 0x2d, 0xe7, 0x48, 0xf7, 0x3e, 0xf3, 0xd6, 0x62, 0x84, - 0xb5, 0x5a, 0xd0, 0x07, 0xc4, 0x9e, 0x61, 0xa9, 0x10, 0x95, 0xfa, 0xb0, 0xd1, 0xb1, 0x3e, 0x6c, - 0x4e, 0xf8, 0xb0, 0x8c, 0x21, 0x30, 0x6a, 0x52, 0xcf, 0xc7, 0xf0, 0xa9, 0x08, 0x64, 0x56, 0x03, - 0x6f, 0xfe, 0xcd, 0x43, 0xb2, 0x63, 0x99, 0xc6, 0x6d, 0x6c, 0x7b, 0x27, 0x54, 0xac, 0x48, 0xfc, - 0x4c, 0xf6, 0xa7, 0xe3, 0xdc, 0x43, 0xf1, 0x2c, 0x8e, 0x28, 0x13, 0xaa, 0xbb, 0x78, 0xd7, 0x31, - 0x84, 0x9c, 0x15, 0x51, 0x44, 0x8f, 0x81, 0xe4, 0x60, 0xbd, 0x67, 0x1b, 0xee, 0xa1, 0xaa, 0x5b, - 0xa6, 0xab, 0xe9, 0x2e, 0x8f, 0xc2, 0x0b, 0x02, 0x5e, 0x61, 0x60, 0xc2, 0xa4, 0x89, 0x5d, 0xcd, - 0x68, 0xb3, 0x2b, 0x85, 0x69, 0x45, 0x14, 0x79, 0x57, 0xef, 0x25, 0x83, 0x71, 0x68, 0x05, 0x24, - 0xab, 0x8b, 0xed, 0xd0, 0x75, 0x14, 0xa6, 0x8d, 0xf3, 0xbf, 0xf9, 0xe9, 0x27, 0xe7, 0xb8, 0xc0, - 0xf9, 0x55, 0x06, 0xf6, 0xc4, 0xbd, 0x52, 0x10, 0x14, 0xe2, 0x9e, 0xca, 0x6b, 0xa1, 0x33, 0xa9, - 0xde, 0xae, 0xff, 0xfe, 0xc9, 0xdc, 0x80, 0x50, 0x4b, 0xe6, 0x61, 0x79, 0xfe, 0x37, 0x7c, 0xd6, - 0x7e, 0x9c, 0xfa, 0x12, 0x3e, 0x0c, 0x1e, 0x50, 0x51, 0x36, 0xc4, 0x85, 0x7f, 0x43, 0x33, 0xda, - 0xe2, 0xaf, 0x6c, 0x2a, 0xbc, 0x84, 0x56, 0xbc, 0xe4, 0x62, 0x9c, 0xc6, 0x43, 0xf2, 0x28, 0xdd, - 0x28, 0x5b, 0x66, 0x33, 0x9c, 0x45, 0x44, 0x15, 0x48, 0xb8, 0xd6, 0x6d, 0x6c, 0x72, 0x01, 0x95, - 0x1f, 0x3f, 0xc6, 0x13, 0x62, 0x0a, 0x27, 0x45, 0x5f, 0x0f, 0x52, 0x13, 0xb7, 0x71, 0x8b, 0x7d, - 0xe8, 0xb7, 0xaf, 0xd9, 0x98, 0x7d, 0x66, 0xfe, 0x40, 0x0f, 0x84, 0x15, 0x3c, 0x56, 0x75, 0xca, - 0x09, 0x6d, 0x87, 0x5f, 0x95, 0x4c, 0xf2, 0xa3, 0xe3, 0x11, 0x63, 0x0c, 0x68, 0x5e, 0xd0, 0xf2, - 0x84, 0x5e, 0xa1, 0x7c, 0x0c, 0xa4, 0x9e, 0xb9, 0x6b, 0x99, 0xf4, 0x8f, 0xd3, 0xf1, 0x28, 0x2a, - 0xc5, 0xce, 0x29, 0x3d, 0x38, 0x3f, 0xa7, 0xdc, 0x86, 0xbc, 0x8f, 0x4a, 0x57, 0x48, 0xfa, 0xb8, - 0x2b, 0x24, 0xe7, 0x31, 0x20, 0x28, 0x68, 0x03, 0xc0, 0x5f, 0x83, 0xf4, 0xa0, 0x2c, 0x33, 0x7a, - 0xc6, 0xfc, 0xd5, 0x1c, 0x1c, 0x4c, 0x80, 0x01, 0xfa, 0x3a, 0x98, 0xed, 0x18, 0xa6, 0xea, 0xe0, - 0xf6, 0x9e, 0xca, 0x25, 0x47, 0xf8, 0x66, 0x8e, 0x3f, 0x9b, 0x33, 0x1d, 0xc3, 0xac, 0xe3, 0xf6, - 0xde, 0xaa, 0xc7, 0x05, 0xbd, 0x1b, 0xce, 0xf8, 0xa3, 0xb7, 0x4c, 0x75, 0xdf, 0x6a, 0x37, 0x55, - 0x1b, 0xef, 0xa9, 0x3a, 0x7d, 0x04, 0x2e, 0x4b, 0x65, 0x76, 0xca, 0x43, 0xd9, 0x32, 0x6f, 0x58, - 0xed, 0xa6, 0x82, 0xf7, 0x2a, 0xa4, 0x1a, 0x3d, 0x0c, 0xfe, 0xd0, 0x55, 0xa3, 0xe9, 0xcc, 0xe7, - 0x96, 0x62, 0x17, 0xe2, 0x4a, 0xd6, 0x03, 0xd6, 0x9a, 0xce, 0x4a, 0xea, 0x43, 0x1f, 0x5f, 0x9c, - 0xfa, 0xfc, 0xc7, 0x17, 0xa7, 0xe4, 0xeb, 0xf4, 0x31, 0x24, 0xbe, 0x8e, 0xb0, 0x83, 0xae, 0x42, - 0x5a, 0x13, 0x05, 0xf6, 0xa9, 0xd3, 0x11, 0xeb, 0xd0, 0x47, 0x95, 0x7f, 0x22, 0x02, 0x89, 0xd5, - 0x5b, 0xdb, 0x9a, 0x61, 0xa3, 0x2a, 0xcc, 0xf8, 0x8a, 0x39, 0xe9, 0x92, 0xf6, 0x75, 0x59, 0xac, - 0xe9, 0xcd, 0x51, 0x17, 0xd5, 0xd2, 0xe5, 0x73, 0xbf, 0xf9, 0xe9, 0x27, 0xcf, 0x72, 0x36, 0xb7, - 0xfa, 0xee, 0xac, 0x09, 0x7e, 0xfd, 0x77, 0xd9, 0x02, 0x63, 0xbe, 0x09, 0x49, 0xd6, 0x55, 0x07, - 0xbd, 0x08, 0xd3, 0x5d, 0xf2, 0x83, 0xe7, 0xdf, 0x17, 0x46, 0x2a, 0x38, 0xc5, 0x0f, 0xaa, 0x03, - 0xa3, 0x93, 0xbf, 0x2d, 0x0a, 0xb0, 0x7a, 0xeb, 0x56, 0xc3, 0x36, 0xba, 0x6d, 0xec, 0xbe, 0x5d, - 0x63, 0xdf, 0x81, 0x13, 0x81, 0x8f, 0x78, 0x6d, 0xfd, 0xf8, 0xe3, 0x9f, 0xf5, 0xbf, 0xe7, 0xb5, - 0xf5, 0xa1, 0x6c, 0x9b, 0x8e, 0xeb, 0xb1, 0x8d, 0x1d, 0x9f, 0xed, 0xaa, 0xe3, 0x0e, 0x4a, 0xf6, - 0x55, 0xc8, 0xf8, 0xc2, 0x70, 0x50, 0x0d, 0x52, 0x2e, 0xff, 0xcd, 0x05, 0x2c, 0x8f, 0x16, 0xb0, - 0x20, 0x0b, 0x0a, 0xd9, 0x23, 0x97, 0xff, 0x3c, 0x02, 0x10, 0x58, 0x23, 0x5f, 0x9b, 0x3a, 0x46, - 0xc2, 0x75, 0x6e, 0x89, 0x63, 0x0f, 0xfc, 0x54, 0x23, 0x63, 0x10, 0x10, 0xea, 0x77, 0x44, 0x61, - 0x76, 0x47, 0xac, 0xde, 0xaf, 0x7d, 0x19, 0xec, 0x40, 0x12, 0x9b, 0xae, 0x6d, 0x78, 0x27, 0x48, - 0x4f, 0x8d, 0x9a, 0xf3, 0x21, 0x83, 0xaa, 0x9a, 0xae, 0x7d, 0x18, 0xd4, 0x00, 0xc1, 0x2b, 0x20, - 0x8f, 0x8f, 0xc6, 0x60, 0x7e, 0x14, 0x29, 0x3a, 0x0f, 0x05, 0xdd, 0xc6, 0x14, 0x10, 0xfe, 0xb6, - 0x31, 0x2f, 0xc0, 0x7c, 0x8f, 0x51, 0x80, 0x78, 0x65, 0x44, 0xb9, 0x08, 0xea, 0x83, 0xb9, 0x61, - 0x79, 0x9f, 0x03, 0xdd, 0x65, 0x1a, 0x50, 0x10, 0x1f, 0x4b, 0xec, 0x6a, 0x6d, 0xcd, 0xd4, 0x85, - 0xbb, 0x7a, 0xac, 0x2d, 0x41, 0x7c, 0x70, 0x51, 0x66, 0x2c, 0x50, 0x15, 0x92, 0x82, 0x5b, 0xfc, - 0xf8, 0xdc, 0x04, 0x2d, 0x3a, 0x07, 0xd9, 0xe0, 0xc6, 0x40, 0x5d, 0x8f, 0xb8, 0x92, 0x09, 0xec, - 0x0b, 0xe3, 0x76, 0x9e, 0xc4, 0x91, 0x3b, 0x0f, 0xf7, 0xee, 0x7e, 0x38, 0x06, 0x33, 0x0a, 0x6e, - 0xfe, 0xd5, 0x9f, 0x96, 0x6d, 0x00, 0xb6, 0x54, 0x89, 0x25, 0xe5, 0x33, 0xf3, 0x00, 0xeb, 0x3d, - 0xcd, 0x98, 0xac, 0x3a, 0xee, 0x3b, 0x35, 0x43, 0xbf, 0x1d, 0x85, 0x6c, 0x70, 0x86, 0xfe, 0xaf, - 0xdc, 0xb4, 0xd0, 0xa6, 0x6f, 0xa6, 0xd8, 0x77, 0x1f, 0x8f, 0x8d, 0x32, 0x53, 0x03, 0xda, 0x3c, - 0xc6, 0x3e, 0x7d, 0x2c, 0x06, 0x09, 0x7e, 0xbb, 0x6d, 0x6b, 0xc0, 0x91, 0x8d, 0x8c, 0xfb, 0x72, - 0x3d, 0x27, 0xbe, 0x5c, 0x1f, 0xea, 0xc7, 0x3e, 0x02, 0x79, 0x12, 0x10, 0x87, 0xae, 0xcc, 0x45, - 0x2e, 0xe4, 0x68, 0x5c, 0xeb, 0x5f, 0x10, 0x47, 0x8b, 0x90, 0x21, 0x68, 0xbe, 0x1d, 0x26, 0x38, - 0xd0, 0xd1, 0x0e, 0xaa, 0x0c, 0x82, 0x9e, 0x04, 0xb4, 0xef, 0x25, 0x28, 0x54, 0x5f, 0x10, 0x04, - 0x6f, 0xc6, 0xaf, 0x11, 0xe8, 0x67, 0x01, 0x48, 0x2f, 0x54, 0xf6, 0x3a, 0x31, 0x7f, 0xfb, 0x99, - 0x40, 0x56, 0xe9, 0x0b, 0xc5, 0xdf, 0x1c, 0x61, 0xfe, 0x70, 0x5f, 0xd8, 0xcc, 0xc3, 0x91, 0xc6, - 0x04, 0x8b, 0xe2, 0x4f, 0xde, 0x5a, 0x2c, 0x1e, 0x6a, 0x9d, 0xf6, 0x8a, 0x3c, 0x84, 0x8f, 0x3c, - 0x2c, 0x92, 0x27, 0x8e, 0x73, 0x38, 0xec, 0x5e, 0x79, 0x17, 0x51, 0xef, 0x7b, 0xbf, 0xff, 0x53, - 0x17, 0xcf, 0x04, 0x1e, 0x2b, 0x3e, 0xf0, 0xd2, 0x57, 0x6c, 0x4e, 0x88, 0xa7, 0x8a, 0xfc, 0x5d, - 0xc3, 0xbb, 0x17, 0xbf, 0x01, 0x10, 0xf0, 0xe4, 0x23, 0x47, 0x47, 0x08, 0x3e, 0x7d, 0x28, 0x42, - 0x08, 0xac, 0xa9, 0xf7, 0xfa, 0x46, 0x5b, 0x3c, 0x56, 0x30, 0xe4, 0xb9, 0xea, 0xe5, 0x8a, 0x65, - 0x84, 0x58, 0x08, 0x22, 0xba, 0x54, 0xa7, 0xe4, 0x7f, 0x1d, 0x81, 0xd3, 0x03, 0xea, 0xe7, 0x75, - 0x59, 0x07, 0x64, 0x07, 0x2a, 0xe9, 0x34, 0x8a, 0xa3, 0xd8, 0x07, 0xd3, 0xe6, 0x19, 0x7b, 0xc0, - 0x72, 0xbf, 0x3d, 0xbb, 0x0f, 0x37, 0x3d, 0xbf, 0x1e, 0x81, 0xb9, 0x60, 0x07, 0xbc, 0xa1, 0xd4, - 0x21, 0x1b, 0x6c, 0x9a, 0x0f, 0xe2, 0x5d, 0x93, 0x0c, 0x22, 0xd8, 0xff, 0x10, 0x13, 0x74, 0xcb, - 0x5f, 0xe2, 0x2c, 0x6f, 0xf6, 0xf4, 0xc4, 0x42, 0x11, 0x1d, 0x1b, 0xba, 0xd4, 0xd9, 0xdc, 0xfc, - 0x41, 0x04, 0xe2, 0xdb, 0x96, 0xd5, 0x46, 0xef, 0x87, 0x19, 0xd3, 0x72, 0x55, 0xb2, 0x1c, 0x70, - 0x53, 0xe5, 0x81, 0x3d, 0x33, 0x9f, 0xd5, 0x23, 0x65, 0xf5, 0x85, 0xb7, 0x16, 0x07, 0x29, 0x87, - 0x3d, 0x18, 0x5e, 0x30, 0x2d, 0xb7, 0x4c, 0x91, 0x1a, 0x2c, 0xf6, 0xdf, 0x83, 0x5c, 0xb8, 0x39, - 0x66, 0x62, 0x4b, 0xe3, 0x9a, 0xcb, 0x8d, 0x6d, 0x2a, 0xbb, 0x1b, 0x68, 0x87, 0xbd, 0xff, 0xfb, - 0x47, 0x64, 0xe6, 0x5e, 0x03, 0xe9, 0x56, 0xff, 0x05, 0x9f, 0x2a, 0x24, 0xc5, 0x85, 0x9e, 0xc8, - 0x84, 0x77, 0x85, 0x82, 0xe2, 0xe4, 0xb4, 0x17, 0x7f, 0x2e, 0x02, 0xe0, 0x27, 0x49, 0xd0, 0x13, - 0x70, 0xaa, 0xbc, 0xb5, 0xb9, 0xaa, 0xd6, 0x1b, 0xa5, 0xc6, 0x4e, 0x3d, 0xfc, 0x67, 0x26, 0xc4, - 0xc3, 0x39, 0x4e, 0x17, 0xeb, 0xc6, 0x9e, 0x81, 0x9b, 0xe8, 0x51, 0x98, 0x0b, 0x63, 0x93, 0x52, - 0x75, 0x55, 0x8a, 0x14, 0xb3, 0xf7, 0xee, 0x2f, 0xa5, 0x98, 0x9f, 0x88, 0x9b, 0xe8, 0x02, 0x9c, - 0x18, 0xc4, 0xab, 0x6d, 0xae, 0x49, 0xd1, 0x62, 0xee, 0xde, 0xfd, 0xa5, 0xb4, 0xe7, 0x50, 0x22, - 0x19, 0x50, 0x10, 0x93, 0xf3, 0x8b, 0x15, 0xe1, 0xde, 0xfd, 0xa5, 0x04, 0x9b, 0x85, 0x62, 0xfc, - 0x43, 0x3f, 0xba, 0x30, 0x75, 0xf1, 0x1b, 0x00, 0x6a, 0xe6, 0x9e, 0xad, 0xd1, 0xbf, 0xb5, 0x8e, - 0x8a, 0x70, 0xb2, 0xb6, 0x79, 0x5d, 0x29, 0x55, 0x1a, 0xb5, 0xad, 0xcd, 0xbe, 0xbf, 0x8e, 0x11, - 0xae, 0x5b, 0xdd, 0xda, 0x29, 0xaf, 0x57, 0xd5, 0x7a, 0x6d, 0x6d, 0x93, 0x1d, 0xb6, 0x86, 0xea, - 0x5e, 0xd9, 0x6c, 0xd4, 0x36, 0xaa, 0x52, 0xb4, 0x7c, 0x7d, 0x64, 0x32, 0xff, 0x89, 0x23, 0x9f, - 0x67, 0xf7, 0x2d, 0x5e, 0x28, 0xa3, 0xff, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xf4, 0xea, - 0x05, 0x71, 0x9f, 0x00, 0x00, + // 11322 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x94, 0x1c, 0xd7, + 0x75, 0x18, 0x3c, 0xd5, 0x7b, 0xdf, 0xde, 0x6a, 0xde, 0x0c, 0x80, 0x46, 0x83, 0xc4, 0x0c, 0x8b, + 0x22, 0x09, 0x82, 0xe4, 0x80, 0x04, 0x09, 0x90, 0x1c, 0x48, 0xe2, 0xd7, 0xdd, 0xd3, 0x00, 0x1a, + 0x9c, 0x8d, 0xd5, 0x3d, 0xe0, 0x62, 0x5b, 0xe5, 0x9a, 0xea, 0x37, 0x3d, 0x45, 0x74, 0x57, 0xb5, + 0xba, 0xaa, 0xc1, 0x19, 0xfe, 0xf8, 0x8e, 0x1c, 0xd9, 0x89, 0x0c, 0x2f, 0x91, 0x97, 0x63, 0xcb, + 0x96, 0x60, 0x4b, 0x76, 0x6c, 0xc9, 0x4e, 0x9c, 0xd8, 0x96, 0xe2, 0x25, 0x3e, 0x71, 0xec, 0x9c, + 0x2c, 0xb6, 0x4f, 0x16, 0xc5, 0x3f, 0x12, 0x9f, 0x9c, 0x63, 0xc6, 0x96, 0x7c, 0x62, 0x45, 0x96, + 0x13, 0x2f, 0x72, 0xe2, 0x1c, 0x9d, 0xf8, 0xe4, 0xbc, 0xad, 0x96, 0x5e, 0xa6, 0x7b, 0x20, 0x52, + 0x76, 0x9c, 0xfc, 0x01, 0xba, 0xee, 0xbb, 0xf7, 0xbe, 0xf7, 0xee, 0xbb, 0xef, 0xbe, 0x7b, 0xef, + 0x5b, 0x06, 0x7e, 0xf7, 0x2a, 0x2c, 0xb7, 0x6d, 0xbb, 0xdd, 0xc1, 0x17, 0x7a, 0x7d, 0xdb, 0xb5, + 0x77, 0x07, 0x7b, 0x17, 0x5a, 0xd8, 0x31, 0xfa, 0x66, 0xcf, 0xb5, 0xfb, 0x2b, 0x14, 0x86, 0x0a, + 0x0c, 0x63, 0x45, 0x60, 0x28, 0x1b, 0x30, 0x7f, 0xd5, 0xec, 0xe0, 0x35, 0x0f, 0xb1, 0x81, 0x5d, + 0xf4, 0x1c, 0xc4, 0xf6, 0xcc, 0x0e, 0x2e, 0x4a, 0xcb, 0xd1, 0x73, 0x99, 0x8b, 0xef, 0x5a, 0x19, + 0x22, 0x5a, 0x09, 0x53, 0x6c, 0x13, 0xb0, 0x4a, 0x29, 0x94, 0xbf, 0x88, 0xc1, 0xc2, 0x98, 0x52, + 0x84, 0x20, 0x66, 0xe9, 0x5d, 0xc2, 0x51, 0x3a, 0x97, 0x56, 0xe9, 0x6f, 0x54, 0x84, 0x64, 0x4f, + 0x37, 0x6e, 0xe9, 0x6d, 0x5c, 0x8c, 0x50, 0xb0, 0xf8, 0x44, 0x67, 0x01, 0x5a, 0xb8, 0x87, 0xad, + 0x16, 0xb6, 0x8c, 0xc3, 0x62, 0x74, 0x39, 0x7a, 0x2e, 0xad, 0x06, 0x20, 0xe8, 0x31, 0x98, 0xef, + 0x0d, 0x76, 0x3b, 0xa6, 0xa1, 0x05, 0xd0, 0x60, 0x39, 0x7a, 0x2e, 0xae, 0xca, 0xac, 0x60, 0xcd, + 0x47, 0x7e, 0x04, 0x0a, 0x6f, 0x60, 0xfd, 0x56, 0x10, 0x35, 0x43, 0x51, 0xf3, 0x04, 0x1c, 0x40, + 0xac, 0x42, 0xb6, 0x8b, 0x1d, 0x47, 0x6f, 0x63, 0xcd, 0x3d, 0xec, 0xe1, 0x62, 0x8c, 0xf6, 0x7e, + 0x79, 0xa4, 0xf7, 0xc3, 0x3d, 0xcf, 0x70, 0xaa, 0xe6, 0x61, 0x0f, 0xa3, 0x32, 0xa4, 0xb1, 0x35, + 0xe8, 0x32, 0x0e, 0xf1, 0x09, 0xf2, 0xab, 0x59, 0x83, 0xee, 0x30, 0x97, 0x14, 0x21, 0xe3, 0x2c, + 0x92, 0x0e, 0xee, 0xdf, 0x36, 0x0d, 0x5c, 0x4c, 0x50, 0x06, 0x8f, 0x8c, 0x30, 0x68, 0xb0, 0xf2, + 0x61, 0x1e, 0x82, 0x0e, 0x55, 0x21, 0x8d, 0x0f, 0x5c, 0x6c, 0x39, 0xa6, 0x6d, 0x15, 0x93, 0x94, + 0xc9, 0x43, 0x63, 0x46, 0x11, 0x77, 0x5a, 0xc3, 0x2c, 0x7c, 0x3a, 0x74, 0x19, 0x92, 0x76, 0xcf, + 0x35, 0x6d, 0xcb, 0x29, 0xa6, 0x96, 0xa5, 0x73, 0x99, 0x8b, 0xf7, 0x8d, 0x55, 0x84, 0x2d, 0x86, + 0xa3, 0x0a, 0x64, 0x54, 0x07, 0xd9, 0xb1, 0x07, 0x7d, 0x03, 0x6b, 0x86, 0xdd, 0xc2, 0x9a, 0x69, + 0xed, 0xd9, 0xc5, 0x34, 0x65, 0xb0, 0x34, 0xda, 0x11, 0x8a, 0x58, 0xb5, 0x5b, 0xb8, 0x6e, 0xed, + 0xd9, 0x6a, 0xde, 0x09, 0x7d, 0xa3, 0x93, 0x90, 0x70, 0x0e, 0x2d, 0x57, 0x3f, 0x28, 0x66, 0xa9, + 0x86, 0xf0, 0x2f, 0xa2, 0x3a, 0xb8, 0x65, 0x92, 0xea, 0x8a, 0x39, 0xa6, 0x3a, 0xfc, 0x53, 0xf9, + 0xc5, 0x04, 0x14, 0x66, 0x51, 0xbe, 0x2b, 0x10, 0xdf, 0x23, 0xfd, 0x2f, 0x46, 0x8e, 0x23, 0x1d, + 0x46, 0x13, 0x16, 0x6f, 0xe2, 0x1e, 0xc5, 0x5b, 0x86, 0x8c, 0x85, 0x1d, 0x17, 0xb7, 0x98, 0xae, + 0x44, 0x67, 0xd4, 0x36, 0x60, 0x44, 0xa3, 0xca, 0x16, 0xbb, 0x27, 0x65, 0x7b, 0x05, 0x0a, 0x5e, + 0x93, 0xb4, 0xbe, 0x6e, 0xb5, 0x85, 0xd6, 0x5e, 0x98, 0xd6, 0x92, 0x95, 0x9a, 0xa0, 0x53, 0x09, + 0x99, 0x9a, 0xc7, 0xa1, 0x6f, 0xb4, 0x06, 0x60, 0x5b, 0xd8, 0xde, 0xd3, 0x5a, 0xd8, 0xe8, 0x14, + 0x53, 0x13, 0xa4, 0xb4, 0x45, 0x50, 0x46, 0xa4, 0x64, 0x33, 0xa8, 0xd1, 0x41, 0xcf, 0xfb, 0x4a, + 0x98, 0x9c, 0xa0, 0x43, 0x1b, 0x6c, 0xfa, 0x8d, 0xe8, 0xe1, 0x0e, 0xe4, 0xfb, 0x98, 0xcc, 0x08, + 0xdc, 0xe2, 0x3d, 0x4b, 0xd3, 0x46, 0xac, 0x4c, 0xed, 0x99, 0xca, 0xc9, 0x58, 0xc7, 0x72, 0xfd, + 0xe0, 0x27, 0x7a, 0x10, 0x3c, 0x80, 0x46, 0xd5, 0x0a, 0xa8, 0x7d, 0xca, 0x0a, 0xe0, 0xa6, 0xde, + 0xc5, 0xa5, 0x37, 0x21, 0x1f, 0x16, 0x0f, 0x5a, 0x84, 0xb8, 0xe3, 0xea, 0x7d, 0x97, 0x6a, 0x61, + 0x5c, 0x65, 0x1f, 0x48, 0x86, 0x28, 0xb6, 0x5a, 0xd4, 0xfe, 0xc5, 0x55, 0xf2, 0x13, 0xfd, 0x7f, + 0x7e, 0x87, 0xa3, 0xb4, 0xc3, 0x0f, 0x8f, 0x8e, 0x68, 0x88, 0xf3, 0x70, 0xbf, 0x4b, 0xcf, 0x42, + 0x2e, 0xd4, 0x81, 0x59, 0xab, 0x56, 0x7e, 0x2a, 0x06, 0x27, 0xc6, 0xf2, 0x46, 0xaf, 0xc0, 0xe2, + 0xc0, 0x32, 0x2d, 0x17, 0xf7, 0x7b, 0x7d, 0x4c, 0x54, 0x96, 0xd5, 0x55, 0xfc, 0xfd, 0xe4, 0x04, + 0xa5, 0xdb, 0x09, 0x62, 0x33, 0x2e, 0xea, 0xc2, 0x60, 0x14, 0x88, 0x5e, 0x85, 0x0c, 0xd1, 0x0f, + 0xbd, 0xaf, 0x53, 0x86, 0x6c, 0x36, 0x5e, 0x9c, 0xad, 0xcb, 0x2b, 0x6b, 0x3e, 0x65, 0x25, 0xfa, + 0x21, 0x29, 0xa2, 0x06, 0x79, 0xa1, 0x7d, 0xc8, 0xde, 0xc6, 0x7d, 0x73, 0xcf, 0x34, 0x18, 0x6f, + 0x22, 0xce, 0xfc, 0xc5, 0xe7, 0x66, 0xe4, 0x7d, 0x33, 0x40, 0xda, 0x70, 0x75, 0x17, 0xaf, 0xc2, + 0xce, 0xe6, 0xcd, 0x9a, 0x5a, 0xbf, 0x5a, 0xaf, 0xad, 0xa9, 0x21, 0xce, 0xa5, 0x4f, 0x4b, 0x90, + 0x09, 0xb4, 0x85, 0x98, 0x2d, 0x6b, 0xd0, 0xdd, 0xc5, 0x7d, 0x2e, 0x71, 0xfe, 0x85, 0xce, 0x40, + 0x7a, 0x6f, 0xd0, 0xe9, 0x30, 0xb5, 0x61, 0x6b, 0x5e, 0x8a, 0x00, 0x88, 0xca, 0x10, 0x2b, 0xc5, + 0x0d, 0x01, 0xb5, 0x52, 0xe4, 0x37, 0x7a, 0x10, 0x32, 0xa6, 0xa3, 0xf5, 0x71, 0x0f, 0xeb, 0x2e, + 0x6e, 0x15, 0x63, 0xcb, 0xd2, 0xb9, 0x54, 0x25, 0x52, 0x94, 0x54, 0x30, 0x1d, 0x95, 0x43, 0x51, + 0x09, 0x52, 0x42, 0xf7, 0x8a, 0x71, 0x82, 0xa1, 0x7a, 0xdf, 0xac, 0x8c, 0x53, 0x27, 0x44, 0x19, + 0xfb, 0x56, 0x9e, 0x81, 0xf9, 0x91, 0x4e, 0xa2, 0x02, 0x64, 0xd6, 0x6a, 0xd5, 0xf5, 0xb2, 0x5a, + 0x6e, 0xd6, 0xb7, 0x36, 0xe5, 0x39, 0x94, 0x87, 0x40, 0xbf, 0x65, 0xe9, 0x7c, 0x3a, 0xf5, 0x85, + 0xa4, 0xfc, 0x81, 0x0f, 0x7c, 0xe0, 0x03, 0x11, 0xe5, 0x57, 0x13, 0xb0, 0x38, 0xce, 0xca, 0x8d, + 0x35, 0xb8, 0xbe, 0x4c, 0xa2, 0x21, 0x99, 0x94, 0x21, 0xde, 0xd1, 0x77, 0x71, 0x87, 0x76, 0x2e, + 0x7f, 0xf1, 0xb1, 0x99, 0xec, 0xe8, 0xca, 0x3a, 0x21, 0x51, 0x19, 0x25, 0x7a, 0x2f, 0x97, 0x5c, + 0x9c, 0x72, 0x38, 0x3f, 0x1b, 0x07, 0x62, 0xfd, 0xb8, 0x94, 0xcf, 0x40, 0x9a, 0xfc, 0xcf, 0x86, + 0x25, 0xc1, 0x86, 0x85, 0x00, 0xe8, 0xb0, 0x94, 0x20, 0x45, 0x0d, 0x5b, 0x0b, 0x7b, 0x43, 0x26, + 0xbe, 0x89, 0x29, 0x68, 0xe1, 0x3d, 0x7d, 0xd0, 0x71, 0xb5, 0xdb, 0x7a, 0x67, 0x80, 0xa9, 0x89, + 0x4a, 0xab, 0x59, 0x0e, 0xbc, 0x49, 0x60, 0x68, 0x09, 0x32, 0xcc, 0x0e, 0x9a, 0x56, 0x0b, 0x1f, + 0xd0, 0x95, 0x30, 0xae, 0x32, 0xd3, 0x58, 0x27, 0x10, 0x52, 0xfd, 0xeb, 0x8e, 0x6d, 0x09, 0x63, + 0x42, 0xab, 0x20, 0x00, 0x5a, 0xfd, 0xb3, 0xc3, 0x8b, 0xf0, 0xfd, 0xe3, 0xbb, 0x37, 0x62, 0xfd, + 0x1e, 0x81, 0x02, 0xc5, 0x78, 0x9a, 0xcf, 0x55, 0xbd, 0x53, 0x9c, 0xa7, 0x0a, 0x90, 0x67, 0xe0, + 0x2d, 0x0e, 0x55, 0x7e, 0x2e, 0x02, 0x31, 0xba, 0x14, 0x14, 0x20, 0xd3, 0x7c, 0x75, 0xbb, 0xa6, + 0xad, 0x6d, 0xed, 0x54, 0xd6, 0x6b, 0xb2, 0x44, 0x86, 0x9e, 0x02, 0xae, 0xae, 0x6f, 0x95, 0x9b, + 0x72, 0xc4, 0xfb, 0xae, 0x6f, 0x36, 0x2f, 0x3f, 0x23, 0x47, 0x3d, 0x82, 0x1d, 0x06, 0x88, 0x05, + 0x11, 0x9e, 0xbe, 0x28, 0xc7, 0x91, 0x0c, 0x59, 0xc6, 0xa0, 0xfe, 0x4a, 0x6d, 0xed, 0xf2, 0x33, + 0x72, 0x22, 0x0c, 0x79, 0xfa, 0xa2, 0x9c, 0x44, 0x39, 0x48, 0x53, 0x48, 0x65, 0x6b, 0x6b, 0x5d, + 0x4e, 0x79, 0x3c, 0x1b, 0x4d, 0xb5, 0xbe, 0x79, 0x4d, 0x4e, 0x7b, 0x3c, 0xaf, 0xa9, 0x5b, 0x3b, + 0xdb, 0x32, 0x78, 0x1c, 0x36, 0x6a, 0x8d, 0x46, 0xf9, 0x5a, 0x4d, 0xce, 0x78, 0x18, 0x95, 0x57, + 0x9b, 0xb5, 0x86, 0x9c, 0x0d, 0x35, 0xeb, 0xe9, 0x8b, 0x72, 0xce, 0xab, 0xa2, 0xb6, 0xb9, 0xb3, + 0x21, 0xe7, 0xd1, 0x3c, 0xe4, 0x58, 0x15, 0xa2, 0x11, 0x85, 0x21, 0xd0, 0xe5, 0x67, 0x64, 0xd9, + 0x6f, 0x08, 0xe3, 0x32, 0x1f, 0x02, 0x5c, 0x7e, 0x46, 0x46, 0x4a, 0x15, 0xe2, 0x54, 0x0d, 0x11, + 0x82, 0xfc, 0x7a, 0xb9, 0x52, 0x5b, 0xd7, 0xb6, 0xb6, 0xc9, 0xa4, 0x29, 0xaf, 0xcb, 0x92, 0x0f, + 0x53, 0x6b, 0x2f, 0xed, 0xd4, 0xd5, 0xda, 0x9a, 0x1c, 0x09, 0xc2, 0xb6, 0x6b, 0xe5, 0x66, 0x6d, + 0x4d, 0x8e, 0x2a, 0x06, 0x2c, 0x8e, 0x5b, 0x02, 0xc7, 0x4e, 0xa1, 0x80, 0x2e, 0x44, 0x26, 0xe8, + 0x02, 0xe5, 0x35, 0xac, 0x0b, 0xca, 0xe7, 0x23, 0xb0, 0x30, 0xc6, 0x0d, 0x18, 0x5b, 0xc9, 0x0b, + 0x10, 0x67, 0xba, 0xcc, 0x4c, 0xf1, 0xa3, 0x63, 0xfd, 0x09, 0xaa, 0xd9, 0x23, 0xce, 0x11, 0xa5, + 0x0b, 0xba, 0x8d, 0xd1, 0x09, 0x6e, 0x23, 0x61, 0x31, 0xa2, 0xb0, 0xdf, 0x30, 0xb2, 0x5c, 0x33, + 0x8f, 0xe6, 0xf2, 0x2c, 0x1e, 0x0d, 0x85, 0x1d, 0x6f, 0xd9, 0x8e, 0x8f, 0x59, 0xb6, 0xaf, 0xc0, + 0xfc, 0x08, 0xa3, 0x99, 0x97, 0xcf, 0x0f, 0x4a, 0x50, 0x9c, 0x24, 0x9c, 0x29, 0x26, 0x31, 0x12, + 0x32, 0x89, 0x57, 0x86, 0x25, 0xf8, 0xc0, 0xe4, 0x41, 0x18, 0x19, 0xeb, 0x4f, 0x4a, 0x70, 0x72, + 0x7c, 0x78, 0x30, 0xb6, 0x0d, 0xef, 0x85, 0x44, 0x17, 0xbb, 0xfb, 0xb6, 0x70, 0x84, 0x1f, 0x1e, + 0xe3, 0x5e, 0x91, 0xe2, 0xe1, 0xc1, 0xe6, 0x54, 0x41, 0xff, 0x2c, 0x3a, 0xc9, 0xc7, 0x67, 0xad, + 0x19, 0x69, 0xe9, 0xb7, 0x46, 0xe0, 0xc4, 0x58, 0xe6, 0x63, 0x1b, 0x7a, 0x3f, 0x80, 0x69, 0xf5, + 0x06, 0x2e, 0x73, 0x76, 0x99, 0x25, 0x4e, 0x53, 0x08, 0x35, 0x5e, 0xc4, 0xca, 0x0e, 0x5c, 0xaf, + 0x9c, 0x2d, 0xa2, 0xc0, 0x40, 0x14, 0xe1, 0x39, 0xbf, 0xa1, 0x31, 0xda, 0xd0, 0xb3, 0x13, 0x7a, + 0x3a, 0xa2, 0x98, 0x4f, 0x82, 0x6c, 0x74, 0x4c, 0x6c, 0xb9, 0x9a, 0xe3, 0xf6, 0xb1, 0xde, 0x35, + 0xad, 0x36, 0x5b, 0x67, 0x57, 0xe3, 0x7b, 0x7a, 0xc7, 0xc1, 0x6a, 0x81, 0x15, 0x37, 0x44, 0x29, + 0xa1, 0xa0, 0x0a, 0xd4, 0x0f, 0x50, 0x24, 0x42, 0x14, 0xac, 0xd8, 0xa3, 0x50, 0xbe, 0x2b, 0x0d, + 0x99, 0x40, 0x30, 0x85, 0x1e, 0x80, 0xec, 0xeb, 0xfa, 0x6d, 0x5d, 0x13, 0x01, 0x32, 0x93, 0x44, + 0x86, 0xc0, 0xb6, 0x79, 0x90, 0xfc, 0x24, 0x2c, 0x52, 0x14, 0x7b, 0xe0, 0xe2, 0xbe, 0x66, 0x74, + 0x74, 0xc7, 0xa1, 0x42, 0x4b, 0x51, 0x54, 0x44, 0xca, 0xb6, 0x48, 0x51, 0x55, 0x94, 0xa0, 0x4b, + 0xb0, 0x40, 0x29, 0xba, 0x83, 0x8e, 0x6b, 0xf6, 0x3a, 0x58, 0x23, 0x21, 0xbb, 0x43, 0x97, 0x1c, + 0xaf, 0x65, 0xf3, 0x04, 0x63, 0x83, 0x23, 0x90, 0x16, 0x39, 0x68, 0x0d, 0xee, 0xa7, 0x64, 0x6d, + 0x6c, 0xe1, 0xbe, 0xee, 0x62, 0x0d, 0xbf, 0x7f, 0xa0, 0x77, 0x1c, 0x4d, 0xb7, 0x5a, 0xda, 0xbe, + 0xee, 0xec, 0x17, 0x17, 0x3d, 0xb7, 0xe4, 0x34, 0x41, 0xbc, 0xc6, 0xf1, 0x6a, 0x14, 0xad, 0x6c, + 0xb5, 0xae, 0xeb, 0xce, 0x3e, 0x5a, 0x85, 0x93, 0x94, 0x8b, 0xe3, 0xf6, 0x4d, 0xab, 0xad, 0x19, + 0xfb, 0xd8, 0xb8, 0xa5, 0x0d, 0xdc, 0xbd, 0xe7, 0x8a, 0x67, 0x82, 0xf5, 0xd3, 0x16, 0x36, 0x28, + 0x4e, 0x95, 0xa0, 0xec, 0xb8, 0x7b, 0xcf, 0xa1, 0x06, 0x64, 0xc9, 0x60, 0x74, 0xcd, 0x37, 0xb1, + 0xb6, 0x67, 0xf7, 0xe9, 0x1a, 0x9a, 0x1f, 0x63, 0x9a, 0x02, 0x12, 0x5c, 0xd9, 0xe2, 0x04, 0x1b, + 0x76, 0x0b, 0xaf, 0xc6, 0x1b, 0xdb, 0xb5, 0xda, 0x9a, 0x9a, 0x11, 0x5c, 0xae, 0xda, 0x7d, 0xa2, + 0x50, 0x6d, 0xdb, 0x13, 0x70, 0x86, 0x29, 0x54, 0xdb, 0x16, 0xe2, 0xbd, 0x04, 0x0b, 0x86, 0xc1, + 0xfa, 0x6c, 0x1a, 0x1a, 0x0f, 0xac, 0x9d, 0xa2, 0x1c, 0x12, 0x96, 0x61, 0x5c, 0x63, 0x08, 0x5c, + 0xc7, 0x1d, 0xf4, 0x3c, 0x9c, 0xf0, 0x85, 0x15, 0x24, 0x9c, 0x1f, 0xe9, 0xe5, 0x30, 0xe9, 0x25, + 0x58, 0xe8, 0x1d, 0x8e, 0x12, 0xa2, 0x50, 0x8d, 0xbd, 0xc3, 0x61, 0xb2, 0x67, 0x61, 0xb1, 0xb7, + 0xdf, 0x1b, 0xa5, 0x3b, 0x1f, 0xa4, 0x43, 0xbd, 0xfd, 0xde, 0x30, 0xe1, 0x43, 0x34, 0xcb, 0xd2, + 0xc7, 0x06, 0xf5, 0x0e, 0x4f, 0x05, 0xd1, 0x03, 0x05, 0x68, 0x05, 0x64, 0xc3, 0xd0, 0xb0, 0xa5, + 0xef, 0x76, 0xb0, 0xa6, 0xf7, 0xb1, 0xa5, 0x3b, 0xc5, 0x25, 0x8a, 0x1c, 0x73, 0xfb, 0x03, 0xac, + 0xe6, 0x0d, 0xa3, 0x46, 0x0b, 0xcb, 0xb4, 0x0c, 0x9d, 0x87, 0x79, 0x7b, 0xf7, 0x75, 0x83, 0x69, + 0xa4, 0xd6, 0xeb, 0xe3, 0x3d, 0xf3, 0xa0, 0xf8, 0x2e, 0x2a, 0xde, 0x02, 0x29, 0xa0, 0xfa, 0xb8, + 0x4d, 0xc1, 0xe8, 0x51, 0x90, 0x0d, 0x67, 0x5f, 0xef, 0xf7, 0xa8, 0x49, 0x76, 0x7a, 0xba, 0x81, + 0x8b, 0x0f, 0x31, 0x54, 0x06, 0xdf, 0x14, 0x60, 0x32, 0x23, 0x9c, 0x37, 0xcc, 0x3d, 0x57, 0x70, + 0x7c, 0x84, 0xcd, 0x08, 0x0a, 0xe3, 0xdc, 0xce, 0x81, 0x4c, 0x24, 0x11, 0xaa, 0xf8, 0x1c, 0x45, + 0xcb, 0xf7, 0xf6, 0x7b, 0xc1, 0x7a, 0x1f, 0x84, 0x1c, 0xc1, 0xf4, 0x2b, 0x7d, 0x94, 0x39, 0x6e, + 0xbd, 0xfd, 0x40, 0x8d, 0xcf, 0xc0, 0x49, 0x82, 0xd4, 0xc5, 0xae, 0xde, 0xd2, 0x5d, 0x3d, 0x80, + 0xfd, 0x38, 0xc5, 0x26, 0x62, 0xdf, 0xe0, 0x85, 0xa1, 0x76, 0xf6, 0x07, 0xbb, 0x87, 0x9e, 0x62, + 0x3d, 0xc1, 0xda, 0x49, 0x60, 0x42, 0xb5, 0xde, 0xb1, 0x68, 0x4a, 0x59, 0x85, 0x6c, 0x50, 0xef, + 0x51, 0x1a, 0x98, 0xe6, 0xcb, 0x12, 0x71, 0x82, 0xaa, 0x5b, 0x6b, 0xc4, 0x7d, 0x79, 0xad, 0x26, + 0x47, 0x88, 0x1b, 0xb5, 0x5e, 0x6f, 0xd6, 0x34, 0x75, 0x67, 0xb3, 0x59, 0xdf, 0xa8, 0xc9, 0xd1, + 0x80, 0x63, 0x7f, 0x23, 0x96, 0x7a, 0x58, 0x7e, 0x44, 0xf9, 0xa5, 0x28, 0xe4, 0xc3, 0xb1, 0x35, + 0x7a, 0x37, 0x9c, 0x12, 0x29, 0x32, 0x07, 0xbb, 0xda, 0x1b, 0x66, 0x9f, 0x4e, 0xc8, 0xae, 0xce, + 0x16, 0x47, 0x4f, 0x7f, 0x16, 0x39, 0x56, 0x03, 0xbb, 0x2f, 0x9b, 0x7d, 0x32, 0xdd, 0xba, 0xba, + 0x8b, 0xd6, 0x61, 0xc9, 0xb2, 0x35, 0xc7, 0xd5, 0xad, 0x96, 0xde, 0x6f, 0x69, 0x7e, 0x72, 0x52, + 0xd3, 0x0d, 0x03, 0x3b, 0x8e, 0xcd, 0x16, 0x42, 0x8f, 0xcb, 0x7d, 0x96, 0xdd, 0xe0, 0xc8, 0xfe, + 0x0a, 0x51, 0xe6, 0xa8, 0x43, 0xea, 0x1b, 0x9d, 0xa4, 0xbe, 0x67, 0x20, 0xdd, 0xd5, 0x7b, 0x1a, + 0xb6, 0xdc, 0xfe, 0x21, 0xf5, 0xcf, 0x53, 0x6a, 0xaa, 0xab, 0xf7, 0x6a, 0xe4, 0x1b, 0xdd, 0x84, + 0x87, 0x7d, 0x54, 0xad, 0x83, 0xdb, 0xba, 0x71, 0xa8, 0x51, 0x67, 0x9c, 0x26, 0x7a, 0x34, 0xc3, + 0xb6, 0xf6, 0x3a, 0xa6, 0xe1, 0x3a, 0xd4, 0x3e, 0x30, 0x1b, 0xa7, 0xf8, 0x14, 0xeb, 0x94, 0xe0, + 0x86, 0x63, 0x5b, 0xd4, 0x07, 0xaf, 0x0a, 0xec, 0x77, 0x6e, 0x84, 0xc3, 0xa3, 0x14, 0x93, 0xe3, + 0x37, 0x62, 0xa9, 0xb8, 0x9c, 0xb8, 0x11, 0x4b, 0x25, 0xe4, 0xe4, 0x8d, 0x58, 0x2a, 0x25, 0xa7, + 0x6f, 0xc4, 0x52, 0x69, 0x19, 0x94, 0x6f, 0x49, 0x43, 0x36, 0x18, 0x19, 0x90, 0x40, 0xcb, 0xa0, + 0x6b, 0xa3, 0x44, 0xad, 0xe7, 0x83, 0x47, 0xc6, 0x11, 0x2b, 0x55, 0xb2, 0x68, 0xae, 0x26, 0x98, + 0x1b, 0xae, 0x32, 0x4a, 0xe2, 0xb0, 0x10, 0xb5, 0xc6, 0xcc, 0xed, 0x49, 0xa9, 0xfc, 0x0b, 0x5d, + 0x83, 0xc4, 0xeb, 0x0e, 0xe5, 0x9d, 0xa0, 0xbc, 0xdf, 0x75, 0x34, 0xef, 0x1b, 0x0d, 0xca, 0x3c, + 0x7d, 0xa3, 0xa1, 0x6d, 0x6e, 0xa9, 0x1b, 0xe5, 0x75, 0x95, 0x93, 0xa3, 0xd3, 0x10, 0xeb, 0xe8, + 0x6f, 0x1e, 0x86, 0x97, 0x57, 0x0a, 0x42, 0x2b, 0x50, 0x18, 0x58, 0x2c, 0xea, 0x26, 0x43, 0x45, + 0xb0, 0x0a, 0x41, 0xac, 0xbc, 0x5f, 0xba, 0x4e, 0xf0, 0x67, 0x54, 0x8f, 0xd3, 0x10, 0x7b, 0x03, + 0xeb, 0xb7, 0xc2, 0x8b, 0x20, 0x05, 0xa1, 0x73, 0x90, 0x6d, 0xe1, 0xdd, 0x41, 0x5b, 0xeb, 0xe3, + 0x96, 0x6e, 0xb8, 0x61, 0xd3, 0x9f, 0xa1, 0x45, 0x2a, 0x2d, 0x41, 0x2f, 0x42, 0x9a, 0x8c, 0x91, + 0x45, 0xc7, 0x78, 0x9e, 0x8a, 0xe0, 0x89, 0xa3, 0x45, 0xc0, 0x87, 0x58, 0x10, 0xa9, 0x3e, 0x3d, + 0xba, 0x01, 0x09, 0x57, 0xef, 0xb7, 0xb1, 0x4b, 0x2d, 0x7f, 0x7e, 0x4c, 0xba, 0x6a, 0x0c, 0xa7, + 0x26, 0xa5, 0x20, 0x62, 0xa5, 0x3a, 0xca, 0x39, 0xa0, 0xeb, 0x90, 0x64, 0xbf, 0x9c, 0xe2, 0xc2, + 0x72, 0xf4, 0xf8, 0xcc, 0x54, 0x41, 0xfe, 0x0e, 0xda, 0xac, 0x0b, 0x10, 0xa7, 0xca, 0x86, 0x00, + 0xb8, 0xba, 0xc9, 0x73, 0x28, 0x05, 0xb1, 0xea, 0x96, 0x4a, 0xec, 0x96, 0x0c, 0x59, 0x06, 0xd5, + 0xb6, 0xeb, 0xb5, 0x6a, 0x4d, 0x8e, 0x28, 0x97, 0x20, 0xc1, 0x34, 0x88, 0xd8, 0x34, 0x4f, 0x87, + 0xe4, 0x39, 0xfe, 0xc9, 0x79, 0x48, 0xa2, 0x74, 0x67, 0xa3, 0x52, 0x53, 0xe5, 0x88, 0xb2, 0x03, + 0x85, 0x21, 0xa9, 0xa3, 0x13, 0x30, 0xaf, 0xd6, 0x9a, 0xb5, 0x4d, 0x12, 0xb5, 0x69, 0x3b, 0x9b, + 0x2f, 0x6e, 0x6e, 0xbd, 0xbc, 0x29, 0xcf, 0x85, 0xc1, 0xc2, 0x40, 0x4a, 0x68, 0x11, 0x64, 0x1f, + 0xdc, 0xd8, 0xda, 0x51, 0x69, 0x6b, 0xbe, 0x3d, 0x02, 0xf2, 0xb0, 0xd8, 0xd0, 0x29, 0x58, 0x68, + 0x96, 0xd5, 0x6b, 0xb5, 0xa6, 0xc6, 0x22, 0x51, 0x8f, 0xf5, 0x22, 0xc8, 0xc1, 0x82, 0xab, 0x75, + 0x1a, 0x68, 0x2f, 0xc1, 0x99, 0x20, 0xb4, 0xf6, 0x4a, 0xb3, 0xb6, 0xd9, 0xa0, 0x95, 0x97, 0x37, + 0xaf, 0x11, 0x6b, 0x3d, 0xc4, 0x4f, 0xc4, 0xbe, 0x51, 0xd2, 0xd4, 0x30, 0xbf, 0xda, 0xfa, 0x9a, + 0x1c, 0x1b, 0x06, 0x6f, 0x6d, 0xd6, 0xb6, 0xae, 0xca, 0xf1, 0xe1, 0xda, 0x69, 0x3c, 0x9c, 0x40, + 0x25, 0x38, 0x39, 0x0c, 0xd5, 0x6a, 0x9b, 0x4d, 0xf5, 0x55, 0x39, 0x39, 0x5c, 0x71, 0xa3, 0xa6, + 0xde, 0xac, 0x57, 0x6b, 0x72, 0x0a, 0x9d, 0x04, 0x14, 0x6e, 0x51, 0xf3, 0xfa, 0xd6, 0x9a, 0x9c, + 0x1e, 0xb1, 0x4f, 0x8a, 0x03, 0xd9, 0x60, 0x50, 0xfa, 0x35, 0x31, 0x8d, 0xca, 0x47, 0x22, 0x90, + 0x09, 0x04, 0x99, 0x24, 0x3a, 0xd0, 0x3b, 0x1d, 0xfb, 0x0d, 0x4d, 0xef, 0x98, 0xba, 0xc3, 0xad, + 0x17, 0x50, 0x50, 0x99, 0x40, 0x66, 0xb5, 0x16, 0xb3, 0xaf, 0x17, 0x89, 0xbf, 0x8a, 0xeb, 0x45, + 0x5c, 0x4e, 0x28, 0x3f, 0x24, 0x81, 0x3c, 0x1c, 0x3d, 0x0e, 0x75, 0x5f, 0x9a, 0xd4, 0xfd, 0xaf, + 0xc9, 0xd8, 0x7d, 0x4c, 0x82, 0x7c, 0x38, 0x64, 0x1c, 0x6a, 0xde, 0x03, 0x7f, 0xa9, 0xcd, 0xfb, + 0x9d, 0x08, 0xe4, 0x42, 0x81, 0xe2, 0xac, 0xad, 0x7b, 0x3f, 0xcc, 0x9b, 0x2d, 0xdc, 0xed, 0xd9, + 0x2e, 0xb6, 0x8c, 0x43, 0xad, 0x83, 0x6f, 0xe3, 0x4e, 0x51, 0xa1, 0x26, 0xfe, 0xc2, 0xd1, 0xa1, + 0xe8, 0x4a, 0xdd, 0xa7, 0x5b, 0x27, 0x64, 0xab, 0x0b, 0xf5, 0xb5, 0xda, 0xc6, 0xf6, 0x56, 0xb3, + 0xb6, 0x59, 0x7d, 0x55, 0x58, 0x17, 0x55, 0x36, 0x87, 0xd0, 0xde, 0x41, 0xa3, 0xbd, 0x0d, 0xf2, + 0x70, 0xa3, 0x88, 0xad, 0x18, 0xd3, 0x2c, 0x79, 0x0e, 0x2d, 0x40, 0x61, 0x73, 0x4b, 0x6b, 0xd4, + 0xd7, 0x6a, 0x5a, 0xed, 0xea, 0xd5, 0x5a, 0xb5, 0xd9, 0x60, 0xc9, 0x45, 0x0f, 0xbb, 0x29, 0x47, + 0x82, 0x22, 0xfe, 0xc1, 0x28, 0x2c, 0x8c, 0x69, 0x09, 0x2a, 0xf3, 0xb4, 0x00, 0xcb, 0x54, 0x3c, + 0x31, 0x4b, 0xeb, 0x57, 0x88, 0x63, 0xbe, 0xad, 0xf7, 0x5d, 0x9e, 0x45, 0x78, 0x14, 0x88, 0x94, + 0x2c, 0x97, 0xf8, 0x09, 0x7d, 0x9e, 0xb4, 0x65, 0xb9, 0x82, 0x82, 0x0f, 0x67, 0x79, 0xdb, 0xc7, + 0x01, 0xf5, 0x6c, 0xc7, 0x74, 0xcd, 0xdb, 0x58, 0x33, 0x2d, 0x91, 0xe1, 0x8d, 0x2d, 0x4b, 0xe7, + 0x62, 0xaa, 0x2c, 0x4a, 0xea, 0x96, 0xeb, 0x61, 0x5b, 0xb8, 0xad, 0x0f, 0x61, 0x13, 0x3f, 0x26, + 0xaa, 0xca, 0xa2, 0xc4, 0xc3, 0x7e, 0x00, 0xb2, 0x2d, 0x7b, 0x40, 0x02, 0x2a, 0x86, 0x47, 0xac, + 0x85, 0xa4, 0x66, 0x18, 0xcc, 0x43, 0xe1, 0xa1, 0xb2, 0x9f, 0x5a, 0xce, 0xaa, 0x19, 0x06, 0x63, + 0x28, 0x8f, 0x40, 0x41, 0x6f, 0xb7, 0xfb, 0x84, 0xb9, 0x60, 0xc4, 0x82, 0xff, 0xbc, 0x07, 0xa6, + 0x88, 0xa5, 0x1b, 0x90, 0x12, 0x72, 0x20, 0xfe, 0x30, 0x91, 0x84, 0xd6, 0x63, 0x19, 0xad, 0xc8, + 0xb9, 0xb4, 0x9a, 0xb2, 0x44, 0xe1, 0x03, 0x90, 0x35, 0x1d, 0xcd, 0xdf, 0xdb, 0x8c, 0x2c, 0x47, + 0xce, 0xa5, 0xd4, 0x8c, 0xe9, 0x78, 0x7b, 0x24, 0xca, 0x27, 0x23, 0x90, 0x0f, 0xef, 0xda, 0xa2, + 0x35, 0x48, 0x75, 0x6c, 0xbe, 0xc9, 0xc2, 0x8e, 0x0c, 0x9c, 0x9b, 0xb2, 0xd1, 0xbb, 0xb2, 0xce, + 0xf1, 0x55, 0x8f, 0xb2, 0xf4, 0x6f, 0x24, 0x48, 0x09, 0x30, 0x3a, 0x09, 0xb1, 0x9e, 0xee, 0xee, + 0x53, 0x76, 0xf1, 0x4a, 0x44, 0x96, 0x54, 0xfa, 0x4d, 0xe0, 0x4e, 0x4f, 0x67, 0xfb, 0x44, 0x1c, + 0x4e, 0xbe, 0xc9, 0xb8, 0x76, 0xb0, 0xde, 0xa2, 0x99, 0x05, 0xbb, 0xdb, 0xc5, 0x96, 0xeb, 0x88, + 0x71, 0xe5, 0xf0, 0x2a, 0x07, 0xa3, 0xc7, 0x60, 0xde, 0xed, 0xeb, 0x66, 0x27, 0x84, 0x1b, 0xa3, + 0xb8, 0xb2, 0x28, 0xf0, 0x90, 0x57, 0xe1, 0xb4, 0xe0, 0xdb, 0xc2, 0xae, 0x6e, 0xec, 0xe3, 0x96, + 0x4f, 0x94, 0xa0, 0x19, 0xc4, 0x53, 0x1c, 0x61, 0x8d, 0x97, 0x0b, 0x5a, 0xe5, 0xb3, 0x11, 0x98, + 0x17, 0xb9, 0x90, 0x96, 0x27, 0xac, 0x0d, 0x00, 0xdd, 0xb2, 0x6c, 0x37, 0x28, 0xae, 0x51, 0x55, + 0x1e, 0xa1, 0x5b, 0x29, 0x7b, 0x44, 0x6a, 0x80, 0x41, 0xe9, 0x0f, 0x24, 0x00, 0xbf, 0x68, 0xa2, + 0xdc, 0x96, 0x20, 0xc3, 0xf7, 0xe4, 0xe9, 0xc1, 0x0e, 0x96, 0x3e, 0x03, 0x06, 0xba, 0x6a, 0x76, + 0x68, 0x92, 0x73, 0x17, 0xb7, 0x4d, 0x8b, 0xef, 0xce, 0xb0, 0x0f, 0x91, 0xe4, 0x8c, 0xf9, 0xdb, + 0x93, 0x2a, 0xa4, 0x1c, 0xdc, 0xd5, 0x2d, 0xd7, 0x34, 0xf8, 0x7e, 0xcb, 0xe5, 0x63, 0x35, 0x7e, + 0xa5, 0xc1, 0xa9, 0x55, 0x8f, 0x8f, 0x72, 0x0e, 0x52, 0x02, 0x4a, 0x1c, 0xbf, 0xcd, 0xad, 0xcd, + 0x9a, 0x3c, 0x87, 0x92, 0x10, 0x6d, 0xd4, 0x9a, 0xb2, 0x44, 0x82, 0xd8, 0xf2, 0x7a, 0xbd, 0xdc, + 0x90, 0x23, 0x95, 0xff, 0x1f, 0x16, 0x0c, 0xbb, 0x3b, 0x5c, 0x61, 0x45, 0x1e, 0x4a, 0x20, 0x3a, + 0xd7, 0xa5, 0xd7, 0x9e, 0xe0, 0x48, 0x6d, 0xbb, 0xa3, 0x5b, 0xed, 0x15, 0xbb, 0xdf, 0xf6, 0x8f, + 0xc5, 0x90, 0x58, 0xc3, 0x09, 0x1c, 0x8e, 0xe9, 0xed, 0xfe, 0xb9, 0x24, 0xfd, 0x48, 0x24, 0x7a, + 0x6d, 0xbb, 0xf2, 0x93, 0x91, 0xd2, 0x35, 0x46, 0xb8, 0x2d, 0xba, 0xa3, 0xe2, 0xbd, 0x0e, 0x36, + 0x48, 0xe3, 0xe1, 0x0f, 0x1f, 0x83, 0xc5, 0xb6, 0xdd, 0xb6, 0x29, 0xa7, 0x0b, 0xe4, 0x17, 0x3f, + 0x57, 0x93, 0xf6, 0xa0, 0xa5, 0xa9, 0x87, 0x70, 0x56, 0x37, 0x61, 0x81, 0x23, 0x6b, 0x74, 0xfb, + 0x9e, 0xa5, 0x2a, 0xd0, 0x91, 0x79, 0xf2, 0xe2, 0xcf, 0xfc, 0x1e, 0xf5, 0x4a, 0xd4, 0x79, 0x4e, + 0x4a, 0xca, 0x58, 0x36, 0x63, 0x55, 0x85, 0x13, 0x21, 0x7e, 0xcc, 0x46, 0xe0, 0xfe, 0x14, 0x8e, + 0xff, 0x9c, 0x73, 0x5c, 0x08, 0x70, 0x6c, 0x70, 0xd2, 0xd5, 0x2a, 0xe4, 0x8e, 0xc3, 0xeb, 0x5f, + 0x70, 0x5e, 0x59, 0x1c, 0x64, 0x72, 0x0d, 0x0a, 0x94, 0x89, 0x31, 0x70, 0x5c, 0xbb, 0x4b, 0x0d, + 0xf0, 0xd1, 0x6c, 0xfe, 0xe5, 0xef, 0xb1, 0x49, 0x9b, 0x27, 0x64, 0x55, 0x8f, 0x6a, 0x75, 0x15, + 0xe8, 0x89, 0x85, 0x16, 0x36, 0x3a, 0x53, 0x38, 0xfc, 0x1a, 0x6f, 0x88, 0x87, 0xbf, 0x7a, 0x13, + 0x16, 0xc9, 0x6f, 0x6a, 0x1f, 0x83, 0x2d, 0x99, 0x9e, 0x54, 0x2f, 0xfe, 0xbb, 0x0f, 0x32, 0xbb, + 0xb0, 0xe0, 0x31, 0x08, 0xb4, 0x29, 0x30, 0x8a, 0x6d, 0xec, 0xba, 0xb8, 0xef, 0x68, 0x7a, 0x67, + 0x5c, 0xf3, 0x02, 0x59, 0xc9, 0xe2, 0x0f, 0x7c, 0x29, 0x3c, 0x8a, 0xd7, 0x18, 0x65, 0xb9, 0xd3, + 0x59, 0xdd, 0x81, 0x53, 0x63, 0xb4, 0x62, 0x06, 0x9e, 0x3f, 0xc8, 0x79, 0x2e, 0x8e, 0x68, 0x06, + 0x61, 0xbb, 0x0d, 0x02, 0xee, 0x8d, 0xe5, 0x0c, 0x3c, 0x3f, 0xca, 0x79, 0x22, 0x4e, 0x2b, 0x86, + 0x94, 0x70, 0xbc, 0x01, 0xf3, 0xb7, 0x71, 0x7f, 0xd7, 0x76, 0x78, 0x26, 0x78, 0x06, 0x76, 0x1f, + 0xe3, 0xec, 0x0a, 0x9c, 0x90, 0xa6, 0x86, 0x09, 0xaf, 0xe7, 0x21, 0xb5, 0xa7, 0x1b, 0x78, 0x06, + 0x16, 0x77, 0x39, 0x8b, 0x24, 0xc1, 0x27, 0xa4, 0x65, 0xc8, 0xb6, 0x6d, 0xbe, 0x44, 0x4e, 0x27, + 0xff, 0x21, 0x4e, 0x9e, 0x11, 0x34, 0x9c, 0x45, 0xcf, 0xee, 0x0d, 0x3a, 0x64, 0xfd, 0x9c, 0xce, + 0xe2, 0x87, 0x05, 0x0b, 0x41, 0xc3, 0x59, 0x1c, 0x43, 0xac, 0x1f, 0x17, 0x2c, 0x9c, 0x80, 0x3c, + 0x5f, 0x80, 0x8c, 0x6d, 0x75, 0x0e, 0x6d, 0x6b, 0x96, 0x46, 0x7c, 0x82, 0x73, 0x00, 0x4e, 0x42, + 0x18, 0x5c, 0x81, 0xf4, 0xac, 0x03, 0xf1, 0x63, 0x5f, 0x12, 0xd3, 0x43, 0x8c, 0xc0, 0x35, 0x28, + 0x08, 0x03, 0x65, 0xda, 0xd6, 0x0c, 0x2c, 0x7e, 0x9c, 0xb3, 0xc8, 0x07, 0xc8, 0x78, 0x37, 0x5c, + 0xec, 0xb8, 0x6d, 0x3c, 0x0b, 0x93, 0x4f, 0x8a, 0x6e, 0x70, 0x12, 0x2e, 0xca, 0x5d, 0x6c, 0x19, + 0xfb, 0xb3, 0x71, 0xf8, 0x94, 0x10, 0xa5, 0xa0, 0x21, 0x2c, 0xaa, 0x90, 0xeb, 0xea, 0x7d, 0x67, + 0x5f, 0xef, 0xcc, 0x34, 0x1c, 0x3f, 0xc1, 0x79, 0x64, 0x3d, 0x22, 0x2e, 0x91, 0x81, 0x75, 0x1c, + 0x36, 0x3f, 0x29, 0x24, 0x12, 0x20, 0xe3, 0x53, 0xcf, 0x71, 0x69, 0xda, 0xfc, 0x38, 0xdc, 0xfe, + 0xae, 0x98, 0x7a, 0x8c, 0x76, 0x23, 0xc8, 0xf1, 0x0a, 0xa4, 0x1d, 0xf3, 0xcd, 0x99, 0xd8, 0xfc, + 0x3d, 0x31, 0xd2, 0x94, 0x80, 0x10, 0xbf, 0x0a, 0xa7, 0xc7, 0x2e, 0x13, 0x33, 0x30, 0xfb, 0x29, + 0xce, 0xec, 0xe4, 0x98, 0xa5, 0x82, 0x9b, 0x84, 0xe3, 0xb2, 0xfc, 0xfb, 0xc2, 0x24, 0xe0, 0x21, + 0x5e, 0xdb, 0x24, 0x68, 0x71, 0xf4, 0xbd, 0xe3, 0x49, 0xed, 0x1f, 0x08, 0xa9, 0x31, 0xda, 0x90, + 0xd4, 0x9a, 0x70, 0x92, 0x73, 0x3c, 0xde, 0xb8, 0xfe, 0xb4, 0x30, 0xac, 0x8c, 0x7a, 0x27, 0x3c, + 0xba, 0x5f, 0x07, 0x25, 0x4f, 0x9c, 0xc2, 0x3b, 0x76, 0xb4, 0xae, 0xde, 0x9b, 0x81, 0xf3, 0xcf, + 0x70, 0xce, 0xc2, 0xe2, 0x7b, 0xee, 0xb5, 0xb3, 0xa1, 0xf7, 0x08, 0xf3, 0x57, 0xa0, 0x28, 0x98, + 0x0f, 0xac, 0x3e, 0x36, 0xec, 0xb6, 0x65, 0xbe, 0x89, 0x5b, 0x33, 0xb0, 0xfe, 0xd9, 0xa1, 0xa1, + 0xda, 0x09, 0x90, 0x13, 0xce, 0x75, 0x90, 0x3d, 0x5f, 0x45, 0x33, 0xbb, 0x3d, 0xbb, 0xef, 0x4e, + 0xe1, 0xf8, 0x69, 0x31, 0x52, 0x1e, 0x5d, 0x9d, 0x92, 0xad, 0xd6, 0x80, 0x9d, 0x25, 0x99, 0x55, + 0x25, 0x3f, 0xc3, 0x19, 0xe5, 0x7c, 0x2a, 0x6e, 0x38, 0x0c, 0xbb, 0xdb, 0xd3, 0xfb, 0xb3, 0xd8, + 0xbf, 0x7f, 0x28, 0x0c, 0x07, 0x27, 0xe1, 0x86, 0x83, 0x78, 0x74, 0x64, 0xb5, 0x9f, 0x81, 0xc3, + 0xcf, 0x09, 0xc3, 0x21, 0x68, 0x38, 0x0b, 0xe1, 0x30, 0xcc, 0xc0, 0xe2, 0xe7, 0x05, 0x0b, 0x41, + 0x43, 0x58, 0xbc, 0xe4, 0x2f, 0xb4, 0x7d, 0xdc, 0x36, 0x1d, 0x97, 0x1f, 0x06, 0x3b, 0x9a, 0xd5, + 0x2f, 0x7c, 0x29, 0xec, 0x84, 0xa9, 0x01, 0x52, 0x62, 0x89, 0xf8, 0x46, 0x0a, 0x0d, 0xd9, 0xa6, + 0x37, 0xec, 0x17, 0x85, 0x25, 0x0a, 0x90, 0x91, 0xb6, 0x05, 0x3c, 0x44, 0x22, 0x76, 0x83, 0x04, + 0x2a, 0x33, 0xb0, 0xfb, 0x47, 0x43, 0x8d, 0x6b, 0x08, 0x5a, 0xc2, 0x33, 0xe0, 0xff, 0x0c, 0xac, + 0x5b, 0xf8, 0x70, 0x26, 0xed, 0xfc, 0xa5, 0x21, 0xff, 0x67, 0x87, 0x51, 0x32, 0x1b, 0x52, 0x18, + 0xf2, 0xa7, 0xd0, 0xb4, 0xb3, 0x9e, 0xc5, 0x6f, 0xfa, 0x32, 0xef, 0x6f, 0xd8, 0x9d, 0x5a, 0x5d, + 0x27, 0x4a, 0x1e, 0x76, 0x7a, 0xa6, 0x33, 0xfb, 0xe0, 0x97, 0x3d, 0x3d, 0x0f, 0xf9, 0x3c, 0xab, + 0x57, 0x21, 0x17, 0x72, 0x78, 0xa6, 0xb3, 0xfa, 0x66, 0xce, 0x2a, 0x1b, 0xf4, 0x77, 0x56, 0x2f, + 0x41, 0x8c, 0x38, 0x2f, 0xd3, 0xc9, 0xbf, 0x85, 0x93, 0x53, 0xf4, 0xd5, 0xf7, 0x40, 0x4a, 0x38, + 0x2d, 0xd3, 0x49, 0xff, 0x26, 0x27, 0xf5, 0x48, 0x08, 0xb9, 0x70, 0x58, 0xa6, 0x93, 0xff, 0x2d, + 0x41, 0x2e, 0x48, 0x08, 0xf9, 0xec, 0x22, 0xfc, 0x95, 0x6f, 0x8b, 0xf1, 0x45, 0x47, 0xc8, 0xee, + 0x0a, 0x24, 0xb9, 0xa7, 0x32, 0x9d, 0xfa, 0x5b, 0x79, 0xe5, 0x82, 0x62, 0xf5, 0x59, 0x88, 0xcf, + 0x28, 0xf0, 0xef, 0xe0, 0xa4, 0x0c, 0x7f, 0xb5, 0x0a, 0x99, 0x80, 0x77, 0x32, 0x9d, 0xfc, 0x3b, + 0x39, 0x79, 0x90, 0x8a, 0x34, 0x9d, 0x7b, 0x27, 0xd3, 0x19, 0xfc, 0x6d, 0xd1, 0x74, 0x4e, 0x41, + 0xc4, 0x26, 0x1c, 0x93, 0xe9, 0xd4, 0x1f, 0x16, 0x52, 0x17, 0x24, 0xab, 0x2f, 0x40, 0xda, 0x5b, + 0x6c, 0xa6, 0xd3, 0x7f, 0x17, 0xa7, 0xf7, 0x69, 0x88, 0x04, 0x02, 0x8b, 0xdd, 0x74, 0x16, 0xdf, + 0x2d, 0x24, 0x10, 0xa0, 0x22, 0xd3, 0x68, 0xd8, 0x81, 0x99, 0xce, 0xe9, 0x7b, 0xc4, 0x34, 0x1a, + 0xf2, 0x5f, 0xc8, 0x68, 0x52, 0x9b, 0x3f, 0x9d, 0xc5, 0xf7, 0x8a, 0xd1, 0xa4, 0xf8, 0xa4, 0x19, + 0xc3, 0x1e, 0xc1, 0x74, 0x1e, 0xdf, 0x2f, 0x9a, 0x31, 0xe4, 0x10, 0xac, 0x6e, 0x03, 0x1a, 0xf5, + 0x06, 0xa6, 0xf3, 0xfb, 0x08, 0xe7, 0x37, 0x3f, 0xe2, 0x0c, 0xac, 0xbe, 0x0c, 0x27, 0xc7, 0x7b, + 0x02, 0xd3, 0xb9, 0xfe, 0xc0, 0x97, 0x87, 0x62, 0xb7, 0xa0, 0x23, 0xb0, 0xda, 0xf4, 0x97, 0x94, + 0xa0, 0x17, 0x30, 0x9d, 0xed, 0x0f, 0x7e, 0x39, 0x6c, 0xb8, 0x83, 0x4e, 0xc0, 0x6a, 0x19, 0xc0, + 0x5f, 0x80, 0xa7, 0xf3, 0xfa, 0x18, 0xe7, 0x15, 0x20, 0x22, 0x53, 0x83, 0xaf, 0xbf, 0xd3, 0xe9, + 0xef, 0x8a, 0xa9, 0xc1, 0x29, 0xc8, 0xd4, 0x10, 0x4b, 0xef, 0x74, 0xea, 0x1f, 0x12, 0x53, 0x43, + 0x90, 0x10, 0xcd, 0x0e, 0xac, 0x6e, 0xd3, 0x39, 0x7c, 0x42, 0x68, 0x76, 0x80, 0x6a, 0x75, 0x13, + 0xe6, 0x47, 0x16, 0xc4, 0xe9, 0xac, 0x7e, 0x84, 0xb3, 0x92, 0x87, 0xd7, 0xc3, 0xe0, 0xe2, 0xc5, + 0x17, 0xc3, 0xe9, 0xdc, 0x7e, 0x74, 0x68, 0xf1, 0xe2, 0x6b, 0xe1, 0xea, 0x15, 0x48, 0x59, 0x83, + 0x4e, 0x87, 0x4c, 0x1e, 0x74, 0xf4, 0x69, 0xdf, 0xe2, 0x7f, 0xf9, 0x0a, 0x97, 0x8e, 0x20, 0x58, + 0xbd, 0x04, 0x71, 0xdc, 0xdd, 0xc5, 0xad, 0x69, 0x94, 0x5f, 0xfc, 0x8a, 0x30, 0x98, 0x04, 0x7b, + 0xf5, 0x05, 0x00, 0x96, 0x1a, 0xa1, 0xdb, 0xf0, 0x53, 0x68, 0xff, 0xe0, 0x2b, 0xfc, 0x78, 0x9d, + 0x4f, 0xe2, 0x33, 0x60, 0x87, 0xf5, 0x8e, 0x66, 0xf0, 0xa5, 0x30, 0x03, 0x3a, 0x22, 0xcf, 0x43, + 0xf2, 0x75, 0xc7, 0xb6, 0x5c, 0xbd, 0x3d, 0x8d, 0xfa, 0x0f, 0x39, 0xb5, 0xc0, 0x27, 0x02, 0xeb, + 0xda, 0x7d, 0xec, 0xea, 0x6d, 0x67, 0x1a, 0xed, 0x7f, 0xe5, 0xb4, 0x1e, 0x01, 0x21, 0x36, 0x74, + 0xc7, 0x9d, 0xa5, 0xdf, 0xff, 0x4d, 0x10, 0x0b, 0x02, 0xd2, 0x68, 0xf2, 0xfb, 0x16, 0x3e, 0x9c, + 0x46, 0xfb, 0x47, 0xa2, 0xd1, 0x1c, 0x7f, 0xf5, 0x3d, 0x90, 0x26, 0x3f, 0xd9, 0x99, 0xd9, 0x29, + 0xc4, 0x7f, 0xcc, 0x89, 0x7d, 0x0a, 0x52, 0xb3, 0xe3, 0xb6, 0x5c, 0x73, 0xba, 0xb0, 0xff, 0x84, + 0x8f, 0xb4, 0xc0, 0x5f, 0x2d, 0x43, 0xc6, 0x71, 0x5b, 0xad, 0x01, 0xf7, 0x4f, 0xa7, 0x90, 0xff, + 0xe9, 0x57, 0xbc, 0x94, 0x85, 0x47, 0x43, 0x46, 0xfb, 0x8d, 0x5b, 0x6e, 0xcf, 0xa6, 0xfb, 0x2d, + 0xd3, 0x38, 0x7c, 0x99, 0x73, 0x08, 0x90, 0xac, 0x56, 0x21, 0x4b, 0xfa, 0x22, 0xee, 0x22, 0x4c, + 0x63, 0xf1, 0x67, 0x5c, 0x00, 0x21, 0xa2, 0xca, 0x37, 0xfe, 0xda, 0xe7, 0xce, 0x4a, 0x9f, 0xfd, + 0xdc, 0x59, 0xe9, 0x77, 0x3e, 0x77, 0x56, 0xfa, 0xf0, 0xe7, 0xcf, 0xce, 0x7d, 0xf6, 0xf3, 0x67, + 0xe7, 0x7e, 0xeb, 0xf3, 0x67, 0xe7, 0xc6, 0x67, 0x89, 0xe1, 0x9a, 0x7d, 0xcd, 0x66, 0xf9, 0xe1, + 0xd7, 0x1e, 0x6a, 0x9b, 0xee, 0xfe, 0x60, 0x77, 0xc5, 0xb0, 0xbb, 0x17, 0x0c, 0xdb, 0xe9, 0xda, + 0xce, 0x85, 0x70, 0x5e, 0x97, 0xfe, 0x82, 0xff, 0x25, 0x91, 0x98, 0x39, 0x9c, 0xce, 0xd5, 0xad, + 0xc3, 0x49, 0x97, 0x29, 0x2f, 0x43, 0xb4, 0x6c, 0x1d, 0xa2, 0xd3, 0xcc, 0xc0, 0x69, 0x83, 0x7e, + 0x87, 0x1f, 0xdc, 0x4c, 0x92, 0xef, 0x9d, 0x7e, 0x07, 0x2d, 0xfa, 0xa7, 0xab, 0xa5, 0x73, 0x59, + 0x7e, 0x64, 0xba, 0xf2, 0x9d, 0xd2, 0xf1, 0x7a, 0x92, 0x2a, 0x5b, 0x87, 0xb4, 0x23, 0xdb, 0xd2, + 0x6b, 0x8f, 0x4f, 0xcd, 0x73, 0xdf, 0xb2, 0xec, 0x37, 0x2c, 0xd2, 0xec, 0xde, 0xae, 0xc8, 0x71, + 0x9f, 0x1d, 0xce, 0x71, 0xbf, 0x8c, 0x3b, 0x9d, 0x17, 0x09, 0x5e, 0x93, 0x90, 0xec, 0x26, 0xd8, + 0x1d, 0x01, 0xf8, 0x9e, 0x08, 0x9c, 0x1d, 0x49, 0x67, 0x73, 0x25, 0x98, 0x24, 0x84, 0x55, 0x48, + 0xad, 0x09, 0xdd, 0x2a, 0x42, 0xd2, 0xc1, 0x86, 0x6d, 0xb5, 0x1c, 0x2a, 0x88, 0xa8, 0x2a, 0x3e, + 0x89, 0x20, 0x2c, 0xdd, 0xb2, 0x1d, 0x7e, 0xf4, 0x99, 0x7d, 0x54, 0x3e, 0x7a, 0x4c, 0x41, 0xe4, + 0x44, 0x4d, 0x42, 0x1a, 0x4f, 0xcd, 0x28, 0x0d, 0xd1, 0x89, 0x50, 0xe6, 0x7f, 0x56, 0xa9, 0x7c, + 0x7f, 0x04, 0x96, 0x86, 0xa5, 0x42, 0x66, 0x96, 0xe3, 0xea, 0xdd, 0xde, 0x24, 0xb1, 0x5c, 0x81, + 0x74, 0x53, 0xe0, 0x1c, 0x5b, 0x2e, 0x77, 0x8f, 0x29, 0x97, 0xbc, 0x57, 0x95, 0x10, 0xcc, 0xc5, + 0x19, 0x05, 0xe3, 0xf5, 0xe3, 0x9e, 0x24, 0xf3, 0x3f, 0x13, 0x70, 0x9a, 0x4d, 0x27, 0x8d, 0x4d, + 0x25, 0xf6, 0xc1, 0x65, 0x92, 0x0d, 0x16, 0x4d, 0xdf, 0x27, 0x51, 0x5e, 0x84, 0x85, 0x3a, 0xb1, + 0x16, 0x24, 0x0a, 0xf2, 0x77, 0x78, 0xc6, 0x9e, 0x0e, 0x5f, 0x0e, 0x39, 0xfc, 0x7c, 0x7f, 0x2b, + 0x08, 0x52, 0xbe, 0x49, 0x02, 0xb9, 0x61, 0xe8, 0x1d, 0xbd, 0xff, 0xd5, 0xb2, 0x42, 0xcf, 0x02, + 0xb0, 0xe3, 0x1e, 0xde, 0xc5, 0xcd, 0xfc, 0xc5, 0xe2, 0x4a, 0xb0, 0x73, 0x2b, 0xac, 0x26, 0x7a, + 0x84, 0x2a, 0x4d, 0x71, 0xc9, 0xcf, 0xf3, 0xaf, 0x00, 0xf8, 0x05, 0xe8, 0x0c, 0x9c, 0x6a, 0x54, + 0xcb, 0xeb, 0x65, 0x55, 0x1c, 0x12, 0x6a, 0x6c, 0xd7, 0xaa, 0xec, 0x9a, 0xd5, 0x1c, 0x3a, 0x09, + 0x28, 0x58, 0xe8, 0x1d, 0x6a, 0x3a, 0x01, 0xf3, 0x41, 0x38, 0xbb, 0xf3, 0x12, 0x21, 0x9e, 0xa2, + 0xd9, 0xed, 0x75, 0x30, 0xdd, 0x79, 0xd4, 0x4c, 0x21, 0xb5, 0xe9, 0x4e, 0xc8, 0xaf, 0xff, 0x7b, + 0x76, 0x0f, 0x62, 0xc1, 0x27, 0xf7, 0x64, 0xbe, 0xba, 0x0e, 0xf3, 0xba, 0x61, 0xe0, 0x5e, 0x88, + 0xe5, 0x14, 0x53, 0x4d, 0x18, 0xd2, 0xbd, 0x54, 0x4e, 0xe9, 0x73, 0x7b, 0x16, 0x12, 0x0e, 0xed, + 0xfd, 0x34, 0x16, 0xbf, 0xc1, 0x59, 0x70, 0xf4, 0x55, 0x0b, 0xe6, 0xd9, 0xbd, 0x3e, 0x1c, 0x68, + 0xc6, 0xd1, 0x79, 0x86, 0x7f, 0xfc, 0xe9, 0x27, 0xe9, 0xce, 0xea, 0x03, 0xe1, 0x61, 0x19, 0xa3, + 0x4e, 0xaa, 0xcc, 0x79, 0xfb, 0x0d, 0xc5, 0x90, 0x17, 0xf5, 0xf1, 0x06, 0x1f, 0x5d, 0xd9, 0x2f, + 0xf3, 0xca, 0xce, 0x8e, 0xd3, 0x81, 0x40, 0x4d, 0x39, 0xce, 0x95, 0x15, 0x54, 0x6a, 0x93, 0xe6, + 0xf4, 0x6b, 0x8f, 0x8d, 0xae, 0x4e, 0xec, 0xbf, 0x27, 0x28, 0xe7, 0x2b, 0xc1, 0x6a, 0xbc, 0xb9, + 0xf7, 0xd1, 0x18, 0xcc, 0xeb, 0x5d, 0xd3, 0xb2, 0x2f, 0xd0, 0x7f, 0xf9, 0x9c, 0x8b, 0xd3, 0x8f, + 0x19, 0x36, 0x25, 0x2f, 0xb3, 0xa9, 0x30, 0x5d, 0x63, 0xfe, 0xf8, 0xdb, 0x7f, 0x3c, 0xee, 0x4f, + 0x97, 0xd5, 0x0d, 0x90, 0xc5, 0x91, 0x60, 0x6c, 0x19, 0x76, 0x6b, 0xa6, 0x2c, 0xc5, 0x9f, 0x08, + 0x1e, 0x22, 0xbf, 0x55, 0xe3, 0xa4, 0xab, 0xef, 0x86, 0x94, 0xc7, 0x66, 0x9a, 0x67, 0x22, 0x98, + 0x78, 0x14, 0xc4, 0x2f, 0x61, 0x33, 0x73, 0x16, 0x2f, 0xf4, 0xcb, 0x82, 0x9e, 0xcd, 0xd0, 0x4d, + 0xd2, 0x9b, 0x6b, 0x90, 0x6f, 0xd9, 0x96, 0xab, 0xd9, 0x5d, 0xd3, 0xc5, 0xdd, 0x9e, 0x3b, 0xd5, + 0xaf, 0xfb, 0x33, 0xc6, 0x24, 0xa5, 0xe6, 0x08, 0xdd, 0x96, 0x20, 0x23, 0x2d, 0x61, 0xb7, 0xfe, + 0x66, 0x69, 0xc9, 0x7f, 0xf7, 0x5a, 0x42, 0x69, 0x48, 0x4b, 0xee, 0x49, 0x3b, 0x9c, 0xd6, 0x2d, + 0x6e, 0xcc, 0xdd, 0x03, 0xa6, 0x05, 0x9e, 0x76, 0x7c, 0x32, 0x0a, 0x67, 0x39, 0xf2, 0xae, 0xee, + 0xe0, 0x0b, 0xb7, 0x9f, 0xda, 0xc5, 0xae, 0xfe, 0xd4, 0x05, 0xc3, 0x36, 0xc5, 0x4a, 0xbe, 0xc0, + 0x8d, 0x35, 0x29, 0x5f, 0xe1, 0xe5, 0xa5, 0xb1, 0xdb, 0xdd, 0xa5, 0xc9, 0x46, 0xbe, 0x34, 0xaa, + 0x83, 0x4a, 0x07, 0x62, 0x55, 0xdb, 0xb4, 0xc8, 0xda, 0xd6, 0xc2, 0x96, 0xdd, 0xe5, 0xe6, 0x96, + 0x7d, 0xa0, 0xeb, 0x90, 0xd0, 0xbb, 0xf6, 0xc0, 0x72, 0x99, 0xa9, 0xad, 0x3c, 0xf9, 0x6b, 0x6f, + 0x2d, 0xcd, 0xfd, 0xc7, 0xb7, 0x96, 0x4e, 0x30, 0xb6, 0x4e, 0xeb, 0xd6, 0x8a, 0x69, 0x5f, 0xe8, + 0xea, 0xee, 0x3e, 0x99, 0xbe, 0xbf, 0xf9, 0x99, 0x27, 0x80, 0xd7, 0x57, 0xb7, 0xdc, 0x4f, 0xfd, + 0xfe, 0x4f, 0x9f, 0x97, 0x54, 0x4e, 0xbf, 0x1a, 0xfb, 0xc2, 0xc7, 0x97, 0x24, 0xa5, 0x07, 0xc9, + 0x35, 0x6c, 0x1c, 0x51, 0x61, 0x7d, 0xa8, 0xc2, 0xa7, 0x78, 0x85, 0x67, 0x46, 0x2b, 0x64, 0x07, + 0xf6, 0xd6, 0xb0, 0x11, 0xa8, 0x76, 0x0d, 0x1b, 0xe1, 0x1a, 0x2b, 0x6b, 0xbf, 0xf5, 0xbb, 0x67, + 0xe7, 0x3e, 0xf0, 0xb9, 0xb3, 0x73, 0x13, 0x87, 0x4c, 0x99, 0x3e, 0x64, 0xde, 0x48, 0xfd, 0x78, + 0x0c, 0xee, 0xa7, 0xf7, 0x4b, 0xfb, 0x5d, 0xd3, 0x72, 0x2f, 0x18, 0xfd, 0xc3, 0x9e, 0x6b, 0x93, + 0x89, 0x6b, 0xef, 0xf1, 0x81, 0x9a, 0xf7, 0x8b, 0x57, 0x58, 0xf1, 0xf8, 0x61, 0x52, 0xf6, 0x20, + 0xbe, 0x4d, 0xe8, 0x88, 0x20, 0x5c, 0xdb, 0xd5, 0x3b, 0xdc, 0xdb, 0x60, 0x1f, 0x04, 0xca, 0xee, + 0xa4, 0x46, 0x18, 0xd4, 0x14, 0xd7, 0x51, 0x3b, 0x58, 0xdf, 0x63, 0x57, 0x7b, 0xa2, 0xd4, 0x4d, + 0x4d, 0x11, 0x00, 0xbd, 0xc5, 0xb3, 0x08, 0x71, 0x7d, 0xc0, 0x0e, 0xcc, 0x44, 0x89, 0xff, 0x4a, + 0x3f, 0x94, 0x17, 0x21, 0xc9, 0xf7, 0xcd, 0x91, 0x0c, 0xd1, 0x5b, 0xf8, 0x90, 0xd6, 0x93, 0x55, + 0xc9, 0x4f, 0xb4, 0x02, 0x71, 0xda, 0x78, 0x7e, 0x67, 0xb1, 0xb8, 0x32, 0xd2, 0xfa, 0x15, 0xda, + 0x48, 0x95, 0xa1, 0x29, 0x37, 0x20, 0xb5, 0x66, 0x13, 0xed, 0x09, 0x73, 0x4b, 0x33, 0x6e, 0xb4, + 0xcd, 0xbd, 0x01, 0x1f, 0x3b, 0x95, 0x7d, 0xa0, 0x93, 0x90, 0x60, 0x57, 0xbd, 0xf8, 0xa1, 0x1f, + 0xfe, 0xa5, 0x54, 0x21, 0x49, 0x79, 0x6f, 0xf5, 0xbc, 0xeb, 0xd5, 0x52, 0xe0, 0x7a, 0x35, 0x67, + 0x1f, 0xf1, 0x1b, 0x8b, 0x20, 0xd6, 0xd2, 0x5d, 0x9d, 0xf7, 0x9b, 0xfe, 0x56, 0xde, 0x0b, 0x29, + 0xce, 0xc4, 0x41, 0x17, 0x21, 0x6a, 0xf7, 0x1c, 0x7e, 0x6c, 0xa7, 0x34, 0xa9, 0x2b, 0x5b, 0xbd, + 0x4a, 0x8c, 0x28, 0x95, 0x4a, 0x90, 0x2b, 0x9b, 0x13, 0xd5, 0xe2, 0x99, 0x90, 0x5a, 0x74, 0xb1, + 0xbb, 0xbb, 0xe7, 0xfa, 0x3f, 0xd8, 0x70, 0x8e, 0xa8, 0x82, 0xa7, 0x28, 0x77, 0x23, 0x70, 0x36, + 0x50, 0x7a, 0x1b, 0xf7, 0x1d, 0xd3, 0xb6, 0x98, 0x36, 0x71, 0x4d, 0x41, 0x81, 0x06, 0xf2, 0xf2, + 0x09, 0xaa, 0xf2, 0x1e, 0x88, 0x96, 0x7b, 0x3d, 0x54, 0x82, 0x14, 0xfd, 0x36, 0x6c, 0xa6, 0x2b, + 0x31, 0xd5, 0xfb, 0x26, 0x65, 0x8e, 0xbd, 0xe7, 0xbe, 0xa1, 0xf7, 0xbd, 0x9b, 0xd0, 0xe2, 0x5b, + 0x79, 0x1e, 0xd2, 0x55, 0xdb, 0x72, 0xb0, 0xe5, 0x0c, 0xa8, 0x0f, 0xbb, 0xdb, 0xb1, 0x8d, 0x5b, + 0x9c, 0x03, 0xfb, 0x20, 0xc2, 0xd6, 0x7b, 0x3d, 0x4a, 0x19, 0x53, 0xc9, 0x4f, 0x3e, 0x7b, 0xb6, + 0x26, 0x8a, 0xe7, 0xd2, 0xf1, 0xc4, 0xc3, 0x3b, 0xe8, 0x3b, 0xa3, 0x12, 0xdc, 0x37, 0x3a, 0x91, + 0x6e, 0xe1, 0x43, 0xe7, 0xb8, 0xf3, 0xe8, 0x15, 0x48, 0x6f, 0xd3, 0x67, 0x65, 0x5e, 0xc4, 0x87, + 0xa8, 0x04, 0x49, 0xdc, 0xba, 0x78, 0xe9, 0xd2, 0x53, 0xcf, 0x33, 0x2d, 0xbf, 0x3e, 0xa7, 0x0a, + 0x00, 0x3a, 0x0b, 0x69, 0x07, 0x1b, 0xbd, 0x8b, 0x97, 0x2e, 0xdf, 0x7a, 0x8a, 0xa9, 0xd5, 0xf5, + 0x39, 0xd5, 0x07, 0xad, 0xa6, 0x48, 0x8f, 0xbf, 0xf0, 0x89, 0x25, 0xa9, 0x12, 0x87, 0xa8, 0x33, + 0xe8, 0xbe, 0x63, 0xba, 0xf1, 0x47, 0x09, 0x58, 0x0e, 0x94, 0xb2, 0x45, 0xe1, 0xb6, 0xde, 0x31, + 0x5b, 0xba, 0xff, 0x18, 0x90, 0x1c, 0xe8, 0x3f, 0xc5, 0x98, 0x60, 0xed, 0x8f, 0x94, 0xa2, 0xf2, + 0xb3, 0x12, 0x64, 0x6f, 0x0a, 0xce, 0x0d, 0xec, 0xa2, 0x2b, 0x00, 0x5e, 0x4d, 0x62, 0xaa, 0x9c, + 0x59, 0x19, 0xae, 0x6b, 0xc5, 0xa3, 0x51, 0x03, 0xe8, 0xe8, 0x59, 0xaa, 0x80, 0x3d, 0xdb, 0xe1, + 0xb7, 0x62, 0xa7, 0x90, 0x7a, 0xc8, 0xe8, 0x71, 0x40, 0xd4, 0xaa, 0x69, 0xb7, 0x6d, 0xd7, 0xb4, + 0xda, 0x5a, 0xcf, 0x7e, 0x83, 0xbf, 0x35, 0x10, 0x55, 0x65, 0x5a, 0x72, 0x93, 0x16, 0x6c, 0x13, + 0x38, 0x69, 0x74, 0xda, 0xe3, 0x42, 0xc2, 0x31, 0xbd, 0xd5, 0xea, 0x63, 0xc7, 0xe1, 0x86, 0x4b, + 0x7c, 0xa2, 0x2b, 0x90, 0xec, 0x0d, 0x76, 0x35, 0x61, 0x25, 0x32, 0x17, 0xef, 0x1b, 0x37, 0xe7, + 0x85, 0x6e, 0xf0, 0x59, 0x9f, 0xe8, 0x0d, 0x76, 0x89, 0xa6, 0x3c, 0x00, 0xd9, 0x31, 0x8d, 0xc9, + 0xdc, 0xf6, 0xdb, 0x41, 0x5f, 0x32, 0xe2, 0x3d, 0xd0, 0x7a, 0x7d, 0xd3, 0xee, 0x9b, 0xee, 0x21, + 0x3d, 0x6e, 0x17, 0x55, 0x65, 0x51, 0xb0, 0xcd, 0xe1, 0xca, 0x2d, 0x28, 0x34, 0xa8, 0x9b, 0xee, + 0xb7, 0xfc, 0x92, 0xdf, 0x3e, 0x69, 0x7a, 0xfb, 0x26, 0xb6, 0x2c, 0x32, 0xd2, 0xb2, 0xf3, 0xff, + 0x41, 0x82, 0x4c, 0x85, 0x4c, 0xdc, 0xfa, 0xda, 0xd5, 0x8e, 0xde, 0x46, 0x4f, 0xc1, 0x89, 0xca, + 0xfa, 0x56, 0xf5, 0x45, 0xad, 0xbe, 0xa6, 0x5d, 0x5d, 0x2f, 0x5f, 0xf3, 0xcf, 0xf7, 0x96, 0x4e, + 0xde, 0xb9, 0xbb, 0x8c, 0x02, 0xb8, 0x3b, 0x16, 0x8d, 0x25, 0xd1, 0x05, 0x58, 0x0c, 0x93, 0x94, + 0x2b, 0x8d, 0xda, 0x66, 0x53, 0x96, 0x4a, 0x27, 0xee, 0xdc, 0x5d, 0x9e, 0x0f, 0x50, 0x94, 0x77, + 0x1d, 0x6c, 0xb9, 0xa3, 0x04, 0xd5, 0xad, 0x8d, 0x8d, 0x7a, 0x53, 0x8e, 0x8c, 0x10, 0x54, 0xed, + 0x6e, 0xd7, 0x74, 0xd1, 0xa3, 0x30, 0x1f, 0x26, 0xd8, 0xac, 0xaf, 0xcb, 0xd1, 0x12, 0xba, 0x73, + 0x77, 0x39, 0x1f, 0xc0, 0xde, 0x34, 0x3b, 0xa5, 0xd4, 0x87, 0x7e, 0xf4, 0xec, 0xdc, 0xa7, 0xfe, + 0xce, 0x59, 0xa9, 0xb2, 0x31, 0x71, 0xce, 0x3d, 0x7d, 0xbc, 0x39, 0x17, 0x5e, 0xb7, 0xbf, 0x72, + 0x5f, 0xc8, 0xdc, 0x70, 0x3f, 0x2c, 0x60, 0x8c, 0x67, 0x9d, 0x6e, 0xd3, 0x72, 0x0b, 0xa5, 0xa3, + 0xdd, 0x83, 0xd2, 0x94, 0x45, 0xa1, 0x34, 0xd5, 0x30, 0x28, 0xcf, 0x43, 0x6e, 0x5b, 0xef, 0xbb, + 0x0d, 0xec, 0x5e, 0xc7, 0x7a, 0x0b, 0xf7, 0xc3, 0xfe, 0x43, 0x4e, 0xf8, 0x0f, 0x08, 0x62, 0xd4, + 0x49, 0x60, 0xeb, 0x27, 0xfd, 0xad, 0xec, 0x43, 0x8c, 0x9e, 0x24, 0xf6, 0x7c, 0x0b, 0x4e, 0xc1, + 0x7c, 0x0b, 0xb2, 0x32, 0x1c, 0xba, 0xd8, 0x11, 0xe9, 0x2f, 0xfa, 0x81, 0x9e, 0x11, 0x1e, 0x42, + 0xf4, 0x68, 0x0f, 0x81, 0x4f, 0x2f, 0xee, 0x27, 0x74, 0x20, 0xc9, 0x87, 0xd8, 0x6b, 0x88, 0xe4, + 0x37, 0x04, 0x6d, 0x40, 0xa1, 0xa7, 0xf7, 0x5d, 0x7a, 0x4f, 0x71, 0x9f, 0xf6, 0x82, 0xcf, 0xe0, + 0xa5, 0x51, 0x7b, 0x12, 0xea, 0x2c, 0xaf, 0x25, 0xd7, 0x0b, 0x02, 0x95, 0xff, 0x1c, 0x83, 0x04, + 0x17, 0xc6, 0x7b, 0x20, 0xc9, 0xc5, 0xca, 0xe7, 0xdc, 0xfd, 0x2b, 0xa3, 0xcb, 0xec, 0x8a, 0xb7, + 0x1c, 0x72, 0x7e, 0x82, 0x06, 0x3d, 0x0c, 0x29, 0x63, 0x5f, 0x37, 0x2d, 0xcd, 0x6c, 0x71, 0x07, + 0x34, 0xf3, 0xb9, 0xb7, 0x96, 0x92, 0x55, 0x02, 0xab, 0xaf, 0xa9, 0x49, 0x5a, 0x58, 0x6f, 0x11, + 0x9f, 0x66, 0x1f, 0x9b, 0xed, 0x7d, 0x97, 0xdb, 0x0d, 0xfe, 0x85, 0x9e, 0x83, 0x18, 0x51, 0x08, + 0x7e, 0x8b, 0xbd, 0x34, 0x12, 0x59, 0x78, 0xa9, 0x9f, 0x4a, 0x8a, 0x54, 0xfc, 0xe1, 0xff, 0xb4, + 0x24, 0xa9, 0x94, 0x02, 0x55, 0x21, 0xd7, 0xd1, 0x1d, 0x57, 0xa3, 0xeb, 0x31, 0xa9, 0x3e, 0x4e, + 0x59, 0x9c, 0x1e, 0x15, 0x08, 0x17, 0x2c, 0x6f, 0x7a, 0x86, 0x50, 0x31, 0x50, 0x0b, 0x9d, 0x03, + 0x99, 0x32, 0x31, 0xe8, 0x0c, 0x64, 0x5e, 0x62, 0x82, 0xca, 0x3d, 0x4f, 0xe0, 0x6c, 0x62, 0x52, + 0x5f, 0xf1, 0x0c, 0xa4, 0xe9, 0xbd, 0x59, 0x8a, 0xc2, 0x8e, 0xaf, 0xa7, 0x08, 0x80, 0x16, 0x3e, + 0x02, 0x05, 0xdf, 0xea, 0x33, 0x94, 0x14, 0xe3, 0xe2, 0x83, 0x29, 0xe2, 0x93, 0xb0, 0x68, 0xe1, + 0x03, 0x7a, 0xa0, 0x3e, 0x84, 0x9d, 0xa6, 0xd8, 0x88, 0x94, 0xdd, 0x0c, 0x53, 0x3c, 0x04, 0x79, + 0x43, 0x08, 0x9f, 0xe1, 0x02, 0xc5, 0xcd, 0x79, 0x50, 0x8a, 0x76, 0x1a, 0x52, 0x7a, 0xaf, 0xc7, + 0x10, 0x32, 0xdc, 0xea, 0xf7, 0x7a, 0xb4, 0xe8, 0x3c, 0xcc, 0xd3, 0x3e, 0xf6, 0xb1, 0x33, 0xe8, + 0xb8, 0x9c, 0x49, 0x96, 0xe2, 0x14, 0x48, 0x81, 0xca, 0xe0, 0x14, 0xf7, 0x41, 0xc8, 0xe1, 0xdb, + 0x66, 0x0b, 0x5b, 0x06, 0x66, 0x78, 0x39, 0x8a, 0x97, 0x15, 0x40, 0x8a, 0xf4, 0x28, 0x78, 0xd6, + 0x5c, 0x13, 0x2b, 0x4d, 0x9e, 0xf1, 0x13, 0xf0, 0x32, 0x03, 0x2b, 0x45, 0x88, 0xad, 0xe9, 0xae, + 0x4e, 0xdc, 0x25, 0xf7, 0x80, 0x2d, 0x9f, 0x59, 0x95, 0xfc, 0x54, 0x7e, 0x3e, 0x0a, 0xb1, 0x9b, + 0xb6, 0x8b, 0xd1, 0xd3, 0x01, 0x57, 0x36, 0x3f, 0x4e, 0x9f, 0x1b, 0x66, 0xdb, 0xc2, 0xad, 0x0d, + 0xa7, 0x1d, 0x78, 0xe4, 0xc6, 0x57, 0xa7, 0x48, 0x48, 0x9d, 0x16, 0x21, 0xde, 0xb7, 0x07, 0x56, + 0x4b, 0x1c, 0xfc, 0xa6, 0x1f, 0xa8, 0x06, 0x29, 0x4f, 0x4b, 0x62, 0xd3, 0xb4, 0xa4, 0x40, 0xb4, + 0x84, 0xe8, 0x30, 0x07, 0xa8, 0xc9, 0x5d, 0xae, 0x2c, 0x15, 0x48, 0x7b, 0xc6, 0x8b, 0x6b, 0xdb, + 0x6c, 0x0a, 0xeb, 0x93, 0x91, 0x25, 0xd2, 0x1b, 0x7b, 0x4f, 0x78, 0x4c, 0xe3, 0x64, 0xaf, 0x80, + 0x4b, 0x2f, 0xa4, 0x56, 0xfc, 0xc1, 0x9d, 0x24, 0xed, 0x97, 0xaf, 0x56, 0xec, 0xd1, 0x9d, 0xfb, + 0x20, 0xed, 0x98, 0x6d, 0x4b, 0x77, 0x07, 0x7d, 0xcc, 0x35, 0xcf, 0x07, 0x90, 0x52, 0xff, 0x12, + 0x04, 0xd3, 0xb4, 0xc0, 0xcb, 0x6d, 0x17, 0x60, 0xc1, 0x7f, 0x33, 0xcd, 0xe7, 0xc2, 0xb4, 0x0c, + 0x79, 0x45, 0x0d, 0x51, 0xa2, 0xfc, 0x8a, 0x04, 0x09, 0xbe, 0x62, 0xf9, 0xc3, 0x20, 0x8d, 0x1f, + 0x86, 0xc8, 0xa4, 0x61, 0x88, 0xde, 0xfb, 0x30, 0x94, 0x01, 0xbc, 0x66, 0x3a, 0xfc, 0x59, 0x95, + 0x31, 0x6e, 0x15, 0x6b, 0x62, 0xc3, 0x6c, 0xf3, 0x79, 0x1f, 0x20, 0x52, 0x7e, 0x5b, 0x22, 0x1e, + 0x3e, 0x2f, 0x47, 0x65, 0xc8, 0x89, 0x76, 0x69, 0x7b, 0x1d, 0xbd, 0xcd, 0x55, 0xf1, 0xfe, 0x89, + 0x8d, 0x23, 0xab, 0xb0, 0x9a, 0xe1, 0xed, 0xa1, 0xfe, 0xc4, 0xd8, 0x61, 0x8d, 0x4c, 0x18, 0xd6, + 0x90, 0x1e, 0x45, 0xef, 0x4d, 0x8f, 0x42, 0x23, 0x1e, 0x1b, 0x1a, 0x71, 0xe5, 0x77, 0x25, 0xfe, + 0x62, 0x5b, 0x8b, 0xdd, 0xe0, 0xf8, 0xcb, 0x1a, 0xaa, 0xd7, 0xb8, 0x6e, 0xb5, 0x70, 0x4b, 0x1b, + 0x19, 0xb3, 0x07, 0x47, 0x39, 0x86, 0xdb, 0xec, 0x8f, 0x1d, 0x12, 0x5c, 0x1a, 0xfe, 0x18, 0x7e, + 0x26, 0x02, 0xf3, 0x23, 0xf8, 0x7f, 0xfd, 0xc6, 0x32, 0x3c, 0x7b, 0xe3, 0x33, 0xce, 0xde, 0xc4, + 0xc4, 0xd9, 0xfb, 0xe9, 0x08, 0x4d, 0x00, 0xf4, 0x6c, 0x47, 0xef, 0x7c, 0x2d, 0x6c, 0xef, 0x19, + 0x48, 0xf7, 0xec, 0x8e, 0xc6, 0x4a, 0xd8, 0xd5, 0x9b, 0x54, 0xcf, 0xee, 0xa8, 0x23, 0x6a, 0x16, + 0x7f, 0x9b, 0x0c, 0x73, 0xe2, 0x6d, 0x18, 0x84, 0xe4, 0xf0, 0x84, 0xea, 0x43, 0x96, 0x89, 0x82, + 0x7b, 0x4d, 0x4f, 0x12, 0x19, 0x50, 0x37, 0x4c, 0x1a, 0xf5, 0xf2, 0x58, 0xb3, 0x19, 0xa6, 0xca, + 0xf1, 0x08, 0x05, 0x73, 0x32, 0xc6, 0x65, 0x8e, 0x82, 0x16, 0x4b, 0xe5, 0x78, 0xca, 0xf7, 0x49, + 0x00, 0xeb, 0x44, 0xb2, 0xb4, 0xbf, 0xc4, 0xdf, 0x71, 0x68, 0x13, 0xb4, 0x50, 0xcd, 0x67, 0x27, + 0x0d, 0x1a, 0xaf, 0x3f, 0xeb, 0x04, 0xdb, 0x5d, 0x85, 0x9c, 0xaf, 0xdb, 0x0e, 0x16, 0x8d, 0x39, + 0x7b, 0x44, 0x54, 0xda, 0xc0, 0xae, 0x9a, 0xbd, 0x1d, 0xf8, 0x52, 0xfe, 0xa9, 0x04, 0x69, 0xda, + 0xa6, 0x0d, 0xec, 0xea, 0xa1, 0x31, 0x94, 0xee, 0x7d, 0x0c, 0xef, 0x07, 0x60, 0x6c, 0x1c, 0xf3, + 0x4d, 0xcc, 0x35, 0x2b, 0x4d, 0x21, 0x0d, 0xf3, 0x4d, 0x8c, 0x2e, 0x7b, 0x02, 0x8f, 0x1e, 0x2d, + 0x70, 0x11, 0xb5, 0x72, 0xb1, 0x9f, 0x82, 0x24, 0x7d, 0x53, 0xf4, 0xc0, 0xe1, 0x81, 0x68, 0xc2, + 0x1a, 0x74, 0x9b, 0x07, 0x8e, 0xf2, 0x3a, 0x24, 0x9b, 0x07, 0x2c, 0x9f, 0x78, 0x06, 0xd2, 0x7d, + 0xdb, 0xe6, 0xde, 0x1f, 0xf3, 0xba, 0x53, 0x04, 0x40, 0x9d, 0x1d, 0x91, 0x43, 0x8b, 0xf8, 0x39, + 0x34, 0x3f, 0x09, 0x18, 0x9d, 0x29, 0x09, 0x48, 0xa2, 0xcf, 0x5c, 0x68, 0x26, 0xa1, 0xc7, 0xe1, + 0x54, 0xa3, 0x7e, 0x6d, 0xb3, 0xb6, 0xa6, 0x6d, 0x34, 0xae, 0x0d, 0x5d, 0xab, 0x2f, 0x15, 0xee, + 0xdc, 0x5d, 0xce, 0xf0, 0xb0, 0x73, 0x12, 0xf6, 0xb6, 0x5a, 0xbb, 0xb9, 0xd5, 0xac, 0xc9, 0x12, + 0xc3, 0xde, 0xee, 0xe3, 0xdb, 0xb6, 0xcb, 0x1e, 0xed, 0x7d, 0x12, 0x4e, 0x8f, 0xc1, 0xf6, 0x82, + 0xcf, 0xf9, 0x3b, 0x77, 0x97, 0x73, 0xdb, 0x7d, 0xcc, 0xb4, 0x8c, 0x52, 0xac, 0x40, 0x71, 0x94, + 0x62, 0x6b, 0x7b, 0xab, 0x51, 0x5e, 0x97, 0x97, 0x4b, 0xf2, 0x9d, 0xbb, 0xcb, 0x59, 0x61, 0x32, + 0x08, 0xfe, 0x3b, 0x1f, 0x7d, 0x7e, 0x6b, 0x2a, 0x94, 0x35, 0x66, 0x71, 0x5d, 0x4f, 0xef, 0xeb, + 0xdd, 0xe3, 0x86, 0x9f, 0x53, 0x36, 0xfc, 0x95, 0x9f, 0x8d, 0x40, 0xc1, 0x0b, 0x6e, 0xb6, 0x69, + 0x0d, 0xe8, 0xe9, 0x60, 0xc6, 0x2f, 0x33, 0x71, 0xed, 0x60, 0xd8, 0x22, 0x21, 0xf8, 0x6e, 0x48, + 0x09, 0x27, 0x99, 0x4f, 0xaa, 0xe5, 0x31, 0xeb, 0x1b, 0xc7, 0xe0, 0xa4, 0x1e, 0x05, 0x7a, 0x01, + 0xd2, 0xde, 0x14, 0xf3, 0x9e, 0x49, 0x9b, 0x3c, 0x27, 0x39, 0xbd, 0x4f, 0x83, 0x9e, 0xf7, 0xc3, + 0xb8, 0xd8, 0xa4, 0xc0, 0xf0, 0x26, 0x43, 0xe0, 0xc4, 0x5e, 0x08, 0xf7, 0x24, 0xc4, 0xf4, 0x5d, + 0xc3, 0xe4, 0x06, 0xf8, 0xbe, 0x51, 0xba, 0x72, 0xa5, 0x5a, 0xe7, 0x44, 0x14, 0x53, 0xa9, 0xf3, + 0x64, 0x0a, 0x97, 0x17, 0x7d, 0x94, 0xe6, 0x40, 0x63, 0xb1, 0x30, 0xf3, 0x2e, 0x52, 0x5d, 0xfd, + 0xa0, 0x42, 0xc3, 0xe1, 0x53, 0x90, 0x24, 0x85, 0x6d, 0xfe, 0x50, 0x41, 0x54, 0x4d, 0x74, 0xf5, + 0x83, 0x6b, 0xba, 0x73, 0x23, 0x96, 0x8a, 0xca, 0x31, 0xe5, 0x27, 0x88, 0xa7, 0x12, 0x92, 0x0a, + 0x7a, 0x0c, 0x10, 0xa1, 0xd0, 0xdb, 0x58, 0x23, 0x53, 0x97, 0x8a, 0x57, 0xf0, 0x2d, 0x74, 0xf5, + 0x83, 0x72, 0x1b, 0x6f, 0x0e, 0xba, 0xb4, 0x01, 0x0e, 0xda, 0x00, 0x59, 0x20, 0x8b, 0x91, 0xe5, + 0xe2, 0x3f, 0x3d, 0xfa, 0x30, 0x2e, 0x47, 0x60, 0x0b, 0xc0, 0x47, 0xc8, 0x02, 0x90, 0x67, 0xfc, + 0xbc, 0x23, 0x1e, 0xa1, 0xae, 0x44, 0xc3, 0x5d, 0x51, 0x5e, 0x80, 0xc2, 0xd0, 0x08, 0x20, 0x05, + 0x72, 0x3c, 0x63, 0x45, 0xb7, 0xcf, 0x59, 0x84, 0x93, 0x56, 0x33, 0x2c, 0x33, 0x45, 0x8f, 0x13, + 0xac, 0xa6, 0x7e, 0xe1, 0xe3, 0x4b, 0x12, 0xdd, 0xcc, 0x79, 0x0c, 0x72, 0xa1, 0x31, 0x10, 0x59, + 0x64, 0xc9, 0xcf, 0x22, 0xfb, 0xc8, 0xaf, 0x41, 0x96, 0x18, 0x20, 0xdc, 0xe2, 0xb8, 0x0f, 0x43, + 0x81, 0x19, 0xc8, 0x61, 0x59, 0x33, 0x87, 0x67, 0x43, 0x08, 0x5c, 0x11, 0x1e, 0x50, 0x58, 0xec, + 0x19, 0x81, 0x75, 0x4d, 0x77, 0x94, 0x2d, 0x00, 0x7f, 0x50, 0x51, 0x19, 0xee, 0x27, 0xc6, 0x23, + 0x78, 0xdc, 0x93, 0x3f, 0x90, 0x15, 0xf2, 0x18, 0x4b, 0x04, 0xc9, 0x3f, 0xd2, 0xc9, 0x9e, 0xc9, + 0xba, 0x4e, 0x31, 0x2a, 0x2f, 0x7d, 0xea, 0x73, 0x67, 0xa5, 0x77, 0xc6, 0x16, 0x7c, 0xf7, 0xcb, + 0x70, 0x26, 0x50, 0x48, 0x14, 0x30, 0x94, 0x88, 0x2a, 0x04, 0xf4, 0x95, 0x14, 0x4e, 0x4b, 0x28, + 0x1d, 0x99, 0xff, 0x2d, 0x1d, 0x6d, 0x76, 0xa6, 0x67, 0x9b, 0xa6, 0xe7, 0xbb, 0xc6, 0x27, 0xe5, + 0xff, 0x49, 0x1a, 0x92, 0x2a, 0x7e, 0xff, 0x00, 0x3b, 0x2e, 0xba, 0x08, 0x31, 0x6c, 0xec, 0xdb, + 0xe3, 0x72, 0xa0, 0xa4, 0x83, 0x2b, 0x1c, 0xaf, 0x66, 0xec, 0xdb, 0xd7, 0xe7, 0x54, 0x8a, 0x8b, + 0x2e, 0x41, 0x7c, 0xaf, 0x33, 0xe0, 0xe9, 0xab, 0x21, 0x9b, 0x15, 0x24, 0xba, 0x4a, 0x90, 0xae, + 0xcf, 0xa9, 0x0c, 0x9b, 0x54, 0x45, 0x5f, 0x34, 0x8f, 0x1e, 0x5d, 0x55, 0xdd, 0xda, 0xa3, 0x55, + 0x11, 0x5c, 0x54, 0x01, 0x30, 0x2d, 0xd3, 0xd5, 0x68, 0x6a, 0x87, 0x5b, 0x8d, 0x07, 0x26, 0x53, + 0x9a, 0x2e, 0x4d, 0x06, 0x5d, 0x9f, 0x53, 0xd3, 0xa6, 0xf8, 0x20, 0xcd, 0x7d, 0xff, 0x00, 0xf7, + 0x0f, 0xb9, 0xb7, 0x36, 0xb1, 0xb9, 0x2f, 0x11, 0x24, 0xd2, 0x5c, 0x8a, 0x4d, 0x8c, 0x2c, 0x7b, + 0x6a, 0xcf, 0x3d, 0xe0, 0x0f, 0xc8, 0x2e, 0x4d, 0xa2, 0xa4, 0xef, 0xed, 0x35, 0x0f, 0xae, 0xcf, + 0xa9, 0x49, 0x83, 0xfd, 0x44, 0xcf, 0x79, 0x2e, 0x58, 0x66, 0xd4, 0xeb, 0x09, 0xd1, 0xb2, 0xb4, + 0xcf, 0x9c, 0x70, 0xc5, 0xd0, 0x26, 0xe4, 0x3b, 0xa6, 0xe3, 0x6a, 0x8e, 0xa5, 0xf7, 0x9c, 0x7d, + 0xdb, 0x75, 0x68, 0xfe, 0x24, 0x73, 0xf1, 0xa1, 0x49, 0x1c, 0xd6, 0x4d, 0xc7, 0x6d, 0x08, 0xe4, + 0xeb, 0x73, 0x6a, 0xae, 0x13, 0x04, 0x10, 0x7e, 0xf6, 0xde, 0x1e, 0xee, 0x7b, 0x0c, 0x69, 0x9e, + 0xe5, 0x08, 0x7e, 0x5b, 0x04, 0x5b, 0xd0, 0x13, 0x7e, 0x76, 0x10, 0x80, 0xbe, 0x0e, 0x16, 0x3a, + 0xb6, 0xde, 0xf2, 0xd8, 0x69, 0xc6, 0xfe, 0xc0, 0xba, 0x45, 0x93, 0x32, 0x99, 0x8b, 0x8f, 0x4e, + 0x6c, 0xa4, 0xad, 0xb7, 0x04, 0x8b, 0x2a, 0x21, 0xb8, 0x3e, 0xa7, 0xce, 0x77, 0x86, 0x81, 0xe8, + 0x7d, 0xb0, 0xa8, 0xf7, 0x7a, 0x9d, 0xc3, 0x61, 0xee, 0x05, 0xca, 0xfd, 0xfc, 0x24, 0xee, 0x65, + 0x42, 0x33, 0xcc, 0x1e, 0xe9, 0x23, 0x50, 0xd4, 0x04, 0xb9, 0xd7, 0xc7, 0xf4, 0xc6, 0x54, 0x8f, + 0x7b, 0x19, 0xf4, 0x75, 0xaa, 0xcc, 0xc5, 0x47, 0x26, 0xf1, 0xde, 0x66, 0xf8, 0xc2, 0x29, 0xb9, + 0x3e, 0xa7, 0x16, 0x7a, 0x61, 0x10, 0xe3, 0x6a, 0x1b, 0x98, 0x3e, 0x9e, 0xc7, 0xb9, 0xce, 0x4f, + 0xe3, 0x4a, 0xf1, 0xc3, 0x5c, 0x43, 0x20, 0x54, 0x83, 0x0c, 0x0b, 0x45, 0x35, 0x62, 0x0c, 0xe9, + 0x9b, 0x56, 0x99, 0x8b, 0xca, 0xc4, 0x19, 0x4a, 0x51, 0x6f, 0xda, 0x2e, 0xbe, 0x3e, 0xa7, 0x02, + 0xf6, 0xbe, 0x90, 0x0e, 0x27, 0xe8, 0xf3, 0x5e, 0x87, 0x5a, 0xd8, 0xf0, 0x16, 0x17, 0x28, 0xc3, + 0xc7, 0x26, 0x31, 0xa4, 0x2f, 0x5c, 0x1f, 0xde, 0x0c, 0xda, 0xe1, 0xeb, 0x73, 0xea, 0xc2, 0xed, + 0x51, 0x30, 0x51, 0xb1, 0x3d, 0xd3, 0xd2, 0x3b, 0xe6, 0x9b, 0x98, 0x2d, 0xa1, 0xf4, 0x61, 0xcb, + 0x23, 0x54, 0xec, 0x2a, 0xc7, 0xa6, 0x0b, 0x2b, 0x51, 0xb1, 0xbd, 0x20, 0xa0, 0x92, 0xe4, 0x67, + 0x3d, 0xbd, 0x87, 0xda, 0x92, 0x72, 0x8a, 0x3d, 0xce, 0x76, 0x23, 0x96, 0x02, 0x39, 0xa3, 0x3c, + 0x02, 0x99, 0x80, 0x61, 0x42, 0x45, 0x48, 0xf2, 0xd3, 0x30, 0xe2, 0xd4, 0x28, 0xff, 0x54, 0xf2, + 0x90, 0x0d, 0x1a, 0x23, 0xe5, 0xc3, 0x92, 0x47, 0x49, 0xdf, 0x94, 0x28, 0x86, 0x33, 0xd2, 0x69, + 0xdf, 0x53, 0x79, 0x50, 0x2c, 0x6d, 0xa2, 0x9c, 0x6d, 0xbf, 0x66, 0x29, 0x90, 0xaf, 0xac, 0x68, + 0x09, 0x32, 0xbd, 0x8b, 0x3d, 0x0f, 0x25, 0x4a, 0x51, 0xa0, 0x77, 0xb1, 0x27, 0x10, 0x1e, 0x80, + 0x2c, 0xe9, 0xb7, 0x16, 0xf4, 0x97, 0xd2, 0x6a, 0x86, 0xc0, 0x38, 0x8a, 0xf2, 0xaf, 0x22, 0x20, + 0x0f, 0x1b, 0x30, 0x2f, 0x55, 0x2d, 0x1d, 0x3b, 0x55, 0x7d, 0x7a, 0x38, 0x49, 0xee, 0xe7, 0xc5, + 0xd7, 0x41, 0xf6, 0xd3, 0xbb, 0x6c, 0xa9, 0x99, 0xec, 0xff, 0x0d, 0x39, 0xaa, 0x6a, 0xc1, 0x18, + 0xf2, 0x5c, 0xaf, 0x86, 0x36, 0x2b, 0xc5, 0x9f, 0xfc, 0x18, 0x1e, 0x70, 0xcf, 0x89, 0xd9, 0xe9, + 0xb5, 0x74, 0x17, 0x8b, 0xfc, 0x58, 0x60, 0xdf, 0xf2, 0x61, 0x28, 0xe8, 0xbd, 0x9e, 0xe6, 0xb8, + 0xba, 0x8b, 0xb9, 0xaf, 0xc1, 0x32, 0x0f, 0x39, 0xbd, 0xd7, 0xa3, 0x4f, 0xab, 0x33, 0x5f, 0xe3, + 0x21, 0xc8, 0x13, 0x9b, 0x6e, 0xea, 0x1d, 0xe1, 0x2a, 0x24, 0x98, 0x4b, 0xc2, 0xa1, 0xcc, 0x3b, + 0x50, 0x5a, 0xde, 0x88, 0x53, 0x7b, 0xee, 0xc5, 0x54, 0x52, 0x20, 0xa6, 0x42, 0xfc, 0xad, 0x0f, + 0x26, 0x1f, 0xf1, 0x3e, 0xca, 0xf8, 0x4d, 0x83, 0x45, 0x1a, 0x7f, 0xdd, 0x66, 0xc9, 0x92, 0x94, + 0xca, 0x3e, 0x14, 0x15, 0xf2, 0x61, 0xdb, 0x8f, 0xf2, 0x10, 0x71, 0x0f, 0x78, 0x2d, 0x11, 0xf7, + 0x80, 0x78, 0xba, 0xde, 0x7b, 0xbb, 0xf9, 0x31, 0xab, 0x1d, 0xa7, 0xf3, 0x73, 0x1d, 0x4a, 0x01, + 0x72, 0xa1, 0x35, 0x41, 0x39, 0x09, 0x8b, 0xe3, 0x4c, 0xbc, 0xb2, 0xef, 0xc1, 0x43, 0xa6, 0x1a, + 0x5d, 0x82, 0x94, 0x67, 0xe3, 0xc7, 0x44, 0xc7, 0xb4, 0x5a, 0x81, 0xac, 0x7a, 0xa8, 0xa1, 0x74, + 0x7e, 0x24, 0x94, 0xce, 0x57, 0xbe, 0x11, 0x8a, 0x93, 0xec, 0xf7, 0x50, 0x92, 0x2f, 0xe6, 0x09, + 0xec, 0x24, 0x24, 0xf8, 0xc3, 0x96, 0x11, 0xba, 0x81, 0xc5, 0xbf, 0x88, 0x20, 0x99, 0x2d, 0x8f, + 0xb2, 0x7d, 0x2d, 0xfa, 0xa1, 0x68, 0x70, 0x7a, 0xa2, 0x0d, 0x9f, 0xbc, 0x15, 0xc6, 0x18, 0xf1, + 0xad, 0x30, 0x43, 0x34, 0xc7, 0xa1, 0x7d, 0x15, 0x07, 0x59, 0xd8, 0x97, 0xf2, 0x91, 0x28, 0x9c, + 0x1c, 0x6f, 0xc9, 0xd1, 0x32, 0x64, 0x89, 0xdf, 0xea, 0x86, 0x5d, 0x5c, 0xe8, 0xea, 0x07, 0x4d, + 0xee, 0xdf, 0xf2, 0xad, 0x84, 0x88, 0xb7, 0x95, 0x80, 0x76, 0x60, 0xbe, 0x63, 0x1b, 0x7a, 0x47, + 0x0b, 0x6c, 0xe5, 0xf0, 0x49, 0xf4, 0xe0, 0x88, 0xb0, 0xc3, 0x29, 0x43, 0x62, 0x70, 0xb8, 0xfe, + 0x17, 0x28, 0x8f, 0x75, 0x6f, 0xd7, 0x07, 0xad, 0x41, 0xa6, 0x6b, 0x3a, 0xbb, 0x78, 0x5f, 0xbf, + 0x6d, 0xda, 0x7d, 0x3e, 0x9b, 0x46, 0x95, 0x66, 0xc3, 0xc7, 0x11, 0x3b, 0x4c, 0x01, 0xb2, 0xc0, + 0x90, 0xc4, 0xc7, 0x6e, 0x7c, 0x25, 0x8e, 0x6d, 0x4d, 0x26, 0xed, 0x21, 0x25, 0x27, 0xee, 0x21, + 0x8d, 0xdb, 0xb0, 0x49, 0x8d, 0xdf, 0xb0, 0xf9, 0x50, 0x70, 0x68, 0xc2, 0x6b, 0xdf, 0xc8, 0x1e, + 0x0e, 0x6a, 0xc0, 0x22, 0xa7, 0x6f, 0x85, 0x64, 0x3f, 0xe6, 0xa8, 0x03, 0x9b, 0x5f, 0xc3, 0x32, + 0x47, 0x82, 0x7c, 0xb2, 0xd8, 0xa3, 0xf7, 0x26, 0x76, 0xb1, 0x89, 0x1a, 0x0b, 0x6c, 0xa2, 0xfe, + 0x1f, 0x36, 0x14, 0x2f, 0xc0, 0xfc, 0x88, 0x1f, 0x31, 0x76, 0x73, 0x78, 0x42, 0x42, 0x56, 0xf9, + 0x98, 0x04, 0xa5, 0xc9, 0x8e, 0xc3, 0x58, 0x56, 0xc7, 0xca, 0x7d, 0x4f, 0x32, 0xcf, 0x0f, 0x41, + 0x7e, 0xc8, 0xad, 0x61, 0xa3, 0x90, 0x0b, 0x05, 0x90, 0xca, 0x37, 0x47, 0x3d, 0x9b, 0x19, 0xf2, + 0x3d, 0xc6, 0x28, 0xda, 0x4b, 0xb0, 0xd0, 0xc2, 0x86, 0xd9, 0xba, 0x57, 0x3d, 0x9b, 0xe7, 0xd4, + 0xff, 0x4f, 0xcd, 0x46, 0xd5, 0xec, 0x7b, 0x01, 0x52, 0x2a, 0x76, 0x7a, 0xc4, 0x95, 0x40, 0x15, + 0x48, 0xe3, 0x03, 0x03, 0xf7, 0x5c, 0xff, 0x3c, 0xc0, 0x38, 0xef, 0x96, 0x61, 0xd7, 0x04, 0x26, + 0x89, 0xed, 0x3c, 0x32, 0xf4, 0x34, 0x0f, 0x5f, 0x27, 0x47, 0xa2, 0x9c, 0x3c, 0x18, 0xbf, 0x5e, + 0x16, 0xf1, 0x6b, 0x74, 0x62, 0x68, 0xc6, 0xa8, 0x86, 0x02, 0xd8, 0xa7, 0x79, 0x00, 0x1b, 0x9b, + 0x52, 0x59, 0x28, 0x82, 0xad, 0x86, 0x22, 0xd8, 0xc4, 0x94, 0x6e, 0x4e, 0x08, 0x61, 0x2f, 0x8b, + 0x10, 0x36, 0x39, 0xa5, 0xc5, 0x43, 0x31, 0xec, 0x7b, 0x02, 0x31, 0x6c, 0x7a, 0x34, 0x51, 0x18, + 0x22, 0x1d, 0x13, 0xc4, 0x3e, 0xef, 0x05, 0xb1, 0xd9, 0x89, 0x01, 0x30, 0x27, 0x1e, 0x8e, 0x62, + 0xb7, 0x46, 0xa2, 0xd8, 0x1c, 0xff, 0x9b, 0x4c, 0x93, 0x58, 0x4c, 0x09, 0x63, 0xb7, 0x46, 0xc2, + 0xd8, 0xfc, 0x14, 0x86, 0x53, 0xe2, 0xd8, 0xaf, 0x1f, 0x1f, 0xc7, 0x4e, 0x8e, 0x34, 0x79, 0x33, + 0x67, 0x0b, 0x64, 0xb5, 0x09, 0x81, 0xac, 0x3c, 0x31, 0xe8, 0x62, 0xec, 0x67, 0x8e, 0x64, 0x77, + 0xc6, 0x44, 0xb2, 0x2c, 0xe6, 0x3c, 0x37, 0x91, 0xf9, 0x0c, 0xa1, 0xec, 0xce, 0x98, 0x50, 0x16, + 0x4d, 0x65, 0x3b, 0x35, 0x96, 0xbd, 0x1a, 0x8e, 0x65, 0x17, 0x26, 0x38, 0x4c, 0xfe, 0x6c, 0x9f, + 0x10, 0xcc, 0xee, 0x4e, 0x0a, 0x66, 0x59, 0xc0, 0xf9, 0xf8, 0x44, 0x8e, 0xc7, 0x88, 0x66, 0xb7, + 0x46, 0xa2, 0xd9, 0x13, 0x53, 0x34, 0x6d, 0xf6, 0x70, 0x96, 0xbd, 0x38, 0xce, 0xde, 0x1a, 0x07, + 0x39, 0x73, 0x23, 0x96, 0xca, 0xc8, 0x59, 0xe5, 0x51, 0xb2, 0xfa, 0x0e, 0xd9, 0x39, 0xe2, 0xe6, + 0xe2, 0x7e, 0xdf, 0xee, 0x8b, 0x23, 0xf8, 0xf4, 0x43, 0x39, 0x47, 0xc2, 0x1b, 0xdf, 0xa6, 0x1d, + 0x11, 0xfa, 0xd2, 0x70, 0x22, 0x60, 0xc7, 0x94, 0x5f, 0x90, 0x7c, 0x5a, 0x1a, 0xfc, 0x06, 0x43, + 0xa3, 0x34, 0x0f, 0x8d, 0x02, 0x01, 0x71, 0x24, 0x1c, 0x10, 0x2f, 0x41, 0x86, 0x84, 0x09, 0x43, + 0xb1, 0xae, 0xde, 0xf3, 0x62, 0x5d, 0x71, 0xf6, 0x87, 0x85, 0xcd, 0x7c, 0x59, 0x62, 0x1b, 0x61, + 0x05, 0xef, 0x1c, 0x14, 0x8b, 0xd2, 0xd0, 0x13, 0xb0, 0x10, 0xc0, 0xf5, 0xc2, 0x0f, 0x16, 0xf8, + 0xc9, 0x1e, 0x76, 0x99, 0xc7, 0x21, 0xff, 0x4c, 0xf2, 0x25, 0xe4, 0x07, 0xc9, 0xe3, 0xe2, 0x59, + 0xe9, 0x6d, 0x8a, 0x67, 0x23, 0xf7, 0x1c, 0xcf, 0x06, 0xc3, 0xa9, 0x68, 0x38, 0x9c, 0xfa, 0x1f, + 0x92, 0x3f, 0x26, 0x5e, 0x74, 0x6a, 0xd8, 0x2d, 0xcc, 0x03, 0x1c, 0xfa, 0x9b, 0xb8, 0x24, 0x1d, + 0xbb, 0xcd, 0xc3, 0x18, 0xf2, 0x93, 0x60, 0x79, 0x0b, 0x4f, 0x9a, 0xaf, 0x2b, 0x5e, 0x6c, 0x14, + 0x0f, 0x5e, 0x41, 0xe0, 0xe7, 0xf2, 0x13, 0xfe, 0xb9, 0x7c, 0xef, 0xde, 0x6c, 0x32, 0x70, 0x6f, + 0x16, 0x3d, 0x07, 0x69, 0x9a, 0xa7, 0xd6, 0xec, 0x9e, 0xf8, 0xf3, 0x58, 0x67, 0x26, 0x9f, 0xc9, + 0x77, 0xe8, 0x69, 0x61, 0x76, 0x8e, 0xdf, 0xf7, 0x38, 0xd2, 0x21, 0x8f, 0xe3, 0x3e, 0x48, 0x93, + 0xd6, 0xb3, 0x3f, 0xf3, 0x00, 0xfc, 0xd2, 0xb5, 0x00, 0x28, 0x3f, 0x19, 0x81, 0xc2, 0xd0, 0x42, + 0x33, 0xb6, 0xef, 0xe3, 0x76, 0x40, 0x67, 0x93, 0xc7, 0x59, 0x80, 0xb6, 0xee, 0x68, 0x6f, 0xe8, + 0x96, 0xcb, 0xff, 0x9a, 0x5b, 0x54, 0x0d, 0x40, 0x50, 0x09, 0x52, 0xe4, 0x6b, 0xe0, 0xf0, 0xbf, + 0xe7, 0x16, 0x55, 0xbd, 0x6f, 0x74, 0x1d, 0x12, 0xf8, 0x36, 0x7d, 0x98, 0x94, 0x3d, 0xef, 0x7b, + 0x72, 0x34, 0x92, 0x23, 0xc5, 0x95, 0x22, 0x19, 0xec, 0x2f, 0xbe, 0xb5, 0x24, 0x33, 0xec, 0xc7, + 0xbd, 0xbb, 0x4e, 0x2a, 0xa7, 0x0f, 0x4b, 0x21, 0x35, 0x24, 0x05, 0x9a, 0xc2, 0xca, 0x8a, 0xc8, + 0x94, 0xc8, 0x94, 0x1d, 0x4f, 0x56, 0x73, 0x5d, 0xdc, 0xed, 0xd9, 0x76, 0x47, 0x63, 0x73, 0xbc, + 0x0c, 0xf9, 0xf0, 0xba, 0xca, 0xfe, 0x04, 0x93, 0xab, 0x9b, 0x96, 0x16, 0x72, 0x82, 0xb3, 0x0c, + 0xc8, 0xe6, 0xd4, 0x8d, 0x58, 0x4a, 0x92, 0x23, 0x37, 0x62, 0xa9, 0x88, 0x1c, 0x55, 0xb6, 0xe1, + 0xc4, 0xd8, 0x75, 0x15, 0x3d, 0x0b, 0x69, 0x7f, 0x49, 0x66, 0x27, 0xcc, 0x8f, 0x48, 0x12, 0xf8, + 0xb8, 0xca, 0x2f, 0x4b, 0x3e, 0xcb, 0x70, 0xda, 0xa1, 0x06, 0x09, 0x76, 0xdc, 0x8f, 0x1f, 0xed, + 0x78, 0x62, 0xb6, 0x15, 0x79, 0x85, 0x9d, 0x05, 0x54, 0x39, 0xb1, 0xf2, 0x3e, 0x48, 0x30, 0x08, + 0xca, 0x40, 0xd2, 0x7f, 0x02, 0x19, 0x20, 0x51, 0xae, 0x56, 0x6b, 0xdb, 0xe2, 0x3d, 0xd3, 0xca, + 0x96, 0xda, 0x94, 0x23, 0x04, 0xac, 0xd6, 0x6e, 0xd4, 0xaa, 0x4d, 0x39, 0x8a, 0xe6, 0x21, 0xc7, + 0x7e, 0x6b, 0x57, 0xb7, 0xd4, 0x8d, 0x72, 0x53, 0x8e, 0x05, 0x40, 0x8d, 0xda, 0xe6, 0x5a, 0x4d, + 0x95, 0xe3, 0xca, 0x53, 0x70, 0x7a, 0xe2, 0x1a, 0xee, 0xe7, 0x14, 0xa4, 0x40, 0x4e, 0x41, 0xf9, + 0x48, 0x84, 0x04, 0x35, 0x93, 0x16, 0x66, 0x74, 0x63, 0xa8, 0xe3, 0x17, 0x8f, 0xb1, 0xaa, 0x0f, + 0xf5, 0x9e, 0xc4, 0x31, 0x7d, 0xbc, 0x87, 0x5d, 0x63, 0x9f, 0x39, 0x0a, 0xcc, 0x02, 0xe5, 0xd4, + 0x1c, 0x87, 0x52, 0x22, 0x87, 0xa1, 0xbd, 0x8e, 0x0d, 0x57, 0x63, 0x4a, 0xe4, 0xf0, 0xbf, 0xf1, + 0x9b, 0x63, 0xd0, 0x06, 0x03, 0x2a, 0xdf, 0x78, 0x2c, 0x59, 0xa6, 0x21, 0xae, 0xd6, 0x9a, 0xea, + 0xab, 0x72, 0x14, 0x21, 0xc8, 0xd3, 0x9f, 0x5a, 0x63, 0xb3, 0xbc, 0xdd, 0xb8, 0xbe, 0x45, 0x64, + 0xb9, 0x00, 0x05, 0x21, 0x4b, 0x01, 0x8c, 0x2b, 0x8f, 0xc1, 0xa9, 0x09, 0x5e, 0xc5, 0x98, 0xf3, + 0x97, 0x9f, 0x90, 0x82, 0xd8, 0x61, 0xcf, 0x60, 0x0b, 0x12, 0x8e, 0xab, 0xbb, 0x03, 0x87, 0x0b, + 0xf1, 0xd9, 0x59, 0xdd, 0x8c, 0x15, 0xf1, 0xa3, 0x41, 0xc9, 0x55, 0xce, 0x46, 0xb9, 0x04, 0xf9, + 0x70, 0xc9, 0x64, 0x19, 0xf8, 0x4a, 0x14, 0x51, 0xae, 0x00, 0x1a, 0xf5, 0x3e, 0xc6, 0x84, 0x97, + 0xd2, 0xb8, 0xf0, 0xf2, 0xc7, 0x24, 0x38, 0x73, 0x84, 0xa7, 0x81, 0x5e, 0x1a, 0xea, 0xe4, 0xf3, + 0xc7, 0xf1, 0x53, 0xd8, 0x1f, 0xd4, 0x3c, 0x1c, 0xea, 0xe6, 0xd3, 0x90, 0x0d, 0xc2, 0x67, 0xeb, + 0xe4, 0x17, 0x23, 0xfe, 0x24, 0x0e, 0xc7, 0xc1, 0xbe, 0x09, 0x94, 0xbe, 0x4a, 0x13, 0xf8, 0x6e, + 0x00, 0xf7, 0x40, 0x1c, 0x00, 0xe6, 0xeb, 0xe8, 0xfd, 0x63, 0x52, 0x63, 0xd8, 0x68, 0x1e, 0xf0, + 0x49, 0x90, 0x76, 0xf9, 0x2f, 0x07, 0x35, 0x82, 0x49, 0x81, 0x01, 0x5d, 0x63, 0x1d, 0xef, 0x2f, + 0xfc, 0xce, 0xb6, 0x18, 0xfb, 0xc9, 0x03, 0x06, 0x76, 0xd0, 0xab, 0x70, 0x6a, 0xc8, 0x51, 0xf0, + 0x58, 0xc7, 0x66, 0xf5, 0x17, 0x4e, 0x84, 0xfd, 0x05, 0xc1, 0x3a, 0xb8, 0xda, 0xc7, 0xc3, 0xab, + 0xfd, 0xab, 0x00, 0x7e, 0x72, 0xc0, 0x3f, 0xb1, 0x26, 0x05, 0x4f, 0xac, 0x5d, 0x82, 0x38, 0xd1, + 0x24, 0x21, 0xa7, 0x51, 0x53, 0x4c, 0x34, 0x21, 0x90, 0x5c, 0x60, 0xd8, 0x8a, 0x09, 0x68, 0x34, + 0xb7, 0x38, 0xa1, 0x8a, 0xf7, 0x84, 0xab, 0x78, 0x60, 0x62, 0x96, 0x72, 0x7c, 0x55, 0x6f, 0x42, + 0x9c, 0x8e, 0xfc, 0xd8, 0x6b, 0x80, 0xdf, 0x00, 0xa0, 0xbb, 0x6e, 0xdf, 0xdc, 0x1d, 0xf8, 0x15, + 0x2c, 0x8d, 0xd7, 0x9c, 0xb2, 0xc0, 0xab, 0xdc, 0xc7, 0x55, 0x68, 0xd1, 0x27, 0x0d, 0xa8, 0x51, + 0x80, 0xa1, 0xb2, 0x09, 0xf9, 0x30, 0xed, 0xf8, 0x6b, 0x8d, 0xfe, 0xbb, 0x20, 0x69, 0xe1, 0xdf, + 0x78, 0xde, 0x11, 0x7f, 0xab, 0x87, 0x7e, 0x28, 0x7f, 0x21, 0x41, 0x36, 0xa8, 0x78, 0x6f, 0xb3, + 0x0b, 0x72, 0xff, 0x18, 0x17, 0x24, 0xdd, 0xd6, 0x9d, 0x97, 0x99, 0x07, 0x72, 0x7a, 0xc4, 0x03, + 0x49, 0xb6, 0x75, 0x67, 0xe7, 0x6b, 0xe8, 0x80, 0x28, 0xdf, 0x22, 0x41, 0xca, 0xeb, 0xfc, 0x11, + 0xa7, 0x74, 0xfd, 0xcb, 0xad, 0x5e, 0xd6, 0x9d, 0xed, 0x6f, 0x44, 0xbd, 0xfd, 0x8d, 0x2b, 0xde, + 0xe2, 0x37, 0x29, 0x1d, 0x12, 0x94, 0xb4, 0x38, 0x29, 0xc7, 0xd7, 0xfa, 0x2b, 0xb3, 0xdd, 0x21, + 0x5b, 0x84, 0x78, 0xf0, 0xfe, 0x17, 0xfb, 0x50, 0x5a, 0x81, 0xa3, 0x31, 0x6c, 0x1a, 0x06, 0x2f, + 0x9b, 0x49, 0xc7, 0xbe, 0x6c, 0xe6, 0xd5, 0x12, 0x09, 0xd6, 0xf2, 0x3d, 0x12, 0xa4, 0xc4, 0x8c, + 0x40, 0xef, 0x0d, 0x1e, 0x99, 0x12, 0x7b, 0x72, 0x13, 0xad, 0x11, 0xe7, 0x1f, 0x38, 0x31, 0x35, + 0x72, 0x52, 0x38, 0x7a, 0xdc, 0x93, 0xc2, 0xdc, 0xaf, 0xfb, 0x53, 0x09, 0xe4, 0xe1, 0xf9, 0xfa, + 0x55, 0xb7, 0x6e, 0x74, 0x91, 0x8b, 0x8e, 0x59, 0xe4, 0x26, 0x1d, 0xff, 0x8d, 0x4d, 0x3a, 0xfe, + 0x3b, 0xda, 0xeb, 0xf8, 0x3d, 0xf6, 0xfa, 0x83, 0x11, 0xc8, 0x04, 0x92, 0xa3, 0xe8, 0x99, 0xd0, + 0x51, 0xe2, 0xe5, 0xa3, 0x12, 0xa9, 0x81, 0xb3, 0xc4, 0x21, 0x31, 0x45, 0x8e, 0x2f, 0xa6, 0xb7, + 0xff, 0x5a, 0xd1, 0xf8, 0x9b, 0x97, 0xf1, 0x09, 0x37, 0x2f, 0xff, 0x86, 0x04, 0x29, 0xcf, 0xe9, + 0x3e, 0xee, 0xee, 0xdb, 0x49, 0x48, 0x70, 0xbf, 0x92, 0x6d, 0xbf, 0xf1, 0xaf, 0xb1, 0x49, 0xe5, + 0x12, 0xa4, 0xc4, 0x9f, 0xee, 0xe3, 0x6b, 0x9a, 0xf7, 0x7d, 0xfe, 0x79, 0xc8, 0x04, 0x76, 0x2e, + 0x89, 0x61, 0xdc, 0xac, 0xbd, 0x2c, 0xcf, 0x95, 0x92, 0x77, 0xee, 0x2e, 0x47, 0x37, 0xf1, 0x1b, + 0x64, 0x36, 0xab, 0xb5, 0xea, 0xf5, 0x5a, 0xf5, 0x45, 0x59, 0x2a, 0x65, 0xee, 0xdc, 0x5d, 0x4e, + 0xaa, 0x98, 0xe6, 0x13, 0xcf, 0xbf, 0x08, 0x85, 0xa1, 0x81, 0x09, 0x3b, 0x2d, 0x08, 0xf2, 0x6b, + 0x3b, 0xdb, 0xeb, 0xf5, 0x6a, 0xb9, 0x59, 0xd3, 0xd8, 0x81, 0x53, 0x74, 0x0a, 0x16, 0xd6, 0xeb, + 0xd7, 0xae, 0x37, 0xb5, 0xea, 0x7a, 0xbd, 0xb6, 0xd9, 0xd4, 0xca, 0xcd, 0x66, 0xb9, 0xfa, 0xa2, + 0x1c, 0xb9, 0x78, 0x37, 0x03, 0xb1, 0x72, 0xa5, 0x5a, 0x47, 0x55, 0x88, 0xd1, 0x44, 0xc8, 0x91, + 0x47, 0x97, 0x4a, 0x47, 0x67, 0x86, 0xd1, 0x55, 0x88, 0xd3, 0x1c, 0x09, 0x3a, 0xfa, 0x2c, 0x53, + 0x69, 0x4a, 0xaa, 0x98, 0x34, 0x86, 0xce, 0xc8, 0x23, 0x0f, 0x37, 0x95, 0x8e, 0xce, 0x1c, 0xa3, + 0x75, 0x48, 0x8a, 0x10, 0x79, 0xda, 0x89, 0xa3, 0xd2, 0xd4, 0x74, 0x2e, 0xe9, 0x1a, 0x4b, 0x35, + 0x1c, 0x7d, 0xee, 0xa9, 0x34, 0x25, 0xa7, 0x8c, 0xea, 0xde, 0x45, 0x9c, 0x29, 0x47, 0x99, 0x4a, + 0xd3, 0xb2, 0xc4, 0x48, 0x85, 0xb4, 0x9f, 0xc4, 0x99, 0x7e, 0x9a, 0xab, 0x34, 0x43, 0xba, 0x1c, + 0xbd, 0x0f, 0x72, 0xe1, 0x40, 0x77, 0xb6, 0xe3, 0x52, 0xa5, 0x19, 0xf3, 0xd1, 0x84, 0x7f, 0x38, + 0xea, 0x9d, 0xed, 0xf8, 0x54, 0x69, 0xc6, 0xf4, 0x34, 0x7a, 0x1d, 0xe6, 0x47, 0xa3, 0xd2, 0xd9, + 0x4f, 0x53, 0x95, 0x8e, 0x91, 0xb0, 0x46, 0x5d, 0x40, 0x63, 0xa2, 0xd9, 0x63, 0x1c, 0xae, 0x2a, + 0x1d, 0x27, 0x7f, 0x8d, 0x5a, 0x50, 0x18, 0x0e, 0x11, 0x67, 0x3d, 0x6c, 0x55, 0x9a, 0x39, 0x97, + 0xcd, 0x6a, 0x09, 0x87, 0x96, 0xb3, 0x1e, 0xbe, 0x2a, 0xcd, 0x9c, 0xda, 0x46, 0x3b, 0x00, 0x81, + 0xe8, 0x70, 0x86, 0xc3, 0x58, 0xa5, 0x59, 0x92, 0xdc, 0xa8, 0x07, 0x0b, 0xe3, 0xc2, 0xc6, 0xe3, + 0x9c, 0xcd, 0x2a, 0x1d, 0x2b, 0xf7, 0x4d, 0xf4, 0x39, 0x1c, 0x00, 0xce, 0x76, 0x56, 0xab, 0x34, + 0x63, 0x12, 0xbc, 0x52, 0x9e, 0x78, 0x40, 0xf7, 0x91, 0x23, 0x0f, 0xe8, 0xfa, 0x47, 0x6e, 0xbd, + 0x43, 0xb9, 0xff, 0xf6, 0x02, 0xbc, 0x8b, 0x3f, 0xfd, 0xe2, 0xb8, 0xfa, 0x2d, 0xd3, 0x6a, 0x7b, + 0x6f, 0xf0, 0xf0, 0x6f, 0x7e, 0x3a, 0xf7, 0x24, 0x7f, 0x67, 0x46, 0x40, 0xa7, 0xbc, 0xc4, 0x33, + 0xf1, 0x79, 0xc2, 0x69, 0x07, 0xf9, 0xa7, 0x9f, 0xbb, 0x3d, 0xe2, 0x95, 0x9f, 0x29, 0x6f, 0x09, + 0x8d, 0x79, 0x05, 0xa8, 0x74, 0xe4, 0xe5, 0xf8, 0xd2, 0x51, 0x07, 0x96, 0x89, 0x17, 0x9b, 0xbf, + 0x6e, 0x3a, 0xae, 0xdd, 0x37, 0x0d, 0xbd, 0x43, 0x97, 0x97, 0x2b, 0xb3, 0x5e, 0x27, 0xaa, 0xa4, + 0x89, 0xbb, 0xc2, 0x1f, 0x0a, 0xe2, 0x57, 0x5c, 0xd6, 0x20, 0x71, 0x5b, 0xef, 0xb0, 0xcb, 0x3c, + 0xc1, 0x57, 0xc2, 0x86, 0x65, 0x1e, 0xf0, 0xa3, 0x82, 0x5c, 0x18, 0xad, 0xf2, 0x7d, 0xf4, 0x22, + 0x44, 0xb7, 0x6b, 0x3a, 0x44, 0x17, 0x55, 0x1a, 0x48, 0xdf, 0x80, 0x58, 0x5f, 0x77, 0x79, 0x78, + 0x59, 0xb9, 0x7c, 0xec, 0x97, 0x85, 0x58, 0x0d, 0x94, 0x07, 0x7a, 0x09, 0x52, 0x5d, 0xfd, 0x40, + 0xa3, 0xfc, 0x22, 0x5f, 0x15, 0xbf, 0x64, 0x57, 0x3f, 0x20, 0xed, 0x43, 0xef, 0x83, 0x02, 0x61, + 0x69, 0xec, 0xeb, 0x56, 0x1b, 0x33, 0xce, 0xd1, 0xaf, 0x8a, 0x73, 0xae, 0xab, 0x1f, 0x54, 0x29, + 0x37, 0xc2, 0x9f, 0xbf, 0xc0, 0xf4, 0xab, 0x12, 0xcf, 0x19, 0x50, 0xc1, 0x20, 0x1d, 0x64, 0xc3, + 0xfb, 0xa2, 0x95, 0x8a, 0x0d, 0x8e, 0x47, 0x26, 0xc9, 0x7d, 0x48, 0xac, 0x95, 0x1c, 0x69, 0xde, + 0x67, 0xdf, 0x5a, 0x92, 0x58, 0xad, 0x05, 0x63, 0x44, 0xec, 0x19, 0x96, 0x0a, 0xd1, 0xa8, 0x0f, + 0x1b, 0x99, 0xea, 0xc3, 0xe6, 0x84, 0x0f, 0xcb, 0x18, 0x02, 0xa3, 0x26, 0xe5, 0xbc, 0x0f, 0x9f, + 0x92, 0x20, 0xb3, 0x16, 0x78, 0xf3, 0xaf, 0x08, 0xc9, 0xae, 0x6d, 0x99, 0xb7, 0x70, 0xdf, 0xdb, + 0xa1, 0x62, 0x9f, 0xc4, 0xcf, 0x64, 0x7f, 0x3a, 0xce, 0x3d, 0x14, 0xcf, 0xe2, 0x88, 0x6f, 0x42, + 0xf5, 0x06, 0xde, 0x75, 0x4c, 0x21, 0x67, 0x55, 0x7c, 0xa2, 0x47, 0x41, 0x76, 0xb0, 0x31, 0xe8, + 0x9b, 0xee, 0xa1, 0x66, 0xd8, 0x96, 0xab, 0x1b, 0x2e, 0x8f, 0xc2, 0x0b, 0x02, 0x5e, 0x65, 0x60, + 0xc2, 0xa4, 0x85, 0x5d, 0xdd, 0xec, 0xb0, 0x23, 0x85, 0x69, 0x55, 0x7c, 0xf2, 0xa6, 0xde, 0x49, + 0x06, 0xe3, 0xd0, 0x2a, 0xc8, 0x76, 0x0f, 0xf7, 0x43, 0xc7, 0x51, 0x98, 0x36, 0x16, 0x7f, 0xf3, + 0x33, 0x4f, 0x2c, 0x72, 0x81, 0xf3, 0xa3, 0x0c, 0xec, 0x89, 0x7b, 0xb5, 0x20, 0x28, 0xc4, 0x39, + 0x95, 0x57, 0x43, 0x7b, 0x52, 0x83, 0x5d, 0xff, 0xfd, 0x93, 0xc5, 0x11, 0xa1, 0x96, 0xad, 0xc3, + 0x4a, 0xf1, 0x37, 0x7c, 0xd6, 0x7e, 0x9c, 0xfa, 0x22, 0x3e, 0x0c, 0x6e, 0x50, 0x51, 0x36, 0xc4, + 0x85, 0x7f, 0x5d, 0x37, 0x3b, 0xe2, 0xaf, 0x6c, 0xaa, 0xfc, 0x0b, 0xad, 0x7a, 0xc9, 0xc5, 0x18, + 0x8d, 0x87, 0x94, 0x49, 0xba, 0x51, 0xb1, 0xad, 0x56, 0x38, 0x8b, 0x88, 0xaa, 0x90, 0x70, 0xed, + 0x5b, 0xd8, 0xe2, 0x02, 0xaa, 0x3c, 0x76, 0x8c, 0x27, 0xc4, 0x54, 0x4e, 0x8a, 0xbe, 0x1e, 0xe4, + 0x16, 0xee, 0xe0, 0x36, 0xbb, 0xe8, 0xb7, 0xaf, 0xf7, 0x31, 0xbb, 0x66, 0x7e, 0x4f, 0x0f, 0x84, + 0x15, 0x3c, 0x56, 0x0d, 0xca, 0x09, 0x6d, 0x87, 0x5f, 0x95, 0x4c, 0xf2, 0xad, 0xe3, 0x09, 0x7d, + 0x0c, 0x68, 0x5e, 0xd0, 0xf2, 0x84, 0x5e, 0xa1, 0x7c, 0x14, 0xe4, 0x81, 0xb5, 0x6b, 0x5b, 0xf4, + 0x8f, 0xd3, 0xf1, 0x28, 0x2a, 0xc5, 0xf6, 0x29, 0x3d, 0x38, 0xdf, 0xa7, 0xdc, 0x86, 0xbc, 0x8f, + 0x4a, 0x67, 0x48, 0xfa, 0xb8, 0x33, 0x24, 0xe7, 0x31, 0x20, 0x28, 0x68, 0x03, 0xc0, 0x9f, 0x83, + 0x74, 0xa3, 0x2c, 0x33, 0x79, 0xc4, 0xfc, 0xd9, 0x1c, 0xec, 0x4c, 0x80, 0x01, 0xfa, 0x3a, 0x58, + 0xe8, 0x9a, 0x96, 0xe6, 0xe0, 0xce, 0x9e, 0xc6, 0x25, 0x47, 0xf8, 0x66, 0x8e, 0x3f, 0x9a, 0xf3, + 0x5d, 0xd3, 0x6a, 0xe0, 0xce, 0xde, 0x9a, 0xc7, 0x05, 0xbd, 0x1b, 0xce, 0xf8, 0xbd, 0xb7, 0x2d, + 0x6d, 0xdf, 0xee, 0xb4, 0xb4, 0x3e, 0xde, 0xd3, 0x0c, 0xfa, 0x08, 0x5c, 0x96, 0xca, 0xec, 0x94, + 0x87, 0xb2, 0x65, 0x5d, 0xb7, 0x3b, 0x2d, 0x15, 0xef, 0x55, 0x49, 0x31, 0x7a, 0x10, 0xfc, 0xae, + 0x6b, 0x66, 0xcb, 0x29, 0xe6, 0x96, 0xa3, 0xe7, 0x62, 0x6a, 0xd6, 0x03, 0xd6, 0x5b, 0xce, 0x6a, + 0xea, 0x43, 0x1f, 0x5f, 0x9a, 0xfb, 0xc2, 0xc7, 0x97, 0xe6, 0x94, 0xab, 0xf4, 0x31, 0x24, 0x3e, + 0x8f, 0xb0, 0x83, 0x2e, 0x43, 0x5a, 0x17, 0x1f, 0xec, 0xaa, 0xd3, 0x11, 0xf3, 0xd0, 0x47, 0x55, + 0x7e, 0x42, 0x82, 0xc4, 0xda, 0xcd, 0x6d, 0xdd, 0xec, 0xa3, 0x1a, 0xcc, 0xfb, 0x8a, 0x39, 0xeb, + 0x94, 0xf6, 0x75, 0x59, 0xcc, 0xe9, 0xcd, 0x49, 0x07, 0xd5, 0xd2, 0x95, 0x07, 0x7e, 0xf3, 0x33, + 0x4f, 0xdc, 0xcf, 0xd9, 0xdc, 0x1c, 0x3a, 0xb3, 0x26, 0xf8, 0x0d, 0x9f, 0x65, 0x0b, 0xf4, 0xf9, + 0x06, 0x24, 0x59, 0x53, 0x1d, 0xf4, 0x02, 0xc4, 0x7b, 0xe4, 0x07, 0xcf, 0xbf, 0x9f, 0x9d, 0xa8, + 0xe0, 0x14, 0x3f, 0xa8, 0x0e, 0x8c, 0x4e, 0xf9, 0xb6, 0x08, 0xc0, 0xda, 0xcd, 0x9b, 0xcd, 0xbe, + 0xd9, 0xeb, 0x60, 0xf7, 0xed, 0xea, 0xfb, 0x0e, 0x9c, 0x08, 0x5c, 0xe2, 0xed, 0x1b, 0xc7, 0xef, + 0xff, 0x82, 0x7f, 0x9f, 0xb7, 0x6f, 0x8c, 0x65, 0xdb, 0x72, 0x5c, 0x8f, 0x6d, 0xf4, 0xf8, 0x6c, + 0xd7, 0x1c, 0x77, 0x54, 0xb2, 0xaf, 0x40, 0xc6, 0x17, 0x86, 0x83, 0xea, 0x90, 0x72, 0xf9, 0x6f, + 0x2e, 0x60, 0x65, 0xb2, 0x80, 0x05, 0x59, 0x50, 0xc8, 0x1e, 0xb9, 0xf2, 0xe7, 0x12, 0x40, 0x60, + 0x8e, 0xfc, 0xd5, 0xd4, 0x31, 0x12, 0xae, 0x73, 0x4b, 0x1c, 0xbd, 0xe7, 0xa7, 0x1a, 0x19, 0x83, + 0x80, 0x50, 0xbf, 0x23, 0x02, 0x0b, 0x3b, 0x62, 0xf6, 0xfe, 0xd5, 0x97, 0xc1, 0x0e, 0x24, 0xb1, + 0xe5, 0xf6, 0x4d, 0x6f, 0x07, 0xe9, 0xc9, 0x49, 0x63, 0x3e, 0xa6, 0x53, 0x35, 0xcb, 0xed, 0x1f, + 0x06, 0x35, 0x40, 0xf0, 0x0a, 0xc8, 0xe3, 0xa3, 0x51, 0x28, 0x4e, 0x22, 0x45, 0x8f, 0x40, 0xc1, + 0xe8, 0x63, 0x0a, 0x08, 0xdf, 0x6d, 0xcc, 0x0b, 0x30, 0x5f, 0x63, 0x54, 0x20, 0x5e, 0x19, 0x51, + 0x2e, 0x82, 0x7a, 0x6f, 0x6e, 0x58, 0xde, 0xe7, 0x40, 0x57, 0x99, 0x26, 0x14, 0xc4, 0x65, 0x89, + 0x5d, 0xbd, 0xa3, 0x5b, 0x86, 0x70, 0x57, 0x8f, 0xb5, 0x24, 0x88, 0x0b, 0x17, 0x15, 0xc6, 0x02, + 0xd5, 0x20, 0x29, 0xb8, 0xc5, 0x8e, 0xcf, 0x4d, 0xd0, 0xa2, 0x07, 0x20, 0x1b, 0x5c, 0x18, 0xa8, + 0xeb, 0x11, 0x53, 0x33, 0x81, 0x75, 0x61, 0xda, 0xca, 0x93, 0x38, 0x72, 0xe5, 0xe1, 0xde, 0xdd, + 0x0f, 0x47, 0x61, 0x5e, 0xc5, 0xad, 0xbf, 0xfe, 0xc3, 0xb2, 0x0d, 0xc0, 0xa6, 0x2a, 0xb1, 0xa4, + 0x7c, 0x64, 0xee, 0x61, 0xbe, 0xa7, 0x19, 0x93, 0x35, 0xc7, 0xfd, 0x5a, 0x8d, 0xd0, 0x6f, 0x47, + 0x20, 0x1b, 0x1c, 0xa1, 0xff, 0x2b, 0x17, 0x2d, 0xb4, 0xe9, 0x9b, 0x29, 0x76, 0xef, 0xe3, 0xd1, + 0x49, 0x66, 0x6a, 0x44, 0x9b, 0xa7, 0xd8, 0xa7, 0x8f, 0x45, 0x21, 0xc1, 0x4f, 0xb7, 0x6d, 0x8d, + 0x38, 0xb2, 0xd2, 0xb4, 0x9b, 0xeb, 0x39, 0x71, 0x73, 0x7d, 0xac, 0x1f, 0xfb, 0x10, 0xe4, 0x49, + 0x40, 0x1c, 0x3a, 0x32, 0x27, 0x9d, 0xcb, 0xd1, 0xb8, 0xd6, 0x3f, 0x20, 0x8e, 0x96, 0x20, 0x43, + 0xd0, 0x7c, 0x3b, 0x4c, 0x70, 0xa0, 0xab, 0x1f, 0xd4, 0x18, 0x04, 0x3d, 0x01, 0x68, 0xdf, 0x4b, + 0x50, 0x68, 0xbe, 0x20, 0x08, 0xde, 0xbc, 0x5f, 0x22, 0xd0, 0xef, 0x07, 0x20, 0xad, 0xd0, 0xd8, + 0xeb, 0xc4, 0xfc, 0xed, 0x67, 0x02, 0x59, 0xa3, 0x2f, 0x14, 0x7f, 0xb3, 0xc4, 0xfc, 0xe1, 0xa1, + 0xb0, 0x99, 0x87, 0x23, 0xcd, 0x19, 0x26, 0xc5, 0x9f, 0xbc, 0xb5, 0x54, 0x3a, 0xd4, 0xbb, 0x9d, + 0x55, 0x65, 0x0c, 0x1f, 0x65, 0x5c, 0x24, 0x4f, 0x1c, 0xe7, 0x70, 0xd8, 0xbd, 0xfa, 0x2e, 0xa2, + 0xde, 0x77, 0x7e, 0xff, 0xa7, 0xcf, 0x9f, 0x09, 0x3c, 0x56, 0x7c, 0xe0, 0xa5, 0xaf, 0xd8, 0x98, + 0x10, 0x4f, 0x15, 0xf9, 0xab, 0x86, 0x77, 0x2e, 0x7e, 0x03, 0x20, 0xe0, 0xc9, 0x4b, 0x47, 0x47, + 0x08, 0x3e, 0x7d, 0x28, 0x42, 0x08, 0xcc, 0xa9, 0xf7, 0xfa, 0x46, 0x5b, 0x3c, 0x56, 0x30, 0xe6, + 0xb9, 0xea, 0x95, 0xaa, 0x6d, 0x86, 0x58, 0x08, 0x22, 0x3a, 0x55, 0xe7, 0x94, 0x7f, 0x2d, 0xc1, + 0xe9, 0x11, 0xf5, 0xf3, 0x9a, 0x6c, 0x00, 0xea, 0x07, 0x0a, 0xe9, 0x30, 0x8a, 0xad, 0xd8, 0x7b, + 0xd3, 0xe6, 0xf9, 0xfe, 0x88, 0xe5, 0x7e, 0x7b, 0x56, 0x1f, 0x6e, 0x7a, 0x7e, 0x5d, 0x82, 0xc5, + 0x60, 0x03, 0xbc, 0xae, 0x34, 0x20, 0x1b, 0xac, 0x9a, 0x77, 0xe2, 0x5d, 0xb3, 0x74, 0x22, 0xd8, + 0xfe, 0x10, 0x13, 0x74, 0xd3, 0x9f, 0xe2, 0x2c, 0x6f, 0xf6, 0xd4, 0xcc, 0x42, 0x11, 0x0d, 0x1b, + 0x3b, 0xd5, 0xd9, 0xd8, 0xfc, 0x81, 0x04, 0xb1, 0x6d, 0xdb, 0xee, 0xa0, 0xf7, 0xc3, 0xbc, 0x65, + 0xbb, 0x1a, 0x99, 0x0e, 0xb8, 0xa5, 0xf1, 0xc0, 0x9e, 0x99, 0xcf, 0xda, 0x91, 0xb2, 0xfa, 0xe2, + 0x5b, 0x4b, 0xa3, 0x94, 0xe3, 0x1e, 0x0c, 0x2f, 0x58, 0xb6, 0x5b, 0xa1, 0x48, 0x4d, 0x16, 0xfb, + 0xef, 0x41, 0x2e, 0x5c, 0x1d, 0x33, 0xb1, 0xe5, 0x69, 0xd5, 0xe5, 0xa6, 0x56, 0x95, 0xdd, 0x0d, + 0xd4, 0xc3, 0xde, 0xff, 0xfd, 0x23, 0x32, 0x72, 0xaf, 0x82, 0x7c, 0x73, 0xf8, 0x80, 0x4f, 0x0d, + 0x92, 0xe2, 0x40, 0x8f, 0x34, 0xe3, 0x59, 0xa1, 0xa0, 0x38, 0x39, 0xed, 0xf9, 0x9f, 0x93, 0x00, + 0xfc, 0x24, 0x09, 0x7a, 0x1c, 0x4e, 0x55, 0xb6, 0x36, 0xd7, 0xb4, 0x46, 0xb3, 0xdc, 0xdc, 0x69, + 0x84, 0xff, 0xcc, 0x84, 0x78, 0x38, 0xc7, 0xe9, 0x61, 0xc3, 0xdc, 0x33, 0x71, 0x0b, 0x3d, 0x0c, + 0x8b, 0x61, 0x6c, 0xf2, 0x55, 0x5b, 0x93, 0xa5, 0x52, 0xf6, 0xce, 0xdd, 0xe5, 0x14, 0xf3, 0x13, + 0x71, 0x0b, 0x9d, 0x83, 0x13, 0xa3, 0x78, 0xf5, 0xcd, 0x6b, 0x72, 0xa4, 0x94, 0xbb, 0x73, 0x77, + 0x39, 0xed, 0x39, 0x94, 0x48, 0x01, 0x14, 0xc4, 0xe4, 0xfc, 0xa2, 0x25, 0xb8, 0x73, 0x77, 0x39, + 0xc1, 0x46, 0xa1, 0x14, 0xfb, 0xd0, 0x8f, 0x9e, 0x9d, 0x3b, 0xff, 0x0d, 0x00, 0x75, 0x6b, 0xaf, + 0xaf, 0xd3, 0xbf, 0xb5, 0x8e, 0x4a, 0x70, 0xb2, 0xbe, 0x79, 0x55, 0x2d, 0x57, 0x9b, 0xf5, 0xad, + 0xcd, 0xa1, 0xbf, 0x8e, 0x11, 0x2e, 0x5b, 0xdb, 0xda, 0xa9, 0xac, 0xd7, 0xb4, 0x46, 0xfd, 0xda, + 0x26, 0xdb, 0x6c, 0x0d, 0x95, 0xbd, 0xbc, 0xd9, 0xac, 0x6f, 0xd4, 0xe4, 0x48, 0xe5, 0xea, 0xc4, + 0x64, 0xfe, 0xe3, 0x47, 0x3e, 0xcf, 0xee, 0x5b, 0xbc, 0x50, 0x46, 0xff, 0x7f, 0x07, 0x00, 0x00, + 0xff, 0xff, 0x96, 0x68, 0xe4, 0xd9, 0x71, 0xa1, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) diff --git a/x/tx/decode/decode_test.go b/x/tx/decode/decode_test.go index 0fe63a97c2f5..9fc3f16966fa 100644 --- a/x/tx/decode/decode_test.go +++ b/x/tx/decode/decode_test.go @@ -86,10 +86,6 @@ func TestDecode(t *testing.T) { Payer: "payer", Granter: "", }, - Tip: &txv1beta1.Tip{ - Amount: []*basev1beta1.Coin{{Amount: "100", Denom: "denom"}}, - Tipper: "tipper", - }, }, Signatures: nil, } diff --git a/x/tx/decode/fuzz_test.go b/x/tx/decode/fuzz_test.go index d7c31afcde74..38262a20070f 100644 --- a/x/tx/decode/fuzz_test.go +++ b/x/tx/decode/fuzz_test.go @@ -56,10 +56,6 @@ func generateAndAddSeedsFromTx(f *testing.F) { Payer: "payer", Granter: "", }, - Tip: &txv1beta1.Tip{ - Amount: []*basev1beta1.Coin{{Amount: "100", Denom: "denom"}}, - Tipper: "tipper", - }, }, Signatures: nil, } diff --git a/x/tx/signing/aminojson/aminojson.go b/x/tx/signing/aminojson/aminojson.go index b0da26dfa4c6..a9cbbadde146 100644 --- a/x/tx/signing/aminojson/aminojson.go +++ b/x/tx/signing/aminojson/aminojson.go @@ -72,31 +72,19 @@ func (h SignModeHandler) GetSignBytes(_ context.Context, signerData signing.Sign return nil, fmt.Errorf("got empty address in %s handler: invalid request", h.Mode()) } - tip := txData.AuthInfo.Tip - if tip != nil && tip.Tipper == "" { - return nil, fmt.Errorf("tipper cannot be empty") - } - isTipper := tip != nil && tip.Tipper == signerData.Address - // We set a convention that if the tipper signs with LEGACY_AMINO_JSON, then // they sign over empty fees and 0 gas. var fee *aminojsonpb.AminoSignFee - if isTipper { - fee = &aminojsonpb.AminoSignFee{ - Amount: nil, - Gas: 0, - } - } else { - f := txData.AuthInfo.Fee - if f == nil { - return nil, fmt.Errorf("fee cannot be nil when tipper is not signer") - } - fee = &aminojsonpb.AminoSignFee{ - Amount: f.Amount, - Gas: f.GasLimit, - Payer: f.Payer, - Granter: f.Granter, - } + + f := txData.AuthInfo.Fee + if f == nil { + return nil, fmt.Errorf("fee cannot be nil when tipper is not signer") + } + fee = &aminojsonpb.AminoSignFee{ + Amount: f.Amount, + Gas: f.GasLimit, + Payer: f.Payer, + Granter: f.Granter, } signDoc := &aminojsonpb.AminoSignDoc{ @@ -107,7 +95,6 @@ func (h SignModeHandler) GetSignBytes(_ context.Context, signerData signing.Sign Memo: body.Memo, Msgs: txData.Body.Messages, Fee: fee, - Tip: tip, } return h.encoder.Marshal(signDoc) diff --git a/x/tx/signing/aminojson/aminojson_test.go b/x/tx/signing/aminojson/aminojson_test.go index f354bda01360..43bcf6f6d97f 100644 --- a/x/tx/signing/aminojson/aminojson_test.go +++ b/x/tx/signing/aminojson/aminojson_test.go @@ -21,7 +21,6 @@ func TestAminoJsonSignMode(t *testing.T) { handlerOptions := testutil.HandlerArgumentOptions{ ChainID: "test-chain", Memo: "sometestmemo", - Tip: &txv1beta1.Tip{Tipper: "tipper", Amount: []*basev1beta1.Coin{{Denom: "Tip-token", Amount: "10"}}}, Msg: &bankv1beta1.MsgSend{ FromAddress: "foo", ToAddress: "bar", @@ -55,14 +54,12 @@ func TestAminoJsonSignMode(t *testing.T) { { name: "nil tip", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - opts.Tip = nil return opts }, }, { name: "empty tipper", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - opts.Tip.Tipper = "" return opts }, error: "tipper cannot be empty", @@ -70,7 +67,6 @@ func TestAminoJsonSignMode(t *testing.T) { { name: "nil fee", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - opts.Tip.Tipper = "tipper" opts.Fee = nil return opts }, @@ -79,7 +75,6 @@ func TestAminoJsonSignMode(t *testing.T) { { name: "tipper is signer", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - opts.Tip.Tipper = opts.SignerAddress return opts }, }, diff --git a/x/tx/signing/aminojson/fuzz_test.go b/x/tx/signing/aminojson/fuzz_test.go index 688b1cec2d48..e5cbe7ccf3f1 100644 --- a/x/tx/signing/aminojson/fuzz_test.go +++ b/x/tx/signing/aminojson/fuzz_test.go @@ -5,7 +5,7 @@ import ( "encoding/json" "testing" - "github.com/google/gofuzz" + fuzz "github.com/google/gofuzz" bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" @@ -25,10 +25,7 @@ func FuzzSignModeGetSignBytes(f *testing.F) { seed := &testutil.HandlerArgumentOptions{ ChainID: "test-chain", Memo: "sometestmemo", - Tip: &txv1beta1.Tip{ - Tipper: "tipper", - Amount: []*basev1beta1.Coin{{Denom: "Tip-token", Amount: "10"}}, - }, + Msg: &bankv1beta1.MsgSend{ FromAddress: "foo", ToAddress: "bar", @@ -53,7 +50,6 @@ func FuzzSignModeGetSignBytes(f *testing.F) { // hence why we are mutating fields individually. gf.Fuzz(&seed.ChainID) gf.Fuzz(&seed.Memo) - gf.Fuzz(seed.Tip) gf.Fuzz(&seed.AccNum) gf.Fuzz(&seed.AccSeq) gf.Fuzz(seed.Fee) diff --git a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.proto b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.proto index d28008c87dcf..8ab6373b864f 100644 --- a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.proto +++ b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.proto @@ -1,10 +1,8 @@ syntax = "proto3"; -import "cosmos_proto/cosmos.proto"; import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "google/protobuf/any.proto"; -import "cosmos/tx/v1beta1/tx.proto"; // AminoSignFee is the legacy amino json sign mode compatible version of txv1beta1.Fee, and differs from that message // by the name of the Gas field (GasLimit in txv1beta.Fee). @@ -27,5 +25,4 @@ message AminoSignDoc { string memo = 5 [(amino.dont_omitempty) = true]; AminoSignFee fee = 6 [(amino.dont_omitempty) = true]; repeated google.protobuf.Any msgs = 7 [(amino.dont_omitempty) = true]; - cosmos.tx.v1beta1.Tip tip = 8; -} \ No newline at end of file +} diff --git a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go index d1f7f2540d35..5d99b1ae21f7 100644 --- a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go +++ b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go @@ -4,7 +4,6 @@ package aminojsonpb import ( _ "cosmossdk.io/api/amino" v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" - v1beta11 "cosmossdk.io/api/cosmos/tx/v1beta1" fmt "fmt" _ "github.com/cosmos/cosmos-proto" runtime "github.com/cosmos/cosmos-proto/runtime" @@ -747,7 +746,6 @@ var ( fd_AminoSignDoc_memo protoreflect.FieldDescriptor fd_AminoSignDoc_fee protoreflect.FieldDescriptor fd_AminoSignDoc_msgs protoreflect.FieldDescriptor - fd_AminoSignDoc_tip protoreflect.FieldDescriptor ) func init() { @@ -760,7 +758,6 @@ func init() { fd_AminoSignDoc_memo = md_AminoSignDoc.Fields().ByName("memo") fd_AminoSignDoc_fee = md_AminoSignDoc.Fields().ByName("fee") fd_AminoSignDoc_msgs = md_AminoSignDoc.Fields().ByName("msgs") - fd_AminoSignDoc_tip = md_AminoSignDoc.Fields().ByName("tip") } var _ protoreflect.Message = (*fastReflection_AminoSignDoc)(nil) @@ -870,12 +867,6 @@ func (x *fastReflection_AminoSignDoc) Range(f func(protoreflect.FieldDescriptor, return } } - if x.Tip != nil { - value := protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) - if !f(fd_AminoSignDoc_tip, value) { - return - } - } } // Has reports whether a field is populated. @@ -905,8 +896,6 @@ func (x *fastReflection_AminoSignDoc) Has(fd protoreflect.FieldDescriptor) bool return x.Fee != nil case "AminoSignDoc.msgs": return len(x.Msgs) != 0 - case "AminoSignDoc.tip": - return x.Tip != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: AminoSignDoc")) @@ -937,8 +926,6 @@ func (x *fastReflection_AminoSignDoc) Clear(fd protoreflect.FieldDescriptor) { x.Fee = nil case "AminoSignDoc.msgs": x.Msgs = nil - case "AminoSignDoc.tip": - x.Tip = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: AminoSignDoc")) @@ -979,9 +966,6 @@ func (x *fastReflection_AminoSignDoc) Get(descriptor protoreflect.FieldDescripto } listValue := &_AminoSignDoc_7_list{list: &x.Msgs} return protoreflect.ValueOfList(listValue) - case "AminoSignDoc.tip": - value := x.Tip - return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: AminoSignDoc")) @@ -1018,8 +1002,6 @@ func (x *fastReflection_AminoSignDoc) Set(fd protoreflect.FieldDescriptor, value lv := value.List() clv := lv.(*_AminoSignDoc_7_list) x.Msgs = *clv.list - case "AminoSignDoc.tip": - x.Tip = value.Message().Interface().(*v1beta11.Tip) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: AminoSignDoc")) @@ -1051,11 +1033,6 @@ func (x *fastReflection_AminoSignDoc) Mutable(fd protoreflect.FieldDescriptor) p } value := &_AminoSignDoc_7_list{list: &x.Msgs} return protoreflect.ValueOfList(value) - case "AminoSignDoc.tip": - if x.Tip == nil { - x.Tip = new(v1beta11.Tip) - } - return protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) case "AminoSignDoc.account_number": panic(fmt.Errorf("field account_number of message AminoSignDoc is not mutable")) case "AminoSignDoc.sequence": @@ -1095,9 +1072,6 @@ func (x *fastReflection_AminoSignDoc) NewField(fd protoreflect.FieldDescriptor) case "AminoSignDoc.msgs": list := []*anypb.Any{} return protoreflect.ValueOfList(&_AminoSignDoc_7_list{list: &list}) - case "AminoSignDoc.tip": - m := new(v1beta11.Tip) - return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: AminoSignDoc")) @@ -1194,10 +1168,6 @@ func (x *fastReflection_AminoSignDoc) ProtoMethods() *protoiface.Methods { n += 1 + l + runtime.Sov(uint64(l)) } } - if x.Tip != nil { - l = options.Size(x.Tip) - n += 1 + l + runtime.Sov(uint64(l)) - } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -1227,20 +1197,6 @@ func (x *fastReflection_AminoSignDoc) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.Tip != nil { - encoded, err := options.Marshal(x.Tip) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x42 - } if len(x.Msgs) > 0 { for iNdEx := len(x.Msgs) - 1; iNdEx >= 0; iNdEx-- { encoded, err := options.Marshal(x.Msgs[iNdEx]) @@ -1540,42 +1496,6 @@ func (x *fastReflection_AminoSignDoc) ProtoMethods() *protoiface.Methods { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex - case 8: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if x.Tip == nil { - x.Tip = &v1beta11.Tip{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Tip); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -1701,7 +1621,6 @@ type AminoSignDoc struct { Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` Fee *AminoSignFee `protobuf:"bytes,6,opt,name=fee,proto3" json:"fee,omitempty"` Msgs []*anypb.Any `protobuf:"bytes,7,rep,name=msgs,proto3" json:"msgs,omitempty"` - Tip *v1beta11.Tip `protobuf:"bytes,8,opt,name=tip,proto3" json:"tip,omitempty"` } func (x *AminoSignDoc) Reset() { @@ -1773,13 +1692,6 @@ func (x *AminoSignDoc) GetMsgs() []*anypb.Any { return nil } -func (x *AminoSignDoc) GetTip() *v1beta11.Tip { - if x != nil { - return x.Tip - } - return nil -} - var File_aminojsonpb_aminojson_proto protoreflect.FileDescriptor var file_aminojsonpb_aminojson_proto_rawDesc = []byte{ @@ -1791,45 +1703,40 @@ var file_aminojsonpb_aminojson_proto_rawDesc = []byte{ 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74, - 0x78, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xa2, 0x01, 0x0a, 0x0c, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, - 0x46, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x16, - 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, - 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, - 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, - 0x2a, 0x01, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, - 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x22, 0xc6, 0x02, 0x0a, 0x0c, 0x41, 0x6d, 0x69, 0x6e, - 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, 0x2c, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, - 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x20, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x26, 0x0a, - 0x03, 0x66, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x41, 0x6d, 0x69, - 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, - 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, - 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x69, 0x70, 0x52, 0x03, 0x74, 0x69, 0x70, - 0x42, 0x4b, 0x42, 0x0e, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, - 0x69, 0x6f, 0x2f, 0x78, 0x2f, 0x74, 0x78, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, - 0x6e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, - 0x62, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x01, 0x0a, 0x0c, 0x41, 0x6d, 0x69, 0x6e, 0x6f, + 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x16, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, + 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x9c, 0x02, 0x0a, 0x0c, + 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, 0x2c, 0x0a, 0x0e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x20, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x65, 0x6d, + 0x6f, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x42, 0x05, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x73, 0x67, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x05, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x42, 0x4b, 0x42, 0x0e, 0x41, 0x6d, + 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x78, 0x2f, 0x74, + 0x78, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x62, 0x2f, 0x61, 0x6d, 0x69, 0x6e, + 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1850,18 +1757,16 @@ var file_aminojsonpb_aminojson_proto_goTypes = []interface{}{ (*AminoSignDoc)(nil), // 1: AminoSignDoc (*v1beta1.Coin)(nil), // 2: cosmos.base.v1beta1.Coin (*anypb.Any)(nil), // 3: google.protobuf.Any - (*v1beta11.Tip)(nil), // 4: cosmos.tx.v1beta1.Tip } var file_aminojsonpb_aminojson_proto_depIdxs = []int32{ 2, // 0: AminoSignFee.amount:type_name -> cosmos.base.v1beta1.Coin 0, // 1: AminoSignDoc.fee:type_name -> AminoSignFee 3, // 2: AminoSignDoc.msgs:type_name -> google.protobuf.Any - 4, // 3: AminoSignDoc.tip:type_name -> cosmos.tx.v1beta1.Tip - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_aminojsonpb_aminojson_proto_init() } diff --git a/x/tx/signing/aminojson/internal/testpb/test.proto b/x/tx/signing/aminojson/internal/testpb/test.proto index de2f25e76c25..8be5a3dc1362 100644 --- a/x/tx/signing/aminojson/internal/testpb/test.proto +++ b/x/tx/signing/aminojson/internal/testpb/test.proto @@ -63,7 +63,7 @@ message ABitOfEverything { } message Duration { - google.protobuf.Duration duration = 1; + google.protobuf.Duration duration = 1; google.protobuf.Timestamp timestamp = 2; } diff --git a/x/tx/signing/directaux/direct_aux.go b/x/tx/signing/directaux/direct_aux.go index 9f92222d99a5..516797737aec 100644 --- a/x/tx/signing/directaux/direct_aux.go +++ b/x/tx/signing/directaux/direct_aux.go @@ -100,7 +100,6 @@ func (h SignModeHandler) GetSignBytes( ChainId: signerData.ChainID, AccountNumber: signerData.AccountNumber, Sequence: signerData.Sequence, - Tip: txData.AuthInfo.Tip, } return proto.Marshal(signDocDirectAux) } diff --git a/x/tx/signing/directaux/direct_aux_test.go b/x/tx/signing/directaux/direct_aux_test.go index aadd9c0deb14..00c48222aa89 100644 --- a/x/tx/signing/directaux/direct_aux_test.go +++ b/x/tx/signing/directaux/direct_aux_test.go @@ -54,7 +54,6 @@ func TestDirectAuxHandler(t *testing.T) { GasLimit: 20000, Payer: feePayerAddr, } - tip := &txv1beta1.Tip{Amount: []*basev1beta1.Coin{{Denom: "tip-token", Amount: "10"}}} txBody := &txv1beta1.TxBody{ Messages: []*anypb.Any{msg}, @@ -63,7 +62,6 @@ func TestDirectAuxHandler(t *testing.T) { authInfo := &txv1beta1.AuthInfo{ Fee: fee, - Tip: tip, SignerInfos: signerInfo, } @@ -113,7 +111,6 @@ func TestDirectAuxHandler(t *testing.T) { } authInfoWithNoFeePayer := &txv1beta1.AuthInfo{ Fee: feeWithNoPayer, - Tip: tip, SignerInfos: signerInfo, } authInfoWithNoFeePayerBz, err := proto.Marshal(authInfoWithNoFeePayer) @@ -139,7 +136,6 @@ func TestDirectAuxHandler(t *testing.T) { ChainId: chainID, AccountNumber: accNum, Sequence: accSeq, - Tip: tip, } expectedSignBytes, err := proto.Marshal(signDocDirectAux) require.NoError(t, err) diff --git a/x/tx/signing/testutil/util.go b/x/tx/signing/testutil/util.go index ef689ec1e747..ed1444a65742 100644 --- a/x/tx/signing/testutil/util.go +++ b/x/tx/signing/testutil/util.go @@ -17,7 +17,6 @@ type HandlerArgumentOptions struct { Msg proto.Message AccNum uint64 AccSeq uint64 - Tip *txv1beta1.Tip Fee *txv1beta1.Fee SignerAddress string } @@ -57,7 +56,6 @@ func MakeHandlerArguments(options HandlerArgumentOptions) (signing.SignerData, s authInfo := &txv1beta1.AuthInfo{ Fee: options.Fee, - Tip: options.Tip, SignerInfos: signerInfo, } diff --git a/x/tx/signing/textual/tx.go b/x/tx/signing/textual/tx.go index 143726034ec6..4a372f8b9d39 100644 --- a/x/tx/signing/textual/tx.go +++ b/x/tx/signing/textual/tx.go @@ -83,10 +83,7 @@ func (vr txValueRenderer) Format(ctx context.Context, v protoreflect.Value) ([]S NonCriticalExtensionOptions: txBody.NonCriticalExtensionOptions, HashOfRawBytes: getHash(textualData.BodyBytes, textualData.AuthInfoBytes), } - if txAuthInfo.Tip != nil { - envelope.Tip = txAuthInfo.Tip.Amount - envelope.Tipper = txAuthInfo.Tip.Tipper - } + // Find all other tx signers than the current signer. In the case where our // Textual signer is one key of a multisig, then otherSigners will include // the multisig pubkey. @@ -243,12 +240,6 @@ func (vr txValueRenderer) Parse(ctx context.Context, screens []Screen) (protoref Granter: envelope.FeeGranter, }, } - if envelope.Tip != nil { - authInfo.Tip = &txv1beta1.Tip{ - Amount: envelope.Tip, - Tipper: envelope.Tipper, - } - } // Figure out the signers in the correct order. signers, err := getSigners(txBody, authInfo) From 78add43514f7455ed9d0aa9014b4b5085b9fca43 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Mon, 18 Sep 2023 17:10:20 +0200 Subject: [PATCH 2/8] fix broken tests --- client/tx/aux_builder_test.go | 12 ------------ x/auth/migrations/legacytx/stdtx_test.go | 15 --------------- x/tx/signing/aminojson/aminojson_test.go | 13 ------------- 3 files changed, 40 deletions(-) diff --git a/client/tx/aux_builder_test.go b/client/tx/aux_builder_test.go index aa25b927826d..b78cea1c0c93 100644 --- a/client/tx/aux_builder_test.go +++ b/client/tx/aux_builder_test.go @@ -84,18 +84,6 @@ func TestAuxTxBuilder(t *testing.T) { }, true, "got unknown sign mode SIGN_MODE_UNSPECIFIED", }, - { - "GetSignBytes tipper should not be nil (if tip is set)", - func() error { - require.NoError(t, b.SetMsgs(msg1)) - require.NoError(t, b.SetPubKey(pub1)) - require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) - - _, err := b.GetSignBytes() - return err - }, - true, "tipper cannot be empty", - }, { "GetSignBytes works for DIRECT_AUX", func() error { diff --git a/x/auth/migrations/legacytx/stdtx_test.go b/x/auth/migrations/legacytx/stdtx_test.go index fd6bc84869d8..f49357ca6398 100644 --- a/x/auth/migrations/legacytx/stdtx_test.go +++ b/x/auth/migrations/legacytx/stdtx_test.go @@ -85,21 +85,6 @@ func TestStdSignBytes(t *testing.T) { args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String(), Granter: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","granter":"%s","payer":"%s"},"memo":"memo","msgs":[%s],"sequence":"6"}`, addr, addr, msgStr), }, - { - "no fee, with tip", - args{"1234", 3, 6, 0, &txv1beta1.Fee{}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, - fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[],"gas":"0"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[{"amount":"150","denom":"tiptoken"}],"tipper":"%s"}}`, msgStr, addr), - }, - { - "with fee and with tip", - args{"1234", 3, 6, 0, &txv1beta1.Fee{Amount: defaultFee.Amount, GasLimit: defaultFee.GasLimit, Payer: addr.String()}, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, - fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000","payer":"%s"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[{"amount":"150","denom":"tiptoken"}],"tipper":"%s"}}`, addr, msgStr, addr), - }, - { - "with empty tip (but not nil), tipper cannot be empty", - args{"1234", 3, 6, 0, defaultFee, []sdk.Msg{testdata.NewTestMsg(addr)}, "memo"}, - fmt.Sprintf(`{"account_number":"3","chain_id":"1234","fee":{"amount":[{"amount":"150","denom":"atom"}],"gas":"100000"},"memo":"memo","msgs":[%s],"sequence":"6","tip":{"amount":[],"tipper":"%s"}}`, msgStr, addr), - }, } handler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{ FileResolver: proto.HybridResolver, diff --git a/x/tx/signing/aminojson/aminojson_test.go b/x/tx/signing/aminojson/aminojson_test.go index 43bcf6f6d97f..36e003d35be4 100644 --- a/x/tx/signing/aminojson/aminojson_test.go +++ b/x/tx/signing/aminojson/aminojson_test.go @@ -57,13 +57,6 @@ func TestAminoJsonSignMode(t *testing.T) { return opts }, }, - { - name: "empty tipper", - malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - return opts - }, - error: "tipper cannot be empty", - }, { name: "nil fee", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { @@ -72,12 +65,6 @@ func TestAminoJsonSignMode(t *testing.T) { }, error: "fee cannot be nil", }, - { - name: "tipper is signer", - malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - return opts - }, - }, } for _, tc := range testCases { From 7538eafc6613636a14db1d8caac46db675c02c52 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Mon, 18 Sep 2023 17:15:16 +0200 Subject: [PATCH 3/8] gofumpt --- client/tx/tx_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 8e8e9f179c54..36ece26b92de 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -423,7 +423,6 @@ func TestPreprocessHook(t *testing.T) { opt := hasExtOptsTx.GetExtensionOptions()[0] requireT.Equal(opt, extAny) - } func testSigners(require *require.Assertions, tr signing.Tx, pks ...cryptotypes.PubKey) []signingtypes.SignatureV2 { From 65c838d62fe125dec40134ad1c39e4c895205c38 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Mon, 18 Sep 2023 18:29:34 +0200 Subject: [PATCH 4/8] fix some more tests --- types/tx/direct_aux_test.go | 1 - x/tx/signing/textual/internal/testdata/e2e.json | 9 --------- 2 files changed, 10 deletions(-) diff --git a/types/tx/direct_aux_test.go b/types/tx/direct_aux_test.go index 5e07907fcfdd..f9e90b8e27e7 100644 --- a/types/tx/direct_aux_test.go +++ b/types/tx/direct_aux_test.go @@ -25,7 +25,6 @@ func TestSignDocDirectAux(t *testing.T) { }{ {"empty bodyBz", tx.SignDocDirectAux{}, true}, {"empty pubkey", tx.SignDocDirectAux{BodyBytes: bodyBz}, true}, - {"empty tipper", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}, true}, {"happy case w/o tip", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}, false}, {"happy case w/ tip", tx.SignDocDirectAux{ BodyBytes: bodyBz, diff --git a/x/tx/signing/textual/internal/testdata/e2e.json b/x/tx/signing/textual/internal/testdata/e2e.json index 49f5c6effdb3..18711804521e 100644 --- a/x/tx/signing/textual/internal/testdata/e2e.json +++ b/x/tx/signing/textual/internal/testdata/e2e.json @@ -286,13 +286,6 @@ "gas_limit": 100000, "payer": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t", "granter": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" - }, - "tip": { - "amount": [ - { "amount": "20000", "denom": "uatom" }, - { "amount": "30000", "denom": "uosmo" } - ], - "tipper": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t" } } }, @@ -344,8 +337,6 @@ { "title": "Fees", "content": "0.002 ATOM" }, { "title": "Fee payer", "content": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t", "expert": true }, { "title": "Fee granter", "content": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", "expert": true }, - { "title": "Tip", "content": "0.02 ATOM, 30'000 uosmo" }, - { "title": "Tipper", "content": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t" }, { "title": "Gas limit", "content": "100'000", "expert": true }, { "title": "Timeout height", "content": "20", "expert": true }, { "title": "Other signer", "content": "1 SignerInfo", "expert": true }, From 8ff86ae34a3fbf2d51b46cd8a8c40dc85b6b60c7 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Tue, 19 Sep 2023 11:23:12 +0200 Subject: [PATCH 5/8] fix jsone2etestcase --- x/tx/signing/textual/internal/testdata/e2e.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/tx/signing/textual/internal/testdata/e2e.json b/x/tx/signing/textual/internal/testdata/e2e.json index 18711804521e..2ab0e30f5b96 100644 --- a/x/tx/signing/textual/internal/testdata/e2e.json +++ b/x/tx/signing/textual/internal/testdata/e2e.json @@ -372,8 +372,8 @@ { "title": "Non critical extension options (1/1)", "content": "/cosmos.auth.v1beta1.Params", "indent": 1, "expert": true }, { "title": "Max memo characters", "content": "10", "indent": 2, "expert": true }, { "content": "End of Non critical extension options", "expert": true }, - { "title": "Hash of raw bytes", "content": "7ea02e8f0baed2db969e2d9ae4dc51fa31116259bd42897588072faf0ebb4d2e", "expert": true } + { "title": "Hash of raw bytes", "content": "e7be7808de4985bd609811d2a32805cb233c168c7d247d61d37f4a6dd4cf3a2a", "expert": true } ], - "cbor": "a101983fa20168436861696e20696402686d792d636861696ea2016e4163636f756e74206e756d626572026131a2016853657175656e6365026132a301674164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a3016a5075626c6963206b657902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657904f5a401634b657902785230324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444030104f5a102781f54686973207472616e73616374696f6e206861732032204d65737361676573a3016d4d6573736167652028312f322902781d2f636f736d6f732e617574687a2e763162657461312e4d7367457865630301a301674772616e74656502782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301644d73677302653120416e790302a3016a4d7367732028312f312902781c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e640303a3016c46726f6d206164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730304a3016a546f206164647265737302782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740304a30166416d6f756e74026731302041544f4d0304a2026b456e64206f66204d7367730302a3016d4d6573736167652028322f322902762f636f736d6f732e676f762e76312e4d7367566f74650301a3016b50726f706f73616c2069640261310302a30165566f74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301664f7074696f6e026f564f54455f4f5054494f4e5f5945530302a301684d65746164617461027901e34c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400302a1026e456e64206f66204d657373616765a201644d656d6f0278193e20e29a9befb88f5c7532363942e29a9befb88f2020202020a2016446656573026a302e3030322041544f4da3016946656520706179657202782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357404f5a3016b466565206772616e74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a201635469700277302e30322041544f4d2c2033302730303020756f736d6fa2016654697070657202782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b683574a30169476173206c696d697402673130302730303004f5a3016e54696d656f7574206865696768740262323004f5a3016c4f74686572207369676e6572026c31205369676e6572496e666f04f5a401724f74686572207369676e65722028312f312902715369676e6572496e666f206f626a656374030104f5a4016a5075626c6963206b65790278292f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579030204f5a401695468726573686f6c64026132030304f5a4016b5075626c6963206b65797302653220416e79030304f5a401715075626c6963206b6579732028312f322902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579030404f5a401634b657902785230323537203445424520304246432037353446203539363720334241312031423237203530304620393135382041444532204531374520314130312038324230204341384220433635322034444230203933030504f5a401715075626c6963206b6579732028322f322902781d2f636f736d6f732e63727970746f2e656432353531392e5075624b6579030404f5a401634b657902785230333135203043343720463138412041333237203136413620353437452044413842203733363920303637442043453131204431343120363234352042373738203735364320463833352039363738203737030504f5a30272456e64206f66205075626c6963206b657973030304f5a401694d6f646520696e666f026f4d6f6465496e666f206f626a656374030204f5a401654d756c7469026c4d756c7469206f626a656374030304f5a4016842697461727261790276436f6d706163744269744172726179206f626a656374030404f5a40171457874726120626974732073746f726564026135030504f5a40165456c656d7302623438030504f5a4016a4d6f646520696e666f73026a32204d6f6465496e666f030404f5a401704d6f646520696e666f732028312f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a401704d6f646520696e666f732028322f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a30271456e64206f66204d6f646520696e666f73030404f5a4016853657175656e6365026135030204f5a20273456e64206f66204f74686572207369676e657204f5a30171457874656e73696f6e206f7074696f6e7302653120416e7904f5a40177457874656e73696f6e206f7074696f6e732028312f31290278192f636f736d6f732e626173652e763162657461312e436f696e030104f5a30266352041544f4d030204f5a2027818456e64206f6620457874656e73696f6e206f7074696f6e7304f5a301781e4e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7302653120416e7904f5a40178244e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f312902781b2f636f736d6f732e617574682e763162657461312e506172616d73030104f5a401734d6178206d656d6f206368617261637465727302623130030204f5a2027825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7304f5a3017148617368206f66207261772062797465730278403765613032653866306261656432646239363965326439616534646335316661333131313632353962643432383937353838303732666166306562623464326504f5" + "cbor": "a101983da20168436861696e20696402686d792d636861696ea2016e4163636f756e74206e756d626572026131a2016853657175656e6365026132a301674164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a3016a5075626c6963206b657902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657904f5a401634b657902785230324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444030104f5a102781f54686973207472616e73616374696f6e206861732032204d65737361676573a3016d4d6573736167652028312f322902781d2f636f736d6f732e617574687a2e763162657461312e4d7367457865630301a301674772616e74656502782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301644d73677302653120416e790302a3016a4d7367732028312f312902781c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e640303a3016c46726f6d206164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730304a3016a546f206164647265737302782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740304a30166416d6f756e74026731302041544f4d0304a2026b456e64206f66204d7367730302a3016d4d6573736167652028322f322902762f636f736d6f732e676f762e76312e4d7367566f74650301a3016b50726f706f73616c2069640261310302a30165566f74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301664f7074696f6e026f564f54455f4f5054494f4e5f5945530302a301684d65746164617461027901e34c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400302a1026e456e64206f66204d657373616765a201644d656d6f0278193e20e29a9befb88f5c7532363942e29a9befb88f2020202020a2016446656573026a302e3030322041544f4da3016946656520706179657202782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357404f5a3016b466565206772616e74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a30169476173206c696d697402673130302730303004f5a3016e54696d656f7574206865696768740262323004f5a3016c4f74686572207369676e6572026c31205369676e6572496e666f04f5a401724f74686572207369676e65722028312f312902715369676e6572496e666f206f626a656374030104f5a4016a5075626c6963206b65790278292f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579030204f5a401695468726573686f6c64026132030304f5a4016b5075626c6963206b65797302653220416e79030304f5a401715075626c6963206b6579732028312f322902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579030404f5a401634b657902785230323537203445424520304246432037353446203539363720334241312031423237203530304620393135382041444532204531374520314130312038324230204341384220433635322034444230203933030504f5a401715075626c6963206b6579732028322f322902781d2f636f736d6f732e63727970746f2e656432353531392e5075624b6579030404f5a401634b657902785230333135203043343720463138412041333237203136413620353437452044413842203733363920303637442043453131204431343120363234352042373738203735364320463833352039363738203737030504f5a30272456e64206f66205075626c6963206b657973030304f5a401694d6f646520696e666f026f4d6f6465496e666f206f626a656374030204f5a401654d756c7469026c4d756c7469206f626a656374030304f5a4016842697461727261790276436f6d706163744269744172726179206f626a656374030404f5a40171457874726120626974732073746f726564026135030504f5a40165456c656d7302623438030504f5a4016a4d6f646520696e666f73026a32204d6f6465496e666f030404f5a401704d6f646520696e666f732028312f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a401704d6f646520696e666f732028322f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a30271456e64206f66204d6f646520696e666f73030404f5a4016853657175656e6365026135030204f5a20273456e64206f66204f74686572207369676e657204f5a30171457874656e73696f6e206f7074696f6e7302653120416e7904f5a40177457874656e73696f6e206f7074696f6e732028312f31290278192f636f736d6f732e626173652e763162657461312e436f696e030104f5a30266352041544f4d030204f5a2027818456e64206f6620457874656e73696f6e206f7074696f6e7304f5a301781e4e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7302653120416e7904f5a40178244e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f312902781b2f636f736d6f732e617574682e763162657461312e506172616d73030104f5a401734d6178206d656d6f206368617261637465727302623130030204f5a2027825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7304f5a3017148617368206f66207261772062797465730278406537626537383038646534393835626436303938313164326133323830356362323333633136386337643234376436316433376634613664643463663361326104f5" } ] From f10d67590f8b41f578e7e38c35249151d875e501 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Tue, 19 Sep 2023 11:26:28 +0200 Subject: [PATCH 6/8] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 761f8b1ae538..e6e8e713a2fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -146,6 +146,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * `WithChainID` / `WithBlockHeight` / `WithBlockHeader` must be used to set values on the context * (x/bank) [#17569](https://github.com/cosmos/cosmos-sdk/pull/17569) `BurnCoins` takes an address instead of a module name * (x/distribution) [#17670](https://github.com/cosmos/cosmos-sdk/pull/17670) `AllocateTokens` takes `comet.VoteInfos` instead of `[]abci.VoteInfo` +* (x/auth) [#17787](https://github.com/cosmos/cosmos-sdk/pull/17787) remove tip functionality ### CLI Breaking Changes From aff2272a7ea8a55b1c17c376756d5fc082fcee32 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 20 Sep 2023 12:41:00 +0200 Subject: [PATCH 7/8] fix test when not using go.work --- x/tx/signing/aminojson/aminojson_test.go | 6 -- .../internal/aminojsonpb/aminojson.pulsar.go | 82 +++++++++---------- .../signing/textual/internal/testdata/tx.json | 11 +-- .../textual/internal/textualpb/textual.proto | 2 - 4 files changed, 41 insertions(+), 60 deletions(-) diff --git a/x/tx/signing/aminojson/aminojson_test.go b/x/tx/signing/aminojson/aminojson_test.go index 36e003d35be4..0d137906561d 100644 --- a/x/tx/signing/aminojson/aminojson_test.go +++ b/x/tx/signing/aminojson/aminojson_test.go @@ -51,12 +51,6 @@ func TestAminoJsonSignMode(t *testing.T) { }, error: "got empty address in SIGN_MODE_LEGACY_AMINO_JSON handler: invalid request", }, - { - name: "nil tip", - malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { - return opts - }, - }, { name: "nil fee", malleate: func(opts testutil.HandlerArgumentOptions) testutil.HandlerArgumentOptions { diff --git a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go index 5d99b1ae21f7..e8ad14368fd9 100644 --- a/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go +++ b/x/tx/signing/aminojson/internal/aminojsonpb/aminojson.pulsar.go @@ -5,7 +5,6 @@ import ( _ "cosmossdk.io/api/amino" v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" fmt "fmt" - _ "github.com/cosmos/cosmos-proto" runtime "github.com/cosmos/cosmos-proto/runtime" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" @@ -1696,47 +1695,46 @@ var File_aminojsonpb_aminojson_proto protoreflect.FileDescriptor var file_aminojsonpb_aminojson_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x62, 0x2f, 0x61, 0x6d, - 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, - 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x01, 0x0a, 0x0c, 0x41, 0x6d, 0x69, 0x6e, 0x6f, - 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x42, 0x16, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, - 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x9c, 0x02, 0x0a, 0x0c, - 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, 0x2c, 0x0a, 0x0e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x08, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, - 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x20, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x42, 0x05, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x73, 0x67, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x05, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x42, 0x4b, 0x42, 0x0e, 0x41, 0x6d, - 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x78, 0x2f, 0x74, - 0x78, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x62, 0x2f, 0x61, 0x6d, 0x69, 0x6e, - 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, + 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x01, 0x0a, 0x0c, + 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x16, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x67, 0x61, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x9c, 0x02, 0x0a, 0x0c, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, + 0x63, 0x12, 0x2c, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x21, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x20, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x6d, + 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x46, + 0x65, 0x65, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x2f, + 0x0a, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, + 0x6e, 0x79, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x42, + 0x4b, 0x42, 0x0e, 0x41, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, + 0x6f, 0x2f, 0x78, 0x2f, 0x74, 0x78, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x62, + 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/x/tx/signing/textual/internal/testdata/tx.json b/x/tx/signing/textual/internal/testdata/tx.json index c071d08eec28..bbafe3b14120 100644 --- a/x/tx/signing/textual/internal/testdata/tx.json +++ b/x/tx/signing/textual/internal/testdata/tx.json @@ -299,13 +299,6 @@ "gas_limit": 100000, "payer": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t", "granter": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" - }, - "tip": { - "amount": [ - { "amount": "20000", "denom": "uatom" }, - { "amount": "30000", "denom": "uosmo" } - ], - "tipper": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t" } } }, @@ -357,8 +350,6 @@ { "title": "Fees", "content": "0.002 ATOM" }, { "title": "Fee payer", "content": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t", "expert": true }, { "title": "Fee granter", "content": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", "expert": true }, - { "title": "Tip", "content": "0.02 ATOM, 30'000 uosmo" }, - { "title": "Tipper", "content": "cosmos1ejrf4cur2wy6kfurg9f2jppp2h3afe5h6pkh5t" }, { "title": "Gas limit", "content": "100'000", "expert": true }, { "title": "Timeout height", "content": "20", "expert": true }, { "title": "Other signer", "content": "1 SignerInfo", "expert": true }, @@ -394,7 +385,7 @@ { "title": "Non critical extension options (1/1)", "content": "/cosmos.auth.v1beta1.Params", "indent": 1, "expert": true }, { "title": "Max memo characters", "content": "10", "indent": 2, "expert": true }, { "content": "End of Non critical extension options", "expert": true }, - { "title": "Hash of raw bytes", "content": "7ea02e8f0baed2db969e2d9ae4dc51fa31116259bd42897588072faf0ebb4d2e", "expert": true } + { "title": "Hash of raw bytes", "content": "e7be7808de4985bd609811d2a32805cb233c168c7d247d61d37f4a6dd4cf3a2a", "expert": true } ] } ] diff --git a/x/tx/signing/textual/internal/textualpb/textual.proto b/x/tx/signing/textual/internal/textualpb/textual.proto index efd8d35275bd..cddfc99d6e6b 100644 --- a/x/tx/signing/textual/internal/textualpb/textual.proto +++ b/x/tx/signing/textual/internal/textualpb/textual.proto @@ -77,8 +77,6 @@ message Envelope { repeated cosmos.base.v1beta1.Coin fees = 8; string fee_payer = 9; string fee_granter = 10; - repeated cosmos.base.v1beta1.Coin tip = 11; - string tipper = 12; uint64 gas_limit = 13; uint64 timeout_height = 14; repeated cosmos.tx.v1beta1.SignerInfo other_signer = 15; From 90ea04e20c5617b9dfe4bf8b1809f51e6c77d887 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 20 Sep 2023 13:18:04 +0200 Subject: [PATCH 8/8] mark tips as depreacted --- api/cosmos/tx/v1beta1/tx.pulsar.go | 1302 +++++++++++++++++++++++----- proto/cosmos/tx/v1beta1/tx.proto | 26 + types/tx/tx.pb.go | 502 +++++++++-- 3 files changed, 1528 insertions(+), 302 deletions(-) diff --git a/api/cosmos/tx/v1beta1/tx.pulsar.go b/api/cosmos/tx/v1beta1/tx.pulsar.go index c13de3351e69..4b00dac60a64 100644 --- a/api/cosmos/tx/v1beta1/tx.pulsar.go +++ b/api/cosmos/tx/v1beta1/tx.pulsar.go @@ -1876,6 +1876,7 @@ var ( fd_SignDocDirectAux_chain_id protoreflect.FieldDescriptor fd_SignDocDirectAux_account_number protoreflect.FieldDescriptor fd_SignDocDirectAux_sequence protoreflect.FieldDescriptor + fd_SignDocDirectAux_tip protoreflect.FieldDescriptor ) func init() { @@ -1886,6 +1887,7 @@ func init() { fd_SignDocDirectAux_chain_id = md_SignDocDirectAux.Fields().ByName("chain_id") fd_SignDocDirectAux_account_number = md_SignDocDirectAux.Fields().ByName("account_number") fd_SignDocDirectAux_sequence = md_SignDocDirectAux.Fields().ByName("sequence") + fd_SignDocDirectAux_tip = md_SignDocDirectAux.Fields().ByName("tip") } var _ protoreflect.Message = (*fastReflection_SignDocDirectAux)(nil) @@ -1983,6 +1985,12 @@ func (x *fastReflection_SignDocDirectAux) Range(f func(protoreflect.FieldDescrip return } } + if x.Tip != nil { + value := protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) + if !f(fd_SignDocDirectAux_tip, value) { + return + } + } } // Has reports whether a field is populated. @@ -2008,6 +2016,8 @@ func (x *fastReflection_SignDocDirectAux) Has(fd protoreflect.FieldDescriptor) b return x.AccountNumber != uint64(0) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": return x.Sequence != uint64(0) + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + return x.Tip != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2034,6 +2044,8 @@ func (x *fastReflection_SignDocDirectAux) Clear(fd protoreflect.FieldDescriptor) x.AccountNumber = uint64(0) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": x.Sequence = uint64(0) + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + x.Tip = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2065,6 +2077,9 @@ func (x *fastReflection_SignDocDirectAux) Get(descriptor protoreflect.FieldDescr case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": value := x.Sequence return protoreflect.ValueOfUint64(value) + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + value := x.Tip + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2095,6 +2110,8 @@ func (x *fastReflection_SignDocDirectAux) Set(fd protoreflect.FieldDescriptor, v x.AccountNumber = value.Uint() case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": x.Sequence = value.Uint() + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + x.Tip = value.Message().Interface().(*Tip) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2120,6 +2137,11 @@ func (x *fastReflection_SignDocDirectAux) Mutable(fd protoreflect.FieldDescripto x.PublicKey = new(anypb.Any) } return protoreflect.ValueOfMessage(x.PublicKey.ProtoReflect()) + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + if x.Tip == nil { + x.Tip = new(Tip) + } + return protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) case "cosmos.tx.v1beta1.SignDocDirectAux.body_bytes": panic(fmt.Errorf("field body_bytes of message cosmos.tx.v1beta1.SignDocDirectAux is not mutable")) case "cosmos.tx.v1beta1.SignDocDirectAux.chain_id": @@ -2152,6 +2174,9 @@ func (x *fastReflection_SignDocDirectAux) NewField(fd protoreflect.FieldDescript return protoreflect.ValueOfUint64(uint64(0)) case "cosmos.tx.v1beta1.SignDocDirectAux.sequence": return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.tx.v1beta1.SignDocDirectAux.tip": + m := new(Tip) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.SignDocDirectAux")) @@ -2239,6 +2264,10 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { if x.Sequence != 0 { n += 1 + runtime.Sov(uint64(x.Sequence)) } + if x.Tip != nil { + l = options.Size(x.Tip) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2268,6 +2297,20 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Tip != nil { + encoded, err := options.Marshal(x.Tip) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } if x.Sequence != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.Sequence)) i-- @@ -2495,6 +2538,42 @@ func (x *fastReflection_SignDocDirectAux) ProtoMethods() *protoiface.Methods { break } } + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Tip == nil { + x.Tip = &Tip{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Tip); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -3471,6 +3550,7 @@ var ( md_AuthInfo protoreflect.MessageDescriptor fd_AuthInfo_signer_infos protoreflect.FieldDescriptor fd_AuthInfo_fee protoreflect.FieldDescriptor + fd_AuthInfo_tip protoreflect.FieldDescriptor ) func init() { @@ -3478,6 +3558,7 @@ func init() { md_AuthInfo = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuthInfo") fd_AuthInfo_signer_infos = md_AuthInfo.Fields().ByName("signer_infos") fd_AuthInfo_fee = md_AuthInfo.Fields().ByName("fee") + fd_AuthInfo_tip = md_AuthInfo.Fields().ByName("tip") } var _ protoreflect.Message = (*fastReflection_AuthInfo)(nil) @@ -3557,6 +3638,12 @@ func (x *fastReflection_AuthInfo) Range(f func(protoreflect.FieldDescriptor, pro return } } + if x.Tip != nil { + value := protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) + if !f(fd_AuthInfo_tip, value) { + return + } + } } // Has reports whether a field is populated. @@ -3576,6 +3663,8 @@ func (x *fastReflection_AuthInfo) Has(fd protoreflect.FieldDescriptor) bool { return len(x.SignerInfos) != 0 case "cosmos.tx.v1beta1.AuthInfo.fee": return x.Fee != nil + case "cosmos.tx.v1beta1.AuthInfo.tip": + return x.Tip != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3596,6 +3685,8 @@ func (x *fastReflection_AuthInfo) Clear(fd protoreflect.FieldDescriptor) { x.SignerInfos = nil case "cosmos.tx.v1beta1.AuthInfo.fee": x.Fee = nil + case "cosmos.tx.v1beta1.AuthInfo.tip": + x.Tip = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3621,6 +3712,9 @@ func (x *fastReflection_AuthInfo) Get(descriptor protoreflect.FieldDescriptor) p case "cosmos.tx.v1beta1.AuthInfo.fee": value := x.Fee return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.tx.v1beta1.AuthInfo.tip": + value := x.Tip + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3647,6 +3741,8 @@ func (x *fastReflection_AuthInfo) Set(fd protoreflect.FieldDescriptor, value pro x.SignerInfos = *clv.list case "cosmos.tx.v1beta1.AuthInfo.fee": x.Fee = value.Message().Interface().(*Fee) + case "cosmos.tx.v1beta1.AuthInfo.tip": + x.Tip = value.Message().Interface().(*Tip) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3678,6 +3774,11 @@ func (x *fastReflection_AuthInfo) Mutable(fd protoreflect.FieldDescriptor) proto x.Fee = new(Fee) } return protoreflect.ValueOfMessage(x.Fee.ProtoReflect()) + case "cosmos.tx.v1beta1.AuthInfo.tip": + if x.Tip == nil { + x.Tip = new(Tip) + } + return protoreflect.ValueOfMessage(x.Tip.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3697,6 +3798,9 @@ func (x *fastReflection_AuthInfo) NewField(fd protoreflect.FieldDescriptor) prot case "cosmos.tx.v1beta1.AuthInfo.fee": m := new(Fee) return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cosmos.tx.v1beta1.AuthInfo.tip": + m := new(Tip) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuthInfo")) @@ -3776,6 +3880,10 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { l = options.Size(x.Fee) n += 1 + l + runtime.Sov(uint64(l)) } + if x.Tip != nil { + l = options.Size(x.Tip) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -3805,6 +3913,20 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Tip != nil { + encoded, err := options.Marshal(x.Tip) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } if x.Fee != nil { encoded, err := options.Marshal(x.Fee) if err != nil { @@ -3954,6 +4076,42 @@ func (x *fastReflection_AuthInfo) ProtoMethods() *protoiface.Methods { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Tip == nil { + x.Tip = &Tip{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Tip); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -5149,7 +5307,7 @@ func (x *ModeInfo_Single) ProtoReflect() protoreflect.Message { } func (x *ModeInfo_Single) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5606,7 +5764,7 @@ func (x *ModeInfo_Multi) ProtoReflect() protoreflect.Message { } func (x *ModeInfo_Multi) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6776,32 +6934,79 @@ func (x *fastReflection_Fee) ProtoMethods() *protoiface.Methods { } } +var _ protoreflect.List = (*_Tip_1_list)(nil) + +type _Tip_1_list struct { + list *[]*v1beta12.Coin +} + +func (x *_Tip_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Tip_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Tip_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta12.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Tip_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta12.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Tip_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta12.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Tip_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Tip_1_list) NewElement() protoreflect.Value { + v := new(v1beta12.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Tip_1_list) IsValid() bool { + return x.list != nil +} + var ( - md_AuxSignerData protoreflect.MessageDescriptor - fd_AuxSignerData_address protoreflect.FieldDescriptor - fd_AuxSignerData_sign_doc protoreflect.FieldDescriptor - fd_AuxSignerData_mode protoreflect.FieldDescriptor - fd_AuxSignerData_sig protoreflect.FieldDescriptor + md_Tip protoreflect.MessageDescriptor + fd_Tip_amount protoreflect.FieldDescriptor + fd_Tip_tipper protoreflect.FieldDescriptor ) func init() { file_cosmos_tx_v1beta1_tx_proto_init() - md_AuxSignerData = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuxSignerData") - fd_AuxSignerData_address = md_AuxSignerData.Fields().ByName("address") - fd_AuxSignerData_sign_doc = md_AuxSignerData.Fields().ByName("sign_doc") - fd_AuxSignerData_mode = md_AuxSignerData.Fields().ByName("mode") - fd_AuxSignerData_sig = md_AuxSignerData.Fields().ByName("sig") + md_Tip = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("Tip") + fd_Tip_amount = md_Tip.Fields().ByName("amount") + fd_Tip_tipper = md_Tip.Fields().ByName("tipper") } -var _ protoreflect.Message = (*fastReflection_AuxSignerData)(nil) +var _ protoreflect.Message = (*fastReflection_Tip)(nil) -type fastReflection_AuxSignerData AuxSignerData +type fastReflection_Tip Tip -func (x *AuxSignerData) ProtoReflect() protoreflect.Message { - return (*fastReflection_AuxSignerData)(x) +func (x *Tip) ProtoReflect() protoreflect.Message { + return (*fastReflection_Tip)(x) } -func (x *AuxSignerData) slowProtoReflect() protoreflect.Message { +func (x *Tip) slowProtoReflect() protoreflect.Message { mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6813,43 +7018,43 @@ func (x *AuxSignerData) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_AuxSignerData_messageType fastReflection_AuxSignerData_messageType -var _ protoreflect.MessageType = fastReflection_AuxSignerData_messageType{} +var _fastReflection_Tip_messageType fastReflection_Tip_messageType +var _ protoreflect.MessageType = fastReflection_Tip_messageType{} -type fastReflection_AuxSignerData_messageType struct{} +type fastReflection_Tip_messageType struct{} -func (x fastReflection_AuxSignerData_messageType) Zero() protoreflect.Message { - return (*fastReflection_AuxSignerData)(nil) +func (x fastReflection_Tip_messageType) Zero() protoreflect.Message { + return (*fastReflection_Tip)(nil) } -func (x fastReflection_AuxSignerData_messageType) New() protoreflect.Message { - return new(fastReflection_AuxSignerData) +func (x fastReflection_Tip_messageType) New() protoreflect.Message { + return new(fastReflection_Tip) } -func (x fastReflection_AuxSignerData_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_AuxSignerData +func (x fastReflection_Tip_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Tip } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_AuxSignerData) Descriptor() protoreflect.MessageDescriptor { - return md_AuxSignerData +func (x *fastReflection_Tip) Descriptor() protoreflect.MessageDescriptor { + return md_Tip } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_AuxSignerData) Type() protoreflect.MessageType { - return _fastReflection_AuxSignerData_messageType +func (x *fastReflection_Tip) Type() protoreflect.MessageType { + return _fastReflection_Tip_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_AuxSignerData) New() protoreflect.Message { - return new(fastReflection_AuxSignerData) +func (x *fastReflection_Tip) New() protoreflect.Message { + return new(fastReflection_Tip) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_AuxSignerData) Interface() protoreflect.ProtoMessage { - return (*AuxSignerData)(x) +func (x *fastReflection_Tip) Interface() protoreflect.ProtoMessage { + return (*Tip)(x) } // Range iterates over every populated field in an undefined order, @@ -6857,28 +7062,16 @@ func (x *fastReflection_AuxSignerData) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_AuxSignerData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Address != "" { - value := protoreflect.ValueOfString(x.Address) - if !f(fd_AuxSignerData_address, value) { - return - } - } - if x.SignDoc != nil { - value := protoreflect.ValueOfMessage(x.SignDoc.ProtoReflect()) - if !f(fd_AuxSignerData_sign_doc, value) { - return - } - } - if x.Mode != 0 { - value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.Mode)) - if !f(fd_AuxSignerData_mode, value) { +func (x *fastReflection_Tip) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Amount) != 0 { + value := protoreflect.ValueOfList(&_Tip_1_list{list: &x.Amount}) + if !f(fd_Tip_amount, value) { return } } - if len(x.Sig) != 0 { - value := protoreflect.ValueOfBytes(x.Sig) - if !f(fd_AuxSignerData_sig, value) { + if x.Tipper != "" { + value := protoreflect.ValueOfString(x.Tipper) + if !f(fd_Tip_tipper, value) { return } } @@ -6895,21 +7088,17 @@ func (x *fastReflection_AuxSignerData) Range(f func(protoreflect.FieldDescriptor // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_AuxSignerData) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_Tip) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - return x.Address != "" - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - return x.SignDoc != nil - case "cosmos.tx.v1beta1.AuxSignerData.mode": - return x.Mode != 0 - case "cosmos.tx.v1beta1.AuxSignerData.sig": - return len(x.Sig) != 0 + case "cosmos.tx.v1beta1.Tip.amount": + return len(x.Amount) != 0 + case "cosmos.tx.v1beta1.Tip.tipper": + return x.Tipper != "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) } } @@ -6919,21 +7108,17 @@ func (x *fastReflection_AuxSignerData) Has(fd protoreflect.FieldDescriptor) bool // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_Tip) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - x.Address = "" - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - x.SignDoc = nil - case "cosmos.tx.v1beta1.AuxSignerData.mode": - x.Mode = 0 - case "cosmos.tx.v1beta1.AuxSignerData.sig": - x.Sig = nil + case "cosmos.tx.v1beta1.Tip.amount": + x.Amount = nil + case "cosmos.tx.v1beta1.Tip.tipper": + x.Tipper = "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) } } @@ -6943,25 +7128,22 @@ func (x *fastReflection_AuxSignerData) Clear(fd protoreflect.FieldDescriptor) { // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_AuxSignerData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Tip) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - value := x.Address + case "cosmos.tx.v1beta1.Tip.amount": + if len(x.Amount) == 0 { + return protoreflect.ValueOfList(&_Tip_1_list{}) + } + listValue := &_Tip_1_list{list: &x.Amount} + return protoreflect.ValueOfList(listValue) + case "cosmos.tx.v1beta1.Tip.tipper": + value := x.Tipper return protoreflect.ValueOfString(value) - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - value := x.SignDoc - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cosmos.tx.v1beta1.AuxSignerData.mode": - value := x.Mode - return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) - case "cosmos.tx.v1beta1.AuxSignerData.sig": - value := x.Sig - return protoreflect.ValueOfBytes(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", descriptor.FullName())) } } @@ -6975,21 +7157,19 @@ func (x *fastReflection_AuxSignerData) Get(descriptor protoreflect.FieldDescript // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_Tip) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.address": - x.Address = value.Interface().(string) - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - x.SignDoc = value.Message().Interface().(*SignDocDirectAux) - case "cosmos.tx.v1beta1.AuxSignerData.mode": - x.Mode = (v1beta1.SignMode)(value.Enum()) - case "cosmos.tx.v1beta1.AuxSignerData.sig": - x.Sig = value.Bytes() + case "cosmos.tx.v1beta1.Tip.amount": + lv := value.List() + clv := lv.(*_Tip_1_list) + x.Amount = *clv.list + case "cosmos.tx.v1beta1.Tip.tipper": + x.Tipper = value.Interface().(string) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) } - panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) } } @@ -7003,11 +7183,547 @@ func (x *fastReflection_AuxSignerData) Set(fd protoreflect.FieldDescriptor, valu // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AuxSignerData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Tip) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": - if x.SignDoc == nil { - x.SignDoc = new(SignDocDirectAux) + case "cosmos.tx.v1beta1.Tip.amount": + if x.Amount == nil { + x.Amount = []*v1beta12.Coin{} + } + value := &_Tip_1_list{list: &x.Amount} + return protoreflect.ValueOfList(value) + case "cosmos.tx.v1beta1.Tip.tipper": + panic(fmt.Errorf("field tipper of message cosmos.tx.v1beta1.Tip is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Tip) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.tx.v1beta1.Tip.amount": + list := []*v1beta12.Coin{} + return protoreflect.ValueOfList(&_Tip_1_list{list: &list}) + case "cosmos.tx.v1beta1.Tip.tipper": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.Tip")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.Tip does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Tip) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.tx.v1beta1.Tip", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Tip) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Tip) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Tip) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Tip) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Tip) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Amount) > 0 { + for _, e := range x.Amount { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.Tipper) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Tip) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Tipper) > 0 { + i -= len(x.Tipper) + copy(dAtA[i:], x.Tipper) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Tipper))) + i-- + dAtA[i] = 0x12 + } + if len(x.Amount) > 0 { + for iNdEx := len(x.Amount) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Amount[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Tip) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tip: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tip: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Amount = append(x.Amount, &v1beta12.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount[len(x.Amount)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tipper", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Tipper = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_AuxSignerData protoreflect.MessageDescriptor + fd_AuxSignerData_address protoreflect.FieldDescriptor + fd_AuxSignerData_sign_doc protoreflect.FieldDescriptor + fd_AuxSignerData_mode protoreflect.FieldDescriptor + fd_AuxSignerData_sig protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_tx_v1beta1_tx_proto_init() + md_AuxSignerData = File_cosmos_tx_v1beta1_tx_proto.Messages().ByName("AuxSignerData") + fd_AuxSignerData_address = md_AuxSignerData.Fields().ByName("address") + fd_AuxSignerData_sign_doc = md_AuxSignerData.Fields().ByName("sign_doc") + fd_AuxSignerData_mode = md_AuxSignerData.Fields().ByName("mode") + fd_AuxSignerData_sig = md_AuxSignerData.Fields().ByName("sig") +} + +var _ protoreflect.Message = (*fastReflection_AuxSignerData)(nil) + +type fastReflection_AuxSignerData AuxSignerData + +func (x *AuxSignerData) ProtoReflect() protoreflect.Message { + return (*fastReflection_AuxSignerData)(x) +} + +func (x *AuxSignerData) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_AuxSignerData_messageType fastReflection_AuxSignerData_messageType +var _ protoreflect.MessageType = fastReflection_AuxSignerData_messageType{} + +type fastReflection_AuxSignerData_messageType struct{} + +func (x fastReflection_AuxSignerData_messageType) Zero() protoreflect.Message { + return (*fastReflection_AuxSignerData)(nil) +} +func (x fastReflection_AuxSignerData_messageType) New() protoreflect.Message { + return new(fastReflection_AuxSignerData) +} +func (x fastReflection_AuxSignerData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AuxSignerData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AuxSignerData) Descriptor() protoreflect.MessageDescriptor { + return md_AuxSignerData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AuxSignerData) Type() protoreflect.MessageType { + return _fastReflection_AuxSignerData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AuxSignerData) New() protoreflect.Message { + return new(fastReflection_AuxSignerData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AuxSignerData) Interface() protoreflect.ProtoMessage { + return (*AuxSignerData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AuxSignerData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_AuxSignerData_address, value) { + return + } + } + if x.SignDoc != nil { + value := protoreflect.ValueOfMessage(x.SignDoc.ProtoReflect()) + if !f(fd_AuxSignerData_sign_doc, value) { + return + } + } + if x.Mode != 0 { + value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.Mode)) + if !f(fd_AuxSignerData_mode, value) { + return + } + } + if len(x.Sig) != 0 { + value := protoreflect.ValueOfBytes(x.Sig) + if !f(fd_AuxSignerData_sig, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AuxSignerData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.tx.v1beta1.AuxSignerData.address": + return x.Address != "" + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + return x.SignDoc != nil + case "cosmos.tx.v1beta1.AuxSignerData.mode": + return x.Mode != 0 + case "cosmos.tx.v1beta1.AuxSignerData.sig": + return len(x.Sig) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuxSignerData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.tx.v1beta1.AuxSignerData.address": + x.Address = "" + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + x.SignDoc = nil + case "cosmos.tx.v1beta1.AuxSignerData.mode": + x.Mode = 0 + case "cosmos.tx.v1beta1.AuxSignerData.sig": + x.Sig = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AuxSignerData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.tx.v1beta1.AuxSignerData.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + value := x.SignDoc + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.tx.v1beta1.AuxSignerData.mode": + value := x.Mode + return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) + case "cosmos.tx.v1beta1.AuxSignerData.sig": + value := x.Sig + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuxSignerData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.tx.v1beta1.AuxSignerData.address": + x.Address = value.Interface().(string) + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + x.SignDoc = value.Message().Interface().(*SignDocDirectAux) + case "cosmos.tx.v1beta1.AuxSignerData.mode": + x.Mode = (v1beta1.SignMode)(value.Enum()) + case "cosmos.tx.v1beta1.AuxSignerData.sig": + x.Sig = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.tx.v1beta1.AuxSignerData")) + } + panic(fmt.Errorf("message cosmos.tx.v1beta1.AuxSignerData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuxSignerData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.tx.v1beta1.AuxSignerData.sign_doc": + if x.SignDoc == nil { + x.SignDoc = new(SignDocDirectAux) } return protoreflect.ValueOfMessage(x.SignDoc.ProtoReflect()) case "cosmos.tx.v1beta1.AuxSignerData.address": @@ -7613,6 +8329,10 @@ type SignDocDirectAux struct { AccountNumber uint64 `protobuf:"varint,4,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` // sequence is the sequence number of the signing account. Sequence uint64 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` + // tips have been depreacted and should not be used + // + // Deprecated: Do not use. + Tip *Tip `protobuf:"bytes,6,opt,name=tip,proto3" json:"tip,omitempty"` } func (x *SignDocDirectAux) Reset() { @@ -7670,6 +8390,14 @@ func (x *SignDocDirectAux) GetSequence() uint64 { return 0 } +// Deprecated: Do not use. +func (x *SignDocDirectAux) GetTip() *Tip { + if x != nil { + return x.Tip + } + return nil +} + // TxBody is the body of a transaction that all signers sign over. type TxBody struct { state protoimpl.MessageState @@ -7773,6 +8501,15 @@ type AuthInfo struct { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee *Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` + // Tip is the optional tip used for transactions fees paid in another denom. + // + // This field is ignored if the chain didn't enable tips, i.e. didn't add the + // `TipDecorator` in its posthandler. + // + // Since: cosmos-sdk 0.46 + // + // Deprecated: Do not use. + Tip *Tip `protobuf:"bytes,3,opt,name=tip,proto3" json:"tip,omitempty"` } func (x *AuthInfo) Reset() { @@ -7809,6 +8546,14 @@ func (x *AuthInfo) GetFee() *Fee { return nil } +// Deprecated: Do not use. +func (x *AuthInfo) GetTip() *Tip { + if x != nil { + return x.Tip + } + return nil +} + // SignerInfo describes the public key and signing mode of a single top-level // signer. type SignerInfo struct { @@ -8016,6 +8761,56 @@ func (x *Fee) GetGranter() string { return "" } +// Tip is the tip used for meta-transactions. +// +// Since: cosmos-sdk 0.46 +// +// Deprecated: Do not use. +type Tip struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // amount is the amount of the tip + Amount []*v1beta12.Coin `protobuf:"bytes,1,rep,name=amount,proto3" json:"amount,omitempty"` + // tipper is the address of the account paying for the tip + Tipper string `protobuf:"bytes,2,opt,name=tipper,proto3" json:"tipper,omitempty"` +} + +func (x *Tip) Reset() { + *x = Tip{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tip) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tip) ProtoMessage() {} + +// Deprecated: Use Tip.ProtoReflect.Descriptor instead. +func (*Tip) Descriptor() ([]byte, []int) { + return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{9} +} + +func (x *Tip) GetAmount() []*v1beta12.Coin { + if x != nil { + return x.Amount + } + return nil +} + +func (x *Tip) GetTipper() string { + if x != nil { + return x.Tipper + } + return "" +} + // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected @@ -8044,7 +8839,7 @@ type AuxSignerData struct { func (x *AuxSignerData) Reset() { *x = AuxSignerData{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[9] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8058,7 +8853,7 @@ func (*AuxSignerData) ProtoMessage() {} // Deprecated: Use AuxSignerData.ProtoReflect.Descriptor instead. func (*AuxSignerData) Descriptor() ([]byte, []int) { - return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{9} + return file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP(), []int{10} } func (x *AuxSignerData) GetAddress() string { @@ -8104,7 +8899,7 @@ type ModeInfo_Single struct { func (x *ModeInfo_Single) Reset() { *x = ModeInfo_Single{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[10] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8144,7 +8939,7 @@ type ModeInfo_Multi struct { func (x *ModeInfo_Multi) Reset() { *x = ModeInfo_Multi{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_tx_v1beta1_tx_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8219,7 +9014,7 @@ var file_cosmos_tx_v1beta1_tx_proto_rawDesc = []byte{ 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xc4, 0x01, 0x0a, 0x10, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, @@ -8232,105 +9027,122 @@ var file_cosmos_tx_v1beta1_tx_proto_rawDesc = []byte{ 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x22, 0x95, 0x02, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, - 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, - 0x65, 0x6d, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0xff, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x10, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, - 0x0a, 0x1e, 0x6e, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0xff, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x1b, 0x6e, - 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x76, 0x0a, 0x08, 0x41, 0x75, - 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, - 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, - 0x65, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xe0, 0x02, 0x0a, - 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x48, 0x00, 0x52, - 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x1a, 0x41, 0x0a, 0x06, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x90, 0x01, 0x0a, 0x05, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, - 0x4b, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x73, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x69, 0x74, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x52, 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x3a, 0x0a, 0x0a, - 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x6d, - 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x22, - 0x81, 0x02, 0x0a, 0x03, 0x46, 0x65, 0x65, 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, - 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x2e, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, - 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x12, - 0x32, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x65, 0x72, 0x22, 0xce, 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x69, 0x67, - 0x6e, 0x5f, 0x64, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, + 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x54, 0x69, 0x70, 0x42, 0x02, 0x18, 0x01, 0x52, 0x03, 0x74, 0x69, 0x70, + 0x22, 0x95, 0x02, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x30, 0x0a, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x41, 0x6e, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, + 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x1e, + 0x6e, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xff, + 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x1b, 0x6e, 0x6f, 0x6e, + 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x08, 0x41, 0x75, 0x74, + 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, - 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, + 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x74, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x54, 0x69, 0x70, 0x42, 0x02, 0x18, 0x01, 0x52, 0x03, 0x74, 0x69, 0x70, 0x22, + 0x97, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, + 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xe0, 0x02, 0x0a, 0x08, 0x4d, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x1a, + 0x41, 0x0a, 0x06, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x73, 0x69, 0x67, 0x42, 0xb4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, - 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x74, 0x78, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x54, 0x58, 0xaa, 0x02, 0x11, - 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x54, 0x78, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xca, 0x02, 0x11, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, - 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, - 0x54, 0x78, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x64, 0x65, 0x1a, 0x90, 0x01, 0x0a, 0x05, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x4b, 0x0a, 0x08, + 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x73, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x69, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x52, + 0x08, 0x62, 0x69, 0x74, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, + 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x81, 0x02, 0x0a, + 0x03, 0x46, 0x65, 0x65, 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, + 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x05, + 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x07, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0xb6, 0x01, 0x0a, 0x03, 0x54, 0x69, 0x70, 0x12, 0x79, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, + 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x69, 0x70, 0x70, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, + 0x69, 0x70, 0x70, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xce, 0x01, 0x0a, 0x0d, 0x41, 0x75, + 0x78, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x3e, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x64, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x41, 0x75, 0x78, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x44, 0x6f, 0x63, 0x12, + 0x37, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x6f, + 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x42, 0xb4, 0x01, 0x0a, 0x15, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x78, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x2c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x74, 0x78, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x3b, 0x74, 0x78, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, + 0x43, 0x54, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x54, 0x78, 0x2e, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x11, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x1d, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x54, 0x78, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x54, 0x78, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8345,7 +9157,7 @@ func file_cosmos_tx_v1beta1_tx_proto_rawDescGZIP() []byte { return file_cosmos_tx_v1beta1_tx_proto_rawDescData } -var file_cosmos_tx_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_cosmos_tx_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_cosmos_tx_v1beta1_tx_proto_goTypes = []interface{}{ (*Tx)(nil), // 0: cosmos.tx.v1beta1.Tx (*TxRaw)(nil), // 1: cosmos.tx.v1beta1.TxRaw @@ -8356,38 +9168,42 @@ var file_cosmos_tx_v1beta1_tx_proto_goTypes = []interface{}{ (*SignerInfo)(nil), // 6: cosmos.tx.v1beta1.SignerInfo (*ModeInfo)(nil), // 7: cosmos.tx.v1beta1.ModeInfo (*Fee)(nil), // 8: cosmos.tx.v1beta1.Fee - (*AuxSignerData)(nil), // 9: cosmos.tx.v1beta1.AuxSignerData - (*ModeInfo_Single)(nil), // 10: cosmos.tx.v1beta1.ModeInfo.Single - (*ModeInfo_Multi)(nil), // 11: cosmos.tx.v1beta1.ModeInfo.Multi - (*anypb.Any)(nil), // 12: google.protobuf.Any - (*v1beta12.Coin)(nil), // 13: cosmos.base.v1beta1.Coin - (v1beta1.SignMode)(0), // 14: cosmos.tx.signing.v1beta1.SignMode - (*v1beta11.CompactBitArray)(nil), // 15: cosmos.crypto.multisig.v1beta1.CompactBitArray + (*Tip)(nil), // 9: cosmos.tx.v1beta1.Tip + (*AuxSignerData)(nil), // 10: cosmos.tx.v1beta1.AuxSignerData + (*ModeInfo_Single)(nil), // 11: cosmos.tx.v1beta1.ModeInfo.Single + (*ModeInfo_Multi)(nil), // 12: cosmos.tx.v1beta1.ModeInfo.Multi + (*anypb.Any)(nil), // 13: google.protobuf.Any + (*v1beta12.Coin)(nil), // 14: cosmos.base.v1beta1.Coin + (v1beta1.SignMode)(0), // 15: cosmos.tx.signing.v1beta1.SignMode + (*v1beta11.CompactBitArray)(nil), // 16: cosmos.crypto.multisig.v1beta1.CompactBitArray } var file_cosmos_tx_v1beta1_tx_proto_depIdxs = []int32{ 4, // 0: cosmos.tx.v1beta1.Tx.body:type_name -> cosmos.tx.v1beta1.TxBody 5, // 1: cosmos.tx.v1beta1.Tx.auth_info:type_name -> cosmos.tx.v1beta1.AuthInfo - 12, // 2: cosmos.tx.v1beta1.SignDocDirectAux.public_key:type_name -> google.protobuf.Any - 12, // 3: cosmos.tx.v1beta1.TxBody.messages:type_name -> google.protobuf.Any - 12, // 4: cosmos.tx.v1beta1.TxBody.extension_options:type_name -> google.protobuf.Any - 12, // 5: cosmos.tx.v1beta1.TxBody.non_critical_extension_options:type_name -> google.protobuf.Any - 6, // 6: cosmos.tx.v1beta1.AuthInfo.signer_infos:type_name -> cosmos.tx.v1beta1.SignerInfo - 8, // 7: cosmos.tx.v1beta1.AuthInfo.fee:type_name -> cosmos.tx.v1beta1.Fee - 12, // 8: cosmos.tx.v1beta1.SignerInfo.public_key:type_name -> google.protobuf.Any - 7, // 9: cosmos.tx.v1beta1.SignerInfo.mode_info:type_name -> cosmos.tx.v1beta1.ModeInfo - 10, // 10: cosmos.tx.v1beta1.ModeInfo.single:type_name -> cosmos.tx.v1beta1.ModeInfo.Single - 11, // 11: cosmos.tx.v1beta1.ModeInfo.multi:type_name -> cosmos.tx.v1beta1.ModeInfo.Multi - 13, // 12: cosmos.tx.v1beta1.Fee.amount:type_name -> cosmos.base.v1beta1.Coin - 3, // 13: cosmos.tx.v1beta1.AuxSignerData.sign_doc:type_name -> cosmos.tx.v1beta1.SignDocDirectAux - 14, // 14: cosmos.tx.v1beta1.AuxSignerData.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode - 14, // 15: cosmos.tx.v1beta1.ModeInfo.Single.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode - 15, // 16: cosmos.tx.v1beta1.ModeInfo.Multi.bitarray:type_name -> cosmos.crypto.multisig.v1beta1.CompactBitArray - 7, // 17: cosmos.tx.v1beta1.ModeInfo.Multi.mode_infos:type_name -> cosmos.tx.v1beta1.ModeInfo - 18, // [18:18] is the sub-list for method output_type - 18, // [18:18] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 13, // 2: cosmos.tx.v1beta1.SignDocDirectAux.public_key:type_name -> google.protobuf.Any + 9, // 3: cosmos.tx.v1beta1.SignDocDirectAux.tip:type_name -> cosmos.tx.v1beta1.Tip + 13, // 4: cosmos.tx.v1beta1.TxBody.messages:type_name -> google.protobuf.Any + 13, // 5: cosmos.tx.v1beta1.TxBody.extension_options:type_name -> google.protobuf.Any + 13, // 6: cosmos.tx.v1beta1.TxBody.non_critical_extension_options:type_name -> google.protobuf.Any + 6, // 7: cosmos.tx.v1beta1.AuthInfo.signer_infos:type_name -> cosmos.tx.v1beta1.SignerInfo + 8, // 8: cosmos.tx.v1beta1.AuthInfo.fee:type_name -> cosmos.tx.v1beta1.Fee + 9, // 9: cosmos.tx.v1beta1.AuthInfo.tip:type_name -> cosmos.tx.v1beta1.Tip + 13, // 10: cosmos.tx.v1beta1.SignerInfo.public_key:type_name -> google.protobuf.Any + 7, // 11: cosmos.tx.v1beta1.SignerInfo.mode_info:type_name -> cosmos.tx.v1beta1.ModeInfo + 11, // 12: cosmos.tx.v1beta1.ModeInfo.single:type_name -> cosmos.tx.v1beta1.ModeInfo.Single + 12, // 13: cosmos.tx.v1beta1.ModeInfo.multi:type_name -> cosmos.tx.v1beta1.ModeInfo.Multi + 14, // 14: cosmos.tx.v1beta1.Fee.amount:type_name -> cosmos.base.v1beta1.Coin + 14, // 15: cosmos.tx.v1beta1.Tip.amount:type_name -> cosmos.base.v1beta1.Coin + 3, // 16: cosmos.tx.v1beta1.AuxSignerData.sign_doc:type_name -> cosmos.tx.v1beta1.SignDocDirectAux + 15, // 17: cosmos.tx.v1beta1.AuxSignerData.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode + 15, // 18: cosmos.tx.v1beta1.ModeInfo.Single.mode:type_name -> cosmos.tx.signing.v1beta1.SignMode + 16, // 19: cosmos.tx.v1beta1.ModeInfo.Multi.bitarray:type_name -> cosmos.crypto.multisig.v1beta1.CompactBitArray + 7, // 20: cosmos.tx.v1beta1.ModeInfo.Multi.mode_infos:type_name -> cosmos.tx.v1beta1.ModeInfo + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_cosmos_tx_v1beta1_tx_proto_init() } @@ -8505,7 +9321,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { } } file_cosmos_tx_v1beta1_tx_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuxSignerData); i { + switch v := v.(*Tip); i { case 0: return &v.state case 1: @@ -8517,7 +9333,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { } } file_cosmos_tx_v1beta1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModeInfo_Single); i { + switch v := v.(*AuxSignerData); i { case 0: return &v.state case 1: @@ -8529,6 +9345,18 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { } } file_cosmos_tx_v1beta1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModeInfo_Single); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_tx_v1beta1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModeInfo_Multi); i { case 0: return &v.state @@ -8551,7 +9379,7 @@ func file_cosmos_tx_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_tx_v1beta1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/cosmos/tx/v1beta1/tx.proto b/proto/cosmos/tx/v1beta1/tx.proto index e7671108c26f..cfaac70449f4 100644 --- a/proto/cosmos/tx/v1beta1/tx.proto +++ b/proto/cosmos/tx/v1beta1/tx.proto @@ -87,6 +87,9 @@ message SignDocDirectAux { // sequence is the sequence number of the signing account. uint64 sequence = 5; + + // tips have been depreacted and should not be used + Tip tip = 6 [deprecated = true]; } // TxBody is the body of a transaction that all signers sign over. @@ -134,6 +137,13 @@ message AuthInfo { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee fee = 2; + // Tip is the optional tip used for transactions fees paid in another denom. + // + // This field is ignored if the chain didn't enable tips, i.e. didn't add the + // `TipDecorator` in its posthandler. + // + // Since: cosmos-sdk 0.46 + Tip tip = 3 [deprecated = true]; } // SignerInfo describes the public key and signing mode of a single top-level @@ -212,6 +222,22 @@ message Fee { string granter = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } +// Tip is the tip used for meta-transactions. +// +// Since: cosmos-sdk 0.46 +message Tip { + option deprecated = true; + // amount is the amount of the tip + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins" + ]; + // tipper is the address of the account paying for the tip + string tipper = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected diff --git a/types/tx/tx.pb.go b/types/tx/tx.pb.go index 42d86d988fe9..8173108d3904 100644 --- a/types/tx/tx.pb.go +++ b/types/tx/tx.pb.go @@ -264,6 +264,8 @@ type SignDocDirectAux struct { AccountNumber uint64 `protobuf:"varint,4,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` // sequence is the sequence number of the signing account. Sequence uint64 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` + // tips have been depreacted and should not be used + Tip *Tip `protobuf:"bytes,6,opt,name=tip,proto3" json:"tip,omitempty"` // Deprecated: Do not use. } func (m *SignDocDirectAux) Reset() { *m = SignDocDirectAux{} } @@ -334,6 +336,14 @@ func (m *SignDocDirectAux) GetSequence() uint64 { return 0 } +// Deprecated: Do not use. +func (m *SignDocDirectAux) GetTip() *Tip { + if m != nil { + return m.Tip + } + return nil +} + // TxBody is the body of a transaction that all signers sign over. type TxBody struct { // messages is a list of messages to be executed. The required signers of @@ -442,6 +452,13 @@ type AuthInfo struct { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee *Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` + // Tip is the optional tip used for transactions fees paid in another denom. + // + // This field is ignored if the chain didn't enable tips, i.e. didn't add the + // `TipDecorator` in its posthandler. + // + // Since: cosmos-sdk 0.46 + Tip *Tip `protobuf:"bytes,3,opt,name=tip,proto3" json:"tip,omitempty"` // Deprecated: Do not use. } func (m *AuthInfo) Reset() { *m = AuthInfo{} } @@ -491,6 +508,14 @@ func (m *AuthInfo) GetFee() *Fee { return nil } +// Deprecated: Do not use. +func (m *AuthInfo) GetTip() *Tip { + if m != nil { + return m.Tip + } + return nil +} + // SignerInfo describes the public key and signing mode of a single top-level // signer. type SignerInfo struct { @@ -835,6 +860,65 @@ func (m *Fee) GetGranter() string { return "" } +// Tip is the tip used for meta-transactions. +// +// Since: cosmos-sdk 0.46 +// +// Deprecated: Do not use. +type Tip struct { + // amount is the amount of the tip + Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount"` + // tipper is the address of the account paying for the tip + Tipper string `protobuf:"bytes,2,opt,name=tipper,proto3" json:"tipper,omitempty"` +} + +func (m *Tip) Reset() { *m = Tip{} } +func (m *Tip) String() string { return proto.CompactTextString(m) } +func (*Tip) ProtoMessage() {} +func (*Tip) Descriptor() ([]byte, []int) { + return fileDescriptor_96d1575ffde80842, []int{9} +} +func (m *Tip) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Tip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Tip.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Tip) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tip.Merge(m, src) +} +func (m *Tip) XXX_Size() int { + return m.Size() +} +func (m *Tip) XXX_DiscardUnknown() { + xxx_messageInfo_Tip.DiscardUnknown(m) +} + +var xxx_messageInfo_Tip proto.InternalMessageInfo + +func (m *Tip) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Amount + } + return nil +} + +func (m *Tip) GetTipper() string { + if m != nil { + return m.Tipper + } + return "" +} + // AuxSignerData is the intermediary format that an auxiliary signer (e.g. a // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected @@ -860,7 +944,7 @@ func (m *AuxSignerData) Reset() { *m = AuxSignerData{} } func (m *AuxSignerData) String() string { return proto.CompactTextString(m) } func (*AuxSignerData) ProtoMessage() {} func (*AuxSignerData) Descriptor() ([]byte, []int) { - return fileDescriptor_96d1575ffde80842, []int{9} + return fileDescriptor_96d1575ffde80842, []int{10} } func (m *AuxSignerData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -929,76 +1013,81 @@ func init() { proto.RegisterType((*ModeInfo_Single)(nil), "cosmos.tx.v1beta1.ModeInfo.Single") proto.RegisterType((*ModeInfo_Multi)(nil), "cosmos.tx.v1beta1.ModeInfo.Multi") proto.RegisterType((*Fee)(nil), "cosmos.tx.v1beta1.Fee") + proto.RegisterType((*Tip)(nil), "cosmos.tx.v1beta1.Tip") proto.RegisterType((*AuxSignerData)(nil), "cosmos.tx.v1beta1.AuxSignerData") } func init() { proto.RegisterFile("cosmos/tx/v1beta1/tx.proto", fileDescriptor_96d1575ffde80842) } var fileDescriptor_96d1575ffde80842 = []byte{ - // 1001 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xf6, 0x7a, 0xed, 0xc4, 0x7e, 0x4d, 0xda, 0x64, 0x14, 0x21, 0xc7, 0x51, 0xdd, 0xe0, 0xaa, - 0x60, 0x55, 0xca, 0x2e, 0x4d, 0x0f, 0x14, 0x84, 0x00, 0xbb, 0x21, 0x4a, 0x55, 0x0a, 0xd2, 0x24, - 0xa7, 0x5e, 0x56, 0xe3, 0xf5, 0x64, 0x3d, 0xaa, 0x77, 0xc6, 0xec, 0xcc, 0x16, 0xef, 0x91, 0x1f, - 0x80, 0x54, 0x21, 0x21, 0x24, 0x7e, 0x01, 0xe2, 0xd4, 0x03, 0x3f, 0x81, 0x43, 0x4f, 0xa8, 0xe2, - 0xc4, 0x09, 0xaa, 0xe4, 0xd0, 0x9f, 0x01, 0x9a, 0xd9, 0xd9, 0x4d, 0x08, 0xa9, 0x03, 0xa2, 0x17, - 0x7b, 0xe6, 0xcd, 0xf7, 0xbe, 0xf9, 0x76, 0xe6, 0x7b, 0x6f, 0xa0, 0x1d, 0x0a, 0x19, 0x0b, 0xe9, - 0xab, 0x99, 0xff, 0xf8, 0xd6, 0x90, 0x2a, 0x72, 0xcb, 0x57, 0x33, 0x6f, 0x9a, 0x08, 0x25, 0xd0, - 0x6a, 0xbe, 0xe6, 0xa9, 0x99, 0x67, 0xd7, 0xda, 0xab, 0x24, 0x66, 0x5c, 0xf8, 0xe6, 0x37, 0x47, - 0xb5, 0xd7, 0x22, 0x11, 0x09, 0x33, 0xf4, 0xf5, 0xc8, 0x46, 0xb7, 0x2c, 0x6f, 0x98, 0x64, 0x53, - 0x25, 0xfc, 0x38, 0x9d, 0x28, 0x26, 0x59, 0x54, 0x6e, 0x52, 0x04, 0x2c, 0xbc, 0x63, 0xe1, 0x43, - 0x22, 0x69, 0x89, 0x09, 0x05, 0xe3, 0x76, 0xfd, 0xed, 0x13, 0x99, 0x92, 0x45, 0x9c, 0xf1, 0x13, - 0x26, 0x3b, 0xb7, 0xc0, 0xf5, 0x48, 0x88, 0x68, 0x42, 0x7d, 0x33, 0x1b, 0xa6, 0x87, 0x3e, 0xe1, - 0x59, 0xb1, 0x94, 0x73, 0x04, 0xb9, 0x56, 0xfb, 0x6d, 0x66, 0xd2, 0xfd, 0xda, 0x81, 0xea, 0xc1, - 0x0c, 0x6d, 0x41, 0x6d, 0x28, 0x46, 0x59, 0xcb, 0xd9, 0x74, 0x7a, 0x97, 0xb6, 0xd7, 0xbd, 0x7f, - 0x7c, 0xbf, 0x77, 0x30, 0x1b, 0x88, 0x51, 0x86, 0x0d, 0x0c, 0xdd, 0x81, 0x26, 0x49, 0xd5, 0x38, - 0x60, 0xfc, 0x50, 0xb4, 0xaa, 0x26, 0x67, 0xe3, 0x9c, 0x9c, 0x7e, 0xaa, 0xc6, 0xf7, 0xf8, 0xa1, - 0xc0, 0x0d, 0x62, 0x47, 0xa8, 0x03, 0xa0, 0x65, 0x13, 0x95, 0x26, 0x54, 0xb6, 0xdc, 0x4d, 0xb7, - 0xb7, 0x84, 0x4f, 0x45, 0xba, 0x1c, 0xea, 0x07, 0x33, 0x4c, 0xbe, 0x44, 0x57, 0x01, 0xf4, 0x56, - 0xc1, 0x30, 0x53, 0x54, 0x1a, 0x5d, 0x4b, 0xb8, 0xa9, 0x23, 0x03, 0x1d, 0x40, 0x6f, 0xc1, 0x95, - 0x52, 0x81, 0xc5, 0x54, 0x0d, 0x66, 0xb9, 0xd8, 0x2a, 0xc7, 0x5d, 0xb4, 0xdf, 0x37, 0x0e, 0x2c, - 0xee, 0xb3, 0x88, 0xef, 0x88, 0xf0, 0x75, 0x6d, 0xb9, 0x0e, 0x8d, 0x70, 0x4c, 0x18, 0x0f, 0xd8, - 0xa8, 0xe5, 0x6e, 0x3a, 0xbd, 0x26, 0x5e, 0x34, 0xf3, 0x7b, 0x23, 0x74, 0x03, 0x2e, 0x93, 0x30, - 0x14, 0x29, 0x57, 0x01, 0x4f, 0xe3, 0x21, 0x4d, 0x5a, 0xb5, 0x4d, 0xa7, 0x57, 0xc3, 0xcb, 0x36, - 0xfa, 0x99, 0x09, 0x76, 0x7f, 0x76, 0x60, 0xc5, 0x8a, 0xda, 0x61, 0x09, 0x0d, 0x55, 0x3f, 0x9d, - 0x5d, 0xa4, 0xee, 0x36, 0xc0, 0x34, 0x1d, 0x4e, 0x58, 0x18, 0x3c, 0xa2, 0x99, 0xbd, 0x93, 0x35, - 0x2f, 0xf7, 0x84, 0x57, 0x78, 0xc2, 0xeb, 0xf3, 0x0c, 0x37, 0x73, 0xdc, 0x7d, 0x9a, 0xfd, 0x7f, - 0xa9, 0xa8, 0x0d, 0x0d, 0x49, 0xbf, 0x48, 0x29, 0x0f, 0x69, 0xab, 0x6e, 0x00, 0xe5, 0xbc, 0xfb, - 0x6d, 0x15, 0x16, 0x72, 0xdb, 0xa0, 0x77, 0xa0, 0x11, 0x53, 0x29, 0x49, 0x64, 0xa4, 0xbb, 0xaf, - 0xd4, 0x56, 0xa2, 0x10, 0x82, 0x5a, 0x4c, 0xe3, 0xdc, 0x5d, 0x4d, 0x6c, 0xc6, 0x5a, 0x93, 0x62, - 0x31, 0x15, 0xa9, 0x0a, 0xc6, 0x94, 0x45, 0x63, 0x65, 0x44, 0xd7, 0xf0, 0xb2, 0x8d, 0xee, 0x99, - 0x20, 0x1a, 0xc0, 0x2a, 0x9d, 0x29, 0xca, 0x25, 0x13, 0x3c, 0x10, 0x53, 0xc5, 0x04, 0x97, 0xad, - 0x3f, 0x17, 0xe7, 0x6c, 0xbb, 0x52, 0xe2, 0x3f, 0xcf, 0xe1, 0xe8, 0x21, 0x74, 0xb8, 0xe0, 0x41, - 0x98, 0x30, 0xc5, 0x42, 0x32, 0x09, 0xce, 0x21, 0xbc, 0x32, 0x87, 0x70, 0x83, 0x0b, 0x7e, 0xd7, - 0xe6, 0x7e, 0x72, 0x86, 0xbb, 0xfb, 0x18, 0x1a, 0x45, 0x65, 0xa0, 0x8f, 0x61, 0x49, 0xbb, 0x91, - 0x26, 0xc6, 0x56, 0xc5, 0xe1, 0x5c, 0x3d, 0xa7, 0x98, 0xf6, 0x0d, 0xcc, 0x94, 0xd3, 0x25, 0x59, - 0x8e, 0x25, 0xea, 0x81, 0x7b, 0x48, 0xa9, 0xbd, 0xf1, 0x37, 0xce, 0x49, 0xdc, 0xa5, 0x14, 0x6b, - 0x48, 0xf7, 0x3b, 0x07, 0xe0, 0x84, 0xe5, 0x8c, 0x63, 0x9c, 0x7f, 0xe7, 0x98, 0x3b, 0xd0, 0x8c, - 0xc5, 0x88, 0x5e, 0x54, 0xf9, 0x0f, 0xc4, 0x88, 0xe6, 0x95, 0x1f, 0xdb, 0xd1, 0xdf, 0x9c, 0xe2, - 0x9e, 0x71, 0xca, 0x8b, 0x2a, 0x34, 0x8a, 0x14, 0xf4, 0x01, 0x2c, 0x48, 0xc6, 0xa3, 0x09, 0xb5, - 0x9a, 0xba, 0x73, 0xf8, 0xbd, 0x7d, 0x83, 0xdc, 0xab, 0x60, 0x9b, 0x83, 0xde, 0x83, 0xba, 0xe9, - 0xb0, 0x56, 0xdc, 0x9b, 0xf3, 0x92, 0x1f, 0x68, 0xe0, 0x5e, 0x05, 0xe7, 0x19, 0xed, 0x3e, 0x2c, - 0xe4, 0x74, 0xe8, 0x5d, 0xa8, 0x69, 0xdd, 0x46, 0xc0, 0xe5, 0xed, 0xeb, 0xa7, 0x38, 0x8a, 0x9e, - 0x7b, 0xfa, 0x56, 0x34, 0x1f, 0x36, 0x09, 0xed, 0x27, 0x0e, 0xd4, 0x0d, 0x2b, 0xba, 0x0f, 0x8d, - 0x21, 0x53, 0x24, 0x49, 0x48, 0x71, 0xb6, 0x7e, 0x41, 0x93, 0xbf, 0x0c, 0x5e, 0xf9, 0x10, 0x14, - 0x5c, 0x77, 0x45, 0x3c, 0x25, 0xa1, 0x1a, 0x30, 0xd5, 0xd7, 0x69, 0xb8, 0x24, 0x40, 0xef, 0x03, - 0x94, 0xa7, 0xae, 0xbb, 0x8e, 0x7b, 0xd1, 0xb1, 0x37, 0x8b, 0x63, 0x97, 0x83, 0x3a, 0xb8, 0x32, - 0x8d, 0xbb, 0x5f, 0x55, 0xc1, 0xdd, 0xa5, 0x14, 0x65, 0xb0, 0x40, 0x62, 0x5d, 0xc0, 0xd6, 0x6a, - 0x65, 0xaf, 0xd7, 0x0f, 0xd0, 0x29, 0x29, 0x8c, 0x0f, 0x76, 0x9f, 0xfd, 0x7e, 0xad, 0xf2, 0xe3, - 0x1f, 0xd7, 0x7a, 0x11, 0x53, 0xe3, 0x74, 0xe8, 0x85, 0x22, 0xf6, 0x8b, 0xc7, 0xcd, 0xfc, 0x6d, - 0xc9, 0xd1, 0x23, 0x5f, 0x65, 0x53, 0x2a, 0x4d, 0x82, 0xfc, 0xfe, 0xe5, 0xd3, 0x9b, 0x4b, 0x13, - 0x1a, 0x91, 0x30, 0x0b, 0xf4, 0x13, 0x26, 0x7f, 0x78, 0xf9, 0xf4, 0xa6, 0x83, 0xed, 0x86, 0x68, - 0x03, 0x9a, 0x11, 0x91, 0xc1, 0x84, 0xc5, 0x4c, 0x99, 0xeb, 0xa9, 0xe1, 0x46, 0x44, 0xe4, 0xa7, - 0x7a, 0x8e, 0x3c, 0xa8, 0x4f, 0x49, 0x46, 0x93, 0xbc, 0x0f, 0x0d, 0x5a, 0xbf, 0xfe, 0xb4, 0xb5, - 0x66, 0x95, 0xf5, 0x47, 0xa3, 0x84, 0x4a, 0xb9, 0xaf, 0x12, 0xc6, 0x23, 0x9c, 0xc3, 0xd0, 0x36, - 0x2c, 0x46, 0x09, 0xe1, 0xca, 0x36, 0xa6, 0x79, 0x19, 0x05, 0xb0, 0xfb, 0x8b, 0x03, 0xcb, 0xfd, - 0x74, 0x96, 0xd7, 0xc0, 0x0e, 0x51, 0x44, 0xb3, 0x90, 0x1c, 0x6b, 0x2e, 0x69, 0x2e, 0x8b, 0x05, - 0xa2, 0x0f, 0xa1, 0xa1, 0x5d, 0x10, 0x8c, 0x44, 0x68, 0x4d, 0x76, 0xfd, 0x15, 0xe5, 0x7a, 0xba, - 0x7f, 0xe3, 0x45, 0x69, 0x9f, 0x99, 0xc2, 0x5c, 0xee, 0x7f, 0x34, 0x17, 0x5a, 0x01, 0x57, 0xb2, - 0xc8, 0x7c, 0xee, 0x12, 0xd6, 0xc3, 0xc1, 0x47, 0xcf, 0x8e, 0x3a, 0xce, 0xf3, 0xa3, 0x8e, 0xf3, - 0xe2, 0xa8, 0xe3, 0x3c, 0x39, 0xee, 0x54, 0x9e, 0x1f, 0x77, 0x2a, 0xbf, 0x1d, 0x77, 0x2a, 0x0f, - 0x6f, 0x5c, 0x7c, 0x67, 0xbe, 0x9a, 0x0d, 0x17, 0x4c, 0x9d, 0xdf, 0xfe, 0x2b, 0x00, 0x00, 0xff, - 0xff, 0x10, 0xe4, 0xe6, 0x17, 0x0d, 0x09, 0x00, 0x00, + // 1059 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xf6, 0x7a, 0x6d, 0xc7, 0x7e, 0x4d, 0xda, 0x64, 0x14, 0x21, 0xc7, 0x51, 0xdd, 0xe0, 0xaa, + 0x60, 0x55, 0x64, 0xb7, 0x4d, 0x0f, 0x94, 0x0a, 0x01, 0x76, 0x43, 0x94, 0xaa, 0x14, 0xa4, 0x4d, + 0x4e, 0xbd, 0xac, 0xc6, 0xeb, 0xc9, 0x7a, 0x54, 0xef, 0xcc, 0xb2, 0x33, 0x0b, 0xde, 0x23, 0x3f, + 0x00, 0xa9, 0x42, 0x42, 0x48, 0x9c, 0x39, 0x20, 0x4e, 0x3d, 0x20, 0x7e, 0x43, 0x4f, 0xa8, 0xe2, + 0xc4, 0x09, 0xaa, 0xe4, 0xd0, 0x3b, 0x7f, 0x00, 0x34, 0xb3, 0xb3, 0x9b, 0xb4, 0xa4, 0x4e, 0x11, + 0x48, 0x5c, 0xec, 0x99, 0xb7, 0xdf, 0x7b, 0xf3, 0xbd, 0x37, 0xdf, 0xbc, 0x07, 0x9d, 0x80, 0x8b, + 0x88, 0x0b, 0x57, 0xce, 0xdc, 0xcf, 0xae, 0x8f, 0x88, 0xc4, 0xd7, 0x5d, 0x39, 0x73, 0xe2, 0x84, + 0x4b, 0x8e, 0x56, 0xf2, 0x6f, 0x8e, 0x9c, 0x39, 0xe6, 0x5b, 0x67, 0x05, 0x47, 0x94, 0x71, 0x57, + 0xff, 0xe6, 0xa8, 0xce, 0x6a, 0xc8, 0x43, 0xae, 0x97, 0xae, 0x5a, 0x19, 0xeb, 0xa6, 0x89, 0x1b, + 0x24, 0x59, 0x2c, 0xb9, 0x1b, 0xa5, 0x53, 0x49, 0x05, 0x0d, 0xcb, 0x43, 0x0a, 0x83, 0x81, 0x77, + 0x0d, 0x7c, 0x84, 0x05, 0x29, 0x31, 0x01, 0xa7, 0xcc, 0x7c, 0x7f, 0xf3, 0x98, 0xa6, 0xa0, 0x21, + 0xa3, 0xec, 0x38, 0x92, 0xd9, 0x1b, 0xe0, 0x5a, 0xc8, 0x79, 0x38, 0x25, 0xae, 0xde, 0x8d, 0xd2, + 0x03, 0x17, 0xb3, 0xac, 0xf8, 0x94, 0xc7, 0xf0, 0x73, 0xae, 0x26, 0x37, 0xbd, 0xe9, 0x7d, 0x69, + 0x41, 0x75, 0x7f, 0x86, 0x36, 0xa1, 0x36, 0xe2, 0xe3, 0xac, 0x6d, 0x6d, 0x58, 0xfd, 0x73, 0x5b, + 0x6b, 0xce, 0xdf, 0xf2, 0x77, 0xf6, 0x67, 0x43, 0x3e, 0xce, 0x3c, 0x0d, 0x43, 0x37, 0xa1, 0x85, + 0x53, 0x39, 0xf1, 0x29, 0x3b, 0xe0, 0xed, 0xaa, 0xf6, 0x59, 0x3f, 0xc5, 0x67, 0x90, 0xca, 0xc9, + 0x1d, 0x76, 0xc0, 0xbd, 0x26, 0x36, 0x2b, 0xd4, 0x05, 0x50, 0xb4, 0xb1, 0x4c, 0x13, 0x22, 0xda, + 0xf6, 0x86, 0xdd, 0x5f, 0xf4, 0x4e, 0x58, 0x7a, 0x0c, 0xea, 0xfb, 0x33, 0x0f, 0x7f, 0x8e, 0x2e, + 0x02, 0xa8, 0xa3, 0xfc, 0x51, 0x26, 0x89, 0xd0, 0xbc, 0x16, 0xbd, 0x96, 0xb2, 0x0c, 0x95, 0x01, + 0xbd, 0x01, 0x17, 0x4a, 0x06, 0x06, 0x53, 0xd5, 0x98, 0xa5, 0xe2, 0xa8, 0x1c, 0x77, 0xd6, 0x79, + 0x5f, 0x59, 0xb0, 0xb0, 0x47, 0x43, 0xb6, 0xcd, 0x83, 0xff, 0xea, 0xc8, 0x35, 0x68, 0x06, 0x13, + 0x4c, 0x99, 0x4f, 0xc7, 0x6d, 0x7b, 0xc3, 0xea, 0xb7, 0xbc, 0x05, 0xbd, 0xbf, 0x33, 0x46, 0x57, + 0xe0, 0x3c, 0x0e, 0x02, 0x9e, 0x32, 0xe9, 0xb3, 0x34, 0x1a, 0x91, 0xa4, 0x5d, 0xdb, 0xb0, 0xfa, + 0x35, 0x6f, 0xc9, 0x58, 0x3f, 0xd6, 0xc6, 0xde, 0x1f, 0x16, 0x2c, 0x1b, 0x52, 0xdb, 0x34, 0x21, + 0x81, 0x1c, 0xa4, 0xb3, 0xb3, 0xd8, 0xdd, 0x00, 0x88, 0xd3, 0xd1, 0x94, 0x06, 0xfe, 0x03, 0x92, + 0x99, 0x3b, 0x59, 0x75, 0x72, 0x4d, 0x38, 0x85, 0x26, 0x9c, 0x01, 0xcb, 0xbc, 0x56, 0x8e, 0xbb, + 0x4b, 0xb2, 0x7f, 0x4f, 0x15, 0x75, 0xa0, 0x29, 0xc8, 0xa7, 0x29, 0x61, 0x01, 0x69, 0xd7, 0x35, + 0xa0, 0xdc, 0xa3, 0xb7, 0xc0, 0x96, 0x34, 0x6e, 0x37, 0x34, 0x97, 0xd7, 0x4e, 0xd3, 0x14, 0x8d, + 0x87, 0xd5, 0xb6, 0xe5, 0x29, 0x58, 0xef, 0xeb, 0x2a, 0x34, 0x72, 0x91, 0xa1, 0x6b, 0xd0, 0x8c, + 0x88, 0x10, 0x38, 0xd4, 0x89, 0xda, 0x2f, 0xcd, 0xa4, 0x44, 0x21, 0x04, 0xb5, 0x88, 0x44, 0xb9, + 0x16, 0x5b, 0x9e, 0x5e, 0xab, 0x0c, 0x24, 0x8d, 0x08, 0x4f, 0xa5, 0x3f, 0x21, 0x34, 0x9c, 0x48, + 0x9d, 0x62, 0xcd, 0x5b, 0x32, 0xd6, 0x5d, 0x6d, 0x44, 0x43, 0x58, 0x21, 0x33, 0x49, 0x98, 0xa0, + 0x9c, 0xf9, 0x3c, 0x96, 0x94, 0x33, 0xd1, 0xfe, 0x73, 0x61, 0xce, 0xb1, 0xcb, 0x25, 0xfe, 0x93, + 0x1c, 0x8e, 0xee, 0x43, 0x97, 0x71, 0xe6, 0x07, 0x09, 0x95, 0x34, 0xc0, 0x53, 0xff, 0x94, 0x80, + 0x17, 0xe6, 0x04, 0x5c, 0x67, 0x9c, 0xdd, 0x36, 0xbe, 0x1f, 0xbe, 0x10, 0xbb, 0xf7, 0x9d, 0x05, + 0xcd, 0xe2, 0x21, 0xa1, 0x0f, 0x60, 0x51, 0x89, 0x97, 0x24, 0x5a, 0x85, 0x45, 0x75, 0x2e, 0x9e, + 0x52, 0xdb, 0x3d, 0x0d, 0xd3, 0xaf, 0xef, 0x9c, 0x28, 0xd7, 0x02, 0xf5, 0xc1, 0x3e, 0x20, 0xc4, + 0x08, 0xe4, 0xb4, 0x4b, 0xd9, 0x21, 0xc4, 0x53, 0x90, 0xe2, 0xfa, 0xec, 0x57, 0xbb, 0xbe, 0x6f, + 0x2c, 0x80, 0xe3, 0x33, 0x5f, 0x90, 0xa3, 0xf5, 0x6a, 0x72, 0xbc, 0x09, 0xad, 0x88, 0x8f, 0xc9, + 0x59, 0x6d, 0xe5, 0x1e, 0x1f, 0x93, 0xbc, 0xad, 0x44, 0x66, 0xf5, 0x9c, 0x0c, 0xed, 0xe7, 0x65, + 0xd8, 0x7b, 0x5a, 0x85, 0x66, 0xe1, 0x82, 0xde, 0x85, 0x86, 0xa0, 0x2c, 0x9c, 0x12, 0xc3, 0xa9, + 0x37, 0x27, 0xbe, 0xb3, 0xa7, 0x91, 0xbb, 0x15, 0xcf, 0xf8, 0xa0, 0x77, 0xa0, 0xae, 0xdb, 0xb7, + 0x21, 0xf7, 0xfa, 0x3c, 0xe7, 0x7b, 0x0a, 0xb8, 0x5b, 0xf1, 0x72, 0x8f, 0xce, 0x00, 0x1a, 0x79, + 0x38, 0xf4, 0x36, 0xd4, 0x14, 0x6f, 0x4d, 0xe0, 0xfc, 0xd6, 0xe5, 0x13, 0x31, 0x8a, 0x86, 0x7e, + 0xf2, 0x0e, 0x55, 0x3c, 0x4f, 0x3b, 0x74, 0x1e, 0x5a, 0x50, 0xd7, 0x51, 0xd1, 0x5d, 0x68, 0x8e, + 0xa8, 0xc4, 0x49, 0x82, 0x8b, 0xda, 0xba, 0x45, 0x98, 0x7c, 0xec, 0x38, 0xe5, 0x94, 0x29, 0x62, + 0xdd, 0xe6, 0x51, 0x8c, 0x03, 0x39, 0xa4, 0x72, 0xa0, 0xdc, 0xbc, 0x32, 0x00, 0xba, 0x05, 0x50, + 0x56, 0x5d, 0xb5, 0x34, 0xfb, 0xac, 0xb2, 0xb7, 0x8a, 0xb2, 0x8b, 0x61, 0x1d, 0x6c, 0x91, 0x46, + 0xbd, 0x2f, 0xaa, 0x60, 0xef, 0x10, 0x82, 0x32, 0x68, 0xe0, 0x48, 0x75, 0x07, 0x23, 0xcc, 0x72, + 0x90, 0xa8, 0xe9, 0x76, 0x82, 0x0a, 0x65, 0xc3, 0x9d, 0xc7, 0xbf, 0x5d, 0xaa, 0xfc, 0xf0, 0xfb, + 0xa5, 0x7e, 0x48, 0xe5, 0x24, 0x1d, 0x39, 0x01, 0x8f, 0xdc, 0x62, 0x72, 0xea, 0xbf, 0x4d, 0x31, + 0x7e, 0xe0, 0xca, 0x2c, 0x26, 0x42, 0x3b, 0x88, 0x6f, 0x9f, 0x3d, 0xba, 0xba, 0x38, 0x25, 0x21, + 0x0e, 0x32, 0x5f, 0xcd, 0x47, 0xf1, 0xfd, 0xb3, 0x47, 0x57, 0x2d, 0xcf, 0x1c, 0x88, 0xd6, 0xa1, + 0x15, 0x62, 0xe1, 0x4f, 0x69, 0x44, 0xa5, 0xbe, 0x9e, 0x9a, 0xd7, 0x0c, 0xb1, 0xf8, 0x48, 0xed, + 0x91, 0x03, 0xf5, 0x18, 0x67, 0x24, 0xc9, 0x9b, 0xdc, 0xb0, 0xfd, 0xcb, 0x8f, 0x9b, 0xab, 0x86, + 0xd9, 0x60, 0x3c, 0x4e, 0x88, 0x10, 0x7b, 0x32, 0xa1, 0x2c, 0xf4, 0x72, 0x18, 0xda, 0x82, 0x85, + 0x30, 0xc1, 0x4c, 0x9a, 0xae, 0x37, 0xcf, 0xa3, 0x00, 0xf6, 0x7e, 0xb2, 0xc0, 0xde, 0xa7, 0xf1, + 0xff, 0x59, 0x83, 0x6b, 0xd0, 0x90, 0x34, 0x8e, 0x49, 0x92, 0xf7, 0xc1, 0x39, 0xac, 0x0d, 0xee, + 0x56, 0xb5, 0x6d, 0xf5, 0x7e, 0xb6, 0x60, 0x69, 0x90, 0xce, 0xf2, 0xc7, 0xbb, 0x8d, 0x25, 0x56, + 0xe9, 0xe3, 0x1c, 0xae, 0xd5, 0x35, 0x37, 0x7d, 0x03, 0x44, 0xef, 0x41, 0x53, 0xc9, 0xd7, 0x1f, + 0xf3, 0xc0, 0xbc, 0x8e, 0xcb, 0x2f, 0xe9, 0x4a, 0x27, 0xa7, 0x9a, 0xb7, 0x20, 0xcc, 0xf0, 0x2d, + 0x5e, 0x85, 0xfd, 0x0f, 0x5f, 0x05, 0x5a, 0x06, 0x5b, 0xd0, 0x50, 0xdf, 0xd3, 0xa2, 0xa7, 0x96, + 0xc3, 0xf7, 0x1f, 0x1f, 0x76, 0xad, 0x27, 0x87, 0x5d, 0xeb, 0xe9, 0x61, 0xd7, 0x7a, 0x78, 0xd4, + 0xad, 0x3c, 0x39, 0xea, 0x56, 0x7e, 0x3d, 0xea, 0x56, 0xee, 0x5f, 0x39, 0xbb, 0xd0, 0xae, 0x9c, + 0x8d, 0x1a, 0xba, 0x41, 0xdd, 0xf8, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x24, 0x52, 0x64, 0xe6, 0x23, + 0x0a, 0x00, 0x00, } func (m *Tx) Marshal() (dAtA []byte, err error) { @@ -1172,6 +1261,18 @@ func (m *SignDocDirectAux) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Tip != nil { + { + size, err := m.Tip.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } if m.Sequence != 0 { i = encodeVarintTx(dAtA, i, uint64(m.Sequence)) i-- @@ -1312,6 +1413,18 @@ func (m *AuthInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Tip != nil { + { + size, err := m.Tip.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } if m.Fee != nil { { size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i]) @@ -1600,6 +1713,50 @@ func (m *Fee) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *Tip) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Tip) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Tip) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tipper) > 0 { + i -= len(m.Tipper) + copy(dAtA[i:], m.Tipper) + i = encodeVarintTx(dAtA, i, uint64(len(m.Tipper))) + i-- + dAtA[i] = 0x12 + } + if len(m.Amount) > 0 { + for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *AuxSignerData) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1759,6 +1916,10 @@ func (m *SignDocDirectAux) Size() (n int) { if m.Sequence != 0 { n += 1 + sovTx(uint64(m.Sequence)) } + if m.Tip != nil { + l = m.Tip.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -1812,6 +1973,10 @@ func (m *AuthInfo) Size() (n int) { l = m.Fee.Size() n += 1 + l + sovTx(uint64(l)) } + if m.Tip != nil { + l = m.Tip.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -1928,6 +2093,25 @@ func (m *Fee) Size() (n int) { return n } +func (m *Tip) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Amount) > 0 { + for _, e := range m.Amount { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = len(m.Tipper) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + func (m *AuxSignerData) Size() (n int) { if m == nil { return 0 @@ -2600,6 +2784,42 @@ func (m *SignDocDirectAux) Unmarshal(dAtA []byte) error { break } } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tip == nil { + m.Tip = &Tip{} + } + if err := m.Tip.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2923,6 +3143,42 @@ func (m *AuthInfo) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tip", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tip == nil { + m.Tip = &Tip{} + } + if err := m.Tip.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3561,6 +3817,122 @@ func (m *Fee) Unmarshal(dAtA []byte) error { } return nil } +func (m *Tip) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Tip: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Tip: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Amount = append(m.Amount, types2.Coin{}) + if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tipper", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tipper = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AuxSignerData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0