docs: EventAttribute#Index is not deterministic (#5132)

Closes #5125
This commit is contained in:
Anton Kaliaev
2020-07-19 13:36:01 +04:00
committed by GitHub
parent 5223cbac27
commit 8cdb53c811
3 changed files with 427 additions and 413 deletions

View File

@@ -2596,7 +2596,62 @@ func (m *LastCommitInfo) GetVotes() []VoteInfo {
return nil
}
// EventAttribute represents an event to the indexing service.
// Event allows application developers to attach additional information to
// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.
// Later, transactions may be queried using these events.
type Event struct {
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
Attributes []EventAttribute `protobuf:"bytes,2,rep,name=attributes,proto3" json:"attributes,omitempty"`
}
func (m *Event) Reset() { *m = Event{} }
func (m *Event) String() string { return proto.CompactTextString(m) }
func (*Event) ProtoMessage() {}
func (*Event) Descriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{36}
}
func (m *Event) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_Event.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 *Event) XXX_Merge(src proto.Message) {
xxx_messageInfo_Event.Merge(m, src)
}
func (m *Event) XXX_Size() int {
return m.Size()
}
func (m *Event) XXX_DiscardUnknown() {
xxx_messageInfo_Event.DiscardUnknown(m)
}
var xxx_messageInfo_Event proto.InternalMessageInfo
func (m *Event) GetType() string {
if m != nil {
return m.Type
}
return ""
}
func (m *Event) GetAttributes() []EventAttribute {
if m != nil {
return m.Attributes
}
return nil
}
// EventAttribute is a single key-value pair, associated with an event.
type EventAttribute struct {
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
@@ -2607,7 +2662,7 @@ func (m *EventAttribute) Reset() { *m = EventAttribute{} }
func (m *EventAttribute) String() string { return proto.CompactTextString(m) }
func (*EventAttribute) ProtoMessage() {}
func (*EventAttribute) Descriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{36}
return fileDescriptor_252557cfdd89a31a, []int{37}
}
func (m *EventAttribute) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2657,58 +2712,6 @@ func (m *EventAttribute) GetIndex() bool {
return false
}
type Event struct {
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
Attributes []EventAttribute `protobuf:"bytes,2,rep,name=attributes,proto3" json:"attributes,omitempty"`
}
func (m *Event) Reset() { *m = Event{} }
func (m *Event) String() string { return proto.CompactTextString(m) }
func (*Event) ProtoMessage() {}
func (*Event) Descriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{37}
}
func (m *Event) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_Event.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 *Event) XXX_Merge(src proto.Message) {
xxx_messageInfo_Event.Merge(m, src)
}
func (m *Event) XXX_Size() int {
return m.Size()
}
func (m *Event) XXX_DiscardUnknown() {
xxx_messageInfo_Event.DiscardUnknown(m)
}
var xxx_messageInfo_Event proto.InternalMessageInfo
func (m *Event) GetType() string {
if m != nil {
return m.Type
}
return ""
}
func (m *Event) GetAttributes() []EventAttribute {
if m != nil {
return m.Attributes
}
return nil
}
// TxResult contains results of executing the transaction.
//
// One usage is indexing transaction results.
@@ -3135,8 +3138,8 @@ func init() {
proto.RegisterType((*ConsensusParams)(nil), "tendermint.abci.ConsensusParams")
proto.RegisterType((*BlockParams)(nil), "tendermint.abci.BlockParams")
proto.RegisterType((*LastCommitInfo)(nil), "tendermint.abci.LastCommitInfo")
proto.RegisterType((*EventAttribute)(nil), "tendermint.abci.EventAttribute")
proto.RegisterType((*Event)(nil), "tendermint.abci.Event")
proto.RegisterType((*EventAttribute)(nil), "tendermint.abci.EventAttribute")
proto.RegisterType((*TxResult)(nil), "tendermint.abci.TxResult")
proto.RegisterType((*Validator)(nil), "tendermint.abci.Validator")
proto.RegisterType((*ValidatorUpdate)(nil), "tendermint.abci.ValidatorUpdate")
@@ -3148,174 +3151,174 @@ func init() {
func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) }
var fileDescriptor_252557cfdd89a31a = []byte{
// 2672 bytes of a gzipped FileDescriptorProto
// 2667 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x3b, 0x77, 0x1b, 0xc7,
0x15, 0xc6, 0x1b, 0xd8, 0x4b, 0xe2, 0xc1, 0x11, 0x2d, 0xc3, 0x90, 0x44, 0xca, 0xab, 0x63, 0xc7,
0x92, 0x6d, 0x32, 0xa1, 0x8e, 0x14, 0x29, 0x76, 0x62, 0x13, 0x30, 0x14, 0xd0, 0x92, 0x49, 0x66,
0x49, 0x49, 0x79, 0x59, 0xeb, 0x01, 0x76, 0x08, 0xac, 0x05, 0xec, 0xae, 0xb1, 0x03, 0x8a, 0x74,
0x97, 0x38, 0x95, 0xd2, 0x38, 0x5d, 0x1a, 0x77, 0x29, 0xf2, 0x13, 0x52, 0xa5, 0x76, 0xe9, 0x32,
0x95, 0x92, 0x23, 0x9d, 0x34, 0xf9, 0x03, 0x29, 0x93, 0x33, 0x8f, 0x7d, 0x01, 0x58, 0x00, 0xb4,
0xd3, 0xa5, 0x9b, 0xc7, 0xbd, 0x77, 0xe7, 0xce, 0xcc, 0xfd, 0xe6, 0x9b, 0x3b, 0x0b, 0x17, 0x28,
0xb1, 0x0c, 0x32, 0x1c, 0x98, 0x16, 0xdd, 0xc4, 0xed, 0x8e, 0xb9, 0x49, 0x4f, 0x1d, 0xe2, 0x6e,
0x38, 0x43, 0x9b, 0xda, 0xa8, 0x1c, 0x74, 0x6e, 0xb0, 0xce, 0xda, 0xa5, 0x90, 0x74, 0x67, 0x78,
0xea, 0x50, 0x7b, 0xd3, 0x19, 0xda, 0xf6, 0x91, 0x90, 0xaf, 0x5d, 0x0c, 0x75, 0x73, 0x3b, 0x61,
0x6b, 0x91, 0x5e, 0xa9, 0xfc, 0x98, 0x9c, 0x7a, 0xbd, 0x97, 0x26, 0x74, 0x1d, 0x3c, 0xc4, 0x03,
0xaf, 0x7b, 0xbd, 0x6b, 0xdb, 0xdd, 0x3e, 0xd9, 0xe4, 0xb5, 0xf6, 0xe8, 0x68, 0x93, 0x9a, 0x03,
0xe2, 0x52, 0x3c, 0x70, 0xa4, 0xc0, 0x6a, 0xd7, 0xee, 0xda, 0xbc, 0xb8, 0xc9, 0x4a, 0xa2, 0x55,
0xfd, 0x43, 0x01, 0xf2, 0x1a, 0xf9, 0x6c, 0x44, 0x5c, 0x8a, 0xb6, 0x20, 0x43, 0x3a, 0x3d, 0xbb,
0x9a, 0xbc, 0x9c, 0x7c, 0x63, 0x69, 0xeb, 0xe2, 0xc6, 0x98, 0x73, 0x1b, 0x52, 0xae, 0xd9, 0xe9,
0xd9, 0xad, 0x84, 0xc6, 0x65, 0xd1, 0x0d, 0xc8, 0x1e, 0xf5, 0x47, 0x6e, 0xaf, 0x9a, 0xe2, 0x4a,
0x97, 0xe2, 0x94, 0xee, 0x30, 0xa1, 0x56, 0x42, 0x13, 0xd2, 0xec, 0x53, 0xa6, 0x75, 0x64, 0x57,
0xd3, 0xb3, 0x3f, 0xb5, 0x63, 0x1d, 0xf1, 0x4f, 0x31, 0x59, 0x54, 0x07, 0x70, 0x09, 0xd5, 0x6d,
0x87, 0x9a, 0xb6, 0x55, 0xcd, 0x70, 0xcd, 0x57, 0xe3, 0x34, 0x0f, 0x08, 0xdd, 0xe3, 0x82, 0xad,
0x84, 0xa6, 0xb8, 0x5e, 0x85, 0xd9, 0x30, 0x2d, 0x93, 0xea, 0x9d, 0x1e, 0x36, 0xad, 0x6a, 0x76,
0xb6, 0x8d, 0x1d, 0xcb, 0xa4, 0x0d, 0x26, 0xc8, 0x6c, 0x98, 0x5e, 0x85, 0xb9, 0xfc, 0xd9, 0x88,
0x0c, 0x4f, 0xab, 0xb9, 0xd9, 0x2e, 0xff, 0x8c, 0x09, 0x31, 0x97, 0xb9, 0x34, 0x6a, 0xc2, 0x52,
0x9b, 0x74, 0x4d, 0x4b, 0x6f, 0xf7, 0xed, 0xce, 0xe3, 0x6a, 0x9e, 0x2b, 0xab, 0x71, 0xca, 0x75,
0x26, 0x5a, 0x67, 0x92, 0xad, 0x84, 0x06, 0x6d, 0xbf, 0x86, 0xde, 0x85, 0x42, 0xa7, 0x47, 0x3a,
0x8f, 0x75, 0x7a, 0x52, 0x2d, 0x70, 0x1b, 0xeb, 0x71, 0x36, 0x1a, 0x4c, 0xee, 0xf0, 0xa4, 0x95,
0xd0, 0xf2, 0x1d, 0x51, 0x64, 0xfe, 0x1b, 0xa4, 0x6f, 0x1e, 0x93, 0x21, 0xd3, 0x57, 0x66, 0xfb,
0xff, 0x81, 0x90, 0xe4, 0x16, 0x14, 0xc3, 0xab, 0xa0, 0xf7, 0x40, 0x21, 0x96, 0x21, 0xdd, 0x00,
0x6e, 0xe2, 0x72, 0xec, 0x5e, 0xb1, 0x0c, 0xcf, 0x89, 0x02, 0x91, 0x65, 0x74, 0x0b, 0x72, 0x1d,
0x7b, 0x30, 0x30, 0x69, 0x75, 0x89, 0x6b, 0xaf, 0xc5, 0x3a, 0xc0, 0xa5, 0x5a, 0x09, 0x4d, 0xca,
0xa3, 0x5d, 0x28, 0xf5, 0x4d, 0x97, 0xea, 0xae, 0x85, 0x1d, 0xb7, 0x67, 0x53, 0xb7, 0xba, 0xcc,
0x2d, 0xbc, 0x16, 0x67, 0xe1, 0x9e, 0xe9, 0xd2, 0x03, 0x4f, 0xb8, 0x95, 0xd0, 0x8a, 0xfd, 0x70,
0x03, 0xb3, 0x67, 0x1f, 0x1d, 0x91, 0xa1, 0x6f, 0xb0, 0x5a, 0x9c, 0x6d, 0x6f, 0x8f, 0x49, 0x7b,
0xfa, 0xcc, 0x9e, 0x1d, 0x6e, 0x40, 0xbf, 0x82, 0x73, 0x7d, 0x1b, 0x1b, 0xbe, 0x39, 0xbd, 0xd3,
0x1b, 0x59, 0x8f, 0xab, 0x25, 0x6e, 0xf4, 0x6a, 0xec, 0x20, 0x6d, 0x6c, 0x78, 0x26, 0x1a, 0x4c,
0xa1, 0x95, 0xd0, 0x56, 0xfa, 0xe3, 0x8d, 0xe8, 0x11, 0xac, 0x62, 0xc7, 0xe9, 0x9f, 0x8e, 0x5b,
0x2f, 0x73, 0xeb, 0xd7, 0xe2, 0xac, 0x6f, 0x33, 0x9d, 0x71, 0xf3, 0x08, 0x4f, 0xb4, 0xd6, 0xf3,
0x90, 0x3d, 0xc6, 0xfd, 0x11, 0x51, 0xbf, 0x07, 0x4b, 0xa1, 0x50, 0x47, 0x55, 0xc8, 0x0f, 0x88,
0xeb, 0xe2, 0x2e, 0xe1, 0xc8, 0xa0, 0x68, 0x5e, 0x55, 0x2d, 0xc1, 0x72, 0x38, 0xbc, 0xd5, 0x81,
0xaf, 0xc8, 0x02, 0x97, 0x29, 0x1e, 0x93, 0xa1, 0xcb, 0xa2, 0x55, 0x2a, 0xca, 0x2a, 0xba, 0x02,
0x45, 0xbe, 0x7d, 0x74, 0xaf, 0x9f, 0xa1, 0x47, 0x46, 0x5b, 0xe6, 0x8d, 0x0f, 0xa4, 0xd0, 0x3a,
0x2c, 0x39, 0x5b, 0x8e, 0x2f, 0x92, 0xe6, 0x22, 0xe0, 0x6c, 0x39, 0x52, 0x40, 0xfd, 0x11, 0x54,
0xc6, 0xa3, 0x1d, 0x55, 0x20, 0xfd, 0x98, 0x9c, 0xca, 0xef, 0xb1, 0x22, 0x5a, 0x95, 0x6e, 0xf1,
0x6f, 0x28, 0x9a, 0xf4, 0xf1, 0x4f, 0x29, 0x5f, 0xd9, 0x0f, 0x73, 0x74, 0x0b, 0x32, 0x0c, 0x35,
0x25, 0x00, 0xd6, 0x36, 0x04, 0xa4, 0x6e, 0x78, 0x90, 0xba, 0x71, 0xe8, 0x41, 0x6a, 0xbd, 0xf0,
0xf5, 0xb3, 0xf5, 0xc4, 0x97, 0x7f, 0x5f, 0x4f, 0x6a, 0x5c, 0x03, 0xbd, 0xc2, 0xa2, 0x12, 0x9b,
0x96, 0x6e, 0x1a, 0xf2, 0x3b, 0x79, 0x5e, 0xdf, 0x31, 0xd0, 0x5d, 0xa8, 0x74, 0x6c, 0xcb, 0x25,
0x96, 0x3b, 0x72, 0x75, 0x01, 0xd9, 0x12, 0xf6, 0x26, 0xa3, 0xa6, 0xe1, 0x09, 0xee, 0x73, 0x39,
0xad, 0xdc, 0x89, 0x36, 0xa0, 0x3b, 0x00, 0xc7, 0xb8, 0x6f, 0x1a, 0x98, 0xda, 0x43, 0xb7, 0x9a,
0xb9, 0x9c, 0x9e, 0x6a, 0xe6, 0x81, 0x27, 0x72, 0xdf, 0x31, 0x30, 0x25, 0xf5, 0x0c, 0x1b, 0xad,
0x16, 0xd2, 0x44, 0xaf, 0x43, 0x19, 0x3b, 0x8e, 0xee, 0x52, 0x4c, 0x89, 0xde, 0x3e, 0xa5, 0xc4,
0xe5, 0x60, 0xb8, 0xac, 0x15, 0xb1, 0xe3, 0x1c, 0xb0, 0xd6, 0x3a, 0x6b, 0x54, 0x0d, 0x7f, 0x85,
0x39, 0x9a, 0x21, 0x04, 0x19, 0x03, 0x53, 0xcc, 0x67, 0x68, 0x59, 0xe3, 0x65, 0xd6, 0xe6, 0x60,
0xda, 0x93, 0x7e, 0xf3, 0x32, 0x3a, 0x0f, 0xb9, 0x1e, 0x31, 0xbb, 0x3d, 0xca, 0x5d, 0x4d, 0x6b,
0xb2, 0xc6, 0x16, 0xc3, 0x19, 0xda, 0xc7, 0x84, 0xc3, 0x77, 0x41, 0x13, 0x15, 0xf5, 0x77, 0x29,
0x58, 0x99, 0xc0, 0x3d, 0x66, 0xb7, 0x87, 0xdd, 0x9e, 0xf7, 0x2d, 0x56, 0x46, 0x37, 0x99, 0x5d,
0x6c, 0x90, 0xa1, 0x3c, 0x6f, 0xaa, 0x61, 0xdf, 0xc5, 0x59, 0xda, 0xe2, 0xfd, 0xd2, 0x67, 0x29,
0x8d, 0xf6, 0xa0, 0xd2, 0xc7, 0x2e, 0xd5, 0x05, 0x8e, 0xe8, 0xa1, 0xb3, 0x67, 0x12, 0x3d, 0xef,
0x61, 0x0f, 0x79, 0xd8, 0x2e, 0x96, 0x86, 0x4a, 0xfd, 0x48, 0x2b, 0xd2, 0x60, 0xb5, 0x7d, 0xfa,
0x39, 0xb6, 0xa8, 0x69, 0x11, 0x7d, 0x62, 0x49, 0x5e, 0x99, 0x30, 0xda, 0x3c, 0x36, 0x0d, 0x62,
0x75, 0xbc, 0xb5, 0x38, 0xe7, 0x2b, 0xfb, 0x6b, 0xe5, 0xaa, 0x1a, 0x94, 0xa2, 0xc8, 0x8d, 0x4a,
0x90, 0xa2, 0x27, 0x72, 0x02, 0x52, 0xf4, 0x04, 0x7d, 0x1f, 0x32, 0xcc, 0x49, 0xee, 0x7c, 0x69,
0xca, 0xb1, 0x29, 0xf5, 0x0e, 0x4f, 0x1d, 0xa2, 0x71, 0x49, 0x55, 0xf5, 0xb7, 0xb9, 0x8f, 0xe6,
0xe3, 0x56, 0xd5, 0xab, 0x50, 0x1e, 0x83, 0xeb, 0xd0, 0xfa, 0x25, 0xc3, 0xeb, 0xa7, 0x96, 0xa1,
0x18, 0xc1, 0x66, 0xf5, 0x3c, 0xac, 0x4e, 0x83, 0x5a, 0xb5, 0xe7, 0xb7, 0x47, 0x20, 0x13, 0xdd,
0x80, 0x82, 0x8f, 0xb5, 0x22, 0xcc, 0x26, 0xe7, 0xca, 0x13, 0xd6, 0x7c, 0x51, 0x16, 0x5f, 0x6c,
0xbf, 0xf2, 0xfd, 0x90, 0xe2, 0x03, 0xcf, 0x63, 0xc7, 0x69, 0x61, 0xb7, 0xa7, 0x7e, 0x02, 0xd5,
0x38, 0x1c, 0x1d, 0x73, 0x23, 0xe3, 0x6f, 0xc3, 0xf3, 0x90, 0x3b, 0xb2, 0x87, 0x03, 0x4c, 0xb9,
0xb1, 0xa2, 0x26, 0x6b, 0x6c, 0x7b, 0x0a, 0x4c, 0x4d, 0xf3, 0x66, 0x51, 0x51, 0x75, 0x78, 0x25,
0x16, 0x4b, 0x99, 0x8a, 0x69, 0x19, 0x44, 0xcc, 0x67, 0x51, 0x13, 0x95, 0xc0, 0x90, 0x18, 0xac,
0xa8, 0xb0, 0xcf, 0xba, 0xdc, 0x57, 0x6e, 0x5f, 0xd1, 0x64, 0x4d, 0xfd, 0x67, 0x01, 0x0a, 0x1a,
0x71, 0x1d, 0x16, 0xec, 0xa8, 0x0e, 0x0a, 0x39, 0xe9, 0x10, 0xc1, 0x72, 0x92, 0xb1, 0x2c, 0x41,
0x48, 0x37, 0x3d, 0x49, 0x76, 0x44, 0xfb, 0x6a, 0xe8, 0xba, 0x64, 0x72, 0xf1, 0xa4, 0x4c, 0xaa,
0x87, 0xa9, 0xdc, 0x4d, 0x8f, 0xca, 0xa5, 0x63, 0x4f, 0x65, 0xa1, 0x35, 0xc6, 0xe5, 0xae, 0x4b,
0x2e, 0x97, 0x99, 0xf3, 0xb1, 0x08, 0x99, 0x6b, 0x44, 0xc8, 0x5c, 0x76, 0x8e, 0x9b, 0x31, 0x6c,
0xae, 0x11, 0x61, 0x73, 0xb9, 0x39, 0x46, 0x62, 0xe8, 0xdc, 0x4d, 0x8f, 0xce, 0xe5, 0xe7, 0xb8,
0x3d, 0xc6, 0xe7, 0xee, 0x44, 0xf9, 0x9c, 0xe0, 0x62, 0x57, 0x62, 0xb5, 0x63, 0x09, 0xdd, 0x8f,
0x43, 0x84, 0x4e, 0x89, 0x65, 0x53, 0xc2, 0xc8, 0x14, 0x46, 0xd7, 0x88, 0x30, 0x3a, 0x98, 0x33,
0x07, 0x31, 0x94, 0xee, 0xfd, 0x30, 0xa5, 0x5b, 0x8a, 0x65, 0x85, 0x72, 0xd3, 0x4c, 0xe3, 0x74,
0xb7, 0x7d, 0x4e, 0xb7, 0x1c, 0x4b, 0x4a, 0xa5, 0x0f, 0xe3, 0xa4, 0x6e, 0x6f, 0x82, 0xd4, 0x09,
0x12, 0xf6, 0x7a, 0xac, 0x89, 0x39, 0xac, 0x6e, 0x6f, 0x82, 0xd5, 0x95, 0xe6, 0x18, 0x9c, 0x43,
0xeb, 0x7e, 0x3d, 0x9d, 0xd6, 0xc5, 0x13, 0x2f, 0x39, 0xcc, 0xc5, 0x78, 0x9d, 0x1e, 0xc3, 0xeb,
0x2a, 0xdc, 0xfc, 0x9b, 0xb1, 0xe6, 0xcf, 0x4e, 0xec, 0xae, 0xb2, 0x63, 0x76, 0x0c, 0x38, 0x18,
0x54, 0x91, 0xe1, 0xd0, 0x1e, 0x4a, 0xce, 0x24, 0x2a, 0xea, 0x1b, 0xec, 0xe0, 0x0f, 0x40, 0x62,
0x06, 0x09, 0xe4, 0x47, 0x42, 0x08, 0x18, 0xd4, 0xbf, 0x24, 0x03, 0x5d, 0x7e, 0x56, 0x86, 0x49,
0x83, 0x22, 0x49, 0x43, 0x88, 0x1b, 0xa6, 0xa2, 0xdc, 0x70, 0x1d, 0x96, 0x18, 0xd4, 0x8f, 0xd1,
0x3e, 0xec, 0x78, 0xb4, 0x0f, 0x5d, 0x83, 0x15, 0x7e, 0x96, 0x0b, 0x06, 0x29, 0xf1, 0x3d, 0xc3,
0x8f, 0xa9, 0x32, 0xeb, 0x10, 0x9b, 0x53, 0x00, 0xfd, 0xdb, 0x70, 0x2e, 0x24, 0xeb, 0x1f, 0x21,
0x82, 0xeb, 0x54, 0x7c, 0xe9, 0x6d, 0x79, 0x96, 0x7c, 0x14, 0x4c, 0x50, 0x40, 0x29, 0x11, 0x64,
0x3a, 0xb6, 0x41, 0x24, 0xc0, 0xf3, 0x32, 0xa3, 0x99, 0x7d, 0xbb, 0x2b, 0x61, 0x9c, 0x15, 0x99,
0x94, 0x8f, 0x82, 0x8a, 0x00, 0x39, 0xf5, 0xcf, 0xc9, 0xc0, 0x5e, 0xc0, 0x32, 0xa7, 0x11, 0xc2,
0xe4, 0xff, 0x86, 0x10, 0xa6, 0xbe, 0x2d, 0x21, 0x54, 0xff, 0x9d, 0x0c, 0x96, 0xd1, 0xa7, 0x7a,
0xdf, 0xce, 0xed, 0xe0, 0x48, 0xcc, 0xf2, 0x45, 0x91, 0x47, 0xa2, 0x64, 0xe6, 0x39, 0x3e, 0xf5,
0x51, 0x66, 0x9e, 0x17, 0x87, 0x24, 0xaf, 0xa0, 0x5b, 0xa0, 0xf0, 0x94, 0x89, 0x6e, 0x3b, 0xae,
0x44, 0xd5, 0x0b, 0x61, 0x87, 0x44, 0x66, 0x64, 0x63, 0x9f, 0xc9, 0xec, 0x39, 0xae, 0x56, 0x70,
0x64, 0x29, 0x74, 0xda, 0x2b, 0x11, 0xd2, 0x79, 0x11, 0x14, 0x36, 0x7a, 0xd7, 0xc1, 0x1d, 0xc2,
0x11, 0x52, 0xd1, 0x82, 0x06, 0xf5, 0x11, 0xa0, 0x49, 0x8c, 0x46, 0x2d, 0xc8, 0x91, 0x63, 0x62,
0x51, 0xb6, 0x34, 0x6c, 0x4e, 0xcf, 0x4f, 0x61, 0x74, 0xc4, 0xa2, 0xf5, 0x2a, 0x9b, 0xc9, 0x7f,
0x3d, 0x5b, 0xaf, 0x08, 0xe9, 0xb7, 0xec, 0x81, 0x49, 0xc9, 0xc0, 0xa1, 0xa7, 0x9a, 0xd4, 0x57,
0x7f, 0x93, 0x62, 0xf4, 0x2a, 0x82, 0xdf, 0x53, 0xe7, 0xd6, 0x8b, 0x92, 0x54, 0x88, 0x5a, 0x2f,
0x36, 0xdf, 0x97, 0x00, 0xba, 0xd8, 0xd5, 0x9f, 0x60, 0x8b, 0x12, 0x43, 0x4e, 0xba, 0xd2, 0xc5,
0xee, 0x43, 0xde, 0xc0, 0xb8, 0x13, 0xeb, 0x1e, 0xb9, 0xc4, 0xe0, 0xb3, 0x9f, 0xd6, 0xf2, 0x5d,
0xec, 0xde, 0x77, 0x89, 0x11, 0xf2, 0x32, 0xff, 0xdd, 0xbc, 0x8c, 0xce, 0x71, 0x61, 0x7c, 0x8e,
0xbf, 0x48, 0x05, 0x81, 0x10, 0xf0, 0xd0, 0xff, 0xb7, 0x59, 0xf8, 0x3d, 0xbf, 0x73, 0x46, 0x0f,
0x51, 0x74, 0x00, 0x2b, 0x7e, 0x18, 0xea, 0x23, 0x1e, 0x9e, 0xde, 0x9e, 0x5b, 0x34, 0x8e, 0x2b,
0xc7, 0xd1, 0x66, 0x17, 0xfd, 0x1c, 0x5e, 0x1e, 0x83, 0x18, 0xdf, 0x74, 0x6a, 0x41, 0xa4, 0x79,
0x29, 0x8a, 0x34, 0x9e, 0xe5, 0x60, 0xae, 0xd2, 0xdf, 0x31, 0x2e, 0x76, 0xd8, 0x6d, 0x27, 0x4c,
0x09, 0xa6, 0xae, 0xfd, 0x15, 0x28, 0x0e, 0x09, 0x65, 0x37, 0xeb, 0xc8, 0x7d, 0x72, 0x59, 0x34,
0x0a, 0x94, 0x57, 0xf7, 0xe1, 0xa5, 0xa9, 0xd4, 0x00, 0xfd, 0x10, 0x94, 0x80, 0x55, 0x24, 0x63,
0xae, 0x66, 0xfe, 0x75, 0x23, 0x90, 0x55, 0xff, 0x9a, 0x0c, 0x4c, 0x46, 0x2f, 0x30, 0x4d, 0xc8,
0x0d, 0x89, 0x3b, 0xea, 0x8b, 0x2b, 0x45, 0x69, 0xeb, 0xed, 0xc5, 0x48, 0x05, 0x6b, 0x1d, 0xf5,
0xa9, 0x26, 0x95, 0xd5, 0x47, 0x90, 0x13, 0x2d, 0x68, 0x09, 0xf2, 0xf7, 0x77, 0xef, 0xee, 0xee,
0x3d, 0xdc, 0xad, 0x24, 0x10, 0x40, 0x6e, 0xbb, 0xd1, 0x68, 0xee, 0x1f, 0x56, 0x92, 0x48, 0x81,
0xec, 0x76, 0x7d, 0x4f, 0x3b, 0xac, 0xa4, 0x58, 0xb3, 0xd6, 0xfc, 0xb0, 0xd9, 0x38, 0xac, 0xa4,
0xd1, 0x0a, 0x14, 0x45, 0x59, 0xbf, 0xb3, 0xa7, 0x7d, 0xb4, 0x7d, 0x58, 0xc9, 0x84, 0x9a, 0x0e,
0x9a, 0xbb, 0x1f, 0x34, 0xb5, 0x4a, 0x56, 0xfd, 0x01, 0xbb, 0xb3, 0xc4, 0xd0, 0x90, 0xe0, 0x76,
0x92, 0x0c, 0xdd, 0x4e, 0xd4, 0x3f, 0xa6, 0xa0, 0x16, 0xcf, 0x2d, 0xd0, 0x87, 0x63, 0x8e, 0x6f,
0xd3, 0xa5, 0x9b, 0xc7, 0xbd, 0x77, 0x71, 0x67, 0xe6, 0x7e, 0xf3, 0xdd, 0x3b, 0x80, 0x0b, 0x94,
0x58, 0x06, 0x19, 0x0e, 0x4c, 0x8b, 0x6e, 0xe2, 0x76, 0xc7, 0xdc, 0xa4, 0xa7, 0x0e, 0x71, 0x37,
0x9c, 0xa1, 0x4d, 0x6d, 0x54, 0x0e, 0x26, 0x37, 0xd8, 0x64, 0xed, 0x52, 0x48, 0xba, 0x33, 0x3c,
0x75, 0xa8, 0xbd, 0xe9, 0x0c, 0x6d, 0xfb, 0x48, 0xc8, 0xd7, 0x2e, 0x86, 0xa6, 0xb9, 0x9d, 0xb0,
0xb5, 0xc8, 0xac, 0x54, 0x7e, 0x4c, 0x4e, 0xbd, 0xd9, 0x4b, 0x13, 0xba, 0x0e, 0x1e, 0xe2, 0x81,
0x37, 0xbd, 0xde, 0xb5, 0xed, 0x6e, 0x9f, 0x6c, 0xf2, 0x5e, 0x7b, 0x74, 0xb4, 0x49, 0xcd, 0x01,
0x71, 0x29, 0x1e, 0x38, 0x52, 0x60, 0xb5, 0x6b, 0x77, 0x6d, 0xde, 0xdc, 0x64, 0x2d, 0x31, 0xaa,
0xfe, 0xa1, 0x00, 0x79, 0x8d, 0x7c, 0x36, 0x22, 0x2e, 0x45, 0x5b, 0x90, 0x21, 0x9d, 0x9e, 0x5d,
0x4d, 0x5e, 0x4e, 0xbe, 0xb1, 0xb4, 0x75, 0x71, 0x63, 0xcc, 0xb9, 0x0d, 0x29, 0xd7, 0xec, 0xf4,
0xec, 0x56, 0x42, 0xe3, 0xb2, 0xe8, 0x06, 0x64, 0x8f, 0xfa, 0x23, 0xb7, 0x57, 0x4d, 0x71, 0xa5,
0x4b, 0x71, 0x4a, 0x77, 0x98, 0x50, 0x2b, 0xa1, 0x09, 0x69, 0xf6, 0x29, 0xd3, 0x3a, 0xb2, 0xab,
0xe9, 0xd9, 0x9f, 0xda, 0xb1, 0x8e, 0xf8, 0xa7, 0x98, 0x2c, 0xaa, 0x03, 0xb8, 0x84, 0xea, 0xb6,
0x43, 0x4d, 0xdb, 0xaa, 0x66, 0xb8, 0xe6, 0xab, 0x71, 0x9a, 0x07, 0x84, 0xee, 0x71, 0xc1, 0x56,
0x42, 0x53, 0x5c, 0xaf, 0xc3, 0x6c, 0x98, 0x96, 0x49, 0xf5, 0x4e, 0x0f, 0x9b, 0x56, 0x35, 0x3b,
0xdb, 0xc6, 0x8e, 0x65, 0xd2, 0x06, 0x13, 0x64, 0x36, 0x4c, 0xaf, 0xc3, 0x5c, 0xfe, 0x6c, 0x44,
0x86, 0xa7, 0xd5, 0xdc, 0x6c, 0x97, 0x7f, 0xc6, 0x84, 0x98, 0xcb, 0x5c, 0x1a, 0x35, 0x61, 0xa9,
0x4d, 0xba, 0xa6, 0xa5, 0xb7, 0xfb, 0x76, 0xe7, 0x71, 0x35, 0xcf, 0x95, 0xd5, 0x38, 0xe5, 0x3a,
0x13, 0xad, 0x33, 0xc9, 0x56, 0x42, 0x83, 0xb6, 0xdf, 0x43, 0xef, 0x42, 0xa1, 0xd3, 0x23, 0x9d,
0xc7, 0x3a, 0x3d, 0xa9, 0x16, 0xb8, 0x8d, 0xf5, 0x38, 0x1b, 0x0d, 0x26, 0x77, 0x78, 0xd2, 0x4a,
0x68, 0xf9, 0x8e, 0x68, 0x32, 0xff, 0x0d, 0xd2, 0x37, 0x8f, 0xc9, 0x90, 0xe9, 0x2b, 0xb3, 0xfd,
0xff, 0x40, 0x48, 0x72, 0x0b, 0x8a, 0xe1, 0x75, 0xd0, 0x7b, 0xa0, 0x10, 0xcb, 0x90, 0x6e, 0x00,
0x37, 0x71, 0x39, 0xf6, 0xac, 0x58, 0x86, 0xe7, 0x44, 0x81, 0xc8, 0x36, 0xba, 0x05, 0xb9, 0x8e,
0x3d, 0x18, 0x98, 0xb4, 0xba, 0xc4, 0xb5, 0xd7, 0x62, 0x1d, 0xe0, 0x52, 0xad, 0x84, 0x26, 0xe5,
0xd1, 0x2e, 0x94, 0xfa, 0xa6, 0x4b, 0x75, 0xd7, 0xc2, 0x8e, 0xdb, 0xb3, 0xa9, 0x5b, 0x5d, 0xe6,
0x16, 0x5e, 0x8b, 0xb3, 0x70, 0xcf, 0x74, 0xe9, 0x81, 0x27, 0xdc, 0x4a, 0x68, 0xc5, 0x7e, 0x78,
0x80, 0xd9, 0xb3, 0x8f, 0x8e, 0xc8, 0xd0, 0x37, 0x58, 0x2d, 0xce, 0xb6, 0xb7, 0xc7, 0xa4, 0x3d,
0x7d, 0x66, 0xcf, 0x0e, 0x0f, 0xa0, 0x5f, 0xc1, 0xb9, 0xbe, 0x8d, 0x0d, 0xdf, 0x9c, 0xde, 0xe9,
0x8d, 0xac, 0xc7, 0xd5, 0x12, 0x37, 0x7a, 0x35, 0xf6, 0x47, 0xda, 0xd8, 0xf0, 0x4c, 0x34, 0x98,
0x42, 0x2b, 0xa1, 0xad, 0xf4, 0xc7, 0x07, 0xd1, 0x23, 0x58, 0xc5, 0x8e, 0xd3, 0x3f, 0x1d, 0xb7,
0x5e, 0xe6, 0xd6, 0xaf, 0xc5, 0x59, 0xdf, 0x66, 0x3a, 0xe3, 0xe6, 0x11, 0x9e, 0x18, 0xad, 0xe7,
0x21, 0x7b, 0x8c, 0xfb, 0x23, 0xa2, 0x7e, 0x0f, 0x96, 0x42, 0xa1, 0x8e, 0xaa, 0x90, 0x1f, 0x10,
0xd7, 0xc5, 0x5d, 0xc2, 0x91, 0x41, 0xd1, 0xbc, 0xae, 0x5a, 0x82, 0xe5, 0x70, 0x78, 0xab, 0x03,
0x5f, 0x91, 0x05, 0x2e, 0x53, 0x3c, 0x26, 0x43, 0x97, 0x45, 0xab, 0x54, 0x94, 0x5d, 0x74, 0x05,
0x8a, 0xfc, 0xf8, 0xe8, 0xde, 0x3c, 0x43, 0x8f, 0x8c, 0xb6, 0xcc, 0x07, 0x1f, 0x48, 0xa1, 0x75,
0x58, 0x72, 0xb6, 0x1c, 0x5f, 0x24, 0xcd, 0x45, 0xc0, 0xd9, 0x72, 0xa4, 0x80, 0xfa, 0x23, 0xa8,
0x8c, 0x47, 0x3b, 0xaa, 0x40, 0xfa, 0x31, 0x39, 0x95, 0xdf, 0x63, 0x4d, 0xb4, 0x2a, 0xdd, 0xe2,
0xdf, 0x50, 0x34, 0xe9, 0xe3, 0x9f, 0x52, 0xbe, 0xb2, 0x1f, 0xe6, 0xe8, 0x16, 0x64, 0x18, 0x6a,
0x4a, 0x00, 0xac, 0x6d, 0x08, 0x48, 0xdd, 0xf0, 0x20, 0x75, 0xe3, 0xd0, 0x83, 0xd4, 0x7a, 0xe1,
0xeb, 0x67, 0xeb, 0x89, 0x2f, 0xff, 0xbe, 0x9e, 0xd4, 0xb8, 0x06, 0x7a, 0x85, 0x45, 0x25, 0x36,
0x2d, 0xdd, 0x34, 0xe4, 0x77, 0xf2, 0xbc, 0xbf, 0x63, 0xa0, 0xbb, 0x50, 0xe9, 0xd8, 0x96, 0x4b,
0x2c, 0x77, 0xe4, 0xea, 0x02, 0xb2, 0x25, 0xec, 0x4d, 0x46, 0x4d, 0xc3, 0x13, 0xdc, 0xe7, 0x72,
0x5a, 0xb9, 0x13, 0x1d, 0x40, 0x77, 0x00, 0x8e, 0x71, 0xdf, 0x34, 0x30, 0xb5, 0x87, 0x6e, 0x35,
0x73, 0x39, 0x3d, 0xd5, 0xcc, 0x03, 0x4f, 0xe4, 0xbe, 0x63, 0x60, 0x4a, 0xea, 0x19, 0xf6, 0x6b,
0xb5, 0x90, 0x26, 0x7a, 0x1d, 0xca, 0xd8, 0x71, 0x74, 0x97, 0x62, 0x4a, 0xf4, 0xf6, 0x29, 0x25,
0x2e, 0x07, 0xc3, 0x65, 0xad, 0x88, 0x1d, 0xe7, 0x80, 0x8d, 0xd6, 0xd9, 0xa0, 0x6a, 0xf8, 0x3b,
0xcc, 0xd1, 0x0c, 0x21, 0xc8, 0x18, 0x98, 0x62, 0xbe, 0x42, 0xcb, 0x1a, 0x6f, 0xb3, 0x31, 0x07,
0xd3, 0x9e, 0xf4, 0x9b, 0xb7, 0xd1, 0x79, 0xc8, 0xf5, 0x88, 0xd9, 0xed, 0x51, 0xee, 0x6a, 0x5a,
0x93, 0x3d, 0xb6, 0x19, 0xce, 0xd0, 0x3e, 0x26, 0x1c, 0xbe, 0x0b, 0x9a, 0xe8, 0xa8, 0xbf, 0x4b,
0xc1, 0xca, 0x04, 0xee, 0x31, 0xbb, 0x3d, 0xec, 0xf6, 0xbc, 0x6f, 0xb1, 0x36, 0xba, 0xc9, 0xec,
0x62, 0x83, 0x0c, 0xe5, 0x7d, 0x53, 0x0d, 0xfb, 0x2e, 0xee, 0xd2, 0x16, 0x9f, 0x97, 0x3e, 0x4b,
0x69, 0xb4, 0x07, 0x95, 0x3e, 0x76, 0xa9, 0x2e, 0x70, 0x44, 0x0f, 0xdd, 0x3d, 0x93, 0xe8, 0x79,
0x0f, 0x7b, 0xc8, 0xc3, 0x4e, 0xb1, 0x34, 0x54, 0xea, 0x47, 0x46, 0x91, 0x06, 0xab, 0xed, 0xd3,
0xcf, 0xb1, 0x45, 0x4d, 0x8b, 0xe8, 0x13, 0x5b, 0xf2, 0xca, 0x84, 0xd1, 0xe6, 0xb1, 0x69, 0x10,
0xab, 0xe3, 0xed, 0xc5, 0x39, 0x5f, 0xd9, 0xdf, 0x2b, 0x57, 0xd5, 0xa0, 0x14, 0x45, 0x6e, 0x54,
0x82, 0x14, 0x3d, 0x91, 0x0b, 0x90, 0xa2, 0x27, 0xe8, 0xfb, 0x90, 0x61, 0x4e, 0x72, 0xe7, 0x4b,
0x53, 0xae, 0x4d, 0xa9, 0x77, 0x78, 0xea, 0x10, 0x8d, 0x4b, 0xaa, 0xaa, 0x7f, 0xcc, 0x7d, 0x34,
0x1f, 0xb7, 0xaa, 0x5e, 0x85, 0xf2, 0x18, 0x5c, 0x87, 0xf6, 0x2f, 0x19, 0xde, 0x3f, 0xb5, 0x0c,
0xc5, 0x08, 0x36, 0xab, 0xe7, 0x61, 0x75, 0x1a, 0xd4, 0xaa, 0x3d, 0x7f, 0x3c, 0x02, 0x99, 0xe8,
0x06, 0x14, 0x7c, 0xac, 0x15, 0x61, 0x36, 0xb9, 0x56, 0x9e, 0xb0, 0xe6, 0x8b, 0xb2, 0xf8, 0x62,
0xe7, 0x95, 0x9f, 0x87, 0x14, 0xff, 0xe1, 0x79, 0xec, 0x38, 0x2d, 0xec, 0xf6, 0xd4, 0x4f, 0xa0,
0x1a, 0x87, 0xa3, 0x63, 0x6e, 0x64, 0xfc, 0x63, 0x78, 0x1e, 0x72, 0x47, 0xf6, 0x70, 0x80, 0x29,
0x37, 0x56, 0xd4, 0x64, 0x8f, 0x1d, 0x4f, 0x81, 0xa9, 0x69, 0x3e, 0x2c, 0x3a, 0xaa, 0x0e, 0xaf,
0xc4, 0x62, 0x29, 0x53, 0x31, 0x2d, 0x83, 0x88, 0xf5, 0x2c, 0x6a, 0xa2, 0x13, 0x18, 0x12, 0x3f,
0x56, 0x74, 0xd8, 0x67, 0x5d, 0xee, 0x2b, 0xb7, 0xaf, 0x68, 0xb2, 0xa7, 0xfe, 0xb3, 0x00, 0x05,
0x8d, 0xb8, 0x0e, 0x0b, 0x76, 0x54, 0x07, 0x85, 0x9c, 0x74, 0x88, 0x60, 0x39, 0xc9, 0x58, 0x96,
0x20, 0xa4, 0x9b, 0x9e, 0x24, 0xbb, 0xa2, 0x7d, 0x35, 0x74, 0x5d, 0x32, 0xb9, 0x78, 0x52, 0x26,
0xd5, 0xc3, 0x54, 0xee, 0xa6, 0x47, 0xe5, 0xd2, 0xb1, 0xb7, 0xb2, 0xd0, 0x1a, 0xe3, 0x72, 0xd7,
0x25, 0x97, 0xcb, 0xcc, 0xf9, 0x58, 0x84, 0xcc, 0x35, 0x22, 0x64, 0x2e, 0x3b, 0xc7, 0xcd, 0x18,
0x36, 0xd7, 0x88, 0xb0, 0xb9, 0xdc, 0x1c, 0x23, 0x31, 0x74, 0xee, 0xa6, 0x47, 0xe7, 0xf2, 0x73,
0xdc, 0x1e, 0xe3, 0x73, 0x77, 0xa2, 0x7c, 0x4e, 0x70, 0xb1, 0x2b, 0xb1, 0xda, 0xb1, 0x84, 0xee,
0xc7, 0x21, 0x42, 0xa7, 0xc4, 0xb2, 0x29, 0x61, 0x64, 0x0a, 0xa3, 0x6b, 0x44, 0x18, 0x1d, 0xcc,
0x59, 0x83, 0x18, 0x4a, 0xf7, 0x7e, 0x98, 0xd2, 0x2d, 0xc5, 0xb2, 0x42, 0x79, 0x68, 0xa6, 0x71,
0xba, 0xdb, 0x3e, 0xa7, 0x5b, 0x8e, 0x25, 0xa5, 0xd2, 0x87, 0x71, 0x52, 0xb7, 0x37, 0x41, 0xea,
0x04, 0x09, 0x7b, 0x3d, 0xd6, 0xc4, 0x1c, 0x56, 0xb7, 0x37, 0xc1, 0xea, 0x4a, 0x73, 0x0c, 0xce,
0xa1, 0x75, 0xbf, 0x9e, 0x4e, 0xeb, 0xe2, 0x89, 0x97, 0xfc, 0x99, 0x8b, 0xf1, 0x3a, 0x3d, 0x86,
0xd7, 0x55, 0xb8, 0xf9, 0x37, 0x63, 0xcd, 0x9f, 0x9d, 0xd8, 0x5d, 0x65, 0xd7, 0xec, 0x18, 0x70,
0x30, 0xa8, 0x22, 0xc3, 0xa1, 0x3d, 0x94, 0x9c, 0x49, 0x74, 0xd4, 0x37, 0xd8, 0xc5, 0x1f, 0x80,
0xc4, 0x0c, 0x12, 0xc8, 0xaf, 0x84, 0x10, 0x30, 0xa8, 0x7f, 0x49, 0x06, 0xba, 0xfc, 0xae, 0x0c,
0x93, 0x06, 0x45, 0x92, 0x86, 0x10, 0x37, 0x4c, 0x45, 0xb9, 0xe1, 0x3a, 0x2c, 0x31, 0xa8, 0x1f,
0xa3, 0x7d, 0xd8, 0xf1, 0x68, 0x1f, 0xba, 0x06, 0x2b, 0xfc, 0x2e, 0x17, 0x0c, 0x52, 0xe2, 0x7b,
0x86, 0x5f, 0x53, 0x65, 0x36, 0x21, 0x0e, 0xa7, 0x00, 0xfa, 0xb7, 0xe1, 0x5c, 0x48, 0xd6, 0xbf,
0x42, 0x04, 0xd7, 0xa9, 0xf8, 0xd2, 0xdb, 0xf2, 0x2e, 0xf9, 0x28, 0x58, 0xa0, 0x80, 0x52, 0x22,
0xc8, 0x74, 0x6c, 0x83, 0x48, 0x80, 0xe7, 0x6d, 0x46, 0x33, 0xfb, 0x76, 0x57, 0xc2, 0x38, 0x6b,
0x32, 0x29, 0x1f, 0x05, 0x15, 0x01, 0x72, 0xea, 0x9f, 0x93, 0x81, 0xbd, 0x80, 0x65, 0x4e, 0x23,
0x84, 0xc9, 0xff, 0x0d, 0x21, 0x4c, 0x7d, 0x5b, 0x42, 0xa8, 0xfe, 0x3b, 0x19, 0x6c, 0xa3, 0x4f,
0xf5, 0xbe, 0x9d, 0xdb, 0xc1, 0x95, 0x98, 0xe5, 0x9b, 0x22, 0xaf, 0x44, 0xc9, 0xcc, 0x73, 0x7c,
0xe9, 0xa3, 0xcc, 0x3c, 0x2f, 0x2e, 0x49, 0xde, 0x41, 0xb7, 0x40, 0xe1, 0x25, 0x13, 0xdd, 0x76,
0x5c, 0x89, 0xaa, 0x17, 0xc2, 0x0e, 0x89, 0xca, 0xc8, 0xc6, 0x3e, 0x93, 0xd9, 0x73, 0x5c, 0xad,
0xe0, 0xc8, 0x56, 0xe8, 0xb6, 0x57, 0x22, 0xa4, 0xf3, 0x22, 0x28, 0xec, 0xd7, 0xbb, 0x0e, 0xee,
0x10, 0x8e, 0x90, 0x8a, 0x16, 0x0c, 0xa8, 0x8f, 0x00, 0x4d, 0x62, 0x34, 0x6a, 0x41, 0x8e, 0x1c,
0x13, 0x8b, 0xb2, 0xad, 0x61, 0x6b, 0x7a, 0x7e, 0x0a, 0xa3, 0x23, 0x16, 0xad, 0x57, 0xd9, 0x4a,
0xfe, 0xeb, 0xd9, 0x7a, 0x45, 0x48, 0xbf, 0x65, 0x0f, 0x4c, 0x4a, 0x06, 0x0e, 0x3d, 0xd5, 0xa4,
0xbe, 0xfa, 0x9b, 0x14, 0xa3, 0x57, 0x11, 0xfc, 0x9e, 0xba, 0xb6, 0x5e, 0x94, 0xa4, 0x42, 0xd4,
0x7a, 0xb1, 0xf5, 0xbe, 0x04, 0xd0, 0xc5, 0xae, 0xfe, 0x04, 0x5b, 0x94, 0x18, 0x72, 0xd1, 0x95,
0x2e, 0x76, 0x1f, 0xf2, 0x01, 0xc6, 0x9d, 0xd8, 0xf4, 0xc8, 0x25, 0x06, 0x5f, 0xfd, 0xb4, 0x96,
0xef, 0x62, 0xf7, 0xbe, 0x4b, 0x8c, 0x90, 0x97, 0xf9, 0xef, 0xe6, 0x65, 0x74, 0x8d, 0x0b, 0xe3,
0x6b, 0xfc, 0x45, 0x2a, 0x08, 0x84, 0x80, 0x87, 0xfe, 0xbf, 0xad, 0xc2, 0xef, 0x79, 0xce, 0x19,
0xbd, 0x44, 0xd1, 0x01, 0xac, 0xf8, 0x61, 0xa8, 0x8f, 0x78, 0x78, 0x7a, 0x67, 0x6e, 0xd1, 0x38,
0xae, 0x1c, 0x47, 0x87, 0x5d, 0xf4, 0x73, 0x78, 0x79, 0x0c, 0x62, 0x7c, 0xd3, 0xa9, 0x05, 0x91,
0xe6, 0xa5, 0x28, 0xd2, 0x78, 0x96, 0x83, 0xb5, 0x4a, 0x7f, 0xc7, 0xb8, 0xd8, 0x61, 0xd9, 0x4e,
0x98, 0x12, 0x4c, 0xdd, 0xfb, 0x2b, 0x50, 0x1c, 0x12, 0xca, 0x32, 0xeb, 0x48, 0x3e, 0xb9, 0x2c,
0x06, 0x05, 0xca, 0xab, 0xfb, 0xf0, 0xd2, 0x54, 0x6a, 0x80, 0x7e, 0x08, 0x4a, 0xc0, 0x2a, 0x92,
0x31, 0xa9, 0x99, 0x9f, 0x6e, 0x04, 0xb2, 0xea, 0x5f, 0x93, 0x81, 0xc9, 0x68, 0x02, 0xd3, 0x84,
0xdc, 0x90, 0xb8, 0xa3, 0xbe, 0x48, 0x29, 0x4a, 0x5b, 0x6f, 0x2f, 0x46, 0x2a, 0xd8, 0xe8, 0xa8,
0x4f, 0x35, 0xa9, 0xac, 0x3e, 0x82, 0x9c, 0x18, 0x41, 0x4b, 0x90, 0xbf, 0xbf, 0x7b, 0x77, 0x77,
0xef, 0xe1, 0x6e, 0x25, 0x81, 0x00, 0x72, 0xdb, 0x8d, 0x46, 0x73, 0xff, 0xb0, 0x92, 0x44, 0x0a,
0x64, 0xb7, 0xeb, 0x7b, 0xda, 0x61, 0x25, 0xc5, 0x86, 0xb5, 0xe6, 0x87, 0xcd, 0xc6, 0x61, 0x25,
0x8d, 0x56, 0xa0, 0x28, 0xda, 0xfa, 0x9d, 0x3d, 0xed, 0xa3, 0xed, 0xc3, 0x4a, 0x26, 0x34, 0x74,
0xd0, 0xdc, 0xfd, 0xa0, 0xa9, 0x55, 0xb2, 0xea, 0x0f, 0x58, 0xce, 0x12, 0x43, 0x43, 0x82, 0xec,
0x24, 0x19, 0xca, 0x4e, 0xd4, 0x3f, 0xa6, 0xa0, 0x16, 0xcf, 0x2d, 0xd0, 0x87, 0x63, 0x8e, 0x6f,
0x9d, 0x81, 0x98, 0x8c, 0x79, 0x8f, 0x5e, 0x83, 0xd2, 0x90, 0x1c, 0x11, 0xda, 0xe9, 0x09, 0xae,
0x23, 0x4e, 0xae, 0xa2, 0x56, 0x94, 0xad, 0x5c, 0xc9, 0x15, 0x62, 0x9f, 0x92, 0x0e, 0xd5, 0xc5,
0x45, 0x49, 0x6c, 0x3a, 0x85, 0x89, 0xb1, 0xd6, 0x03, 0xd1, 0xa8, 0x7e, 0x72, 0xa6, 0xb9, 0x54,
0x20, 0xab, 0x35, 0x0f, 0xb5, 0x5f, 0x54, 0xd2, 0x08, 0x41, 0x89, 0x17, 0xf5, 0x83, 0xdd, 0xed,
0xfd, 0x83, 0xd6, 0x1e, 0x9b, 0xcb, 0x73, 0x50, 0xf6, 0xe6, 0xd2, 0x6b, 0xcc, 0xaa, 0xff, 0x49,
0x42, 0x79, 0x2c, 0x40, 0xd0, 0x16, 0x64, 0x05, 0x5f, 0x8e, 0x4b, 0x97, 0xf3, 0xf8, 0x96, 0xd1,
0x24, 0x44, 0xd1, 0xbb, 0x50, 0x20, 0x32, 0x11, 0x30, 0x2d, 0x10, 0x45, 0x02, 0xc3, 0x4b, 0x15,
0x48, 0x55, 0x5f, 0x03, 0xbd, 0x07, 0x8a, 0x1f, 0xe9, 0xf2, 0x92, 0xf6, 0xea, 0xa4, 0xba, 0x8f,
0x11, 0x52, 0x3f, 0xd0, 0x41, 0xb7, 0x03, 0xd2, 0x95, 0x99, 0x64, 0xe9, 0x52, 0x5d, 0x08, 0x48,
0x65, 0x4f, 0x5e, 0x6d, 0xc0, 0x52, 0xc8, 0x1f, 0x74, 0x01, 0x94, 0x01, 0x3e, 0x91, 0x99, 0x23,
0x91, 0x22, 0x28, 0x0c, 0xf0, 0x09, 0x4f, 0x1a, 0xa1, 0x97, 0x21, 0xcf, 0x3a, 0xbb, 0x58, 0xa0,
0x4d, 0x5a, 0xcb, 0x0d, 0xf0, 0xc9, 0x4f, 0xb1, 0xab, 0x7e, 0x0c, 0xa5, 0x68, 0x72, 0x85, 0xed,
0xc4, 0xa1, 0x3d, 0xb2, 0x0c, 0x6e, 0x23, 0xab, 0x89, 0x0a, 0xba, 0x01, 0xd9, 0x63, 0x5b, 0x80,
0xd5, 0xf4, 0x90, 0x7d, 0x60, 0x53, 0x12, 0x4a, 0xce, 0x08, 0x69, 0x75, 0x17, 0x4a, 0x1c, 0x7c,
0xb6, 0x29, 0x1d, 0x9a, 0xed, 0x11, 0x25, 0xe1, 0x6c, 0xe0, 0xf2, 0x94, 0x6c, 0xa0, 0xcf, 0x39,
0x7c, 0xc6, 0x92, 0x16, 0x69, 0x29, 0x5e, 0x51, 0x3f, 0x87, 0x2c, 0xb7, 0xc7, 0x80, 0x89, 0xa7,
0x5d, 0x24, 0x81, 0x65, 0x65, 0xf4, 0x31, 0x00, 0xf6, 0xbe, 0xe3, 0x0d, 0x74, 0x7d, 0x3a, 0x18,
0xfa, 0xe3, 0xa9, 0x5f, 0x94, 0xa8, 0xb8, 0x1a, 0xa8, 0x86, 0x90, 0x31, 0x64, 0x50, 0x7d, 0x9a,
0x84, 0xc2, 0xe1, 0x89, 0xdc, 0xd6, 0x31, 0xd9, 0x98, 0x60, 0xd8, 0xa9, 0x70, 0xee, 0x41, 0xa4,
0x77, 0xd2, 0x7e, 0xd2, 0xe8, 0x7d, 0x3f, 0x70, 0x33, 0x8b, 0xde, 0x0e, 0xbd, 0xec, 0x99, 0x04,
0xab, 0x77, 0x40, 0xf1, 0x77, 0x15, 0x63, 0xee, 0xd8, 0x30, 0x86, 0xc4, 0x75, 0xe5, 0xbc, 0x7a,
0x55, 0x9e, 0xdc, 0xb3, 0x9f, 0xc8, 0xec, 0x46, 0x5a, 0x13, 0x15, 0xd5, 0x80, 0xf2, 0xd8, 0xb1,
0x85, 0xde, 0x81, 0xbc, 0x33, 0x6a, 0xeb, 0xde, 0xd2, 0x8c, 0x05, 0x8f, 0x47, 0xf0, 0x46, 0xed,
0xbe, 0xd9, 0xb9, 0x4b, 0x4e, 0xbd, 0xc1, 0x38, 0xa3, 0xf6, 0x5d, 0xb1, 0x82, 0xe2, 0x2b, 0xa9,
0xf0, 0x57, 0x8e, 0xa1, 0xe0, 0x6d, 0x0a, 0xf4, 0x93, 0x70, 0x9c, 0x78, 0xb9, 0xdc, 0xd8, 0xa3,
0x54, 0x9a, 0x0f, 0x85, 0xc9, 0x35, 0x58, 0x71, 0xcd, 0xae, 0x45, 0x0c, 0x3d, 0xb8, 0x3b, 0xf0,
0xaf, 0x15, 0xb4, 0xb2, 0xe8, 0xb8, 0xe7, 0x5d, 0x1c, 0xd4, 0x67, 0x49, 0x28, 0x78, 0x01, 0x3b,
0x75, 0x9f, 0x44, 0x06, 0x93, 0x3a, 0xfb, 0x60, 0xe2, 0x32, 0xa9, 0x5e, 0xae, 0x3a, 0x73, 0xe6,
0x5c, 0xf5, 0x5b, 0x80, 0xa8, 0x4d, 0x71, 0x5f, 0x3f, 0xb6, 0xa9, 0x69, 0x75, 0x75, 0x31, 0x9b,
0x82, 0x30, 0x55, 0x78, 0xcf, 0x03, 0xde, 0xb1, 0xcf, 0x27, 0xf6, 0xb7, 0x49, 0x28, 0xf8, 0x87,
0xdf, 0x59, 0xf3, 0x69, 0xe7, 0x21, 0x27, 0xf1, 0x5d, 0x24, 0xd4, 0x64, 0xcd, 0x4f, 0xed, 0x66,
0x42, 0xa9, 0xdd, 0x1a, 0x14, 0x06, 0x84, 0x62, 0xce, 0x00, 0xc4, 0xfd, 0xcc, 0xaf, 0x5f, 0xbb,
0x0d, 0x4b, 0xa1, 0xd4, 0x26, 0x0b, 0xeb, 0xdd, 0xe6, 0xc3, 0x4a, 0xa2, 0x96, 0x7f, 0xfa, 0xd5,
0xe5, 0xf4, 0x2e, 0x79, 0xc2, 0x36, 0xa5, 0xd6, 0x6c, 0xb4, 0x9a, 0x8d, 0xbb, 0x95, 0x64, 0x6d,
0xe9, 0xe9, 0x57, 0x97, 0xf3, 0x1a, 0xe1, 0x19, 0x92, 0xad, 0x2f, 0x00, 0xca, 0xdb, 0xf5, 0xc6,
0x0e, 0x3b, 0x94, 0xcc, 0x0e, 0x96, 0x79, 0xa3, 0x0c, 0xbf, 0xd4, 0xce, 0x7c, 0xe2, 0xac, 0xcd,
0x4e, 0x9b, 0xa1, 0x3b, 0x90, 0xe5, 0xf7, 0x5d, 0x34, 0xfb, 0xcd, 0xb3, 0x36, 0x27, 0x8f, 0xc6,
0x06, 0xc3, 0x77, 0xed, 0xcc, 0x47, 0xd0, 0xda, 0xec, 0xb4, 0x1a, 0xd2, 0x40, 0x09, 0x2e, 0xac,
0xf3, 0x1f, 0x45, 0x6b, 0x0b, 0xa4, 0xda, 0x98, 0xcd, 0x80, 0xab, 0xcf, 0x7f, 0x24, 0xac, 0x2d,
0x80, 0x2b, 0xe8, 0x1e, 0xe4, 0xbd, 0x3b, 0xd0, 0xbc, 0x67, 0xcb, 0xda, 0xdc, 0x34, 0x18, 0x5b,
0x02, 0x71, 0x57, 0x9d, 0xfd, 0x06, 0x5b, 0x9b, 0x93, 0xd3, 0x43, 0x3b, 0x90, 0x93, 0x14, 0x74,
0xce, 0x53, 0x64, 0x6d, 0x5e, 0x5a, 0x8b, 0x4d, 0x5a, 0x70, 0xd3, 0x9f, 0xff, 0xb2, 0x5c, 0x5b,
0x20, 0x5d, 0x89, 0xee, 0x03, 0x84, 0x6e, 0xa6, 0x0b, 0x3c, 0x19, 0xd7, 0x16, 0x49, 0x43, 0xa2,
0x3d, 0x28, 0xf8, 0xb7, 0x90, 0xb9, 0x0f, 0xb8, 0xb5, 0xf9, 0xf9, 0x40, 0xf4, 0x08, 0x8a, 0x51,
0xfa, 0xbd, 0xd8, 0xb3, 0x6c, 0x6d, 0xc1, 0x44, 0x1f, 0xb3, 0x1f, 0xe5, 0xe2, 0x8b, 0x3d, 0xd3,
0xd6, 0x16, 0xcc, 0xfb, 0xa1, 0x4f, 0x61, 0x65, 0x92, 0x2b, 0x2f, 0xfe, 0x6a, 0x5b, 0x3b, 0x43,
0x26, 0x10, 0x0d, 0x00, 0x4d, 0xe1, 0xd8, 0x67, 0x78, 0xc4, 0xad, 0x9d, 0x25, 0x31, 0x58, 0x6f,
0x7e, 0xfd, 0x7c, 0x2d, 0xf9, 0xcd, 0xf3, 0xb5, 0xe4, 0x3f, 0x9e, 0xaf, 0x25, 0xbf, 0x7c, 0xb1,
0x96, 0xf8, 0xe6, 0xc5, 0x5a, 0xe2, 0x6f, 0x2f, 0xd6, 0x12, 0xbf, 0x7c, 0xb3, 0x6b, 0xd2, 0xde,
0xa8, 0xbd, 0xd1, 0xb1, 0x07, 0x9b, 0xe1, 0x3f, 0x4c, 0xa6, 0xfd, 0xf5, 0xd2, 0xce, 0xf1, 0xe3,
0xe5, 0xfa, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x66, 0x5c, 0x1b, 0x1f, 0x15, 0x23, 0x00, 0x00,
0x23, 0x6e, 0xae, 0xa2, 0x56, 0x94, 0xa3, 0x5c, 0xc9, 0x15, 0x62, 0x9f, 0x92, 0x0e, 0xd5, 0x45,
0xa2, 0x24, 0x0e, 0x9d, 0xc2, 0xc4, 0xd8, 0xe8, 0x81, 0x18, 0x54, 0x3f, 0x39, 0xd3, 0x5a, 0x2a,
0x90, 0xd5, 0x9a, 0x87, 0xda, 0x2f, 0x2a, 0x69, 0x84, 0xa0, 0xc4, 0x9b, 0xfa, 0xc1, 0xee, 0xf6,
0xfe, 0x41, 0x6b, 0x8f, 0xad, 0xe5, 0x39, 0x28, 0x7b, 0x6b, 0xe9, 0x0d, 0x66, 0xd5, 0xff, 0x24,
0xa1, 0x3c, 0x16, 0x20, 0x68, 0x0b, 0xb2, 0x82, 0x2f, 0xc7, 0x95, 0xcb, 0x79, 0x7c, 0xcb, 0x68,
0x12, 0xa2, 0xe8, 0x5d, 0x28, 0x10, 0x59, 0x08, 0x98, 0x16, 0x88, 0xa2, 0x80, 0xe1, 0x95, 0x0a,
0xa4, 0xaa, 0xaf, 0x81, 0xde, 0x03, 0xc5, 0x8f, 0x74, 0x99, 0xa4, 0xbd, 0x3a, 0xa9, 0xee, 0x63,
0x84, 0xd4, 0x0f, 0x74, 0xd0, 0xed, 0x80, 0x74, 0x65, 0x26, 0x59, 0xba, 0x54, 0x17, 0x02, 0x52,
0xd9, 0x93, 0x57, 0x1b, 0xb0, 0x14, 0xf2, 0x07, 0x5d, 0x00, 0x65, 0x80, 0x4f, 0x64, 0xe5, 0x48,
0x94, 0x08, 0x0a, 0x03, 0x7c, 0xc2, 0x8b, 0x46, 0xe8, 0x65, 0xc8, 0xb3, 0xc9, 0x2e, 0x16, 0x68,
0x93, 0xd6, 0x72, 0x03, 0x7c, 0xf2, 0x53, 0xec, 0xaa, 0x1f, 0x43, 0x29, 0x5a, 0x5c, 0x61, 0x27,
0x71, 0x68, 0x8f, 0x2c, 0x83, 0xdb, 0xc8, 0x6a, 0xa2, 0x83, 0x6e, 0x40, 0xf6, 0xd8, 0x16, 0x60,
0x35, 0x3d, 0x64, 0x1f, 0xd8, 0x94, 0x84, 0x8a, 0x33, 0x42, 0x5a, 0xfd, 0x1c, 0xb2, 0x1c, 0x7c,
0x18, 0x90, 0xf0, 0x32, 0x89, 0x24, 0x9c, 0xac, 0x8d, 0x3e, 0x06, 0xc0, 0x94, 0x0e, 0xcd, 0xf6,
0x28, 0x30, 0xbc, 0x3e, 0x1d, 0xbc, 0xb6, 0x3d, 0xb9, 0xfa, 0x45, 0x89, 0x62, 0xab, 0x81, 0x6a,
0x08, 0xc9, 0x42, 0x06, 0xd5, 0x5d, 0x28, 0x45, 0x75, 0xc3, 0x95, 0xc8, 0xe5, 0x29, 0x95, 0x48,
0x9f, 0xef, 0xf8, 0x6c, 0x29, 0x2d, 0x4a, 0x62, 0xbc, 0xa3, 0x3e, 0x4d, 0x42, 0xe1, 0xf0, 0x44,
0x1e, 0xeb, 0x98, 0x6a, 0x4c, 0xa0, 0x9a, 0x0a, 0xd7, 0x1e, 0x44, 0x79, 0x27, 0xed, 0x17, 0x8d,
0xde, 0xf7, 0x03, 0x37, 0xb3, 0x68, 0x76, 0xe8, 0x55, 0xcf, 0x24, 0x58, 0xbd, 0x03, 0x8a, 0x7f,
0xaa, 0x18, 0x73, 0xc7, 0x86, 0x31, 0x24, 0xae, 0x2b, 0x7d, 0xf3, 0xba, 0xbc, 0xb8, 0x67, 0x3f,
0x91, 0xd5, 0x8d, 0xb4, 0x26, 0x3a, 0xaa, 0x01, 0xe5, 0xb1, 0x6b, 0x0b, 0xbd, 0x03, 0x79, 0x67,
0xd4, 0xd6, 0xbd, 0xe5, 0x19, 0x0b, 0x1e, 0x8f, 0xe0, 0x8d, 0xda, 0x7d, 0xb3, 0x73, 0x97, 0x9c,
0x7a, 0x3f, 0xc6, 0x19, 0xb5, 0xef, 0x8a, 0x55, 0x14, 0x5f, 0x49, 0x85, 0xbf, 0x72, 0x0c, 0x05,
0xef, 0x50, 0xa0, 0x9f, 0x84, 0xe3, 0xc4, 0xab, 0xe5, 0xc6, 0x5e, 0xa5, 0xd2, 0x7c, 0x28, 0x4c,
0xae, 0xc1, 0x8a, 0x6b, 0x76, 0x2d, 0x62, 0xe8, 0x41, 0xee, 0xc0, 0xbf, 0x56, 0xd0, 0xca, 0x62,
0xe2, 0x9e, 0x97, 0x38, 0xa8, 0xcf, 0x92, 0x50, 0xf0, 0x02, 0x76, 0xea, 0xb9, 0x8b, 0xfc, 0x98,
0xd4, 0xd9, 0x7f, 0x4c, 0x5c, 0x25, 0xd5, 0xab, 0x55, 0x67, 0xce, 0x5c, 0xab, 0x7e, 0x0b, 0x10,
0xb5, 0x29, 0xee, 0xeb, 0xc7, 0x36, 0x35, 0xad, 0xae, 0x2e, 0x56, 0x53, 0x10, 0xa6, 0x0a, 0x9f,
0x79, 0xc0, 0x27, 0xf6, 0xf9, 0xc2, 0xfe, 0x36, 0x09, 0x05, 0xff, 0xf2, 0x3b, 0x6b, 0x3d, 0xed,
0x3c, 0xe4, 0x24, 0xbe, 0x8b, 0x82, 0x9a, 0xec, 0xf9, 0xa5, 0xdd, 0x4c, 0xa8, 0xb4, 0x5b, 0x83,
0xc2, 0x80, 0x50, 0xcc, 0x19, 0x80, 0xc8, 0xcf, 0xfc, 0xfe, 0xb5, 0xdb, 0xb0, 0x14, 0x2a, 0x6d,
0xb2, 0xd0, 0xda, 0x6d, 0x3e, 0xac, 0x24, 0x6a, 0xf9, 0xa7, 0x5f, 0x5d, 0x4e, 0xef, 0x92, 0x27,
0xec, 0x50, 0x6a, 0xcd, 0x46, 0xab, 0xd9, 0xb8, 0x5b, 0x49, 0xd6, 0x96, 0x9e, 0x7e, 0x75, 0x39,
0xaf, 0x11, 0x5e, 0x21, 0xd9, 0xfa, 0x02, 0xa0, 0xbc, 0x5d, 0x6f, 0xec, 0xb0, 0x4b, 0xc9, 0xec,
0x60, 0x59, 0x37, 0xca, 0xf0, 0xa4, 0x76, 0xe6, 0x13, 0x67, 0x6d, 0x76, 0xd9, 0x0c, 0xdd, 0x81,
0x2c, 0xcf, 0x77, 0xd1, 0xec, 0x37, 0xcf, 0xda, 0x9c, 0x3a, 0x1a, 0xfb, 0x31, 0xfc, 0xd4, 0xce,
0x7c, 0x04, 0xad, 0xcd, 0x2e, 0xab, 0x21, 0x0d, 0x94, 0x20, 0x61, 0x9d, 0xff, 0x28, 0x5a, 0x5b,
0xa0, 0xd4, 0xc6, 0x6c, 0x06, 0x5c, 0x7d, 0xfe, 0x23, 0x61, 0x6d, 0x01, 0x5c, 0x41, 0xf7, 0x20,
0xef, 0xe5, 0x40, 0xf3, 0x9e, 0x2d, 0x6b, 0x73, 0xcb, 0x60, 0x6c, 0x0b, 0x44, 0xae, 0x3a, 0xfb,
0x0d, 0xb6, 0x36, 0xa7, 0xa6, 0x87, 0x76, 0x20, 0x27, 0x29, 0xe8, 0x9c, 0xa7, 0xc8, 0xda, 0xbc,
0xb2, 0x16, 0x5b, 0xb4, 0x20, 0xd3, 0x9f, 0xff, 0xb2, 0x5c, 0x5b, 0xa0, 0x5c, 0x89, 0xee, 0x03,
0x84, 0x32, 0xd3, 0x05, 0x9e, 0x8c, 0x6b, 0x8b, 0x94, 0x21, 0xd1, 0x1e, 0x14, 0xfc, 0x2c, 0x64,
0xee, 0x03, 0x6e, 0x6d, 0x7e, 0x3d, 0x10, 0x3d, 0x82, 0x62, 0x94, 0x7e, 0x2f, 0xf6, 0x2c, 0x5b,
0x5b, 0xb0, 0xd0, 0xc7, 0xec, 0x47, 0xb9, 0xf8, 0x62, 0xcf, 0xb4, 0xb5, 0x05, 0xeb, 0x7e, 0xe8,
0x53, 0x58, 0x99, 0xe4, 0xca, 0x8b, 0xbf, 0xda, 0xd6, 0xce, 0x50, 0x09, 0x44, 0x03, 0x40, 0x53,
0x38, 0xf6, 0x19, 0x1e, 0x71, 0x6b, 0x67, 0x29, 0x0c, 0xd6, 0x9b, 0x5f, 0x3f, 0x5f, 0x4b, 0x7e,
0xf3, 0x7c, 0x2d, 0xf9, 0x8f, 0xe7, 0x6b, 0xc9, 0x2f, 0x5f, 0xac, 0x25, 0xbe, 0x79, 0xb1, 0x96,
0xf8, 0xdb, 0x8b, 0xb5, 0xc4, 0x2f, 0xdf, 0xec, 0x9a, 0xb4, 0x37, 0x6a, 0x6f, 0x74, 0xec, 0xc1,
0x66, 0xf8, 0x1f, 0x26, 0xd3, 0xfe, 0xf5, 0xd2, 0xce, 0xf1, 0xeb, 0xe5, 0xfa, 0x7f, 0x03, 0x00,
0x00, 0xff, 0xff, 0xa7, 0x76, 0xf6, 0xe8, 0x15, 0x23, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -6101,6 +6104,50 @@ func (m *LastCommitInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *Event) 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 *Event) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Attributes) > 0 {
for iNdEx := len(m.Attributes) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Attributes[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTypes(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
}
}
if len(m.Type) > 0 {
i -= len(m.Type)
copy(dAtA[i:], m.Type)
i = encodeVarintTypes(dAtA, i, uint64(len(m.Type)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *EventAttribute) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -6148,50 +6195,6 @@ func (m *EventAttribute) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *Event) 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 *Event) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Attributes) > 0 {
for iNdEx := len(m.Attributes) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Attributes[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTypes(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
}
}
if len(m.Type) > 0 {
i -= len(m.Type)
copy(dAtA[i:], m.Type)
i = encodeVarintTypes(dAtA, i, uint64(len(m.Type)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *TxResult) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -7524,6 +7527,25 @@ func (m *LastCommitInfo) Size() (n int) {
return n
}
func (m *Event) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Type)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
if len(m.Attributes) > 0 {
for _, e := range m.Attributes {
l = e.Size()
n += 1 + l + sovTypes(uint64(l))
}
}
return n
}
func (m *EventAttribute) Size() (n int) {
if m == nil {
return 0
@@ -7544,25 +7566,6 @@ func (m *EventAttribute) Size() (n int) {
return n
}
func (m *Event) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Type)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
if len(m.Attributes) > 0 {
for _, e := range m.Attributes {
l = e.Size()
n += 1 + l + sovTypes(uint64(l))
}
}
return n
}
func (m *TxResult) Size() (n int) {
if m == nil {
return 0
@@ -13260,6 +13263,125 @@ func (m *LastCommitInfo) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *Event) 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 ErrIntOverflowTypes
}
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: Event: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
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 ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Type = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Attributes = append(m.Attributes, EventAttribute{})
if err := m.Attributes[len(m.Attributes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthTypes
}
if (iNdEx + skippy) < 0 {
return ErrInvalidLengthTypes
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *EventAttribute) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -13401,125 +13523,6 @@ func (m *EventAttribute) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *Event) 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 ErrIntOverflowTypes
}
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: Event: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
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 ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Type = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Attributes = append(m.Attributes, EventAttribute{})
if err := m.Attributes[len(m.Attributes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthTypes
}
if (iNdEx + skippy) < 0 {
return ErrInvalidLengthTypes
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *TxResult) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0

View File

@@ -14,9 +14,13 @@ type, only the key-value pairs defined in `EndBlock` are used.
Each event contains a type and a list of attributes, which are key-value pairs
denoting something about what happened during the method's execution. For more
details on `Events`, see the [ABCI]https://github.com/tendermint/spec/blob/master/spec/abci/abci.md#events) documentation.
details on `Events`, see the
[ABCI]https://github.com/tendermint/spec/blob/master/spec/abci/abci.md#events)
documentation.
An Event has a composite key associated with it. A `compositeKey` is
constructed by its type and key separated by a dot.
An Event has a composite key associated with it. A `compositeKey` is constructed by its type and key separated by a dot.
For example:
```json
@@ -45,13 +49,15 @@ By default, Tendermint will index all transactions by their respective
hashes using an embedded simple indexer. Note, we are planning to add
more options in the future (e.g., PostgreSQL indexer).
You can turn off indexing completely by setting `tx_index` to `null`.
## Adding Events
Applications are free to define which events to index. Tendermint does not expose functionality to define
which events to index and which to ignore. In your application's `DeliverTx` method, add the `Events` field with pairs of
UTF-8 encoded strings (e.g. "transfer.sender": "Bob", "transfer.recipient": "Alice",
"transfer.balance": "100").
Applications are free to define which events to index. Tendermint does not
expose functionality to define which events to index and which to ignore. In
your application's `DeliverTx` method, add the `Events` field with pairs of
UTF-8 encoded strings (e.g. "transfer.sender": "Bob", "transfer.recipient":
"Alice", "transfer.balance": "100").
Example:
@@ -73,7 +79,9 @@ func (app *KVStoreApplication) DeliverTx(req types.RequestDeliverTx) types.Resul
}
```
The index will be added if the `Index` field of attribute is set to true. In above example, all events will be indexed.
The transaction will be indexed (if the indexer is not `null`) with a certain
attribute if the attribute's `Index` field is set to `true`. In the above
example, all attributes will be used.
## Querying Transactions

View File

@@ -299,13 +299,9 @@ message LastCommitInfo {
repeated VoteInfo votes = 2 [(gogoproto.nullable) = false];
}
// EventAttribute represents an event to the indexing service.
message EventAttribute {
bytes key = 1;
bytes value = 2;
bool index = 3;
}
// Event allows application developers to attach additional information to
// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.
// Later, transactions may be queried using these events.
message Event {
string type = 1;
repeated EventAttribute attributes = 2 [
@@ -314,6 +310,13 @@ message Event {
];
}
// EventAttribute is a single key-value pair, associated with an event.
message EventAttribute {
bytes key = 1;
bytes value = 2;
bool index = 3; // nondeterministic
}
// TxResult contains results of executing the transaction.
//
// One usage is indexing transaction results.