diff --git a/Makefile b/Makefile
index bbff97f4d..c60286bec 100644
--- a/Makefile
+++ b/Makefile
@@ -20,8 +20,8 @@ devtools:
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.4
go install github.com/NathanBaulch/protoc-gen-cobra@v1.2
- go install github.com/pactus-project/protoc-gen-doc/cmd/protoc-gen-doc@master
- go install github.com/bufbuild/buf/cmd/buf@v1.32
+ go install github.com/pactus-project/protoc-gen-doc/cmd/protoc-gen-doc@v0.0.0-20240619124021-76fc28241eb6
+ go install github.com/bufbuild/buf/cmd/buf@v1.34
go install mvdan.cc/gofumpt@latest
go install github.com/rakyll/statik@v0.1.7
go install github.com/pacviewer/jrpc-gateway/protoc-gen-jrpc-gateway@v0.3.2
diff --git a/state/facade.go b/state/facade.go
index cb4dcecc2..7e44233fb 100644
--- a/state/facade.go
+++ b/state/facade.go
@@ -54,4 +54,5 @@ type Facade interface {
CalculateFee(amt amount.Amount, payloadType payload.Type) amount.Amount
PublicKey(addr crypto.Address) (crypto.PublicKey, error)
AvailabilityScore(valNum int32) float64
+ AllPendingTxs() []*tx.Tx
}
diff --git a/state/mock.go b/state/mock.go
index f6aa842ba..dd29d88da 100644
--- a/state/mock.go
+++ b/state/mock.go
@@ -263,3 +263,7 @@ func (m *MockState) PublicKey(addr crypto.Address) (crypto.PublicKey, error) {
func (*MockState) AvailabilityScore(_ int32) float64 {
return 0.987
}
+
+func (*MockState) AllPendingTxs() []*tx.Tx {
+ return make([]*tx.Tx, 0)
+}
diff --git a/state/state.go b/state/state.go
index e5f2ecbe0..86cfbb39b 100644
--- a/state/state.go
+++ b/state/state.go
@@ -795,3 +795,10 @@ func (st *state) AvailabilityScore(valNum int32) float64 {
return st.scoreMgr.AvailabilityScore(valNum)
}
+
+func (st *state) AllPendingTxs() []*tx.Tx {
+ st.lk.RLock()
+ defer st.lk.RUnlock()
+
+ return st.txPool.AllPendingTxs()
+}
diff --git a/txpool/interface.go b/txpool/interface.go
index d2051be93..895bd5a75 100644
--- a/txpool/interface.go
+++ b/txpool/interface.go
@@ -14,6 +14,7 @@ type Reader interface {
HasTx(id tx.ID) bool
Size() int
EstimatedFee(amt amount.Amount, payloadType payload.Type) amount.Amount
+ AllPendingTxs() []*tx.Tx
}
type TxPool interface {
diff --git a/txpool/mock.go b/txpool/mock.go
index 363300bd5..6a4793e1e 100644
--- a/txpool/mock.go
+++ b/txpool/mock.go
@@ -81,3 +81,7 @@ func (m *MockTxPool) PrepareBlockTransactions() block.Txs {
func (*MockTxPool) EstimatedFee(_ amount.Amount, _ payload.Type) amount.Amount {
return amount.Amount(0.1e9)
}
+
+func (m *MockTxPool) AllPendingTxs() []*tx.Tx {
+ return make([]*tx.Tx, m.Size())
+}
diff --git a/txpool/txpool.go b/txpool/txpool.go
index 5da87fdab..5ae70b178 100644
--- a/txpool/txpool.go
+++ b/txpool/txpool.go
@@ -238,6 +238,25 @@ func (p *txPool) EstimatedFee(_ amount.Amount, payloadType payload.Type) amount.
return payloadPool.estimatedFee()
}
+func (p *txPool) AllPendingTxs() []*tx.Tx {
+ p.lk.RLock()
+ defer p.lk.RUnlock()
+
+ txs := make([]*tx.Tx, 0, p.Size())
+
+ var next *linkedlist.Element[linkedmap.Pair[tx.ID, *tx.Tx]]
+ for _, pool := range p.pools {
+ for e := pool.list.HeadNode(); e != nil; e = next {
+ next = e.Next
+ trx := e.Data.Value
+
+ txs = append(txs, trx)
+ }
+ }
+
+ return txs
+}
+
func (p *txPool) String() string {
return fmt.Sprintf("{๐ธ %v ๐ %v ๐ %v ๐ฏ %v ๐งพ %v}",
p.pools[payload.TypeTransfer].list.Size(),
diff --git a/www/grpc/blockchain.go b/www/grpc/blockchain.go
index 65d1867d3..adfd293ed 100644
--- a/www/grpc/blockchain.go
+++ b/www/grpc/blockchain.go
@@ -250,6 +250,19 @@ func (s *blockchainServer) GetPublicKey(_ context.Context,
return &pactus.GetPublicKeyResponse{PublicKey: publicKey.String()}, nil
}
+func (s *blockchainServer) GetTxPoolContent(_ context.Context,
+ _ *pactus.GetTxPoolContentRequest,
+) (*pactus.GetTxPoolContentResponse, error) {
+ result := make([]*pactus.TransactionInfo, 0)
+ for _, t := range s.state.AllPendingTxs() {
+ result = append(result, transactionToProto(t))
+ }
+
+ return &pactus.GetTxPoolContentResponse{
+ Txs: result,
+ }, nil
+}
+
func (s *blockchainServer) validatorToProto(val *validator.Validator) *pactus.ValidatorInfo {
data, _ := val.Bytes()
diff --git a/www/grpc/buf/grpc-gateway.config.yaml b/www/grpc/buf/grpc-gateway.config.yaml
index c6fcda3d9..7aca3690f 100644
--- a/www/grpc/buf/grpc-gateway.config.yaml
+++ b/www/grpc/buf/grpc-gateway.config.yaml
@@ -31,6 +31,9 @@ http:
- selector: pactus.Blockchain.GetPublicKey
get: "/pactus/blockchain/get_public_key"
+ - selector: pactus.Transaction.GetTxPoolContent
+ get: "/pactus/blockchain/get_txpool_content"
+
# Transaction APIs
- selector: pactus.Transaction.GetTransaction
get: "/pactus/transaction/get_transaction"
diff --git a/www/grpc/gen/dart/blockchain.pb.dart b/www/grpc/gen/dart/blockchain.pb.dart
index d8ee84078..59dec58d9 100644
--- a/www/grpc/gen/dart/blockchain.pb.dart
+++ b/www/grpc/gen/dart/blockchain.pb.dart
@@ -14,6 +14,7 @@ import 'package:protobuf/protobuf.dart' as $pb;
import 'transaction.pb.dart' as $0;
import 'blockchain.pbenum.dart';
+import 'transaction.pbenum.dart' as $0;
export 'blockchain.pbenum.dart';
@@ -1022,6 +1023,94 @@ class GetConsensusInfoResponse extends $pb.GeneratedMessage {
$core.List
GetTxPoolContent retrieves current transactions on the TXPool.
+ +Field | Type | Description |
payload_type | +PayloadType | +
+ (Enum) Payload type of tranactions in the tx pool, 0 is all types.
+ Available values:
|
+
Field | Type | Description |
txs | +repeated TransactionInfo | ++ List of the transaction in the pool. + | +
txs[].id | +bytes | ++ Transaction ID. + | +
txs[].data | +bytes | ++ Transaction data. + | +
txs[].version | +int32 | ++ Transaction version. + | +
txs[].lock_time | +uint32 | ++ Lock time for the transaction. + | +
txs[].value | +int64 | ++ Transaction value in NanoPAC. + | +
txs[].fee | +int64 | ++ Transaction fee in NanoPAC. + | +
txs[].payload_type | +PayloadType | +
+ (Enum) Type of transaction payload.
+ Available values:
|
+
txs[].transfer | +PayloadTransfer | ++ (OneOf) Transfer payload. + | +
txs[].transfer.sender | +string | ++ Sender's address. + | +
txs[].transfer.receiver | +string | ++ Receiver's address. + | +
txs[].transfer.amount | +int64 | ++ Transaction amount in NanoPAC. + | +
txs[].bond | +PayloadBond | ++ (OneOf) Bond payload. + | +
txs[].bond.sender | +string | ++ Sender's address. + | +
txs[].bond.receiver | +string | ++ Receiver's address. + | +
txs[].bond.stake | +int64 | ++ Stake amount in NanoPAC. + | +
txs[].sortition | +PayloadSortition | ++ (OneOf) Sortition payload. + | +
txs[].sortition.address | +string | ++ Address associated with the sortition. + | +
txs[].sortition.proof | +bytes | ++ Proof for the sortition. + | +
txs[].unbond | +PayloadUnbond | ++ (OneOf) Unbond payload. + | +
txs[].unbond.validator | +string | ++ Address of the validator to unbond from. + | +
txs[].withdraw | +PayloadWithdraw | ++ (OneOf) Withdraw payload. + | +
txs[].withdraw.from | +string | ++ Address to withdraw from. + | +
txs[].withdraw.to | +string | ++ Address to withdraw to. + | +
txs[].withdraw.amount | +int64 | ++ Withdrawal amount in NanoPAC. + | +
txs[].memo | +string | ++ Transaction memo. + | +
txs[].public_key | +string | ++ Public key associated with the transaction. + | +
txs[].signature | +bytes | ++ Transaction signature. + | +
Network service provides RPCs for retrieving information about the network.
diff --git a/www/grpc/gen/docs/json-rpc.md b/www/grpc/gen/docs/json-rpc.md index 4e9f86a02..82402429b 100644 --- a/www/grpc/gen/docs/json-rpc.md +++ b/www/grpc/gen/docs/json-rpc.md @@ -91,6 +91,10 @@ are encoded using the [base64](https://en.wikipedia.org/wiki/Base64) decoder. pactus.blockchain.get_public_key +GetTxPoolContent retrieves current transactions on the TXPool.
+ +Field | Type | Description |
payload_type | +string | +
+ (Enum) Payload type of tranactions in the tx pool, 0 is all types.
+ Available values:
|
+
Field | Type | Description |
txs | +repeated object | ++ List of the transaction in the pool. + | +
txs[].id | +string | ++ Transaction ID. + | +
txs[].data | +string | ++ Transaction data. + | +
txs[].version | +numeric | ++ Transaction version. + | +
txs[].lock_time | +numeric | ++ Lock time for the transaction. + | +
txs[].value | +numeric | ++ Transaction value in NanoPAC. + | +
txs[].fee | +numeric | ++ Transaction fee in NanoPAC. + | +
txs[].payload_type | +string | +
+ (Enum) Type of transaction payload.
+ Available values:
|
+
txs[].transfer | +object | ++ (OneOf) Transfer payload. + | +
txs[].transfer.sender | +string | ++ Sender's address. + | +
txs[].transfer.receiver | +string | ++ Receiver's address. + | +
txs[].transfer.amount | +numeric | ++ Transaction amount in NanoPAC. + | +
txs[].bond | +object | ++ (OneOf) Bond payload. + | +
txs[].bond.sender | +string | ++ Sender's address. + | +
txs[].bond.receiver | +string | ++ Receiver's address. + | +
txs[].bond.stake | +numeric | ++ Stake amount in NanoPAC. + | +
txs[].sortition | +object | ++ (OneOf) Sortition payload. + | +
txs[].sortition.address | +string | ++ Address associated with the sortition. + | +
txs[].sortition.proof | +string | ++ Proof for the sortition. + | +
txs[].unbond | +object | ++ (OneOf) Unbond payload. + | +
txs[].unbond.validator | +string | ++ Address of the validator to unbond from. + | +
txs[].withdraw | +object | ++ (OneOf) Withdraw payload. + | +
txs[].withdraw.from | +string | ++ Address to withdraw from. + | +
txs[].withdraw.to | +string | ++ Address to withdraw to. + | +
txs[].withdraw.amount | +numeric | ++ Withdrawal amount in NanoPAC. + | +
txs[].memo | +string | ++ Transaction memo. + | +
txs[].public_key | +string | ++ Public key associated with the transaction. + | +
txs[].signature | +string | ++ Transaction signature. + | +
Network service provides RPCs for retrieving information about the network.
diff --git a/www/grpc/gen/go/blockchain.cobra.pb.go b/www/grpc/gen/go/blockchain.cobra.pb.go index 0a52a6e5a..828e559ee 100644 --- a/www/grpc/gen/go/blockchain.cobra.pb.go +++ b/www/grpc/gen/go/blockchain.cobra.pb.go @@ -30,6 +30,7 @@ func BlockchainClientCommand(options ...client.Option) *cobra.Command { _BlockchainGetValidatorByNumberCommand(cfg), _BlockchainGetValidatorAddressesCommand(cfg), _BlockchainGetPublicKeyCommand(cfg), + _BlockchainGetTxPoolContentCommand(cfg), ) return cmd } @@ -448,3 +449,45 @@ func _BlockchainGetPublicKeyCommand(cfg *client.Config) *cobra.Command { return cmd } + +func _BlockchainGetTxPoolContentCommand(cfg *client.Config) *cobra.Command { + req := &GetTxPoolContentRequest{} + + cmd := &cobra.Command{ + Use: cfg.CommandNamer("GetTxPoolContent"), + Short: "GetTxPoolContent RPC client", + Long: "GetTxPoolContent retrieves current transactions on the TXPool.", + RunE: func(cmd *cobra.Command, args []string) error { + if cfg.UseEnvVars { + if err := flag.SetFlagsFromEnv(cmd.Parent().PersistentFlags(), true, cfg.EnvVarNamer, cfg.EnvVarPrefix, "Blockchain"); err != nil { + return err + } + if err := flag.SetFlagsFromEnv(cmd.PersistentFlags(), false, cfg.EnvVarNamer, cfg.EnvVarPrefix, "Blockchain", "GetTxPoolContent"); err != nil { + return err + } + } + return client.RoundTrip(cmd.Context(), cfg, func(cc grpc.ClientConnInterface, in iocodec.Decoder, out iocodec.Encoder) error { + cli := NewBlockchainClient(cc) + v := &GetTxPoolContentRequest{} + + if err := in(v); err != nil { + return err + } + proto.Merge(v, req) + + res, err := cli.GetTxPoolContent(cmd.Context(), v) + + if err != nil { + return err + } + + return out(res) + + }) + }, + } + + flag.EnumVar(cmd.PersistentFlags(), &req.PayloadType, cfg.FlagNamer("PayloadType"), "Payload type of tranactions in the tx pool, 0 is all types.") + + return cmd +} diff --git a/www/grpc/gen/go/blockchain.pb.go b/www/grpc/gen/go/blockchain.pb.go index 32903345d..ee7a3a5a0 100644 --- a/www/grpc/gen/go/blockchain.pb.go +++ b/www/grpc/gen/go/blockchain.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.33.0 // protoc (unknown) // source: blockchain.proto @@ -1149,6 +1149,104 @@ func (x *GetConsensusInfoResponse) GetInstances() []*ConsensusInfo { return nil } +// Request message to retirve transaction pool transactions. +type GetTxPoolContentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Payload type of tranactions in the tx pool, 0 is all types. + PayloadType PayloadType `protobuf:"varint,1,opt,name=payload_type,json=payloadType,proto3,enum=pactus.PayloadType" json:"payload_type,omitempty"` +} + +func (x *GetTxPoolContentRequest) Reset() { + *x = GetTxPoolContentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_blockchain_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxPoolContentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxPoolContentRequest) ProtoMessage() {} + +func (x *GetTxPoolContentRequest) ProtoReflect() protoreflect.Message { + mi := &file_blockchain_proto_msgTypes[19] + 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) +} + +// Deprecated: Use GetTxPoolContentRequest.ProtoReflect.Descriptor instead. +func (*GetTxPoolContentRequest) Descriptor() ([]byte, []int) { + return file_blockchain_proto_rawDescGZIP(), []int{19} +} + +func (x *GetTxPoolContentRequest) GetPayloadType() PayloadType { + if x != nil { + return x.PayloadType + } + return PayloadType_UNKNOWN +} + +// Response message containing transaction pool transactions. +type GetTxPoolContentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the transaction in the pool. + Txs []*TransactionInfo `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` +} + +func (x *GetTxPoolContentResponse) Reset() { + *x = GetTxPoolContentResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_blockchain_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxPoolContentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxPoolContentResponse) ProtoMessage() {} + +func (x *GetTxPoolContentResponse) ProtoReflect() protoreflect.Message { + mi := &file_blockchain_proto_msgTypes[20] + 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) +} + +// Deprecated: Use GetTxPoolContentResponse.ProtoReflect.Descriptor instead. +func (*GetTxPoolContentResponse) Descriptor() ([]byte, []int) { + return file_blockchain_proto_rawDescGZIP(), []int{20} +} + +func (x *GetTxPoolContentResponse) GetTxs() []*TransactionInfo { + if x != nil { + return x.Txs + } + return nil +} + // Message containing information about a validator. type ValidatorInfo struct { state protoimpl.MessageState @@ -1180,7 +1278,7 @@ type ValidatorInfo struct { func (x *ValidatorInfo) Reset() { *x = ValidatorInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[19] + mi := &file_blockchain_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1193,7 +1291,7 @@ func (x *ValidatorInfo) String() string { func (*ValidatorInfo) ProtoMessage() {} func (x *ValidatorInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[19] + mi := &file_blockchain_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1206,7 +1304,7 @@ func (x *ValidatorInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidatorInfo.ProtoReflect.Descriptor instead. func (*ValidatorInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{19} + return file_blockchain_proto_rawDescGZIP(), []int{21} } func (x *ValidatorInfo) GetHash() []byte { @@ -1300,7 +1398,7 @@ type AccountInfo struct { func (x *AccountInfo) Reset() { *x = AccountInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[20] + mi := &file_blockchain_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1313,7 +1411,7 @@ func (x *AccountInfo) String() string { func (*AccountInfo) ProtoMessage() {} func (x *AccountInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[20] + mi := &file_blockchain_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1326,7 +1424,7 @@ func (x *AccountInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountInfo.ProtoReflect.Descriptor instead. func (*AccountInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{20} + return file_blockchain_proto_rawDescGZIP(), []int{22} } func (x *AccountInfo) GetHash() []byte { @@ -1385,7 +1483,7 @@ type BlockHeaderInfo struct { func (x *BlockHeaderInfo) Reset() { *x = BlockHeaderInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[21] + mi := &file_blockchain_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1398,7 +1496,7 @@ func (x *BlockHeaderInfo) String() string { func (*BlockHeaderInfo) ProtoMessage() {} func (x *BlockHeaderInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[21] + mi := &file_blockchain_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1411,7 +1509,7 @@ func (x *BlockHeaderInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockHeaderInfo.ProtoReflect.Descriptor instead. func (*BlockHeaderInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{21} + return file_blockchain_proto_rawDescGZIP(), []int{23} } func (x *BlockHeaderInfo) GetVersion() int32 { @@ -1470,7 +1568,7 @@ type CertificateInfo struct { func (x *CertificateInfo) Reset() { *x = CertificateInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[22] + mi := &file_blockchain_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1483,7 +1581,7 @@ func (x *CertificateInfo) String() string { func (*CertificateInfo) ProtoMessage() {} func (x *CertificateInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[22] + mi := &file_blockchain_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1496,7 +1594,7 @@ func (x *CertificateInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CertificateInfo.ProtoReflect.Descriptor instead. func (*CertificateInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{22} + return file_blockchain_proto_rawDescGZIP(), []int{24} } func (x *CertificateInfo) GetHash() []byte { @@ -1557,7 +1655,7 @@ type VoteInfo struct { func (x *VoteInfo) Reset() { *x = VoteInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[23] + mi := &file_blockchain_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1570,7 +1668,7 @@ func (x *VoteInfo) String() string { func (*VoteInfo) ProtoMessage() {} func (x *VoteInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[23] + mi := &file_blockchain_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1583,7 +1681,7 @@ func (x *VoteInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use VoteInfo.ProtoReflect.Descriptor instead. func (*VoteInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{23} + return file_blockchain_proto_rawDescGZIP(), []int{25} } func (x *VoteInfo) GetType() VoteType { @@ -1649,7 +1747,7 @@ type ConsensusInfo struct { func (x *ConsensusInfo) Reset() { *x = ConsensusInfo{} if protoimpl.UnsafeEnabled { - mi := &file_blockchain_proto_msgTypes[24] + mi := &file_blockchain_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1760,7 @@ func (x *ConsensusInfo) String() string { func (*ConsensusInfo) ProtoMessage() {} func (x *ConsensusInfo) ProtoReflect() protoreflect.Message { - mi := &file_blockchain_proto_msgTypes[24] + mi := &file_blockchain_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1773,7 @@ func (x *ConsensusInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ConsensusInfo.ProtoReflect.Descriptor instead. func (*ConsensusInfo) Descriptor() ([]byte, []int) { - return file_blockchain_proto_rawDescGZIP(), []int{24} + return file_blockchain_proto_rawDescGZIP(), []int{26} } func (x *ConsensusInfo) GetAddress() string { @@ -1813,147 +1911,162 @@ var file_blockchain_proto_rawDesc = []byte{ 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xdc, - 0x02, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x6f, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, - 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x81, 0x01, - 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x0a, - 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x73, 0x6f, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x65, 0x64, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x74, - 0x65, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x61, 0x62, 0x73, 0x65, 0x6e, - 0x74, 0x65, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x08, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, - 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x63, 0x70, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, - 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x73, - 0x2a, 0x48, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, - 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x46, 0x4f, - 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x2a, 0x5c, 0x0a, 0x08, 0x56, 0x6f, - 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, - 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x4f, - 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x18, - 0x0a, 0x14, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x10, 0x03, 0x32, 0xb4, 0x06, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, - 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x58, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x61, 0x63, 0x74, - 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1f, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x19, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, - 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, - 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x42, 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, + 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x51, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x13, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x22, 0x45, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, + 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x63, + 0x74, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xdc, 0x02, 0x0a, 0x0d, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, + 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x61, + 0x73, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x32, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x75, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x0f, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x65, + 0x76, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x09, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, + 0x08, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, + 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, + 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x70, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x97, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x2a, 0x48, 0x0a, 0x0e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x0a, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x10, 0x02, 0x2a, 0x5c, 0x0a, 0x08, 0x56, 0x6f, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, + 0x52, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, + 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x54, 0x45, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, + 0x10, 0x03, 0x32, 0x8b, 0x07, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x2e, + 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x1b, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x2e, + 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, + 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x20, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x70, 0x61, 0x63, + 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x61, + 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x61, + 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x1b, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x63, + 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x24, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x45, 0x0a, 0x11, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, - 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2f, 0x77, 0x77, 0x77, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, - 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, + 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1b, + 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, + 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x2e, + 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x50, 0x6f, 0x6f, + 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x45, 0x0a, 0x11, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x2f, 0x77, 0x77, 0x77, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2f, 0x70, 0x61, 0x63, 0x74, 0x75, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1969,8 +2082,8 @@ func file_blockchain_proto_rawDescGZIP() []byte { } var file_blockchain_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_blockchain_proto_msgTypes = make([]protoimpl.MessageInfo, 25) -var file_blockchain_proto_goTypes = []any{ +var file_blockchain_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_blockchain_proto_goTypes = []interface{}{ (BlockVerbosity)(0), // 0: pactus.BlockVerbosity (VoteType)(0), // 1: pactus.VoteType (*GetAccountRequest)(nil), // 2: pactus.GetAccountRequest @@ -1992,50 +2105,57 @@ var file_blockchain_proto_goTypes = []any{ (*GetBlockchainInfoResponse)(nil), // 18: pactus.GetBlockchainInfoResponse (*GetConsensusInfoRequest)(nil), // 19: pactus.GetConsensusInfoRequest (*GetConsensusInfoResponse)(nil), // 20: pactus.GetConsensusInfoResponse - (*ValidatorInfo)(nil), // 21: pactus.ValidatorInfo - (*AccountInfo)(nil), // 22: pactus.AccountInfo - (*BlockHeaderInfo)(nil), // 23: pactus.BlockHeaderInfo - (*CertificateInfo)(nil), // 24: pactus.CertificateInfo - (*VoteInfo)(nil), // 25: pactus.VoteInfo - (*ConsensusInfo)(nil), // 26: pactus.ConsensusInfo - (*TransactionInfo)(nil), // 27: pactus.TransactionInfo + (*GetTxPoolContentRequest)(nil), // 21: pactus.GetTxPoolContentRequest + (*GetTxPoolContentResponse)(nil), // 22: pactus.GetTxPoolContentResponse + (*ValidatorInfo)(nil), // 23: pactus.ValidatorInfo + (*AccountInfo)(nil), // 24: pactus.AccountInfo + (*BlockHeaderInfo)(nil), // 25: pactus.BlockHeaderInfo + (*CertificateInfo)(nil), // 26: pactus.CertificateInfo + (*VoteInfo)(nil), // 27: pactus.VoteInfo + (*ConsensusInfo)(nil), // 28: pactus.ConsensusInfo + (*TransactionInfo)(nil), // 29: pactus.TransactionInfo + (PayloadType)(0), // 30: pactus.PayloadType } var file_blockchain_proto_depIdxs = []int32{ - 22, // 0: pactus.GetAccountResponse.account:type_name -> pactus.AccountInfo - 21, // 1: pactus.GetValidatorResponse.validator:type_name -> pactus.ValidatorInfo + 24, // 0: pactus.GetAccountResponse.account:type_name -> pactus.AccountInfo + 23, // 1: pactus.GetValidatorResponse.validator:type_name -> pactus.ValidatorInfo 0, // 2: pactus.GetBlockRequest.verbosity:type_name -> pactus.BlockVerbosity - 23, // 3: pactus.GetBlockResponse.header:type_name -> pactus.BlockHeaderInfo - 24, // 4: pactus.GetBlockResponse.prev_cert:type_name -> pactus.CertificateInfo - 27, // 5: pactus.GetBlockResponse.txs:type_name -> pactus.TransactionInfo - 21, // 6: pactus.GetBlockchainInfoResponse.committee_validators:type_name -> pactus.ValidatorInfo - 26, // 7: pactus.GetConsensusInfoResponse.instances:type_name -> pactus.ConsensusInfo - 1, // 8: pactus.VoteInfo.type:type_name -> pactus.VoteType - 25, // 9: pactus.ConsensusInfo.votes:type_name -> pactus.VoteInfo - 11, // 10: pactus.Blockchain.GetBlock:input_type -> pactus.GetBlockRequest - 13, // 11: pactus.Blockchain.GetBlockHash:input_type -> pactus.GetBlockHashRequest - 15, // 12: pactus.Blockchain.GetBlockHeight:input_type -> pactus.GetBlockHeightRequest - 17, // 13: pactus.Blockchain.GetBlockchainInfo:input_type -> pactus.GetBlockchainInfoRequest - 19, // 14: pactus.Blockchain.GetConsensusInfo:input_type -> pactus.GetConsensusInfoRequest - 2, // 15: pactus.Blockchain.GetAccount:input_type -> pactus.GetAccountRequest - 6, // 16: pactus.Blockchain.GetValidator:input_type -> pactus.GetValidatorRequest - 7, // 17: pactus.Blockchain.GetValidatorByNumber:input_type -> pactus.GetValidatorByNumberRequest - 4, // 18: pactus.Blockchain.GetValidatorAddresses:input_type -> pactus.GetValidatorAddressesRequest - 9, // 19: pactus.Blockchain.GetPublicKey:input_type -> pactus.GetPublicKeyRequest - 12, // 20: pactus.Blockchain.GetBlock:output_type -> pactus.GetBlockResponse - 14, // 21: pactus.Blockchain.GetBlockHash:output_type -> pactus.GetBlockHashResponse - 16, // 22: pactus.Blockchain.GetBlockHeight:output_type -> pactus.GetBlockHeightResponse - 18, // 23: pactus.Blockchain.GetBlockchainInfo:output_type -> pactus.GetBlockchainInfoResponse - 20, // 24: pactus.Blockchain.GetConsensusInfo:output_type -> pactus.GetConsensusInfoResponse - 3, // 25: pactus.Blockchain.GetAccount:output_type -> pactus.GetAccountResponse - 8, // 26: pactus.Blockchain.GetValidator:output_type -> pactus.GetValidatorResponse - 8, // 27: pactus.Blockchain.GetValidatorByNumber:output_type -> pactus.GetValidatorResponse - 5, // 28: pactus.Blockchain.GetValidatorAddresses:output_type -> pactus.GetValidatorAddressesResponse - 10, // 29: pactus.Blockchain.GetPublicKey:output_type -> pactus.GetPublicKeyResponse - 20, // [20:30] is the sub-list for method output_type - 10, // [10:20] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 25, // 3: pactus.GetBlockResponse.header:type_name -> pactus.BlockHeaderInfo + 26, // 4: pactus.GetBlockResponse.prev_cert:type_name -> pactus.CertificateInfo + 29, // 5: pactus.GetBlockResponse.txs:type_name -> pactus.TransactionInfo + 23, // 6: pactus.GetBlockchainInfoResponse.committee_validators:type_name -> pactus.ValidatorInfo + 28, // 7: pactus.GetConsensusInfoResponse.instances:type_name -> pactus.ConsensusInfo + 30, // 8: pactus.GetTxPoolContentRequest.payload_type:type_name -> pactus.PayloadType + 29, // 9: pactus.GetTxPoolContentResponse.txs:type_name -> pactus.TransactionInfo + 1, // 10: pactus.VoteInfo.type:type_name -> pactus.VoteType + 27, // 11: pactus.ConsensusInfo.votes:type_name -> pactus.VoteInfo + 11, // 12: pactus.Blockchain.GetBlock:input_type -> pactus.GetBlockRequest + 13, // 13: pactus.Blockchain.GetBlockHash:input_type -> pactus.GetBlockHashRequest + 15, // 14: pactus.Blockchain.GetBlockHeight:input_type -> pactus.GetBlockHeightRequest + 17, // 15: pactus.Blockchain.GetBlockchainInfo:input_type -> pactus.GetBlockchainInfoRequest + 19, // 16: pactus.Blockchain.GetConsensusInfo:input_type -> pactus.GetConsensusInfoRequest + 2, // 17: pactus.Blockchain.GetAccount:input_type -> pactus.GetAccountRequest + 6, // 18: pactus.Blockchain.GetValidator:input_type -> pactus.GetValidatorRequest + 7, // 19: pactus.Blockchain.GetValidatorByNumber:input_type -> pactus.GetValidatorByNumberRequest + 4, // 20: pactus.Blockchain.GetValidatorAddresses:input_type -> pactus.GetValidatorAddressesRequest + 9, // 21: pactus.Blockchain.GetPublicKey:input_type -> pactus.GetPublicKeyRequest + 21, // 22: pactus.Blockchain.GetTxPoolContent:input_type -> pactus.GetTxPoolContentRequest + 12, // 23: pactus.Blockchain.GetBlock:output_type -> pactus.GetBlockResponse + 14, // 24: pactus.Blockchain.GetBlockHash:output_type -> pactus.GetBlockHashResponse + 16, // 25: pactus.Blockchain.GetBlockHeight:output_type -> pactus.GetBlockHeightResponse + 18, // 26: pactus.Blockchain.GetBlockchainInfo:output_type -> pactus.GetBlockchainInfoResponse + 20, // 27: pactus.Blockchain.GetConsensusInfo:output_type -> pactus.GetConsensusInfoResponse + 3, // 28: pactus.Blockchain.GetAccount:output_type -> pactus.GetAccountResponse + 8, // 29: pactus.Blockchain.GetValidator:output_type -> pactus.GetValidatorResponse + 8, // 30: pactus.Blockchain.GetValidatorByNumber:output_type -> pactus.GetValidatorResponse + 5, // 31: pactus.Blockchain.GetValidatorAddresses:output_type -> pactus.GetValidatorAddressesResponse + 10, // 32: pactus.Blockchain.GetPublicKey:output_type -> pactus.GetPublicKeyResponse + 22, // 33: pactus.Blockchain.GetTxPoolContent:output_type -> pactus.GetTxPoolContentResponse + 23, // [23:34] is the sub-list for method output_type + 12, // [12:23] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_blockchain_proto_init() } @@ -2045,7 +2165,7 @@ func file_blockchain_proto_init() { } file_transaction_proto_init() if !protoimpl.UnsafeEnabled { - file_blockchain_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAccountRequest); i { case 0: return &v.state @@ -2057,7 +2177,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAccountResponse); i { case 0: return &v.state @@ -2069,7 +2189,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorAddressesRequest); i { case 0: return &v.state @@ -2081,7 +2201,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorAddressesResponse); i { case 0: return &v.state @@ -2093,7 +2213,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorRequest); i { case 0: return &v.state @@ -2105,7 +2225,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[5].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorByNumberRequest); i { case 0: return &v.state @@ -2117,7 +2237,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[6].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorResponse); i { case 0: return &v.state @@ -2129,7 +2249,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[7].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetPublicKeyRequest); i { case 0: return &v.state @@ -2141,7 +2261,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[8].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetPublicKeyResponse); i { case 0: return &v.state @@ -2153,7 +2273,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[9].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockRequest); i { case 0: return &v.state @@ -2165,7 +2285,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[10].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockResponse); i { case 0: return &v.state @@ -2177,7 +2297,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[11].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockHashRequest); i { case 0: return &v.state @@ -2189,7 +2309,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[12].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockHashResponse); i { case 0: return &v.state @@ -2201,7 +2321,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[13].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockHeightRequest); i { case 0: return &v.state @@ -2213,7 +2333,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[14].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockHeightResponse); i { case 0: return &v.state @@ -2225,7 +2345,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[15].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockchainInfoRequest); i { case 0: return &v.state @@ -2237,7 +2357,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[16].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBlockchainInfoResponse); i { case 0: return &v.state @@ -2249,7 +2369,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[17].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConsensusInfoRequest); i { case 0: return &v.state @@ -2261,7 +2381,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[18].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetConsensusInfoResponse); i { case 0: return &v.state @@ -2273,7 +2393,31 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[19].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxPoolContentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_blockchain_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxPoolContentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_blockchain_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidatorInfo); i { case 0: return &v.state @@ -2285,7 +2429,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[20].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AccountInfo); i { case 0: return &v.state @@ -2297,7 +2441,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[21].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockHeaderInfo); i { case 0: return &v.state @@ -2309,7 +2453,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[22].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CertificateInfo); i { case 0: return &v.state @@ -2321,7 +2465,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[23].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VoteInfo); i { case 0: return &v.state @@ -2333,7 +2477,7 @@ func file_blockchain_proto_init() { return nil } } - file_blockchain_proto_msgTypes[24].Exporter = func(v any, i int) any { + file_blockchain_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConsensusInfo); i { case 0: return &v.state @@ -2352,7 +2496,7 @@ func file_blockchain_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_blockchain_proto_rawDesc, NumEnums: 2, - NumMessages: 25, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, diff --git a/www/grpc/gen/go/blockchain.pb.gw.go b/www/grpc/gen/go/blockchain.pb.gw.go index 800fe41a6..1ebdd34d2 100644 --- a/www/grpc/gen/go/blockchain.pb.gw.go +++ b/www/grpc/gen/go/blockchain.pb.gw.go @@ -556,21 +556,21 @@ func RegisterBlockchainHandlerServer(ctx context.Context, mux *runtime.ServeMux, // RegisterBlockchainHandlerFromEndpoint is same as RegisterBlockchainHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterBlockchainHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.NewClient(endpoint, opts...) + conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/www/grpc/gen/go/blockchain_grpc.pb.go b/www/grpc/gen/go/blockchain_grpc.pb.go index 026467610..334b14016 100644 --- a/www/grpc/gen/go/blockchain_grpc.pb.go +++ b/www/grpc/gen/go/blockchain_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.3.0 // - protoc (unknown) // source: blockchain.proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 const ( Blockchain_GetBlock_FullMethodName = "/pactus.Blockchain/GetBlock" @@ -29,13 +29,12 @@ const ( Blockchain_GetValidatorByNumber_FullMethodName = "/pactus.Blockchain/GetValidatorByNumber" Blockchain_GetValidatorAddresses_FullMethodName = "/pactus.Blockchain/GetValidatorAddresses" Blockchain_GetPublicKey_FullMethodName = "/pactus.Blockchain/GetPublicKey" + Blockchain_GetTxPoolContent_FullMethodName = "/pactus.Blockchain/GetTxPoolContent" ) // BlockchainClient is the client API for Blockchain service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -// -// Blockchain service defines RPC methods for interacting with the blockchain. type BlockchainClient interface { // GetBlock retrieves information about a block based on the provided request // parameters. @@ -62,6 +61,8 @@ type BlockchainClient interface { // GetPublicKey retrieves the public key of an account based on the provided // address. GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) + // GetTxPoolContent retrieves current transactions on the TXPool. + GetTxPoolContent(ctx context.Context, in *GetTxPoolContentRequest, opts ...grpc.CallOption) (*GetTxPoolContentResponse, error) } type blockchainClient struct { @@ -73,9 +74,8 @@ func NewBlockchainClient(cc grpc.ClientConnInterface) BlockchainClient { } func (c *blockchainClient) GetBlock(ctx context.Context, in *GetBlockRequest, opts ...grpc.CallOption) (*GetBlockResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBlockResponse) - err := c.cc.Invoke(ctx, Blockchain_GetBlock_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetBlock_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -83,9 +83,8 @@ func (c *blockchainClient) GetBlock(ctx context.Context, in *GetBlockRequest, op } func (c *blockchainClient) GetBlockHash(ctx context.Context, in *GetBlockHashRequest, opts ...grpc.CallOption) (*GetBlockHashResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBlockHashResponse) - err := c.cc.Invoke(ctx, Blockchain_GetBlockHash_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetBlockHash_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -93,9 +92,8 @@ func (c *blockchainClient) GetBlockHash(ctx context.Context, in *GetBlockHashReq } func (c *blockchainClient) GetBlockHeight(ctx context.Context, in *GetBlockHeightRequest, opts ...grpc.CallOption) (*GetBlockHeightResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBlockHeightResponse) - err := c.cc.Invoke(ctx, Blockchain_GetBlockHeight_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetBlockHeight_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -103,9 +101,8 @@ func (c *blockchainClient) GetBlockHeight(ctx context.Context, in *GetBlockHeigh } func (c *blockchainClient) GetBlockchainInfo(ctx context.Context, in *GetBlockchainInfoRequest, opts ...grpc.CallOption) (*GetBlockchainInfoResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBlockchainInfoResponse) - err := c.cc.Invoke(ctx, Blockchain_GetBlockchainInfo_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetBlockchainInfo_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -113,9 +110,8 @@ func (c *blockchainClient) GetBlockchainInfo(ctx context.Context, in *GetBlockch } func (c *blockchainClient) GetConsensusInfo(ctx context.Context, in *GetConsensusInfoRequest, opts ...grpc.CallOption) (*GetConsensusInfoResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetConsensusInfoResponse) - err := c.cc.Invoke(ctx, Blockchain_GetConsensusInfo_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetConsensusInfo_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -123,9 +119,8 @@ func (c *blockchainClient) GetConsensusInfo(ctx context.Context, in *GetConsensu } func (c *blockchainClient) GetAccount(ctx context.Context, in *GetAccountRequest, opts ...grpc.CallOption) (*GetAccountResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetAccountResponse) - err := c.cc.Invoke(ctx, Blockchain_GetAccount_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetAccount_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -133,9 +128,8 @@ func (c *blockchainClient) GetAccount(ctx context.Context, in *GetAccountRequest } func (c *blockchainClient) GetValidator(ctx context.Context, in *GetValidatorRequest, opts ...grpc.CallOption) (*GetValidatorResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetValidatorResponse) - err := c.cc.Invoke(ctx, Blockchain_GetValidator_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetValidator_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -143,9 +137,8 @@ func (c *blockchainClient) GetValidator(ctx context.Context, in *GetValidatorReq } func (c *blockchainClient) GetValidatorByNumber(ctx context.Context, in *GetValidatorByNumberRequest, opts ...grpc.CallOption) (*GetValidatorResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetValidatorResponse) - err := c.cc.Invoke(ctx, Blockchain_GetValidatorByNumber_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetValidatorByNumber_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -153,9 +146,8 @@ func (c *blockchainClient) GetValidatorByNumber(ctx context.Context, in *GetVali } func (c *blockchainClient) GetValidatorAddresses(ctx context.Context, in *GetValidatorAddressesRequest, opts ...grpc.CallOption) (*GetValidatorAddressesResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetValidatorAddressesResponse) - err := c.cc.Invoke(ctx, Blockchain_GetValidatorAddresses_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetValidatorAddresses_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -163,9 +155,17 @@ func (c *blockchainClient) GetValidatorAddresses(ctx context.Context, in *GetVal } func (c *blockchainClient) GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPublicKeyResponse) - err := c.cc.Invoke(ctx, Blockchain_GetPublicKey_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Blockchain_GetPublicKey_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *blockchainClient) GetTxPoolContent(ctx context.Context, in *GetTxPoolContentRequest, opts ...grpc.CallOption) (*GetTxPoolContentResponse, error) { + out := new(GetTxPoolContentResponse) + err := c.cc.Invoke(ctx, Blockchain_GetTxPoolContent_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -175,8 +175,6 @@ func (c *blockchainClient) GetPublicKey(ctx context.Context, in *GetPublicKeyReq // BlockchainServer is the server API for Blockchain service. // All implementations should embed UnimplementedBlockchainServer // for forward compatibility -// -// Blockchain service defines RPC methods for interacting with the blockchain. type BlockchainServer interface { // GetBlock retrieves information about a block based on the provided request // parameters. @@ -203,6 +201,8 @@ type BlockchainServer interface { // GetPublicKey retrieves the public key of an account based on the provided // address. GetPublicKey(context.Context, *GetPublicKeyRequest) (*GetPublicKeyResponse, error) + // GetTxPoolContent retrieves current transactions on the TXPool. + GetTxPoolContent(context.Context, *GetTxPoolContentRequest) (*GetTxPoolContentResponse, error) } // UnimplementedBlockchainServer should be embedded to have forward compatible implementations. @@ -239,6 +239,9 @@ func (UnimplementedBlockchainServer) GetValidatorAddresses(context.Context, *Get func (UnimplementedBlockchainServer) GetPublicKey(context.Context, *GetPublicKeyRequest) (*GetPublicKeyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPublicKey not implemented") } +func (UnimplementedBlockchainServer) GetTxPoolContent(context.Context, *GetTxPoolContentRequest) (*GetTxPoolContentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTxPoolContent not implemented") +} // UnsafeBlockchainServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to BlockchainServer will @@ -431,6 +434,24 @@ func _Blockchain_GetPublicKey_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Blockchain_GetTxPoolContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTxPoolContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BlockchainServer).GetTxPoolContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Blockchain_GetTxPoolContent_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BlockchainServer).GetTxPoolContent(ctx, req.(*GetTxPoolContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Blockchain_ServiceDesc is the grpc.ServiceDesc for Blockchain service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -478,6 +499,10 @@ var Blockchain_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetPublicKey", Handler: _Blockchain_GetPublicKey_Handler, }, + { + MethodName: "GetTxPoolContent", + Handler: _Blockchain_GetTxPoolContent_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "blockchain.proto", diff --git a/www/grpc/gen/go/blockchain_jgw.pb.go b/www/grpc/gen/go/blockchain_jgw.pb.go index 4d0acbb61..a6fd8d15e 100644 --- a/www/grpc/gen/go/blockchain_jgw.pb.go +++ b/www/grpc/gen/go/blockchain_jgw.pb.go @@ -206,5 +206,22 @@ func (s *BlockchainJsonRPC) Methods() map[string]func(ctx context.Context, messa return s.client.GetPublicKey(metadata.NewOutgoingContext(ctx, jrpcData.Headers), req) }, + + "pactus.blockchain.get_tx_pool_content": func(ctx context.Context, data json.RawMessage) (any, error) { + req := new(GetTxPoolContentRequest) + + var jrpcData paramsAndHeadersBlockchain + + if err := json.Unmarshal(data, &jrpcData); err != nil { + return nil, err + } + + err := protojson.Unmarshal(jrpcData.Params, req) + if err != nil { + return nil, err + } + + return s.client.GetTxPoolContent(metadata.NewOutgoingContext(ctx, jrpcData.Headers), req) + }, } } diff --git a/www/grpc/gen/go/network.pb.go b/www/grpc/gen/go/network.pb.go index e3e6e3367..8fede558d 100644 --- a/www/grpc/gen/go/network.pb.go +++ b/www/grpc/gen/go/network.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.33.0 // protoc (unknown) // source: network.proto @@ -802,7 +802,7 @@ func file_network_proto_rawDescGZIP() []byte { } var file_network_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_network_proto_goTypes = []any{ +var file_network_proto_goTypes = []interface{}{ (*GetNetworkInfoRequest)(nil), // 0: pactus.GetNetworkInfoRequest (*GetNetworkInfoResponse)(nil), // 1: pactus.GetNetworkInfoResponse (*GetNodeInfoRequest)(nil), // 2: pactus.GetNodeInfoRequest @@ -838,7 +838,7 @@ func file_network_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_network_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNetworkInfoRequest); i { case 0: return &v.state @@ -850,7 +850,7 @@ func file_network_proto_init() { return nil } } - file_network_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNetworkInfoResponse); i { case 0: return &v.state @@ -862,7 +862,7 @@ func file_network_proto_init() { return nil } } - file_network_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNodeInfoRequest); i { case 0: return &v.state @@ -874,7 +874,7 @@ func file_network_proto_init() { return nil } } - file_network_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnectionInfo); i { case 0: return &v.state @@ -886,7 +886,7 @@ func file_network_proto_init() { return nil } } - file_network_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNodeInfoResponse); i { case 0: return &v.state @@ -898,7 +898,7 @@ func file_network_proto_init() { return nil } } - file_network_proto_msgTypes[5].Exporter = func(v any, i int) any { + file_network_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerInfo); i { case 0: return &v.state diff --git a/www/grpc/gen/go/network.pb.gw.go b/www/grpc/gen/go/network.pb.gw.go index 9089b05ab..47aac6294 100644 --- a/www/grpc/gen/go/network.pb.gw.go +++ b/www/grpc/gen/go/network.pb.gw.go @@ -147,21 +147,21 @@ func RegisterNetworkHandlerServer(ctx context.Context, mux *runtime.ServeMux, se // RegisterNetworkHandlerFromEndpoint is same as RegisterNetworkHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterNetworkHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.NewClient(endpoint, opts...) + conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/www/grpc/gen/go/network_grpc.pb.go b/www/grpc/gen/go/network_grpc.pb.go index 19900a7dd..f74a0f3bc 100644 --- a/www/grpc/gen/go/network_grpc.pb.go +++ b/www/grpc/gen/go/network_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.3.0 // - protoc (unknown) // source: network.proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 const ( Network_GetNetworkInfo_FullMethodName = "/pactus.Network/GetNetworkInfo" @@ -26,8 +26,6 @@ const ( // NetworkClient is the client API for Network service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -// -// Network service provides RPCs for retrieving information about the network. type NetworkClient interface { // GetNetworkInfo retrieves information about the overall network. GetNetworkInfo(ctx context.Context, in *GetNetworkInfoRequest, opts ...grpc.CallOption) (*GetNetworkInfoResponse, error) @@ -44,9 +42,8 @@ func NewNetworkClient(cc grpc.ClientConnInterface) NetworkClient { } func (c *networkClient) GetNetworkInfo(ctx context.Context, in *GetNetworkInfoRequest, opts ...grpc.CallOption) (*GetNetworkInfoResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetNetworkInfoResponse) - err := c.cc.Invoke(ctx, Network_GetNetworkInfo_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Network_GetNetworkInfo_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -54,9 +51,8 @@ func (c *networkClient) GetNetworkInfo(ctx context.Context, in *GetNetworkInfoRe } func (c *networkClient) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetNodeInfoResponse) - err := c.cc.Invoke(ctx, Network_GetNodeInfo_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Network_GetNodeInfo_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -66,8 +62,6 @@ func (c *networkClient) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, // NetworkServer is the server API for Network service. // All implementations should embed UnimplementedNetworkServer // for forward compatibility -// -// Network service provides RPCs for retrieving information about the network. type NetworkServer interface { // GetNetworkInfo retrieves information about the overall network. GetNetworkInfo(context.Context, *GetNetworkInfoRequest) (*GetNetworkInfoResponse, error) diff --git a/www/grpc/gen/go/transaction.pb.go b/www/grpc/gen/go/transaction.pb.go index 38346a825..efede046d 100644 --- a/www/grpc/gen/go/transaction.pb.go +++ b/www/grpc/gen/go/transaction.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.33.0 // protoc (unknown) // source: transaction.proto @@ -1653,7 +1653,7 @@ func file_transaction_proto_rawDescGZIP() []byte { var file_transaction_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 17) -var file_transaction_proto_goTypes = []any{ +var file_transaction_proto_goTypes = []interface{}{ (PayloadType)(0), // 0: pactus.PayloadType (TransactionVerbosity)(0), // 1: pactus.TransactionVerbosity (*GetTransactionRequest)(nil), // 2: pactus.GetTransactionRequest @@ -1711,7 +1711,7 @@ func file_transaction_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_transaction_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionRequest); i { case 0: return &v.state @@ -1723,7 +1723,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionResponse); i { case 0: return &v.state @@ -1735,7 +1735,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CalculateFeeRequest); i { case 0: return &v.state @@ -1747,7 +1747,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CalculateFeeResponse); i { case 0: return &v.state @@ -1759,7 +1759,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BroadcastTransactionRequest); i { case 0: return &v.state @@ -1771,7 +1771,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[5].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BroadcastTransactionResponse); i { case 0: return &v.state @@ -1783,7 +1783,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[6].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRawTransferTransactionRequest); i { case 0: return &v.state @@ -1795,7 +1795,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[7].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRawBondTransactionRequest); i { case 0: return &v.state @@ -1807,7 +1807,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[8].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRawUnbondTransactionRequest); i { case 0: return &v.state @@ -1819,7 +1819,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[9].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRawWithdrawTransactionRequest); i { case 0: return &v.state @@ -1831,7 +1831,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[10].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRawTransactionResponse); i { case 0: return &v.state @@ -1843,7 +1843,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[11].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadTransfer); i { case 0: return &v.state @@ -1855,7 +1855,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[12].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadBond); i { case 0: return &v.state @@ -1867,7 +1867,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[13].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadSortition); i { case 0: return &v.state @@ -1879,7 +1879,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[14].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadUnbond); i { case 0: return &v.state @@ -1891,7 +1891,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[15].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadWithdraw); i { case 0: return &v.state @@ -1903,7 +1903,7 @@ func file_transaction_proto_init() { return nil } } - file_transaction_proto_msgTypes[16].Exporter = func(v any, i int) any { + file_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfo); i { case 0: return &v.state @@ -1916,7 +1916,7 @@ func file_transaction_proto_init() { } } } - file_transaction_proto_msgTypes[16].OneofWrappers = []any{ + file_transaction_proto_msgTypes[16].OneofWrappers = []interface{}{ (*TransactionInfo_Transfer)(nil), (*TransactionInfo_Bond)(nil), (*TransactionInfo_Sortition)(nil), diff --git a/www/grpc/gen/go/transaction.pb.gw.go b/www/grpc/gen/go/transaction.pb.gw.go index 52f00400b..1a859fee5 100644 --- a/www/grpc/gen/go/transaction.pb.gw.go +++ b/www/grpc/gen/go/transaction.pb.gw.go @@ -470,21 +470,21 @@ func RegisterTransactionHandlerServer(ctx context.Context, mux *runtime.ServeMux // RegisterTransactionHandlerFromEndpoint is same as RegisterTransactionHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterTransactionHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.NewClient(endpoint, opts...) + conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/www/grpc/gen/go/transaction_grpc.pb.go b/www/grpc/gen/go/transaction_grpc.pb.go index a561a93da..d520786ca 100644 --- a/www/grpc/gen/go/transaction_grpc.pb.go +++ b/www/grpc/gen/go/transaction_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.3.0 // - protoc (unknown) // source: transaction.proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 const ( Transaction_GetTransaction_FullMethodName = "/pactus.Transaction/GetTransaction" @@ -31,9 +31,6 @@ const ( // TransactionClient is the client API for Transaction service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -// -// Transaction service defines various RPC methods for interacting with -// transactions. type TransactionClient interface { // GetTransaction retrieves transaction details based on the provided request // parameters. @@ -62,9 +59,8 @@ func NewTransactionClient(cc grpc.ClientConnInterface) TransactionClient { } func (c *transactionClient) GetTransaction(ctx context.Context, in *GetTransactionRequest, opts ...grpc.CallOption) (*GetTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_GetTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_GetTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -72,9 +68,8 @@ func (c *transactionClient) GetTransaction(ctx context.Context, in *GetTransacti } func (c *transactionClient) CalculateFee(ctx context.Context, in *CalculateFeeRequest, opts ...grpc.CallOption) (*CalculateFeeResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CalculateFeeResponse) - err := c.cc.Invoke(ctx, Transaction_CalculateFee_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_CalculateFee_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -82,9 +77,8 @@ func (c *transactionClient) CalculateFee(ctx context.Context, in *CalculateFeeRe } func (c *transactionClient) BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BroadcastTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_BroadcastTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_BroadcastTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -92,9 +86,8 @@ func (c *transactionClient) BroadcastTransaction(ctx context.Context, in *Broadc } func (c *transactionClient) GetRawTransferTransaction(ctx context.Context, in *GetRawTransferTransactionRequest, opts ...grpc.CallOption) (*GetRawTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetRawTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_GetRawTransferTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_GetRawTransferTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -102,9 +95,8 @@ func (c *transactionClient) GetRawTransferTransaction(ctx context.Context, in *G } func (c *transactionClient) GetRawBondTransaction(ctx context.Context, in *GetRawBondTransactionRequest, opts ...grpc.CallOption) (*GetRawTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetRawTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_GetRawBondTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_GetRawBondTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -112,9 +104,8 @@ func (c *transactionClient) GetRawBondTransaction(ctx context.Context, in *GetRa } func (c *transactionClient) GetRawUnbondTransaction(ctx context.Context, in *GetRawUnbondTransactionRequest, opts ...grpc.CallOption) (*GetRawTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetRawTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_GetRawUnbondTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_GetRawUnbondTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -122,9 +113,8 @@ func (c *transactionClient) GetRawUnbondTransaction(ctx context.Context, in *Get } func (c *transactionClient) GetRawWithdrawTransaction(ctx context.Context, in *GetRawWithdrawTransactionRequest, opts ...grpc.CallOption) (*GetRawTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetRawTransactionResponse) - err := c.cc.Invoke(ctx, Transaction_GetRawWithdrawTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Transaction_GetRawWithdrawTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -134,9 +124,6 @@ func (c *transactionClient) GetRawWithdrawTransaction(ctx context.Context, in *G // TransactionServer is the server API for Transaction service. // All implementations should embed UnimplementedTransactionServer // for forward compatibility -// -// Transaction service defines various RPC methods for interacting with -// transactions. type TransactionServer interface { // GetTransaction retrieves transaction details based on the provided request // parameters. diff --git a/www/grpc/gen/go/wallet.pb.go b/www/grpc/gen/go/wallet.pb.go index e62abf3ba..ac388c140 100644 --- a/www/grpc/gen/go/wallet.pb.go +++ b/www/grpc/gen/go/wallet.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.33.0 // protoc (unknown) // source: wallet.proto @@ -1406,7 +1406,7 @@ func file_wallet_proto_rawDescGZIP() []byte { var file_wallet_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_wallet_proto_goTypes = []any{ +var file_wallet_proto_goTypes = []interface{}{ (AddressType)(0), // 0: pactus.AddressType (*AddressInfo)(nil), // 1: pactus.AddressInfo (*HistoryInfo)(nil), // 2: pactus.HistoryInfo @@ -1465,7 +1465,7 @@ func file_wallet_proto_init() { } file_transaction_proto_init() if !protoimpl.UnsafeEnabled { - file_wallet_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddressInfo); i { case 0: return &v.state @@ -1477,7 +1477,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryInfo); i { case 0: return &v.state @@ -1489,7 +1489,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAddressHistoryRequest); i { case 0: return &v.state @@ -1501,7 +1501,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAddressHistoryResponse); i { case 0: return &v.state @@ -1513,7 +1513,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNewAddressRequest); i { case 0: return &v.state @@ -1525,7 +1525,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[5].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNewAddressResponse); i { case 0: return &v.state @@ -1537,7 +1537,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[6].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreWalletRequest); i { case 0: return &v.state @@ -1549,7 +1549,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[7].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestoreWalletResponse); i { case 0: return &v.state @@ -1561,7 +1561,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[8].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateWalletRequest); i { case 0: return &v.state @@ -1573,7 +1573,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[9].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateWalletResponse); i { case 0: return &v.state @@ -1585,7 +1585,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[10].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoadWalletRequest); i { case 0: return &v.state @@ -1597,7 +1597,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[11].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoadWalletResponse); i { case 0: return &v.state @@ -1609,7 +1609,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[12].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnloadWalletRequest); i { case 0: return &v.state @@ -1621,7 +1621,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[13].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnloadWalletResponse); i { case 0: return &v.state @@ -1633,7 +1633,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[14].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorAddressRequest); i { case 0: return &v.state @@ -1645,7 +1645,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[15].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidatorAddressResponse); i { case 0: return &v.state @@ -1657,7 +1657,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[16].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignRawTransactionRequest); i { case 0: return &v.state @@ -1669,7 +1669,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[17].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignRawTransactionResponse); i { case 0: return &v.state @@ -1681,7 +1681,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[18].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTotalBalanceRequest); i { case 0: return &v.state @@ -1693,7 +1693,7 @@ func file_wallet_proto_init() { return nil } } - file_wallet_proto_msgTypes[19].Exporter = func(v any, i int) any { + file_wallet_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTotalBalanceResponse); i { case 0: return &v.state diff --git a/www/grpc/gen/go/wallet.pb.gw.go b/www/grpc/gen/go/wallet.pb.gw.go index 917982457..a47c09f98 100644 --- a/www/grpc/gen/go/wallet.pb.gw.go +++ b/www/grpc/gen/go/wallet.pb.gw.go @@ -531,21 +531,21 @@ func RegisterWalletHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser // RegisterWalletHandlerFromEndpoint is same as RegisterWalletHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterWalletHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.NewClient(endpoint, opts...) + conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/www/grpc/gen/go/wallet_grpc.pb.go b/www/grpc/gen/go/wallet_grpc.pb.go index 21de2044a..c0ea8b2b0 100644 --- a/www/grpc/gen/go/wallet_grpc.pb.go +++ b/www/grpc/gen/go/wallet_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.3.0 // - protoc (unknown) // source: wallet.proto @@ -17,8 +17,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 const ( Wallet_CreateWallet_FullMethodName = "/pactus.Wallet/CreateWallet" @@ -35,8 +35,6 @@ const ( // WalletClient is the client API for Wallet service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -// -// Define the Wallet service with various RPC methods for wallet management. type WalletClient interface { // CreateWallet creates a new wallet with the specified parameters. CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) @@ -68,9 +66,8 @@ func NewWalletClient(cc grpc.ClientConnInterface) WalletClient { } func (c *walletClient) CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateWalletResponse) - err := c.cc.Invoke(ctx, Wallet_CreateWallet_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_CreateWallet_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -78,9 +75,8 @@ func (c *walletClient) CreateWallet(ctx context.Context, in *CreateWalletRequest } func (c *walletClient) RestoreWallet(ctx context.Context, in *RestoreWalletRequest, opts ...grpc.CallOption) (*RestoreWalletResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(RestoreWalletResponse) - err := c.cc.Invoke(ctx, Wallet_RestoreWallet_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_RestoreWallet_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -88,9 +84,8 @@ func (c *walletClient) RestoreWallet(ctx context.Context, in *RestoreWalletReque } func (c *walletClient) LoadWallet(ctx context.Context, in *LoadWalletRequest, opts ...grpc.CallOption) (*LoadWalletResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LoadWalletResponse) - err := c.cc.Invoke(ctx, Wallet_LoadWallet_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_LoadWallet_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -98,9 +93,8 @@ func (c *walletClient) LoadWallet(ctx context.Context, in *LoadWalletRequest, op } func (c *walletClient) UnloadWallet(ctx context.Context, in *UnloadWalletRequest, opts ...grpc.CallOption) (*UnloadWalletResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UnloadWalletResponse) - err := c.cc.Invoke(ctx, Wallet_UnloadWallet_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_UnloadWallet_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -108,9 +102,8 @@ func (c *walletClient) UnloadWallet(ctx context.Context, in *UnloadWalletRequest } func (c *walletClient) GetTotalBalance(ctx context.Context, in *GetTotalBalanceRequest, opts ...grpc.CallOption) (*GetTotalBalanceResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTotalBalanceResponse) - err := c.cc.Invoke(ctx, Wallet_GetTotalBalance_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_GetTotalBalance_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -118,9 +111,8 @@ func (c *walletClient) GetTotalBalance(ctx context.Context, in *GetTotalBalanceR } func (c *walletClient) SignRawTransaction(ctx context.Context, in *SignRawTransactionRequest, opts ...grpc.CallOption) (*SignRawTransactionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SignRawTransactionResponse) - err := c.cc.Invoke(ctx, Wallet_SignRawTransaction_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_SignRawTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -128,9 +120,8 @@ func (c *walletClient) SignRawTransaction(ctx context.Context, in *SignRawTransa } func (c *walletClient) GetValidatorAddress(ctx context.Context, in *GetValidatorAddressRequest, opts ...grpc.CallOption) (*GetValidatorAddressResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetValidatorAddressResponse) - err := c.cc.Invoke(ctx, Wallet_GetValidatorAddress_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_GetValidatorAddress_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -138,9 +129,8 @@ func (c *walletClient) GetValidatorAddress(ctx context.Context, in *GetValidator } func (c *walletClient) GetNewAddress(ctx context.Context, in *GetNewAddressRequest, opts ...grpc.CallOption) (*GetNewAddressResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetNewAddressResponse) - err := c.cc.Invoke(ctx, Wallet_GetNewAddress_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_GetNewAddress_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -148,9 +138,8 @@ func (c *walletClient) GetNewAddress(ctx context.Context, in *GetNewAddressReque } func (c *walletClient) GetAddressHistory(ctx context.Context, in *GetAddressHistoryRequest, opts ...grpc.CallOption) (*GetAddressHistoryResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetAddressHistoryResponse) - err := c.cc.Invoke(ctx, Wallet_GetAddressHistory_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, Wallet_GetAddressHistory_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -160,8 +149,6 @@ func (c *walletClient) GetAddressHistory(ctx context.Context, in *GetAddressHist // WalletServer is the server API for Wallet service. // All implementations should embed UnimplementedWalletServer // for forward compatibility -// -// Define the Wallet service with various RPC methods for wallet management. type WalletServer interface { // CreateWallet creates a new wallet with the specified parameters. CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) diff --git a/www/grpc/gen/java/pactus/blockchain/BlockchainGrpc.java b/www/grpc/gen/java/pactus/blockchain/BlockchainGrpc.java index 7109798cc..5e9a348d9 100644 --- a/www/grpc/gen/java/pactus/blockchain/BlockchainGrpc.java +++ b/www/grpc/gen/java/pactus/blockchain/BlockchainGrpc.java @@ -328,6 +328,37 @@ pactus.blockchain.BlockchainOuterClass.GetPublicKeyResponse> getGetPublicKeyMeth return getGetPublicKeyMethod; } + private static volatile io.grpc.MethodDescriptor+ * GetTxPoolContent retrieves current transactions on the TXPool. + *+ */ + public void getTxPoolContent(pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest request, + io.grpc.stub.StreamObserver
+ * GetTxPoolContent retrieves current transactions on the TXPool. + *+ */ + public void getTxPoolContent(pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest request, + io.grpc.stub.StreamObserver
+ * GetTxPoolContent retrieves current transactions on the TXPool. + *+ */ + public pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse getTxPoolContent(pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetTxPoolContentMethod(), getCallOptions(), request); + } } /** @@ -947,6 +1016,17 @@ public com.google.common.util.concurrent.ListenableFuture
+ * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The enum numeric value on the wire for payloadType.
+ */
+ int getPayloadTypeValue();
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The payloadType.
+ */
+ pactus.transaction.TransactionOuterClass.PayloadType getPayloadType();
+ }
+ /**
+ * + * Request message to retirve transaction pool transactions. + *+ * + * Protobuf type {@code pactus.GetTxPoolContentRequest} + */ + public static final class GetTxPoolContentRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:pactus.GetTxPoolContentRequest) + GetTxPoolContentRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use GetTxPoolContentRequest.newBuilder() to construct. + private GetTxPoolContentRequest(com.google.protobuf.GeneratedMessageV3.Builder> builder) { + super(builder); + } + private GetTxPoolContentRequest() { + payloadType_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GetTxPoolContentRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return pactus.blockchain.BlockchainOuterClass.internal_static_pactus_GetTxPoolContentRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return pactus.blockchain.BlockchainOuterClass.internal_static_pactus_GetTxPoolContentRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest.class, pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest.Builder.class); + } + + public static final int PAYLOAD_TYPE_FIELD_NUMBER = 1; + private int payloadType_; + /** + *
+ * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The enum numeric value on the wire for payloadType.
+ */
+ @java.lang.Override public int getPayloadTypeValue() {
+ return payloadType_;
+ }
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The payloadType.
+ */
+ @java.lang.Override public pactus.transaction.TransactionOuterClass.PayloadType getPayloadType() {
+ @SuppressWarnings("deprecation")
+ pactus.transaction.TransactionOuterClass.PayloadType result = pactus.transaction.TransactionOuterClass.PayloadType.valueOf(payloadType_);
+ return result == null ? pactus.transaction.TransactionOuterClass.PayloadType.UNRECOGNIZED : result;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (payloadType_ != pactus.transaction.TransactionOuterClass.PayloadType.UNKNOWN.getNumber()) {
+ output.writeEnum(1, payloadType_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (payloadType_ != pactus.transaction.TransactionOuterClass.PayloadType.UNKNOWN.getNumber()) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeEnumSize(1, payloadType_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest)) {
+ return super.equals(obj);
+ }
+ pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest other = (pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest) obj;
+
+ if (payloadType_ != other.payloadType_) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + PAYLOAD_TYPE_FIELD_NUMBER;
+ hash = (53 * hash) + payloadType_;
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * + * Request message to retirve transaction pool transactions. + *+ * + * Protobuf type {@code pactus.GetTxPoolContentRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder
+ * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The enum numeric value on the wire for payloadType.
+ */
+ @java.lang.Override public int getPayloadTypeValue() {
+ return payloadType_;
+ }
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @param value The enum numeric value on the wire for payloadType to set.
+ * @return This builder for chaining.
+ */
+ public Builder setPayloadTypeValue(int value) {
+
+ payloadType_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return The payloadType.
+ */
+ @java.lang.Override
+ public pactus.transaction.TransactionOuterClass.PayloadType getPayloadType() {
+ @SuppressWarnings("deprecation")
+ pactus.transaction.TransactionOuterClass.PayloadType result = pactus.transaction.TransactionOuterClass.PayloadType.valueOf(payloadType_);
+ return result == null ? pactus.transaction.TransactionOuterClass.PayloadType.UNRECOGNIZED : result;
+ }
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @param value The payloadType to set.
+ * @return This builder for chaining.
+ */
+ public Builder setPayloadType(pactus.transaction.TransactionOuterClass.PayloadType value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ payloadType_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * + * Payload type of tranactions in the tx pool, 0 is all types. + *+ * + *
.pactus.PayloadType payload_type = 1 [json_name = "payloadType"];
+ * @return This builder for chaining.
+ */
+ public Builder clearPayloadType() {
+
+ payloadType_ = 0;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:pactus.GetTxPoolContentRequest)
+ }
+
+ // @@protoc_insertion_point(class_scope:pactus.GetTxPoolContentRequest)
+ private static final pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest();
+ }
+
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentRequest getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ java.util.List+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ pactus.transaction.TransactionOuterClass.TransactionInfo getTxs(int index);
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ int getTxsCount();
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ java.util.List extends pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder>
+ getTxsOrBuilderList();
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder getTxsOrBuilder(
+ int index);
+ }
+ /**
+ * + * Response message containing transaction pool transactions. + *+ * + * Protobuf type {@code pactus.GetTxPoolContentResponse} + */ + public static final class GetTxPoolContentResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:pactus.GetTxPoolContentResponse) + GetTxPoolContentResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use GetTxPoolContentResponse.newBuilder() to construct. + private GetTxPoolContentResponse(com.google.protobuf.GeneratedMessageV3.Builder> builder) { + super(builder); + } + private GetTxPoolContentResponse() { + txs_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GetTxPoolContentResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return pactus.blockchain.BlockchainOuterClass.internal_static_pactus_GetTxPoolContentResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return pactus.blockchain.BlockchainOuterClass.internal_static_pactus_GetTxPoolContentResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse.class, pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse.Builder.class); + } + + public static final int TXS_FIELD_NUMBER = 1; + private java.util.List
+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ @java.lang.Override
+ public java.util.List+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ @java.lang.Override
+ public java.util.List extends pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder>
+ getTxsOrBuilderList() {
+ return txs_;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ @java.lang.Override
+ public int getTxsCount() {
+ return txs_.size();
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ @java.lang.Override
+ public pactus.transaction.TransactionOuterClass.TransactionInfo getTxs(int index) {
+ return txs_.get(index);
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ @java.lang.Override
+ public pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder getTxsOrBuilder(
+ int index) {
+ return txs_.get(index);
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ for (int i = 0; i < txs_.size(); i++) {
+ output.writeMessage(1, txs_.get(i));
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ for (int i = 0; i < txs_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, txs_.get(i));
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse)) {
+ return super.equals(obj);
+ }
+ pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse other = (pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse) obj;
+
+ if (!getTxsList()
+ .equals(other.getTxsList())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (getTxsCount() > 0) {
+ hash = (37 * hash) + TXS_FIELD_NUMBER;
+ hash = (53 * hash) + getTxsList().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(pactus.blockchain.BlockchainOuterClass.GetTxPoolContentResponse prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * + * Response message containing transaction pool transactions. + *+ * + * Protobuf type {@code pactus.GetTxPoolContentResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder
+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public java.util.List+ * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public int getTxsCount() {
+ if (txsBuilder_ == null) {
+ return txs_.size();
+ } else {
+ return txsBuilder_.getCount();
+ }
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public pactus.transaction.TransactionOuterClass.TransactionInfo getTxs(int index) {
+ if (txsBuilder_ == null) {
+ return txs_.get(index);
+ } else {
+ return txsBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder setTxs(
+ int index, pactus.transaction.TransactionOuterClass.TransactionInfo value) {
+ if (txsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTxsIsMutable();
+ txs_.set(index, value);
+ onChanged();
+ } else {
+ txsBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder setTxs(
+ int index, pactus.transaction.TransactionOuterClass.TransactionInfo.Builder builderForValue) {
+ if (txsBuilder_ == null) {
+ ensureTxsIsMutable();
+ txs_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ txsBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder addTxs(pactus.transaction.TransactionOuterClass.TransactionInfo value) {
+ if (txsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTxsIsMutable();
+ txs_.add(value);
+ onChanged();
+ } else {
+ txsBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder addTxs(
+ int index, pactus.transaction.TransactionOuterClass.TransactionInfo value) {
+ if (txsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTxsIsMutable();
+ txs_.add(index, value);
+ onChanged();
+ } else {
+ txsBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder addTxs(
+ pactus.transaction.TransactionOuterClass.TransactionInfo.Builder builderForValue) {
+ if (txsBuilder_ == null) {
+ ensureTxsIsMutable();
+ txs_.add(builderForValue.build());
+ onChanged();
+ } else {
+ txsBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder addTxs(
+ int index, pactus.transaction.TransactionOuterClass.TransactionInfo.Builder builderForValue) {
+ if (txsBuilder_ == null) {
+ ensureTxsIsMutable();
+ txs_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ txsBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder addAllTxs(
+ java.lang.Iterable extends pactus.transaction.TransactionOuterClass.TransactionInfo> values) {
+ if (txsBuilder_ == null) {
+ ensureTxsIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, txs_);
+ onChanged();
+ } else {
+ txsBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder clearTxs() {
+ if (txsBuilder_ == null) {
+ txs_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ } else {
+ txsBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public Builder removeTxs(int index) {
+ if (txsBuilder_ == null) {
+ ensureTxsIsMutable();
+ txs_.remove(index);
+ onChanged();
+ } else {
+ txsBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public pactus.transaction.TransactionOuterClass.TransactionInfo.Builder getTxsBuilder(
+ int index) {
+ return getTxsFieldBuilder().getBuilder(index);
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder getTxsOrBuilder(
+ int index) {
+ if (txsBuilder_ == null) {
+ return txs_.get(index); } else {
+ return txsBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public java.util.List extends pactus.transaction.TransactionOuterClass.TransactionInfoOrBuilder>
+ getTxsOrBuilderList() {
+ if (txsBuilder_ != null) {
+ return txsBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(txs_);
+ }
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public pactus.transaction.TransactionOuterClass.TransactionInfo.Builder addTxsBuilder() {
+ return getTxsFieldBuilder().addBuilder(
+ pactus.transaction.TransactionOuterClass.TransactionInfo.getDefaultInstance());
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public pactus.transaction.TransactionOuterClass.TransactionInfo.Builder addTxsBuilder(
+ int index) {
+ return getTxsFieldBuilder().addBuilder(
+ index, pactus.transaction.TransactionOuterClass.TransactionInfo.getDefaultInstance());
+ }
+ /**
+ * + * List of the transaction in the pool. + *+ * + *
repeated .pactus.TransactionInfo txs = 1 [json_name = "txs"];
+ */
+ public java.util.ListTw\x8c\xad\x84\xf7\x81X\x9aEs\xeb\xbf\xdb\xce\xe6/mH\x1a\xfa\xefmK\xe0\xcd<\xc3\x9a\xee\xe6\n\xcc-\x8a\\\x1c|\n\xd3\x84\xdcc\xf3\x8a\x0c\xc5\x18\xe6\xde\x98\xd9\xc4\x96\xc2,\xa4\xb3Y@\xda\x98\\Sa\x04f%e\xcb[]\x11\x1d\xb7Q\x99me\x0e\x88K\x95\xc4\xf0X[\xfc\xe0\x159\xcf\xa4[w\xc1\xef\xc2\x03abka\x1eY\xe1U;\xf2W\xaf\xf3Z\xc9\x10\xa2\x90\x83\x8d\x0c\x16\x99\xa5\xdfw\xca\x1b\x8d\xea\xa6\x93\x7f\xda\xde|2\x9c\x04\xbb\xfbj\xfb\x9b\xe8\x0cu\x1bG\xecx%7\x92e\x0f\xbb\xf6\xd0q\x04g'M\xe2T\x1e\x91\x90\xe19\xe3\xf9f\xc4\x8b\xdaJ\xc9v\xd59\x86\x92*d\xd8\xd8\xc9p\xa5\xa58\xa2\x7f&,\xa2u\xa3^\xfa \x9bQ\x9a\x84/a\x12V\xe0\xbe\xbb\xfa\xb6\x17\xdf\xcb\xff\xc9\xe2[&\xf3y\xe7\xf9\xcf/_\"\xe7x\xc7\xce-8\xc1\\bp\xbc%\xe8\xfdp/M\x9c\n\x03&p\xfd\n\xad\x1aK?\xf4b~\xcea\x0f\xadNL.\xce\xca%\x16B;\x95\xe9]Q\xec\x8f\xc7\xca\x84\xb8`7t\x92\xe8\xd0=\x83\xe5\x9fF\xfeX\x19\x1c\x9f]\xbe\x91\xec\xc1\xd6\x19\x07\x083\xf2\x1a\x8d\xbd\x9a\x8f\xfa\xd0\xe1 f\xe8\x89\xcf\x84\x91\xd3'\n\xb7\xcb\x9b\xff\x06\x8e~=\xd6\xa6p\x1bFp\x08|P=\xef\x94\xf0\xdaq\x16Rh\xed\xfa\xaa\xb1\xaa/\xf9\xbbHI\x19U\xee\xed\x12?\xe4\xd6\xdb[\xd7&\xda\xf9\x0b\x1c\xc4\xc6\xf4.\x99\xbe\x0d\xc7%\x97\xc0k\xb2w\x94a\xde\xe6\xfe\x84\xd6|\xeb\x8ao\x0f4\xe2,\x0c\xa4\xd5/\x91\xdb\xdf\x0bd,p.\xe6\xfc\x90:[v[C:\xe0^\xa3\xc1lxp*f;9\xd75\x84CZ1cn\xca\xaf\xeb\xca\xe7\x8f\x0e\xe6\x99\xbd\xc9L\xe7\xcc\xfb4\xc3/~x\xf1\xf2e\xd9'\xf3\xd3~\x94r\xb0\xff\xcc\xf9`\xc5\x01S\x8d\x8b\xf7;\x9f\x97t\xdc\x9b\x0c'\x85\xc3\xbc}w\xa3]\x7fe\xa6o0y\xa3)w\x10\xd6k\x99\x1f\x99\x97y\xd9q\xf5v\xb9\xe9\xd8 .v\xdd\xcd)\xc2\xf9\x15\xaf\x81*KuG\xc7\xdd\x1f\xb8+w\xfc\x8f_=\xf8\x1dz\x87\x1d\x8c\xec\xfe\xde\xc0uW\xae;\xf6\x1c\xf1\xbc\xef9H\xec\x02^V\x08lK\x0e\x03\x93;\x1e\x17\xce\xcf\xf6][\xb7\xa6\xe40\x8d\xb7\xab\x1e\xa1\xbc\x0c\xaf\xf2^89i\xf5]~h\xf7\x89\xbbj:\x1d\xacn\x8am\xcc\x02\xb6<%\xd9\xb9\xa36\x99 \xaaU\xcf&\x86r\x083\xc7\xcb2\xbc~\xc2\xdba\x07\xa92\xd0\xd3\x98c\x86\x87^v\\\xf5\xf2\xb76\xcc\xf3\x8c\xee0:\xa4\xdc%9\xd0\xb8\xf9\x8fA\xb7\xf5\x8b\xdf\x9ax\xcd\x12\xe6\xca\x15\x9eX}\x86\xef),\xb6\xc8K\xc2\xdb\xca\xcd\x98\xbd\x91\x8e\xbez_\xec\xfd\xcd\x00M\x18\xbfG\x18\x89I\x870\xfa\x06\x7f\xe1\xcf\x08\xfe~\x85\xbf\xb1|\x19K .\xde\xbc\xc25P\xe6|1\xb4\x04G\xdd\xcc\xc1\xe7\xa5~\xd3S\xbb\x18\xf7\x95\x9eB.?tm\xf1\xc7\x11\x7f6\x1d,\xd7\x12(_{{\xddR\xc7\x16\xf7\xff\n\x1fY\x85G\xbc\xbc\xc8N\xe6xeOtJ\xa9!-k\xcf\xa1\x11\x8a\x83\x11\xebF\xb7\xdb\xc3\xdaD\xac\xb7\xd17q{\x1d\xf7n\xe0\xb7\xbe\xb5\x87-\xaf\xe9\xdeu4H\x0f1\x88Q\x14X`!E\xe7lbM\x18pn\xa0\xf9\x17\xb4m\x1cZ\xe30\xa0\xd6H\xec\xdc\x94\xfbE\x8c^\x84\xe7\xa0\x1e\x9d\xf7P\x1c%\xd4\x9a\xf8sN\x11\xbeK\xd8<\x1e\xb2\xa0\x87@Ef\x8d\xc6p\xe3\x9c\x05 \xb5\xe8\x83?\xb7\xe8\x9a\x8e,\xbaf\xb1%\x89\x865\xa5q\xb8\x8c\xb9u\xef\xf3{k\xb9\x1a\x83S\xf60\x98?Z\x9a$\xdd\xb3Il\xc5\x94\xc7V\xcc\x16\x94[q\xe4/\xadd\xe1\xf3\xafV\x12p\x1a[\xd0\x11\x96`\xfd\xe0^b\xcc\x02\x0b$=\x11\xb8\xbf\xf1\x83\xb15\xa6\xa3\xb9\x1fQ\x8b\x8e\xeeC\x8b\x06\x82JX\xf7t\xbe\xb4\x04\x93;\x0fG\xfe\xdc\x9a\x87\xd30\x89\xad\x85\xbf\x84@[\xcb\x88\x05\xf1\x04\x90\x81?~\x14\xf9\x8f\x8a^Z\x822\xc2\x1fQ{2g\x0b\x16[I \xd1\x10I\xfc>\\\xc6 x\x10L\x85u7\x05\xe4\xbe\xd2G\xeb\xeeQt\xe6\xd2\x1a\xdd\x8fYd\x8d\xe6\xd0\xb9\xe1b\x99\xc7\xbd\x827\x81\xbd|\x88\xe5\xef\x18B\x07\xdcIX\x81\x9f\x84\x9b\x82\xd3\x18x\x84\x80?\xf0\x14\xfbS\x99\x14G\x8f\xf0+\xc3\xe6Zc\x16\x89? \xd7\x10\xbf\xe1*\x80\xfe\x88G\xf2\x87Yt\x91\xcc\xfd\x98Z\x93\x915\x99Z\x93y\xe8\xc7\xf9xs1P\x02\xf3)\x8d\xe7\x81u\xcfx\x1cF\x82\xe7\x8b\xe9\x94F\xd6,\xbc\xe3\xd6W\xc1\x19\xca\xde\x98\x87S+\x08\xa7\xf3\xf0\xceZ\x86\xcb\xb1\xecNK\x10\x8d1\xfc\x9d\x0b\xfe\x13\x86\x9c\x8f\xee\xe9X\xf4\x9a(\x9c\xc3d\xb0x\xec\xc7\x16O\xf8\x92\x06c+\x8e\x1fE7$\x81\xc1\x83C\xce$\xd0=\xaf\xb2=\xf8\x11\x1d[+\x9f\xc5\xd6\xea\x9e\x06#j\xc9@]\xab{6\xba\xb7\xbe)\x9d\xb9\xf5m\x12F\x0b?\xb6\xbeM\xe2\xa5\xf5M$,\xc21\x0c\xd47\x88|\n\xd3\xf1\xdb2\n'\xd6\xb7e\xfch}\x93\xee.\xc5'\xeb\x1b\x0fG_il}\xe3\xf1\xa3\xc8\x19\x8f\x96(3V\xf8%.\x88\x94\x83\xcf\xf1\x0c\xf3\xf6\x96O>\xbc\xc2\xeb\xd2\xceU\x10\x15\x17u2\xfc\x04\xbd~\xa6(\xeb\xb3N&\x88b\x96\xe1\x9f^\xbc\xec>\xff\xff\xd5\xe6/\xb8{s\xf3G\xbf\x7f\xf8p\xd9\xb1\x9f\xa7G\xae\xdb\x1et\x8f<\x07 n\xc0hd~\xc1J\xb7S\xb5\x00}F\xb838k\xdd\xfa\xado\x9e\xfa\xed\xb6~i\xa9m\x9b\xb8n\x0f\xbc\xdc95\xbb\xa7Y\xfeR\xa0&M\x19\xf2\x9e\xecYe\xa7\x8f\xba\x04p \xbc_v\x91\x9a\x89}tH\x06 .\x1c\x86\x06\xe0\x14X\xe72\x0d\x83\x07\x1e.\x9b\x1b\xf6\xf6D\x11e\x12.\xfa\xc4$\xe1p$B\x9e\xe16\xf5\xbaf\xe7D\x9f\xed>AM\xd6D\x96\xeb\x8e7/2\x07\xe5\x1e,\xeb\x9b^\xf2vY\x9eZe\xb7\xb3\xca\xdb\xf3\xe6E\xe6\xbaw(\xf3J\x1d\xa2<\x9a\xd6#7\xcc\xb2\xbc_\xec>\xf9,\x06\xcakZv\xfb\xb0\xefX\x80\xec\xfew\xd1\xac8r\xb6\x94#g\xf1k\xd8\xf4\x89\xdd\xb40~\x13\xdd\x8a\xffb[\xb5\xdf:]\x81\xc4\xf1o7\xb3\xd8\xc0\x13\xd3\xda\xa2\x0b\x9cV\x86\x7f\xf9\xa1\xfb\xf3/=n\xb8?Ej\xd6\xee\x0f\xc1\x0dw\xfer(\x96\xc0\x00\xf9\\\xfb\xe2\x03\x0f}\xe0\x85O:\xe8\x83-\x18\xa4\xa5\x81?\x9f?\x82\x1b>\x91\x1e@\xb8\xefb\x17F\xe3\x10\xce\xe8bj \xa0\x90\x8d\x11Fps\x0e\xcb=X\xf0Ap\xf7H\xd4\xa4C\xa7\x88\x1aX\x0c|\x918.\x03\x0cdQ\xa1E\xc4\x87H\xd4\xcaWL\xe6\xd5\xdb\xb8\xf8\x02\xb4\x01\x80\xe7\x14\xe2\x8a\xcf!\x00\xea#\xa3\xf3\xb1\x04\x05\xc7\x81\xd0\xff\x00v\x97L\xa7\x10y\x17\x02\xfd\x8b_A\xa5!\x8e\xb4\x1f3\x91\xc0\x16\x82\x8a\x88\xa6E\xe1B\xb4`\xad\xde\x95\x97y\xe4\x89\x05\x08\xbc\x86\x00\x92\xdc\x06\x12\x14 aC\xaa\x8e\xd1;\xff\x1d\xc2\xe8\x8d4\xe9zD\x1e\xdc\x95\xd2\xee)\xc4\x11#~\x13\xc44z\xf0EFN\xe3\x0flA\xc3D\xa2K\xfd\xc8\xf8\x08\xef\xc5g%1\xc8q\x13-\xa3\x12\x92\xf1\xdf\xc0\x80\x0c\x1e%\x02\xb0]@\xd4r\xfd\xf2\x06|*\x8e\xe9(\x1c\xd3\x9b\xab7\xe6s~+\x19B\xf0\x17\x00\xf9s \x00lo\xa1\xd5\xea\xd1\xc3\x03\x943\x100\xa4L\xfc\x80\xc9\x82\x1a\x8e\x10&\x93\xd4$\xc0\xa4\x91\x1a!1t\x82\xfb\xb9\x8e\xc3Hz\x15\x90w\xbb\x10Fb\xef\xf6\xe7P\xf6\x9b \x16\xad4\xc2\xcd\xe7q\xbb\xdf\xfa0\x89Tx\xf9 \xe1\xb1\xa4766\x02\xde+ \x90\xd6MB\xcc\xf0;2\x14\x1e\x05\xfd\xf0R\xbb\xeb6\xf7\xfe\xf7,M\xd9\xea\x83\xf0-\x84K\x06>\xd1\x97\x88s\xfbY>G\xe3\x14\xc0\xc1\x7fc6\xcb\xfb\xe1\x1cmA#\xe1\xd3y\x95eDh\x14\x96O\xf9\xf7\x8b'\x13\xa8Pmf\xb7%#y^\xaf\xb3\xd8\xfc\x04\xae\xab\x8e\xdf1\xaf\x1e\xb1z\x8bi[\x8b9\xa4n\xe6\xc0\xcd\xa4#yc4pi\xee\x8e\xf1\x88&\xde\xf07=\xec0~1\x07\xa0\x9e!w\xb6Kqk\x0c\xa8\xd7\xf8XD\xb8V\xc6\xd4:\"\xc7xz\x8e\xf1\x88/*\x93\xb4\xf6\x02\xe7\xf1\x1a1%\x06\xc5\xc2\xb2\x86\xa2j\x8f\xb3t\x0e\x9f\xba;\xa8\xc1\x91w\x91o6~\x0e\xde1b\x01\xd5\xa1\x91\xfa\xe0?)}\xd2\xd0\xb8_?\xdfR\xcb\xcfT\xb8k\xc8Q&\x84\x90^,Z\x89\x92\xfa\x00\xe02\x8a\xbd\x16;\xfeK*\xf7\xc9Z\x04\xef\xc6\xbe~M\x02l\xd0\x8e@B{Y\x97\x13g9\x01U\xb4x\xc8 \xdc\xba#J\x90E\xc8\xeac{\xa4\xcf\x1f\\\x02\x02\x94\xbfY\x81\xe3\x1f\xb8&\x02\x10d7\xb6\x08\xe0h\x8e\xd7'6\x85\xdc\xd9&\xc3\x0d\xfa\x136\xb1D~K\x9a\x84\xd7\xf1\xf5\xd8\x89\x91\x0c\x1b0`\xbf\x89\xc0N\xbd\x05\xfa\x8d\xe5\x7f)\x06qZ\x1d\xe53\xe3\xda0w\xa05|\xc01\xe8\xd5\xc0\xbd\xe3\xe8\xc6\xdf<\xef\x030o\xb6\x01\xe4\xbd\xd0\xd8\xd7\xab\xf0\xb5E\x8e\x1d\xa4;\xfd\x7fk\x01x\xdf\xb1\xf5\xfbK\x16\"]?g.r%9=0\xd4\xf5s\xf6\xf7\x05\x97\x83_\x94}\xc9\xd9\xcc\xe4\xc5M\x8bw5\xc5\\\x8dUx\xa9\xc3\x10\x0bp[\xa4\xdf\x0b\xf1\xcb\x1cK\x8b\x941\x87\xc5\"\xfd\x9b\xd8\xe2>\x8a\xd9a\x92\x88Xu\x08\xf9\xf7\xab$D\x10\xc9z\xff\xba\xe9vn\xa9H\x90M\x96\xecn \xb2@\xf6\xd1l\xfe\x8d\x12\x1d\xdb;\xb0\x1bk\x02H\xcf\xb0\xbd\x01I\xe5\xea\x9f\xee\x8b\xe0\xe2\x03\xff~\xf1Tq6p2\xdf6\x03\xb3\xfb\x1c\xcaPge\xc2\x04\x01A\x9d\xd1\xfb\x0ez\x98\xf4\xfb8\xf5\xd9,\xe4\x82M0\xe7\x1b\x0fa\x86p\x83\x81T\x80\xe54\xb9*NR[\xb74~\\|\xd2\x1c\x1d\x18\x89\xc5Fpj\xf3\x10\x14\xd5PG\xbb\x03\x1a~\x12\n~\"\xc6\x07\xc2(\x81\xbf\xc08\xffE\xf1/\x8d\xa0\xb1\xef\xff6\x15\xe91\xbe\xa3\xa42\xa9Z\x14\xd9\xf7\x8b'\xae? \x08C\xb7\xb5QHw]b\x19^&,{\x94\xc7H\xf4N}\xcd\x19\xbb\xeb\xfb\xf7PY\xb95r\x1d,%\xb9i\x8b+n\xf5\x81\xb45u\xbb\xceW\xd9\xce\x96\xb8\xd4\xcdR\xb6^\xedk\xea\x13}\xe1\xf5Ucj\x92Vs`\xfe\xfa\x13\xcd\xbc\xd8\x8d\xd8\xf8n7\x93\xf0\x95\xd0\xae\x9e\xea\xd8:\xd7\x07H\x8b\xdbODc\xf5\xa3i\xe4\xef\xcf\x8bG\xea\xcb7\xc8\x8e\xf6\xd1Utr\x05#\x8c\xd6\xdf\x80\x9b4\x84\x8b\xb8\x1a\x90}\x98\x06>sPG)\x86C\xa1(\xc0I\xf2\xf4L\xff\x88\xd8\xd6\xfe\\`{->\xa6\x9a{\xe9;\xaa\xe9i!d\xab\x14\x17R\xb0b\xfc\x97\xde\x009<\x81\x80\x95\xc0Ok#\x14\xa6W\xc3\xd5\xd4T\xffE7\x1b\xff_\x94\xa8\xf1\x04\xb6\x12g\xc4l\xb9\x14 u\xe2b\xcc\xee5He\x0c\x8f\xca\x07s\x85\xf0R?\xdc\x08c\x95\x14S\x05j\xa8\x0dm\x06\x8f\xb5Z\xc2A\x01\x17\xd4u\x96\xd2qIQ\x8dq!}\xcf\xfb~)^\xc59H\xb2\x830\n\xa3\x00m\x95 \x07J\xed\xcfB;-\x8c\xde2V\xef3\xc8\x9b1\xaf\x84\x01i\xa9V\x8a\xb4\x05V\xf2l\x82\xeb\x92lM\x8cMQ\x94hZV\xe0\xa4\"\xd2\xd6 k6\x8bH\xfa\x86\x97xj(e\xac\x04\x12\xbfZ!*a\xe6i\xe4\xcb\xe4:S\x08\xdd\xe5\xbf\x96\x08\xf3\xb9\x9a\x9d\xc8p\x82g\x05.\xe7U\xdd\xfc\x9ftq/:7\xdd\xd5\x82at\x1b\x9bM\xfdU\x83nXh\xad$\xb7\xea\xd4\x84\x99Io~B\x12\xdb/\xaeI\x87`\xd8\x92:\xe0b.\xed=xJ|\xe1$\xae\x9b\x8a\xf4\xaf\xcb\xcb\xcb\x1cy\x13\xdcSu\x92(\x91e\xf6\xc1c\x93\x123\x1c^\\L7\xe1\xc5E\x0fO\x01\xb23\xc7,\xfaK\x98\xc7<\xf2K\xd2\x04q\x81\xf0\xf4\xa2\x17\xcfR\\\xce\xa3Y\x89\xd3\n\xbc\xc5n\xe6\x95S\xb3\xdf\xd3\xcd\xc6O\x89-\x9bh\xc7\xb8\xa2\xd6C\x8a\xe1`)Gx\x96\xe3d\x8e\xe4\xa9\xaf\xb6^X\x1e\xb2lV\xce\xc7\x05)\x14\xe6\xa4fs-9\x11[\x02\x11S4\xc5\x0c\xf1iq\xfb\xa96@3\x9a\x80w\x88\x97\xd5\xecJS\x12\xe0 qO\x9bK\xc6\xd3\x8b\xdex\xda\xef\xe3\xc9\xc5\x05 \xc5\x88\xae\x08\x9bM\xe7cmT\xbe\xf2\xbci\x87\x90\xc4\xf3\xfcbC&x9+\xfb\xfd9\xb9\xd2cr\xafQ\x8a\x0b\xbc\xb4\x83\x92\xe1\xae\xaa\xca\x80q%\x08\xb2:\xdc)\xc2\x13\x12\x8c!Ha<\xe9\xf7q~yyIB\xb4\x9cM\xe6$\xf4\xf2\x98\xc10T\x84\xaf\x1c\xcar\x96\xccI\x81\x15\x86\xd6xn\xd9\x0f+Cj\xe8,\x92d\xaa1%d6W)\xa9\x14\xc0\n\xb5p%\xc9g\xc5\x1c/k\xb6\xb9\x12\x8d\xad8\xa9\x12m6\xfe\x92,k\x01zf\x0b\xab\xe8D\x08\xca\xc3\xf26\xcf\xa5\x06\xad\x1e\xa1\xb1\xb4\xe9\x81&\xb5\xf8-\xa1g\xd5,\x1c`'\xd6\x9a\x8d\xe7Ub\xb8l\xa5\xc7g(\x921rqjG\x07\xd6T8k\xe8Z\xe6\x14\xc8\xc7\xee}H\xe4SQ\"+=\x1a\xd7\xdaZ-\xd0\xb5\xc6\x02sS\xd9\x9e\xf6\xaf\xe1\x05\x05\x8aYTl\x1dK\xe7\x00L^\xb1\x81\xf89\xc9\x0f\xc5U\xa0\xce\x150\x11l| \xb4\x11(2\xe5\x9c\x9aj\xfe\xb2\xd9\x84\x1c%u\xbd\xd7X.\x13\xc2b].(\x89\xda\xecI\xc5\xb4V\x95\xb9{q\x1e1\x11\xb5 \x86\xda\xc8\x868oC\x18r\xb9n\xe1@R\x8e\x9d\xda\x14\x0c\x0dD\x15\xa6\xe0\xe7\xb3`\xde`o\xc6.U\x8f\x02\xe6\x03\xc2%a\x96\x1bj)\xdcP\x95\x13H\x9cG)\x9e\x92\xc4_\xea\xc5\xe3\xc4y\x19\xa7\xd1tk\x0c\xef\xc5f\x03X\x99\xd2\x0cwy\xf1\x03\xbb;\xf8D_\xa6\x8b\xeccW`\xc1\x84H\x89\x01_\x91\"\xeeE\xc2\x0bi\x82{\x08\xdf4\x0chW\xb8\x8a07\x84\x90\xab8\x8dn\x04\xcb\x95&I\x7f\x82\"\xbf\xb0-\xf3)\x02\x00N\xf0\x8d\x05\x85\xa7\xf5\xd37\\\x00\xaf,\x85\x9f\x12\xff\xec\xf8\xec\xfc|tt|\xee\xf9\xe9\x80\xa4\xe0[p4\nO\x8e\x8fOO\x8e\x11\xea\xfb\xe9\xe5\xe5\xd0\xd3\xb5d\xc9\x11\xf2\x86\xc7\xc3\x93\xa3\xe3pt\x8c\xd3>\xff\xee\x0c\x87\xc3S\xcf\x17\x0f\xe1I%\x06;{\xb3\xaa\xc3=\x89\xd3Hg\xd63\xa2\xe5\x8c\xcd\xb9\x00i}\xfc\xf4\xc0ni\xf3{e\xd6\xecCT`\xe2y\xac\x1f\x12B\n-o\x89\x96\xd2\xb1!\xc4\x86\x08\x8b<\xaa\x9co\x8c\xa7\x17\x05g\x14h\n\xd1o~9\x9b\xf2\xcf\x96d\x10\xa2\x08\x1e\xd2\xd9\xb4o\x02\xbb\xcb\xfa\xc8~\xcc\xb3\x8aD\xaa\x076\x80\x81\xe5\xc2k.1\xae\x01\";rZ\xe3\xb0b\\ \x92\xec-\x18//\x12\x08\x95_\xca\xe3\xf6\x92\x84\x08\x17\xb3%\x1f\xd0\xb2oB7\x8a\xedwt\xf6\x8b\x08\xbf\xfa\x8e\xce\xca9\xf9NY\xab\xb1\xfe\xf5f\xc5K\x95\x19\x1a\xdb\xecc\x87\x15\xbf\xce{meK\x8eS;\xc2\x97\x17K\xe0\xfd\x10P\xe1\xe7\xb8\x98\x95s\xbe\x0fu|\x14\x7f\x0e\xad\x84\x87m\x83p\x1a\xb6\x95\xc4iF3%\x05l\xdcIuTW$\xc07d\xa2Fuuq\x03\xe7S~\x82'\xb3+\x18\xd0\xf8\xaa\xdf\x17\x9b\xf1\x9a\\]\xdc\xf05\xba\x8e\xe1e8\xe7\xf8\x13Mm\x07y\xe16\xa0\xe4Y\x7f\xba\xd9t\xae\x91\xe7\xc9\xa2\x12\xe1\xceT\x10\xce\x89\xf6jg\xf7~\xe7\xda\xf3:S\xcfS\x85\x97\xe4F\xab\x0fU\x01l\x02\xc2\x02\x0c\xe7\x1d\xe1\xd4C\x99$\x94F@)y\x17O\xf4N\x99\xe8\x9dr\x1dO\xe3+B\xc8\xcd \x8c)\x15X\x15Q:\xbb\x9a\x93\xda\xe3,\xc1\xc5<\xe2\x85\x9c\x07\xc3\x13\xc2\xef\xa4\x95\\\xe9\xce\x94J\xa3wS?\x11WG\xe1\x86$\xb4\x17s\x1c\xee\"\x9cUJ~\x18^\\\xf8\xbe\xca\x1b\xc8.//S\xe4M8\xfe[\x86\x87\xb1\xe1w~\xe9\x15(\x96\x8e|`>\x98i\x9aVz\xc5 Ds\xe1\xcd\xd1_\xca\xfew\x0fy\x17\x9eM\xad\xb1\xe7\x10\xf3 cO\xe4\xd8\xaf\x84X\xcf\xe2<\xe2\xc2\x1b\xe3\xa2\xfe\x0d\x9f\xcf\x15\xbe\xb6G\x8f\xdf\x91\xa0C\xfckO\xe8\x9e\x9dw\x9eW\xd8*! \x18o\x90R\xa2\xe7r\xed\xdd\x0cB\x84\x99\xcc\xc4\x053\xc5\x0b\x8e\x05\x8c\xce(U\x82!~\xa0\xb6*\xbb\xa08\xc5\xac\xbf\xb4\xa6\xc0\xbb\x04_\x88\x05\xadc4\x1f\xc9\x03\xf5 \x06\xc1\xa7\xdd\x83\xd8\x05\x16\\\x03\x03\x8bS\xe1\x8b\xc3 .\x1es\xdc\xa9\xac\xeb\xce\xc6R\x93\x7f?\x8d\xbb\xdd~\x1auqW\xea\xf4\xdd.~\x1d\xf8\xd1\xe7<\xe6\x10\x8eX\x9f\xa4\x98\xf5\xe1\xe6\x92\x0eI\xe2D\xdb\xa5|\x14u\xbb\x1c\xfcl\x8b\xb9\xec\xf3\n\xa4\xb9F[\xfch\x93\xdf\x96er\x05\x07\xa1-\x16\x99 \xdcK\x84\x8b\xf1k ]7\xf6\\\x0c\xe3\x82t\x82(1\xe6\x19\x173\x11)Ac\xbf\xe0H\x97\x10\x86\xa2D\x9d*\xe68\xc1\xa2\x02d0U\xa3\xfc\x89}\xf8\x98\xed\xc2\xa6\xcaM\x05ZM0Na\xa2\x19\xa9\xd8'\x15\xad^\xd6\xdeM:Z\x82\xc0\xd0\x16\x83\xee\xbaw\x0d*\xe9:k;\x85\xd3\x12g\x03\xc2\xb7S\x9c\x97\xaf\xd6\x99\x9f\x8a3\xc0t\xfd\x9c\xb9\x08\x93\xdd\x9d\xf3\xf4\x14\xe8\xf9k0\xeb\x1d\xda\xe2\xf7y\xf6\xcf\x85\x93]\x08\x04\x00\xeb\x81\xbc-\x9b\xa5\xdfrM\xc1QWo\x1eC\xed+\xb4?\xea\xb8\xc8\xa9\x06@ \xe2%\xd6\xf9*s\x83\xd8\xce\x96\xa0\x18\xa9@\x02\xe9*\xc2++\xee%3\xf3\xba[\xaa\xa5\xed\xd5;e\x8b\xe9\xef\xf9\xe2\xc1\xc9\n\xee(}\xfa\x96\xbfU@\x164\xff\xa5&\x19\x18\x1b\xaa\xc8\x88\x98\x80+\xbc\x1d.\xaf\xd3\x98\xe8\x97c\xe5\xc5`sCh\\\xf1\xc0\xaaL\xa1P\x9dU\x02m\x1d\xc6\xa9\xd4\x04\x840E\xe9\x7fX\xb7\x80WRj\x80\xa4\x85\x81\x9av\xb7l\xc9|/I\xcc5G\xd2\x0c)\xaf0\xa4\x84\xcc\n\x9c\xcf%OJD\x9f\xff\xa0\xf5\xc5\xb3,\xefn\x86\x92{^>\x0b\xe6\xe2\xfb*B\xcb!\xdbCu\x93\x11hZV7\x0d\xb9\x01\xf0\xca\xd6\xf4@+M6\xe7\xf7\xca\xe6\xfeA_\xa4i\xfb\x9e=\xb7oZ\x98\x87(\xf8\xf99\xe72\x87\xcc\x1c\xb6\x97~\xd52\x8c\xd9|D\xa6\x03\xdbC\x91j\x19\xefd\x03RT\xb00\xd61t\xbeA\\\x97\x8a\xc8]]\xf1\x8du \xef\xea\xae\xae\xc9\xa8\xad\x92\xca\xab\x8c\xd4\x85\xf6L\xb4\xf6fUk\xaf\x9e\x16\x08\x17\xa4\x9e\xec\x03\xb2\x02\x15\x95\xac@:\x1fyn\xe2\x80\xfc\x84$\x9e\x07\xc1;2\x84\xa7\xc4=\x14\xf5\x10\xdc\xea\xa3\xc6\xa5\xecK\xc9\x16\xcbT\xdd\xee \xd6\xf2x[$\xeb\xe3\xa2]t\x15Q#=\xd4!\xa4\x075\xdf8\xd7N\xd5}\xb3\xb2j\xb3\xf4m\xfe\xbe\xeei\xac\x08\x0bqj\xc8J\x94\x8e\xd3\xc8:A\xc1\x16ks{\xc7\xd9\xf7 \x80H\x9e\xbe\xcd\x9f8\xca\xbb:\xf7\xdb:\x97\xe3\xadv\x8et\xb9\xc2\xa1O\xf4\xe5\xc7\xfbV(\xa8\x1d\xb6O\xde\x17\xe7\xdam\x9b\xcf&\xe4\x9fh\x0b\x19\xdf\xe2\x87\x1dL\xb7\x116~\x08\xdb]}\xf6\x8f\x9d\xb3h!\x1f0u8&y\\\x94\xae\x8f\xad|g\x9a\xcb=.\xca6\xa4\xacWg\xe2\x03\xe6D\xb2F\xdb\xf1\x8a~\xf0S\x14\xc9x\x89\x1f\xe8\x07+\x99\x1a4\xf3\xea~\xa1)\xe6n\n\x0b\xc1o\x9fx\xc3e\x9b\xf4\x13{j\x85\xa9\xa8\xf6\xfd\"\xfbx\xf8\xb8(}\xe1\xe8\x0f\x9f\xd4X\x8d\x8b$\xb6,)\xff\xdaO\xad\x12\xd9\"d/\xdeK\xa8\x1by\x8e\xb3\x9a\xb0\xf9\x89=]\xad2\xf6\xb0\x83f\xea6\xeaRg\x1b\xecwI\x9e\xd2\xd9.[|\xa2{\xc0\x18\xe0: \xf9G\x7f\x1e\x90\xfc\xeb: u\xfe\xf0\xbd\x13id\x1a\xb7y\x1e\x7f\xb9\x0f\x8a\xba\x01\x1b\x8a\xca\xa4\xd2\xbe\xc3\xab\xd4\xe0\xe3\"\xfd\xf8\xcd\xfa\xce\xa5\x9dd\x1f\xf5\xb9\xd0f\xe3[O\x84\xff\xa9\xc4\x1f!\xb4\xdd\n\x89\xf21\xd3\x19\xe4\xac\x83\x86\xc7l\xc6\xc0\xfa\xfd\x98\xcd\x1e\xe8\x9c \x948\xd9f\xe5\x8fYS\xec\xd4\x88@)\xcd\xc5\x94c\xf1>\xe5\x18\x96/\x0bM\xcbzu\x8a$#T\x87G\xf2\x9d\x90\xa4*\xbf\x06\xc8Q\xe6\x88d\x00\x86Th\x85\x9fe\x1c\xcf\x12\xaf=\x92a?\xf4K7\xcc\xcfngg\x7f\xf7\xc9\x9ecR\x9e!\xabn\x8a\xd8\xaeP\xb5B\x7f\x0eN\x1cT\x7f\x8e c1q\xd7\x06\xceV\xab=@\xecr<\x1b \xc4h\xc1\x85s\xe1h\xc2\xc5j\xe3\xc5\xc2\xb0\xcf\x9fG0\xa1\xce}\xf3\x99\xcb\xb2\xac\x909\xeeJ9D{\x0f\xaeE+!:\xe8X!.\xd0C\xedD\xdfP$\xc4\x1cW,H\xa9T\x11\x16rM\xb9r\xceRZ-q\x9fR\xfa%\xf2\xbc\xecB\xe4a`\xc2\xbbb\x80P(\xc6 >\x0f#\x99RM\xceIhF\x16\xf2\x11\x87\xf4\xc7\x05\x12\xc3\x10\xf0\xa97\x85\xdb\x8f\x83\xa9\x8d\xfd\x18\x0c]\xdd3\x11;j\"V+f\xf9\x198y\xa5DL\x80}\xc7m\xcc\xaeo\x04\xc2 \xef\x1d\xb4vo\xc1$\xff|\xc8$[Q\\'\xa7\x9bf\xfc\x1aY1\x84\x95\x11=q\x96\xd6s\xfb\xab\x90\xfa\xe2\xb7\x16\xd7w\x8b\xe3V\x03\xd2<\xaf)s\xa9U\xe3\xd1$\x81\x12\xab\xbb\xd9\xdcb\n\n\xf7[}\xab\x82\x90\xdd\xb1Z\x8f\xda1\x8f\xe9E&\x8d\xa4,R\x11\xd0\x19_.b\xad\x11I\xa1j\x96Kf/\x17\xa1\x14a\xdbc,\x13\xf6\xc9\xb1\xee\x16\xa6l\x13\xd8\xd0\xf6\x8bj\x0bxB\x1d\xce;\x05\xa3`\x86Qpr\xc2\xa6\xa8\x15Ab\xbe\xf7c\xa4\xeb'\x89\xe91_\x10\xf2\x94\xf3\x19\xc9\x1b\xeb\x83G\x16\xe5\x9d\xaf\x906\x00,\x08\xff\x98\xba\x89\xcb\xe4\xc4e5\x13\x97aWF\x11\xe1\xa1\xbe\xd8c\xcd\xe6\x16X\x11\xea&\xcd\n\xa0\xd1\x93\x96m\x9c\xb4G\xb0\xaf\xe1X\xd1\x100\x01\xb1;\x0dV\xc3\xab\xba\x86f\x0e\x04:\x10'\x80r\x162k\x16B5\x0b\x99\x98\x85\x0c\xd7\x0f\xd4l.\x98\x0d1\x03\xd9\x86\x19\xf8a\xef\xc4:L\x87\x12\xd3a\x0d\xa6\xf5\xa9,\xac\x01Q\x88\x05\xa0\x83\xc5\xd9ln\x81q\xa9\x0e\xd5\xa1\x95\xdeO\xa1:\xdc\x8c\xeaK\xab\x7fI'B`\xea\x99\x0f\x7f\xd5'\xe1{%\xec_\xfd\xf6\xbbfB\x14vP\x87\x84jJBkJr5%\xa1\x98\x92PO\xc9u\x1dFB\x92\x9b9a|Bk\xe7$F5\xf1\xd5\xd0\xc1\\\x1d\x0fedH3\xda!\"\x93\x92\xce\xfb\xe7yC\x93\x0fu\xb8\xb5\x85\xef\x02!F\xfc{8@-\x1a\x90@x\xe3\xf8\x10s-\x85\x1dqB\xb6@\x8c\x04$<\x19\x9e\xca9\x93\xb8\x1ai\x87\x96@\x84[\xcb\xd3\x90u\xeay\x81\x16'F\xb68\xc1\xa5\xb7\x80KoS4\"\x19\x19b\xfbxn\xe4\xcf\xb5\xa44\"s:\"\x01m\xad!\xb3V\xa5\"\x1a\xc8\x8b\x01&\xa3\xd8\xf3\x963\xc4xW\x85\x05[ =\xb1J\x83\x96\xd8@\x01\xfd\xce\xb1,\x86$\xfc|\xa7(\xa8@\x14X\x10\x05dN\x03\xed\x80\xe6|\x172,\x06t\x02 m\xfad\x8b\xfe@\x01adh\x7f65\x11\xeb6\x9a\x02!=Gj4-X\x95C\x1f\xfe\n\xf4\xb5*\xc0\xb6,`[d\xce\xa7C\x02\xcb\xe7\xa3&\xdb\xaa\xf1\x06\xe6\xd3\x92\xe25.\xe1\xd3RcP)5'\xac\xe8\xbes\x92\xa7\xd5\xa7\xa2\xac.\xeev\xb0\xb5nPH\x0buzP \x0f\xda\xedb\x93\xa9xN\x8b\xfaUMF\xb2\xb4\x1b\xc2\xd6\x02o\x8c\xda\x93$\x8e8\xd6\xad\x06\x0f^\xe8Gr\xa1\x8fD\x8a\x16w\xad\x1f=h\xad\x1fmX\xebG\x95\xc9:\xb2&\xeb\x88\xcc\xe9\x91Z\xebb\x0c\xbf\xb9\xca7\x8c\\-\xbd\x11\xacv3.\xb5\xe0\x1f\xb0\x05\x1f\xb2\xe0\x7f\xf9u\xb5\xf0]\x08\xcc\xda\x1f\xdd\xb7\xf6Gr\xed\x8f\xcc\xda\xff\x1d\xb8\xff\xf6\xda\x97\x8f\xf5\x16xg\x04\x92_H\x08\x9e'\xc4{PN\xf4\xda\x00V\x0f\x88/+*\x98\xfcmyCz@+\xdd\x88\x8b\x87\x05ejO\x14\xc2 \xbaPB\x06\xfcBJ\x89\xc2\x00\x1f\xdc{B)-\xe4\x19=JI\xa1p\x89 \xc8\xd0EE\xb7\xb2\x05\xb9\x942}6\xbfV9\xcd\x8a\x7fL\xcf*\x04\xb0\xf7\x03f\x8b\xbf`Se\xf5\xf0A'j\xeb\x9e\xc1\x0fRP\xdd\xed\xda\x9a8\xada\x94\xd5J\xadp\x08\xed\xd2\xc5\xc4?\xa4\xe1\xa5\xd4H\x003\x94\x1a\xc9ENx!&\xdb2h@x\xb8\x9c\xe8\x02~\xedP\xa9+y\xdeF\xed\x8fV\xb4?\xb7\xb1\xab\xea\xd1\xaa\xf6'\xe6\x85\x95\xe6\xe5>e\xaf<\x1d\xcc\x9e\x0e\xd7\xd8\xb2\xbeO\xb3L)\xabb\xc8\xc8gb\xbb\x02\xa2\xee\x17\x98\xb5\xa4\xac\xf77'\xb0\x8e\x10\xbd4\x8f\\\x89\xf9\xf7\x94\x8f\x01\xca((\x19\xb1\xb6G\xecQ\xad\xcfn\xc0cu} \xa4\x91\xfbL+P\x9f\x11\xa27|\xd1Z\x1c\xd2\x1f\xc7\xf4\xf6\x025:\x98D \\u1Y&\xf4nM\x16 \x1dM\xd12\xc1$\xd6W\x89\xba2\xe7\xa0o/T\xf8\n\xa5t\x99\x94\x99\xf7\x93\x1d\x13\xc8kY\xb9\x0e\x94\x83\xab\xa0coP\x92\x88\xe0\xe58\x11\x81\xb7\x8b\x84\xf0\x0f\xa6V\x08\x96$qOE\xba\xden\xd7g\xc2\xd9\xb1T\xc2\x12\x0fX;\x1e_G\xe9\xcd\xf8<\x1a}>\xf0\xaf\xce\x80o\x90f\x13\x972\xad3zu\x86\x18E)\x85\xa0\x90\x81]\x8c\xd5g\xd8\xe9F\n\xe5\xa9\x88X\x81\\\x8b\xebWh\x91H`m#\xc2\xbb\x0b\x88\xea\xe6\xcf^\xa1\x18\xfeO\x12;\xd7 \xa0\xec\xed\x05J\x12\x1dZ,\xf3\xd4\xbf\xbd@\x0bs\x93d\x00 \x91Q;}Y\xda\x139h\xcalC\xee\x07\xe8:\xd6]H\x1fa\x0b\x18\x99\xc5\x1f&\xb2c\xcd\xe3\xc7\x0bd\xc5c0\x9a\x96\x08Iw[\xadK\x1d\xe4\xe5\x9eyX\xee$\x99\xf1\x80\x03\xdef\"w\xb0\xc9\x01\x02\x017&9\x88\xcc\xd0\"\x97\n\xd3\\\xa3\xfb\xd4\xd0,\xeb\xcc\xd7 Sj/\xa2\xdbh|\xf5i1\x91'\x1a\x10\xca\xd6\xdb\xf7\xa4\xa5\xb2\xa6[58\x99\xfb\xe2N^\xa8\xfd\xc2\x88\x8e\x8b\xd7\x19\xce\xd7\x10-Oi*\x1d\x98\xb4\x15\x1a\x00Tb\xa3\xed\xfd\xa48\xcej\xa5yO9\xb5\x16\xd3\x8d\xd6\xba\x0f\x0d\x84\xbcp\xe8\x9f\xf52\xcc$K \xb1\xb2\x9a\xc6O\x17N0P\xa7\x9f>c\x89\x1d\x83\xcd\x92\x93\xf4\xb4\x1d\xe6\xc9\xe2\xf2 \x0ed\xdd\x96\xaf\xd1\"eI\x1c,\xd8\xf5x\xf1Cz\xde\xaa\xd7hGd\xaaJ\xca\xf1>/Yz3^\x9e_D\x0brUyh\x05\x03\x91\xf3\x84vH\x96\x089\xfdF\xfe\xbd\x90\x7f\xa7 mt\xc95\xfc?\xe3\x0d\x7f$\xb4c\x85\xe6\xe8\x84A\xfa\x14\xa4\xd7\xb5\x97\xfc7IJ,\xb4\x9b\x18\xba\xa9S\xe0\x84\xe9\xc4\\\xa5b'l\x8aDa\xec\xec\x94@!O\xd3\x83\xbc\xb0\xe2\xad\x0e\x1d\xcf\x0f\xf8\xf0yB\x0b>@FX\x8d\xdbB\xc9m_\xde\x92>adl6\xab\x84\xdf*(\xee\xf668K\xfc0!)8H\xe5\x98\\'\xf8\xae\x10\x89\x92\xd8\x14Y(\xec\xed>\xa3e\x95k\xbb\xc3\xf5\xa8b\x8bv9\xea\xd5,\xd4\x80f\x01\xf4\xca|Lz\xba]'\xc0&\xad6\xb7 a\xca\x12w\x93h\xf9\xed&\x11\x9e}0\xf7\xe2\x83\x993\xe3\xac\x02_\xa7\x96U\x9c1Y0 \xa5|\xeb\xcf\x12\xd5\x06Fj5<7\x0d\xef\x1c\xb4 \x97\x10\xe3_\xad\x7f\xc2\xa0\xc5\xcf\xef\xe6\xd2\xf2\xfa\xb66\x1b\xa5\xf4\"\x19dIi~/\x12\x9a\xfa\x17 \xbdHd\xd0\x0f\xb9H\xac\x13'\x86\xec\x85y\x93(\x00\xb3\xc4r1\xd6q\x8f\xe9\xa04\xe1\x02\x0c\xa0Y\xa9\xc2\xa8\xe4\x14\x9ba\xf2%,\x16Af\xf8\x82/\xce\x9b\x84\xa6}\x15\x19\xab\x96X%\x8c\x92OC\x05\x85\x88\xbf\x8bKN\x0e\x06\xa57\x89\xe5\xb3nP+o\x8bp\x80\xef\xea\x16\\\xd4\xb8\x9a>\x08\xbf\x8a\x00\xdah\x8e\x18\xb2\xce\xdb\xea\x0e\x95\x07\x0c\xa5\xd8\xb7\x0e\xab\xa6\xcc\x9c\x1d\xf3Y\"\x9c\x9f}/\xc5\x91\x94S\xe0mw\xf9\x16\x12\xde\xef\x9f\xa3x\x12-\xa2\xc9\xe7h\x92\x9dG\x0b\x9d\xa6\xe1&\x01'K3l.nV\x1d\xd7\x0b\xfbP?\xd7\xa9\x19\xc4\xc4\xc9\x10\x10\x11/@T\xa4\xc1\xda\xea\x95\xe6\x14\x14\x1d\xdb\x1d\xd6\xe9\xafP\xe1$!\xb5\xc2 \x00\xc6\x80J\xc3\xa0N\xa7^\xa8Tk#\xda\x02\xba\x04\x0e\xe3\xe7\x897\xc2`\xd3\x93\xdd\x0e\xc1\xc9V:\xd2\xdfI'\xf11\xe0\xd3o\xb5\xc5\x05\xb9\x18\xa7\xaf\xc63\x99\xe8\xd9o\xb5\x9d\xdf$\xb2\x1f\x99\x1f\xb6\xeb8 i\xe9\xad\x81\xdd\xd4OQH\xd4\xd7D}p\xe9%/ \x1a\xfd\xe3\x10)\x1e?\x1c\xa0\x80\x0e\xc14\x13b_#\xe2\x88d\x89\x8aw\x1b\x91\xa3dEG\xeb\x16m\xd5\xc4\x84\xb4<\xaf\x05Soz\x9c\xd3\xd0\x97\xfd\x04\xe4\xfb\x02\x85e\x06\x82W+\x15(Yf-\xbc\xadqk\x9d\xcb_by\x0c\x89\xbbJ\xe5\x1b\xeb\x92#I\xd9\xcb9\xe5\x0b\xa1PN\xcef\\\x05\x8c\xab\xa8s{N]\xb7\xe7\xdc\x84\xff\xd1\x8e\"\xe7'%\xd0I\xd6\x9eH\xd9\xe1\xd4:z\xfe\xdf\xda\x92\xe6k$7\x9b\x11|\x1d7I\xb09\xbe\xcb\xaa\x01%s\xaa\x10 \xf0\x94\xa2\x82\xcc\xd5R$s:\xb7\x913\x87n\xfa\xdf\x17\xa8\xf8\x8dI-\x141\xb4f\x13\xce\xa8\xcdL\x17\xb8vr\x95y\xea\xa4 \xa1\x85\xd5\x0b\xce\x82\xccO&I\xa5\x10\x8a\xb2\x84\x84\x02\xd79\xe5\xff\x17\x94\x8bAa\xd9\xbd\x0e\xd4\xdf\x02\x02\x88]hs\"\x87\xc1\xa9\x8c \xebs\x86.\x99U\xba\x8a\x8bI)\x86\x1a\xa6$\xb4]\xcf\xc4Aj\xa1\x13\xd2]$\x9e\xd7\xf5.J\x0c@\xa7\x07\xc8\xb4\xd3Agg\x9f\\1\xf4\x94\\\x97\xbf\x93s\x1dR&\xc1\x8c\xc1WK\"\xf3gY/\xdd\xdey\x8aq\x9f\xab \xdb\x1d\xef<\xc1\xabU\xccPF\x18\x17t$\x83\xc9\xad#\x16\xa6\x8e\x85\xad\xec*\xdb\xfb;$\xa5w\xd6\x88|FD&\xefL\xb34\xc48\xab\xb7\x03\x86\x06\x88qJ\x95._\x81\x0f\xbf\x8c\x1a]&\x8bHF\x81\x12\xf7\x05*\xbc&\xf9s\xca\x91\xe8\xc7Z\xb1R\xf7\xf1\xc0n\xe1g\xd5\xf8\xe1kfY*\x85\xc5\x95f\x84\xd9\xd3AC\x920(E}\xc3\x9cw/\xf5\xe0%b2'\x99\xa7\xf3\x92-\x97'\xcc\x8e\xdc\xb6\xbe\x04\x91\xe6\x00\x83\x955\x8a!E,@\x10'\x19\x96\x89\x9f\x8cC~\xc7\xae\xb6fu~,2 i}\xd5\xf3\xa4\xf7v\x97<\xb6\xcb\x89}\xb7\xde97\xdf\xab\xcb\xe0\xeay(\xa5)\xc2\xd5\xfdio\xc4\x94\xcf\xff\x83\x02}\x89\"@&p\xb8D\xac\xfc\x88\x91\xca\x9e\xf6\xc1=\x0d\xf6\x95\x0cyV\xfd\xd0\x85\xb3\xf6\xc1\x1aP\xa1\xb2\xa9E\x06\xaeX\xc5)$\xa5w\xcb\xf1\xccO\x89($\xee32\x89\xd2\xe5\"\xf9\xe1gd\x12\xdd\xa4~X#\xa3\xfdC\x0b\xda\xb4\x9791h\xea\xael\xd3\x80\xaf\xee\x9a\xe6>\ne\xe0%\xc9\x94\xe8-\x9f\x85\xa5\x0f`[KH9=\x94\x18\xe0\x94\xcf\xc5\x99u\xbc\xc5\xca\xde\x06\xb0f\xb2DQ\x80\x94\xe4\xa5\xb5q\xc5Pw\xc5_\x91$H\xe7\xac\x08\xc5Q\xbb\xed\xa3\x93U\xba\xe7\xc0\xf4CZyIz3\x9b\x12\x9b\xb1R\xb0\x94\xd4x\x93T\xf9XA\xe7m9\x9d\xca\xb6\x18z\xde\xb7\x0b\x14\x12\xfe\xe0\xc6\xd8D 6\xb4f(\x1c\xb8\x02\xa2\x1e\x1e4\xe6\xc2qA\xbau$r\x8e\xcc\xfd\xed\xa7\x9d\xbd\xdd=\xb2O\\\x8f\x9b\xb9\xdb2c\x08\x08|\xb9Y^i\xb6Cz\xa56EM\x9b\x9dR\x9b\x1f\xbfV\x15\xc4\xd6'\x9cZ\x10\x8b\xd01@<^+\xdf1\xd3P\xab\xc2\xa9\xd3\xdeQ\xeb\xd7\xaaB\xa2\x01\xe5g\x85\xb0J=0\x1bd\xaaV\xad\xa6\xf8D\x8e\xe6\x07s\xcaB\xa6\xd8\xf1\xde{\xee2\xfb\xa1\xc3\xeca\x811\xb3\xc0\x98\xcci\xa5\xa5$w\x11Y\xba\xafX<\x86\xbe~\x03\x7f\x84\x93\xee)\x1e\x84'\x9dS\x1f\x95\xde\xa5')a\xa7\xc4\xe6\"/\xfeo\x81\"\xe6\xe4\xd7\x00\xbd,c\x1fJIv\xb900@V\xea\x04p\xd164\xbf\xd1%:o\x89\xfb\x89\x0c\xfb\xe8\xfb\x82\x0b\x11\\\xbc\xcb\xe8\x8fs\x0e\x87\x16\xa13\x10\xa13\xe2t\xc6\x05@\x0b\xa6W\x0e\x92\x0e\x96\xfd\x83%\xd8<2\xcf\xdb\xf9w6\xc8\xfc\x1d\x92\xa2FG\xf9d_%\xed\xa5\xae\x81\xdew~\xd1\xbb50\xd7\x14\x0c\xfa\x0ca;\x1bbF\xdc\xb6\xa1\x9d\xe7\xea\x81\xe4\xf1\x8dF\x9f\x84\xe5B\xd6k\xcc\xa4\x1e\x16*=,+)`\x8d\xae\xads\xc5\xae\xc5\x85\xbc\xe5\xdb\x0e\x1f\x00\xf9\xc1\xfd\x92\xb5\x16e\xd4\xca\x84\x82\xf1\xdd\xf5\x85,N\xfb\x81\xf3\xeawB\x84\x0bm\x1f\xe2E\x1d\x9c$\xff\x1f\x01\xc9\x87i\xc1\x99[ZhQNy\xe0\xc6$J\x0eW\xacV\x1d8\xc6\x84\xfb&g\x0e\x84\x88\xd4\x08\x07\x18+Ai^j \x18}@\x0b4\xe7\xf8bS\x94\xbb\xfa-mtHn\xe9\xb5B\xcd\x0c\xc8\\f[\x18\xde\x9bIf8@\xd2\x16\x91\xebL2\xf2\x86\xd0Z\x89T^e\xe6t\xe4\xa6\x93\xc9\xf1\xdaHq\xeb\xca$Z\xc1vb\x16s\xea\xce\xa3=\x91o\x1dq\xd2\xe0X\x0b3\x94f\x89V&\x98\xe71\xb8c:8\x90\x9b\xeb:\xa1\xd3D\xe5/\xcdL\xae\x0b\xa5\x94g\xd5\xbc\x1f\xae\x9c\xc1\xf8\xde\xd7y?\xcc\x07\xde\xe9\xa5&O \xac<\x1b\xda1\xfe\xf7\xd2l\xf0\xb7n\x13z\xb7\x88\xc6*z\xcc\xff:#Y\x1a\xbdP\xc1\xdb\x7f\xc2/\xf9\x0c~H9\x0c\xae\x0f\xaeo\xa2\xc5x\xc9n#\x91{\\\xde\x8d\xd3h\xc1a\xb6\x9b~\x18\xffH\xb2\xa5}\xe7ct\x9d\x88+%\xa4\xca\x1fSq!6\x07\\\xbe\x8c\xce\xb2\x99\xc8\xb6$\x7fO\xa3\xc5B%`\x82[\x7fi\x82#{\xcf\xa0\x0e\xd7\x97$[\x9c\xcb&_~\xc4\xe7\xaf\n\x11?\xf7\x85K\x90\x12\xdc \xff\x1b\xa7\xd0>d\xe9\x1fQ\xfe9\xe2\x0c\x92]E\x0b\xbf\xd1]\x93\xb3\xfbq\xa4\xb9\xb2-\x1e\x9cW\xa8\x1b\xe7\x12\x15\x96tJ\xd2\xb5\x8db\xd1\xb5D\xd3-\xabE\xb2\xfd\xbd\x87\xf2\xf7%C2\x02h\x13\x97\xafLR\xed\xb0\x9c~@\xf6\xa9\x9b\xf1\x8d\xaf*\xa1J\xcf\xbf\xdbR\xec\x19K{zT\xc3\xc5\xc9\xbd *\xf3D.\x984,\"~\xbfE\xed\x11\xbb\x00C\xdc m|\x05\x01\x97\xfc\xc0\x06Gm.\xaa\xc7v\x1f\x9c\xb4\xc5\xb6\x0b\x7f{\xf6\x15\x8e\xe4\x8dw\xa8Cm\xbfk\x1c\"\xc8'l\xd0\x10\x8f\x83f\xd3\xfe\xdfS(\xb8^\xcb\n\xe9\x15w%\x0e\xd0\x9b\xed\xaf\xfb\x8d\xf3\xb3\xa9\xd9\xf7\x8d>\x9a'C\x85*\xda8\n\x80\x92\xca\x8f\x82\xdc\x1f\xab\xa4T\x97\x0c\xbb\xdb\xd0\x11\x8e\x81v\x88$oe\xd5qv\x13\xdc\x91g9\xce.\xbdR=5C\xb6\xab8\xaf\xda6\xb3\x0e1\xcc\xb3{'q\xa2\x04\x03/\x7f\x1b\xc8@\xad\x7fCj\x04>\xa5J\xa0\xc7s\xe7j\xbd\xb6-\xd7\x85\xdd\xef\xba\x16\x9b\xaf\x92n\x91\xa3\x84\x19\x84A!\xab\x04dK\xb6\xd8\xd5E\xf6\x146\x1a\xc1p;!dGx0\x14\x1882O\x14\xb0r\x0d\xdc[dS\xe7\x87g\x9bn\xaa\xc5\xd1\xc5K\xdbE\x98u9\xe48Q+\xed\x97\xb88J\x12[;\xf0C >\xd8\x7f\xf3z+#\xc4p\xf4#\xf5\xb7\xcd\xd3\xdb5\\\x0eewO\xe6\xe7P\xbf\xe9\x06R@\x08N\xb3\x80'\xbbc\x0d-\x90\xfd\x1cl\x97\x80\x19B?\xd3\xd5\x90\xb6mz\xa6\xca5\xee\x1f\xe6\\M\x12P\xe1\x8bH\xe6\x96Q\xc6\x9d\xec\x13\xa5p\xad\x11f_\xa9d\xeb@\x86g\x93\xa7\n\xea\x0e\xea\x7f\xa7\x83\x8cH\x99j\x17c#\x7f\xfe\x83\x06\xa1r\xcbU\x0b\xfd\xda\"`\x0f\x0c\x1cKJ*\x05l5:\xed\xfd\xad\xdb\xdfP\xcd\xc8XYpW+>\x80\xe4Z\xf5\xb3\xe3\xd1\xabb;\xb9\xb6\xa5L\x04-l\xf9\xf1\xfc\x0f\xfa\xc8-C\xbf\xb9\xa6\xd2\x8cK\xa85\xb1A\xff\x02Gd\xda\x9a\xa4\xec\x8bn\xcff8\x12\x19\xd2 \xe0n{\xffIE\x94U\x02\xfbuw\xabN\xa7|\xde\xb4&O\x88\x83\xa5\xafM\xf0\xf3\x86#\xbc*zx)W\xef\x85\xa8\x86\x98\x9by\xc0\x8d\x8a\x86\x84'\x89t\x9b\xb6\xbb\xb7ux\xca\xda!~\xb6\xf7\xb6lo\xc4\xe9\xde\xf0f\xb3\xda\x03\xc8\x1cj\xfe\xbcf\xed\xf0\xdcC \x84\x9a\xdb\xc6a\x1ek\x051im\"\xc5\xa0\x05\x93A\xc0\x14\x8aP-\xf3\xebU-\\l\xc8\x8dpE\xa2.w@\xcf?\xa3g\xae\x9aM[\xdc\x86=0\xd7\xb8\xc2\xbd\xcd\xb5\xd0\x9e\x86\x10n\xc8\x80\xe9K\xfb\xcat\xda\xd0\x97\x06\xb8\x82\xa2\xda6\xe37\x07o:\xca\xba\xe6\x95\x8a8\xe9\xdaR\xae\xba\x85[\xbe\x1c\xf0\xe1zm\x8b?\xf0\xc2\x97\xd6r\x9d\xdd\xad\xb8\xd3\xb0=\xda=\xd8\x03\xed/\xcbuG~@_L\xb9\xcb\xef\xbd\x80\x8e\xc5\x850%\xee`9\x14@X\xe2Ub\x8ef\n\xbe\x19\xb6\xab\xd4K\xc9J\x9cj\x07\x1f\xda[\xd8\xe5\xb1\x9c\x93\xf8C2G>]\xe6\xac\x12\x94 \xdb\xd2\xbeD,qG\xc9\xc8HY\x00\xae\xbd\xd6\xde~\xabm\xe1\x07\x7fL\x1d\xb7k-\xa2\x80Z\x8e%\x8d0,<\xf2\x17\x8f\x01\x845\xb0\xfe\xef\xff\xab\xb6\xdb\xee\xec\xbf\xd8m\xef\xee\xd5\xde\xd39\xe3\xb5~\xc4\xef\xbfy\x01\xfdQ\xb3\x7f\xce|\x16\xf8\xa3o\xad B\x16\x9e\xb1\x11\x9ds\xeaX\xf7a\xb8\xe0\xce\xcb\x97w,\xbc\x8fn[#\xff\xe1\xa5.\xf9R\x01\xef\xe5\xed\xcc\xbf}\xf9C\x0e\xe4\xe5\xc7\xd3\xe3\x93\xcf\x17'\x16\xe6\xe0\x0e\xe6Y-X \xb8i\xd8\x7f\xbd\xf5\xa8d\x94\xe6+\x81\x81\x94\x97\x06\x10Jh\xf7k{o\x91V\xd5\x97\xc1\xf2%\x99\xa9>\x8f\xfd1\x15I\x0d\xd3%\xdf\xdfr\x92\xa8\x1e\xed\xf8\n\xdf\x90\xa5=\xb5\x19B\xf8\x9a\xc0}\xff\x85\xdch\xee\x98\xaax\xfdK{\xbd\xbe~G\xbety\xd7\xb2\xd4u\xef\xd8.\xe9\xd97\xf8\x1a\xa1_\x0e\x0ev\xdf\xbeZ\xaf\xddw\x07\xaf\xf6:o\xd7\xebk\x88K\xf6e\xbd\xb6\xafd\x99\x9d\x8e(\xf5jo\xb7\xbd^_\xbd;x\xbd\xb7\xbf\xd7\xe5\xdd>Tw\\\x87w\x1b\xe2'\xbe\xde\xd9E\xce\xd5\x0b(\xb8c\xbb/\xa0\xdd_~\xe9\xb4\xd1\xce\xab\x83\x83\xbdWy\x1f\x8a#\x80\xc2\x86\xa3D,\x01\xb6\xe1Y\x11,\x11\x9f\xf1\xdc\x06_:\x9bv\x14p\xf2Z\x12M\x98r\x93\xfaS/\xbc\x0d\xc3\x10\xa0\xefR\xa9\x86\xd4I4\xa5\x1a\x9a6]\x82\"f]\x91}6G\x06A'k\x8bl\xf9\x0b\xfc\x154\x9b\x10\x1cj\xbf\x03\xf6\"\xe0As\xdbD\xd5\xe6\x8bS\xff\xf4x\x99\xc6`z\x9a\xf4\x01+\xcf\xf4\xe6\xfd\xa5\xdd\x8d\xedh\x87\xe16r\x96)?\xf1\xed\xdb\xad/w%\xbc\x8a\xd3-\xbfM\xc6\xa8q%\x8c|[\xeb \x84\xacjR\xd2\x12\xa9\x14\xb1\xc6\xea\x84\xc98b\xac\xdbv\\[\x1a(uv\xb7\xd2\x92\x05 V@.\x9d\x03\x7f'\x80%\xc0\x87\xdf\xb6\xdb\xaf;o\xdf\xee\x1e\xec\xbf\xdeo\xbf}\xdbA\xe0*\n\x9e\xf5\xdb:U\x08\"\xdeT}-\xe9Rv\x07k\xf2\xaa\xbd\xfd\x8a1\x88c\xc3\xf2\x06Tv%vR\x96\x96 \xc0\x17\xd4\xb6y\x8b\xe3\x86\xc1\xfb\x14g\xdf\n\xfd\xbe&3+ouis\x19\xc3\x96_\xe6\x1c\xccJB\xbbG\xa66\xc7W\xc0{\xe8\x19\xa11%\xcdm3b)_\xe3 \xa2p\xed\x9e\xe4\"\xd5\x05:\x13-f\xc6\x8f\x91A\x197\xfe\x0ee\xac\xea\x17\xfbU>\xe5\x11\xee\xc3<\x04\xcd\xd6~\xc6\x05\x00\x0b\xa1\xaf\xf1\x83\xb7\x15\xae6\xb3\x87+\xf8\x07\x02\xfa$\xa7\x96\xdce\x0e\xdb\xb1\xc4\xb3\x07\x88\xaf\xa7{]%\x87\xee\xa0\x82\xda\x1a\x12\xeb\xa7e\x081\xd2\xe7\xd5\xcf\xa1x\xd8\xa8\xc7\x97\x8b\x12\x0c\xb7\xd4\xb6\xe9\xa5f\xb9\x1b\xd8\xb2@\x8fjekm7\x9e-N\xba\x8b`\x91\xe6~\xb6J\x9e\xc2\x7frid(\xc8M\xe0p\xb9\xdf\xf7K\xec\x0b%P\x9f\x1c\x9a\xc1\xbad6\xdfp\xa9\xa2\xbd\xb2&\xd2:k+\xa2\xd5\xf7}[#\xd8\xc0\x9b\x8f\xfd\x07[\xba%\xe9\xb4\xb2\xf7\xdc\x93'\xd9\xd2\xd7\xc6\x8em\xfa\xa3\xb5\x1c\xf1\xfaE\xae\xb53\xb5wv\xe2\x9d%\xde{\x85\xc0\xf7@g;\xf3\x07n\xc4\xdc\x83\xac\xd9\xcc_+\x1b\x8a\xf3*W\xab\xdb$\x18\x84!\xdb:\xda\xb0\xa5\xcc\xf7Yj>\xb9\xbf[i?i\x96N\x90\xc9\xe1\xd5\x1a\x07\xfb\xbby\xb1A\xc1{+\x98\xcam\x1b\xb4An\xa7\x8c\x027\xb5n\xcb& \xfdH\xbe4\xc24\xbc\x94\x1e\xd7\xd4\xc9Y\"\x08\x86\xb2\xfbj\xab\xb8\xc9\xe8Q=/\x96\xd9\xc3i\x9a\xbe4\xfa\xe9\xd2\x01\xf2U\xa6\x10\x0d\xe2\xb6\xe4\xea\x80\xb3k+\xfe\xc6-\x84o\xc0\xaf\xca\xc4\x0f\xd6\xeb\x86\x03\x8e\xfbb\x16\xde\xfbQx\x01V[\xeb\xf5t\xcbc\xc5\xbe\xc2\xe0\xbb\xecJ\x90\xf6}\xf1bj`\x8e\xba\x8d\x01\x1f:7\xfa\x0c\xb7\xc4\xa3\x11aQ\x06\x08\xad\xbd\x83\xad7\x8d\xc1F08\xae\xc6{Q\x19>\xf43\x15\xdb\x1e\xcc\xfb\xe0\xadV\x15\x13\xefw\xa5\x13\xb3\xdf~\xa3\xcd\x19w\xdbo\x95\xb320\xda\x94\xaab\xe0\x91N\xe9\xe0\xaa\xcd\x08:\xb8\xaf\xf7\xaa\xa8\x04xnz\x99\xdd\xa2\xf4\xd1\x06>\xe8>\x8a\xfb\xc1\xc2#J<\xda\xddu:\x18\xfc\x82e.\x10\xf1\x98\x92\x05\x1d,\xb4n\xc6\x8b\xce\x10O(q\xcd !\x0b\n\x17\xdaDu\xf0H\xc9\xc4\xf4\xcd%\xaeDF\xc5\xc9x\xa4\xda,\x145\x9bJV\xfdH\xa5\x81(\xae\xa7N\xc7'\x14 {K\xc5\xa3\x00p\xa7\x05\x86\x16\xccTw\xc9H\xb8\x1b\xdb\xa3]\xe6p%\x11F\xd8\x15s\x11\xb8wBm\x8e\x1c\xf9\xeb0w\xf1I\xbb\xd9\xa5\xedb\xeb\x81r\xee\xddQ\x0b\x8b\x17\x83\xedb\x97bW\xfa\xab\xc3\xbb2\xe0m\xb39\x15C\x07\xee\\\xb3ye\xbb\xd2\xc7\x9aK\x11.\xea\xc5\xbc\x1bI\x7fbY\xc6`D\x87\x08\xbb\x89\x8c\xdf\xe4\x1a\x80!\x02\x1crzuB\xc6\xb4\xdb\xef\x82k\xb1[\x8a\x9c\x9e\xfc\xa1\xf4\x14\xeb\xed\x049\x946\x9b3P\x93\x9c\xd0f\xd3n\x88\x12\x13\x8ag\x14a\xfd\xdb\xda\xf0oh!\x84{2\x17\xe1:\xa3 \xcbzL\x15I\xc7`\x19\xfc\x98*\x90\x8e)\xc2\x8fy\x87\xd2.\xdd\xe4\xb8\xba\x14\xac\x13_\xed=\xc3%L\xa6\x9d\xaeN \x08\xda\xa5O\xbf\x82\xb6\x18\x9c5\x04\xfe\xcfs1?,\xdc \xb1t|_\x9f\x96\xa1\xd7N\x9d\x90\x86=\xe8\x0cQ\x8b\x8a\n|\xd0\x1e&\x08\x89u\xab\xb0e\x87\xd2\xc0U\x11{\xcfy\x9d \xb9\x0b\xc52\xb9\xf6J>\xd7\x9dz\x1b\x1b\xa0\x10\x9f^\xc0\xc2GgWk\x9e^%x\x95\x1f\xab\xd3\xb7{\xf9\xc8i\x857k-_^>aS\x04\xb5\xe9\xbe/A\xf8\n\xc2\xdc\xa3\x04\xbf\xd9mo\xb7\xf57!.\xd1\xce2S@\x9df\x18\xa8\x9fa\xa0^\xa6\xacZ\xb0\xadV\x02\xd9\x9b\x0c\x03]g\x18\xe8\x0b0K\xdf\xec\xeeid$\xd1\x15\xa3U\xbc0\xecQ\xe5\x12tF\x89\x124 \xd4S\x05\x9b\x9c\xbc)\xb6\x17\xea\x0c\x1eN\xbb\x11\x99\xda\xd2\xd6\x1a\xbb\xdd\xa5d\x9c;\x0b\x8a\x1c;\"nW|:={\x01G#\xc2,=gH\xab\x8dH\x1e\xb4\xc8\xcc\xce?\xa5\x92y`GxDq\xa4p@\xa7\xe4\x90\xef6\x9b7vd\x9c\xf1\xdd\xa1T\x9f\xea\x93A\xaad\xf3\xc5\xe6xF\xf1*\xbc\xf7B\xa7\x9f\xc8\xa1Xr\x7fZ\xb8\x8fp\x94\x1cN\xbbS{D\x05jv\xfa\xf2\x87q\xe2\xa1\xc5\x05%#\x13g\xf4l\xcf\xf8\x04\xae`\xba?\xaf\xec\x0e\xb8\xf4S3\x82o\xcbB\x18Z\x84\x8f\xc2\xb9B\xc9\xb3v\xfb\xe6&\x1fQ\xb1\x1d!\xaaO\xd5v\x8cl\xd8\xad\x82\xd2~\xbb\xb7\xdd\x0e7\x8b\x99\x01\x11B\x14'IZ\x95(jaO\xfb\xbf\xd1LY\xd0\xc9kw\xde(\x87\x9f\xe0\xc6^+\x07\xbc~\xa5w-\\\x90\xd7\xca\x10\xc00>\xf8B\xa6`\x80O)\x99\xb6R\xbbo\xfb\xda\xbcB{2\\\x16VV\x04\xb8p\xff(\xed\xd0\x15\x08\x7f\xaf\xb1RP\x8771HW\x9d6\xfe\xc6\xe6c\x87%(\xc9\xc7`\x97\xdc\x13J\x95\x1f8\x96\xf9\xcf\x8c\x08\x97\xa2\xd9\x9d\x1dys\xae\xd7\xd1;\xa2\xc5\xa6F\xc4,(\xae\x18\x94\xb8\xa1\x08i\x81)R\xe3\x91\x96\xe8\\Z\x90Hf\xae6\xec\x10;\xb1\xde\x91.F\xb5\xd1L\x96\xc7\x06\xd1\xd0\x0c\xc6\xd7\xb0\x07\x11\x16\x892\x15a]E\xa9\x0cR\xb2l\xa5\xc1\x1b\xe0w\xe0=J\xc9\x90\xe2!\xe3\xd8N\xeb\x88\xdf\xda6\x07\xe1\xfaU\xb3y\xa3ur8\x88\x86\xe4\xe5\x04\x17U_\x1a;\xc2\xd5\xa4\x88a]2\xc9y\x02\xc3\x10ij\xdb\x1e30\xa3\xe1D\xca\xb8\x8b\xd4\x05\xd4'\xd6_\xf4\xf6\x88s\xfap;{\xb4p\x8f\xc4\x83\xfe\x107\x88\xb89\x0c\xef\xb8bT\x85\xfb\x03\xcb\x9d\xf3+\x9c((v,\x927|\xc8\x1a\xe4\xcb*9\x8c\x04=\n\x9e\x19q\x03\xe1\xed'\xb2\xa3\xef\x9fF\x02\xf1\xb5e\xa7\xc6\x98\xb7\xf5,\x9d$\xf7\x06|\xb89\x8a\xfe\x8e%H\xe0t,jW\xf71\x0f\xbd\xf0\xb9CJ\x0e\x9f\x04\x84&\xeb\x9e\xbe)\xd5\x05\xb9\xe5zDO\xc3\xdc\xb6N~\xa8\xe4m\xdd\xe9r\xff~\x97\xe7\xde\xfc\x8e>\xa7\xcf\xac\xe0\x7f\xa0S:\xa1\x01\x9d\x8f\x9e\xd7q\xae\xf0\xbf\xdf\xf9\xc5\xe3<\xf4\x96\xcf\xe9\xd9(\xf9\xefw\x9brW\xb6t\x9aqa\xfe\xed.\xaf\xceO\x9f\xd3\xa3.\xf6\xec\x0e\x9f:\xbe\xb6u\xec?,\xd8\xecYs5\x8b\xfe\x87z\xff\xc8\xe6\xdf\x9e\xd3uZ\xee?\xd4\xefy4\x0f\xd9\xc3\xb3fm\x16\xdd\xde{\x82!N\xe0\xdf\xb91\xf6_\xbd\xde\x03rI!D#\x8c`\xd1 -u\xfdx\xcb\xe6c0\xb4\xc0+p\x07\x1b\x0b\xb2 \xe2\xf6\xfd\x8d\x9e\xc1('\xd7\xb3\xe2\xda\xa5\x18\xb9\xf0*\xc9Y\xd0\xa8\xee\xe5\x87\x1a@\xbb:hc\xd6\xff\xfe\xeb6R\";\xc9\xec\x92b\xbdeF\x8cM3\xfa\xab\x9f\xd1_=\xa2\x1cg\x19\xb4V\x83,\x81\xd6\xba\x92\xd1\x93\x15\xa9\xd5C\x87S\xc5X\xc2\xda\xd9V~\x91\x1b&\x81\xd5\xc3\x92;\xea\xc4\x06\x81\x95\xa7\xacjs\xba\x0c\x0d\xe5\xa3+\xc3\xcf\xae\xac\x0c\xd1\xb5\xa1n\xcab}G\xb4\x7f\xdan\xdf \xa3\x1c\xd0V\x8ap\x8c\xb0\xaa\xb1CR\xf3\x97\xbe\xcd!\xc8\xb8\x0c \xd39\xa8f\x9d\xea\xe0\x97 \xee\xec\x1eTs\x9cuDL\x83\x9f\xb9\xfb\xe6\xf5\x06\xb1\xa2\xac\xb2\xa7)q\x9c\xea\x91\xf7\xa5\xf2\xdd\xd2\x06Z\xa5\x8f\xf0t\xd0\x1f\x92\xa9\xa4\xc6\x12\xfc\xaa\xdaO\xc9F\xa0E\x88\xea\x89\x0e#\x1bFl\x9a\xee\xb9 \x86\xe8\xa1\xdbv\x0f\x84\xd3\xcc1F\x13\x0c\xf1C\xb7U|\xfb\xba\xa0F\x95$\x188\xfe\xe9\n\xbbnLo\x17\xde\xe8\x9b\xab\xbc&\xb9\xae!`\x18p\xf0E\x9a=\xf2R\xddN\xdd$t\x15CI\xb2bc\x87\xe3\x99\xef\x8d\xe9\xd8\xa9w\x14J\xe2\xce*I\x0d!\x05Q$u\xf5b\xdd\x02\x8eq\xf6\xbbd8\x08\xc7-\xd9&\xa9\xb7\xb3\xa2II\xd1\xd6\x9cp\x15\xb5\x98\x11P\x01\xc9\"\x1fwmD\xde\xa5\xc1g!Xu*\xe4+kjl3\xbc\xf2@!\x84%\x98\x19\x8a\x88\x86R\\\x97\x93w\xa5\x196G\x0e\x17\xfd\xa5JqeSk\x19\x86>:\x08B\xa7\xe96\x9bvD\xc4I\xb3#\x84\xf0\x9b\xa6\x9bI\xa9\xca\\`D\xcd\xa6Te\xdf\x17U#c\xce\xb9z\x9dW\"\xbb,\xf2w+\xbc\xa7\xf3\xb4l\"W4g\xaf\x02\x8cItX6\x85\xc0\x8e\xe5V_\x82\xcfn\xc2\xd7\xeb\x81\xb4j\xb2W\x02v6h\x1e\xda\x0cea\xb4\xa7d\x17Fz\xb81\x95i\xb3Y\xff\xdf<\x8d\xf7>E\x87S\xc2\xec)B\xd5\x8a\xd9\xf6\xd40\xdf\xe3\xe4\x1d\xe8\xce\x88\xd5\x15[-Sz]\xa6a\x87!\xaft5\xc6v\x8c\x97\x08\xc7Iy.\xb1\x95\x02k.\x922Ce\x85}`D5\x9b\xf5\xf2L\x19u\xb9\\\x82\x01\x9ab\x9bV\x94\xa0\x15\x86\xca\x87vg\xda\x8b\x95m\x11\xc3i\xa9\x82G\x96rh\x08\xb5\xc4\xa6[\xaf\xc5\x9b\xac\xdaYh\xfaN,\xebHy<\xd5w\x01|%\x89\x8dJ\x87\xedk\x88\x16uXK\x03\xaa\x83\xe8\xb6t\x07\x12)\xca\xdb4o\x93\x12\x88fSI\"\x0c\xe6Y5\xf07\xcb\xa6oey\xa8\xac\x04\xe1\xaa\xcaVv\xf6\xd2'6Do+\x1d\xf8\xfca,\x86n\xf3\xd6\xc2\x0b\xef9\x19\x0c1o\x8d\xee\xd9l\x1c\xd09\x84\xb1\xd6\x1fD\x1c\"\x8e\x14\xb2M\xed\xcam{\x03\xf3W\xed\xeb\x95\x89\xf8\xbe\x9c*v\x18\xd8\xa8\x97\x9fj^\x0e\xec\xb1\xcd\xf1\xea\xf8\xe3\xc9\xd19\xb44\n1|\xb8\xbd\x1b\xf8\x8eB\xfc\xf9\xe4/\xf7\xe8\xea\xf27\xf7\xe4\\\x96\x99\xc9\xb4\x8b\xfe\xc9q\x9a\xc6\xf2in\xef\xe8\xf2\xf87\xc8\xf1d\xce\xe5o\xe7g\x7f}N\xcb\xfb\xc5T\xa3\x06\x0f\xf1hF\xbd@\x0eH\xfc\x92\xdf\xbd\xc7,\xa5\xf7\x88\xe74>\x8a\xc2\xfb\x93@\x16\xcc>E\xce\xc5\x82\x8e\x8c\x1c\xf5i\xe4\xf4\xc4\xae/dC\x9a(sy\x1f\xf8\xf1\xdc\xa8\x9f&\xe4rsm\xe4S\x13m/Z\xb9\x1e\x15\x9b\x1f\xae)\x01\xee\xb3\xf3\xd3/'\xd0\xf8\xc7\x10\xa7 \xee\x99\xf8\xb9\x0b\xe9\x8d0\xf5C\x7f\x02+\x04\xa9?C\xfc\xf1\xec\xd7\xb3\xabK\xf8\xfa\x10\xe2\xbe\xca\xdd\xa8\xff=\xc4\xe7'\x17\x97gF\xfe\xd1\xe5\xe9\xd9g\xc8\xfc3\xc4\x17\xbf\x9d\xa9\x95\xef\x9f\xf5\xaf\xfa\x90\xdc\x0b\xf1\x9fG\x1fO\xdf\x1f]\xca\xb1]\x85\xd8\x8b\xc2\xfb\xbe\xbf\x88\x16r\xb9\xf5\x17\xa4\xfb\x01\xfbI\xd3t\xf8\xca\xd2\xa5M\xd5\xb1?\xa6\x7f\xb1\xf0\xbe\xe7q6\x12+H\xe7!\x1b\xc9\x10y\xb9\x8a[\x8bW\xb5\xfc\xc1\x0f\x1e\xfa^\xe0=\xf0\xa7\x1a\xccJ\x19\xed,\x16\xb3\xf2\xb1d\x19Y\xe93\xf1k7_P\xa6\x15\xcb\x88\xfe\xfa4\xe0\x8c\x87g\x8b\xcd\xd6+\ne\xad\xf4=\xcec?\x18\xe7\xab\xe9\xd4\xac\x9c\x8a\xb5\x97/\xa6\x12\xb3R[F\xb39\x0e\xadjK\x05\xfc\xe5\x994S\xf0\xcc\xbf\xf3#\xd9\xab\xfc\xa9R\xca;\xaa\xc8\xc3\x0b\xf9u\xa4\xc6\x01\xc0>\x9d|\xa6TP\xa3\xa2\xe2S\x05\xf0B\x8e\x05fp\xfa V\x8b\xc9\x11\x95e\xe0\x80\xf2\xd0\xcf2\xb2\x15/\xcb\xc0\xfc\xde\x8f\xdf\x8b\xab\x82\x89O\xb9\xab\ni\xea\xfcG\xd5\xe7?\xaa:\xff\x11^\xa5\xb0\x97\x13\xfd\x12\xe2q\xd6\xf4\x07?8\x97\xc5\xe1\xbd\x0e%\xaa\xb3\xcd\x9a\x97\xfeQ\xeeL\xfe3\x14\x94\xc81\xac\x9dl\x87\x06\"\xc5\x98GO\x12e\x90Y\x9a\x83\x19?\xca\x8f\xd6L\x00P\xcd\x8b\xb0\xba\x0e\x13d(+\x95\x82\xc7\xad\x02\x8f\x8bW\x97g\xbf\xfe\xfa\xf1\xc4\x95\xc8\xefB\xeeV\x1f_\xf5\x05V\xca\xa52_\xbf^\xa0\x0c\x10@\xdc\x95I8\xf4\xef\xeef\x12\x10\xf2'\x8e\x16c/\x94)\xf2gbP\xc2\xe5\xc3\\V\x0ds\x89Wc?\x9e\x8b\xbe$\x80\xe5:\xe5\x922\xe8\xf7\x1e\xaf\x82\x99\x06\xb2\x91\xa4\x060\xad\x1e\xc0\xb4j\x00S\xe9m\\\xb5\x99h\x01\\eC\xfd\xaa\x86\xfax\x15\xea\xd8\x99\x12Z\xfaK5\xda\xabn\xb4W\xd5h\xaf\xd8\xe8B\xa0^\x1a\xd2\xc0\xf5\xe7\xd4\x9f\xb8\xc5N\x1a\xd5\x9d4\xaa:i\xe0\x957\x93 \xe5\x9bh\xd1\xabY\x1e\x88r<\xc0\xd5\xea$\x14\x1c\xf0i!Z3\xe9I\xdb\xc1Bj\xbf7\xc0$\xeb\x8f\x07\xb4g\x84\x9d4\xe6\x9dH\x08\xeah\xcf\xe2[\x14\xa7?\x07w\xb0y\xcbG\xd3\xad[\x18\xfc\xc6F\xc2\xc3\x9az^.\x8f\x9a\n%~ \xae\x12\xaa\x1e\xf2ra\xf4<\xba\x9d\xfa\xe9\xbbh\x14\xd0\xe2k\x9ei\x18q\xd4\x81\xe8#3Z|\xcd3\xfd\x91E)\x0b\xaf9x\xe8\x13\xf4\x04\x18\x0f#\xad\xfb6tOC\x89VQ<\x14\xc7\xdd\xbcK\xc6[^\x9b\xf48\x1e\xd3|g\xd4\x9bl\xfe\xb5\x9b?Bh\xc8\xbf\xe6\xc3N)\x1a\xee\xcf\xaf\xa2~J\x9fw\xea\xea\x96\xec\xa9:F\x10\xce\xe7\x94\x9b\x92\x84\x8b\xaf\x90\x94%\xc1\xe8E\x9e\xcc\x8b\x1a^.aU*>\x90\xb0\xdciFF\xbcr\xe4~,\x97@\xdd!c\xdeb/\x0fe8;\xe9u0\\\xc1\x91Vw\x8aq\x0b\x11\x99a\xdc\x05AZ\xa0\xf4\x8cW\xd3\x93W_e\x12\x99\xd7@S\x00?\xb9\x1b/^\\\xdc\xfc\xb3\xc75\xeaa2\xaeQ\x1d@g\xbc\xee\\\xef}0O\xb9\xc0!F\xa2hb\x88j\xc5\x81(\x9a\xf5\x13+\xb8!\xfdM\xdf@1\xddGRJG\xe1r\xc9\x7f\xb3\xd0\xcc\xdeS\x9e\x9a\x8c\xdc\xed\x96r\xe5\xe9\xb4\x0e\x96K\xe7\xc0\xc9#\xff\xb5\x8e\xf7\xabU\xbeG\x8ax\x17|\x8b\xac\x80\xe7\xcd\xfd\xc3\xf6\xde\x9e\xca\xc7w\x92v\xb5\x9aT(\x1d\x86\xcb%8\x9b\xd4u\nOTf'\xde'\xcfo\xfc\xf8C\xbc\xb1\xef\xc5>\xaaJ\xc5\xef\x8d\xfc\x9d\x16\xc7\x04'\x7f\xfeUP8\xf7\xa3\xf7\xb4Cf\xf2\x10\xb6\x90*\xe7\xc7\xce\xba\x9e\xeb\x89F^\xca\xc6\x9e\xc9\xdf\xb1\xfc}#\x7f\xdf\x85\xb2w\xd7a\xb5Z\xb1\x19\xa5\xf4\x8c?\xcd\xe0xpC\xdb\x0c\x97\xdb\xe5)|\x8e\xae\xc3\xe5R\x95\x9f\x99W+GA\x8fo\xb4\xcf\xd2\x02\xf1/\x8a',\x8f\xc7\xfc\x14f\xec\xa0Z\xf5N\xe8\xfeA\xdb9\xaeVY\xcd\xd1\xe2\x1a0\xd7\xc5\xb25\x07\xe3\xa7\x14\xdc\x84\xca\x10\x81\xed\xbdv\xd7i\xb6\xf6~\xb2\xbd:\xd4\x86kY]\xf8\x11\x85yu\x0d\x07&a\x10\x8c\xc4\x16\xf9F\xdd\x89\xcegr\xf7\xf7\xcb\xf0'kW\x85\xa2\x82M\xfc\x15\xdf\xc4\xff\x08i\x8b\xec\x84\xb4M\xceC\xbaG\xfe\x0c\xe9\xbe\xe1=\xed&\x8a\x92@\x9c\xe3\xc2\xceWv\x9d%\xa0`FD!\x17\xb4\xe2\x80\xe9.\xf9L\x85\xacE\xe0~#a\x01\xdd\x84'\xafX\x9c\xa4\x8f@\xb92\x92\x88/39\xff\x1f\xe4\xefY\xf8X|\xc9\xd1\x85\xff~\x97\xbf\x9e\xfc\xbd\x92\xbf\xef\xe5\xef\\\xfe~\x93\xbf_\xe5\xef\xad\xfc\xbd\x93\xbf\xcf\xe5o/\\\xd9E\x8ciblXE\x1b\x00x\xeb\x9b\xe3\xdf<\xcc\xb3\xb5\xea\x0c\x99Y\xb8\xfeY.\xc7p\xb7\xf5\x946;\xa7\x1a\xcb:;O\x81 \x1ctOk\xb4\xe5\x9e\xd6j**c\x0e\xe5\x1dZ\xac\xfaT\x1f=[\x7f\x86\x1d\x16P\x16T\xab\xe6\xca\xde!\xe7\xa4\x87\xc99\xdd\xc9\xfd\x1c<\xaa\xd9MMQNA\xf0\x05\xd8\xacW\xab\xf6'\xfai\xb9<\xad\x07A\xddy\xeaU\xab\xc8\x82\x03\x99~\x10\xd4\x9c\x01G\xa4\xd3\xfc\xf4\xab8\x88\xc7\xf7\x19\x9a\xf8\\\xad\xde\xd3\x8aR\xd4_,\x97\x9f\xba\xd9\xd3\xe3ju\xf3\xca\xea\xfe\x19\xba\xe3\xee\x9cR\xfa6\xe4\xcf\x7f\x84\xee\xa7\xeey\xe8\xee\x84n\x85\x05\xcb\xe5x\xb9\x9c\xf1l\x85\x1c\xaf\xc2\x92k\x1e\xd3HB\\\xd6\xe6[\xf0m\xcey\xda\x009.\x8f\xb3\x92D[dY\xa0\x91'\x08=q\xd1\x93'\x08l\x84\x8b\xec\x90r\x7f\xf3K\x98\xc7\x7f\xc3\xcb\xe5\x0b\xe9%\x81\xe5\xb3\xbe\xb1\xe2'5V{\x02\xb5\xa3\x1a\xab\xa1'\"\xe4\x8c\xda\xaa\xc3\xf4'\x83\xa5\xcf0\x19Sy\x9dV3s\x9c\xd1\xd6y\xc4\x03\x0bm#\x03\xd9k\xaa\xa3ux\xaf\xcf1\xe9Qo\xb94\xd8\xf3\xa7u\xa7Z\xcd\x9eR#\xa9#C\x90\xad\x13+Fzz\xa7&c\xa2#\xfb\x83\xaf\xa7g\xb7_\xd9u\xc6\xd2;[o\xf4V!\x83\xe2\xb1~\x81s\x1e\xcd\xddH\xb2\xaf\"\xdc\x08-\xd3\xa6\xd3\xce\xec\xc4\xebd\xfa\x88\xaex\xd4\x99\x0d\xf4!\x163LZ\x95\xc1\xc7\n\x9aZqh\x183A\n\xacf\xb5Z\x11a)\x86~\x12X\xafBW\xd1O\x08\xa6f\xfd\xa1\x12`\xbe\xf2\x008Ov\xaf G\x10\x0cS\x08Ywt\xd6%\xaa\xc1\x8d\x80\xd7\x81?\nbP\x9e\x0b\xe8\xe1\xda(\x8e\xa6/\xc3\x11\x0b\xaf\xdf\x073>Ev\x81\xf1cd\x8e\xb1\xa8\xee\\W\xf7\xf4/W\xa7'\xe2*\x9a\x8cL\xde2\xf7/\xb5k_\x865l\xf7\x7f\xbf\x0c\x07?\xe1\xddk.X\xf5J\x8c#\xc7\x1f\xc0\xf9^\xb7\xe7\xe6\x11\x89\x1b\x13?\xe1K9\x98\xd3\x1e\xe1-\x08\x8eO\x8bU=\x0c\xe6zc\xd0Cr$\xee7\x07\xcb%\xb2\xd4\xb3\x08o&\xf4u\x1e\x9d\xa9 _\x1d\xb9\x1bR\xf0\xa2\xbbC\xbd~k\xc0\x05l(\xb7\xd3o\x0e\xc8\xbcFOk\xf6x\xb9\xcc\x96K\x04\xa9]\x84\\\xe8iM\xf7c\x87\xb3\xc9c\x9aiG!+\x9b\x911\xce\x01\xfc\xa7\x020_\x94\xb9VBx\xf6V\xfaX\xcd\x853\x92qN[x\xb0kvf9\x8d\xf6\x14\x8d\x9eq\x1a=\xab\xd5\xb0W\"\xcf3L8/\xf51\xec{\x03p`\x95\xd3[\x8fs\xe45\x08\xf4KTE\x9c\xa5\x81\xa4\x9a3\xc0\xd8\xcdj\x94-\x97\xb9\xb6\xc4\xc3\x86\xb4\xc80\xa7&\x1d\x19v\xcf-j5\xd8\xed4J\x12\xf6u\"\x03\xa2\xb9\x16\x13\x92\xbd4*\xb4@\xbaDx\xb5\xb2\x0d\xfe\xdb\xc45Cgx\x0f\xf5V\x88\x8b]\x80\x8e\x9ej#6\xa7\xeen\xcd\xf6\xaaU{=K\x8b\xa3\x85L\xc5]TC\xae\x07\x13Z\xe7\xcb\xeb24\xfc\xcb\xaf\xe3{b\x8a\x17\xe5\x96\xbb\x89\xe9\xb5\xdb5\xc3\x00ht%2\xb2\xb0\x8c+\x96\xa3\xa7&\xe3\x1dC\x12\xe3+\xc6\xea\xffn\x0d`\xa54\xa5\xbf\xd5&9\xa5\x08u2\x13\x89\xed\x9e\x8a\x99\x8c\xeb\xf3\xa7\"\xee\xf1\xf8\xe9\xbc;v{\xe4T\xe8\xe6k\x89>y\xf10\x99S\x8f\x0b]\xe3\\\x1b \xb3\xe5L\n\xd4\xc3+9\xad\xd1\xbc\xecX@I\xd76\xae9\xd85s`r\x9a\x87\xb7-\xee\x9bk\xbe\xe7\xd6\x1c\xd7r\xac?\x15\xc7\xe7\"\xac\x0fH\x9e\xd9\x06]K\xc6\x918\x97\xc4\xe5\xe5k\xf5\xaa\xdc\x84\xe6\xceM\xc7\x18\x13\x1bz\xa1\xae\x0c\xd6\x1c2&\x95&\xfc\x1fN\xb6\x96K\xadF\x1fW\xab\xe5\xbc\xc0(\x9b\xd91\x87r\xb5\ns\xd9[.\xed^\x8dn\x94H\xe1`*\xbb\x9dV\xabSq\xfa\xc4_\x8a\xc7#\xdd^\x8d\xa2:r\xe1\xc7B\xa4W\x93\xd9pGH\xfe\xa7\xb2\x0e\xde\x10\xea\x0fL$\x0d\xd2`\x08;\xd4=F\x9b2\x9e\x0d\xc7\x1e{\x06N\x87\n\xaa\x07\xb7\xb4\xcdi\xbd\xd6\xfcd\xdc\x99+\xc3\x1f\xbbGg\xfd\xf9\x007\xf2`~\xcbe\xaf\xa1\xc3\x8cqXTz\x85\xaf\x9b\x8e)\x98\xa5rDW\x96\x99]\x96\xd7\xf5\x15*\x076\x87/\x9b\xac\xdb\x13f6\xd5j\xaf\xa1\xe3\x8d\xbd\xf7o\x03\xe9J\xa9\x94\xca \x85\xfa\x90\xfa\xd7\xae\xb6D#FF\xa8\x99\xe3\x9c\xd2\x1f\xf6!\xf3\x80w\xc1\x0c0\x9a\xc75z%a\x0f\x1ev}\xa9\x833k\xc4\x9e\xd9\x13\x9b\x91S\xe3z\xe0d\xbd\x00g\xa9\x8b\xc4\xb4r\x82j=\xc3\xdeF\x19\xae\xc4\xda\x8f\xb94\xb29\xad=A\x82\xb2>\xc1\x9dB\xb3\xfd\xd3\x01\xb4\xbc\x92\x98\xe3\xe5\xd7\x964\xcbR\\\x9eE\x0fD\x1c\x7f8ck\xf8\x0c\x82z2R@\xb9\x8cT\x1c\xbc\\\x96\xd3\x9a2\x9e(9\xd5\x10\x92\x18\x0d\xfe\x14<\xa0P\x06Cx\xd2,\xb2\x8cL\x94\x87\xbb\xf5\xeb~\x8b)\xa5\xa7|!\xc8\xe4 \xe3\xd01\x8e\xe2yl\x82V\xf1r\xb7\x86\xf7\xe4 0\xe3\xac\xc0\xd3U\\\xd6\xaa\x8e$3\xb6T\x8c\xc4>\xf2.$\x15\xf4\xb7\"\xbda\xc9\x838\xfe\xa4;\xd0&\x82=\xee\xe5\xa7c\xa6#\x0c\x0d\x18\xdc2\x87\x1b\xe6\x1e\x03;\x926\x02?\x0f\xc9;yz\xfe\xac\xae1!\xf1\xf3\xd2\xb1?\xc8^SK\xb41!\x1b\xb0O\x18^\x90n\x7f\x91{\xd8\x80\x08#\xbdc\xcd\xeb\xa2)\xe1\xc3\xc5\x08\xfbd\x19\x8a\xc9~\x1e\x02My\xfe0\x1d\xe1\xc5\x1e\xe9\x19\xd1\x12\xa2\xb0\xeb\xae\x9e\x84\xe4Y\xa8\xbe_5u\xb6\xd0\xd7\x93\xd0\x1d\xf2\x11fH\xbdn-\xeb\xbe\xd5u\x0fJuO\x83\x84\xf1)\xab\xbcv\xcd\xddW\xea\xa0\xb4\xf0D\xb6?\x0e\xe3\x88\xbe\xa7\x17\xc7K\xfbU\xbd\x88.Z:Q=\xa1\x80yg\x1a\x06\x17|\xa0\xfez.\xef\\\x84\xf1y\x10\x0e\x9c\x0b\xc7s\x1c\xb4\xe7\xf2\x0e\xbb\x88\xe29}\x1ep:p\x98I\x85\x97\x85\xe1\xb9*\xe7\xda$\xf2\x84\x8d\xbf\xdd\x0c\x9c\x1b\x93\x92Fl\x1cO\xe8\xc0IM\xd2$N\x9e\x85\xe1\xc0\xe1\x90\x82\n^J\xf3\xe0\xe6\xe5<\xbe~\x95\xe4\n\xbd\x1d\xb0`8\xea\xef@p\x82\x88.\x13\x17\xa1\xce$\x8eh\x1f\xa9#\x18ckU#\xb6N\x8f}\x15\xa1\x8e\xff\xce\x12\xa3:Y\xbeW\xf0\xc0\xaf\xf6\xbdz\xb2\x90\xd4\x01Kq\xe8\xdbw\xe4\xfd\x9c\nl\x89\xd5\xbf\x0c\x8a\xd4xK@\x0d}-\x81\xeb\x97\xd3\xdf\x84uW\xa3\x14\x14\xc6\x07\xe6+\xb7/\xa8\x03\xdcW\xa5e\x00\x91@@[X\xaf{w9!\xbd\xbb\xcc\xb3<\x88`M}\x08\x9bW\xba\xa2\xc6\xf7\xa1\xed\"Q\xe2\x18\xcf\xf4~\x0eL\xe3C(\xc7\x93K]\x03\x9b\xef\x98\xc25\xac\xa7\x1e\x10G\x99w\x0b\x04\x89rG\x14\xa7\xd4\x81\xcb\x0f\xae<\x7fz\x11\x92\x9d\x95\x1e\x0c<)\x92u\xb4\x87\xec+~l\x9e\x01q\x1d]\xc8A\xf8($\xc3\xc2\x850,#,\xbe\x9b:\xd8\x01\x8b\xa0\xbe\x85\xef\xe0\xbc\x9ey\x05\xb3\x00\xd8\xc1Nq\xb6\xa1\xca\xebx\x1c\x84TU\x1c\xe1\xd75\xe8m\xe5bR}\x87%\x81:(s\x11~iyp\x8d\xe3( X\xa4(\xc1\xb0=\x88\x94Rdx\x10\xa0\xa6\xe0\xf8\x97\x16(\x1a\xef\xda\x84\xb8S\"D\xa1\x9a\xaf\xd7\xaf\xc3\xeaf\xd6\xfa\x96Gt1:\xe9N\x1e#c8\xea\xab5\x8c}2\x1c\xe1\x05y\x1d\xb6\xdb\xef\xc5T\x83Y\x99\xc9\xc8+;0\xabb]\xac\xd7\x8bv[\x0fX\xaa\x8d\xae?\xd4\xae\x15#\"=\n_\x84H:\xd9\x1d\x85\xb9\xe3B\xfa\x94t\xfbHB\"G\xa1`\xdeB\xb7\xdby\x19\x82\x1fX\xbb]\x02\x84\xd3}\xd2\xeb[\xac\xbd*\x90\x99\xe1\x15\x96\xb7\x1a\xe2`8\xf2\x8a\xb6\x8b\x9c\xa7\x9f\x85dW\xef\x0d\x7fj\xfen\x03N\xe0y\xfc\x82\x86%v\xee\x81\xf36\x0dC\xfd\xc4\xbaL9\xcb\x03\xc0\xdc\xbaM\xab\xcby\x8f\xf0~\xaf\xb49\xa4\x11\xfbCEM\xcc=B\xa5\xb0.]\xedj\xb9p\x0e\x80\xfeQ\xe07>\xb5\x80\xa8V\x11\xf6\xf5\x97\xb6\xc6\xec\x14\x19\xb0\xb5M\xe7\xb0Je\xe8\x1f\xf2R\x13\xc25=b\x08/\xec\x9d\x83\x96\x86\xc2\xa6\xee\x1b\xe9\xd6\x98S\xba\x1c\xde\x9f\xa1\xf2-\\\xec\x10\xf1\xc3>\xe0`\xd3\xba{\xdb|\xe8L\x83( \xf8\xcd~\x18D\x93\xbb\xb2-g\xb4^\xd7\xb9\xe24\x14V\x8d\xfc\x00\xf8v\xbb)\x07\x04\xec\x1fh\xbb\xddn\xcaQ\xa8\xa8\xeb\x95z\xb6\xb7~\x90*s\xc3\xa0T\x89v[\x7f5v\xda\x94\xd4_\xa2SJo\\\xa8hIf\x03p<\xf5{\x1e\xdc\xa8o\xb9\x16\x1c\xafi\x1c\x16Wo\xb7\x1du\xb6#XJN=\xfa\xebmp\x0d\x8b\x11X\x151\xf2\xb2y\xcb\xdd\xd4p\xbf,~Bw\x8d\xa0!W-\x1b8\x8e\xc7\x86\xbdQ\xe6\x16ZE\xc8\xde\x9b\xfb\xe7s\x1a|\x93!\x9d\x8e\xe28\xa4A\xa4\x06\"\xa5|\xf5Cm\x14bTz$\x86\x1b\xb3\xf5zGPwGmQ.\xd2\xc7\xcc\xe2\xdb\xa2g\xab\xa9\x17AB\x01\xda\x0f\xd7\x84C\n\x13s\x8a\xcb\x186\x84\xc8\xc8\xed\xf0p\xa9\x8aBcEv\x975\xa5\xb4 \xadj\x89sG\x14\x92\x9f\x10\xbf\x11\x84MH\x94\x9f\"1\x977!#\xff)2\x8d\xd8 y\xe6\x17\x8e`\x1cF\xb9A\x92\xfdchIv\xb2s\xcd_\xb7\xbe\xac\xb1\xbeL\xac/k\xaco\x02\xea\xb3XY\x99\xf3\xa4\xbar\x96+7\x96Z\x19\xae\x94~\x11\x81\xae-\x94\xbb\x99\xfd\x8b\xf4\xa7\x16\x88\xd9\xcb\xb3\xbb\xe7/^\x9a\xbfzY\xf4\x92\xb4/\x8d\xc3[\xde\xe2\xc6\x8e\xb7\xd6<\xa9\x14\xa7vsAI\xca\xb7{\x1a\xfb+\x97\x8b\xdd\x8b\xf0#\xdb\xaa\xc2\x8cMY+\xa8\x06\xe2\xa9\x9f\xc4\x0c\xc4\x87\x10E }\xaa\xe7\x80?\x0bAT.\xfb\xeb\xe6\xf1\xd7/\xbe\xedeh!\x01\xb8\x0d\xdag\xd4LM\xd4:H\xaaC#QN:\x164\xac\xcbYjxT\xc4\x89\x82E\xc2a\xa1\x9eC\xfe\x1cB4\xf2V\x92\xf3v\x82e{\xe4\xb6s\xbfj-\xf7\xfe\xb2\xeb\xec^\x8c=^\xc0\xf6F\x10\x96\x87\xe6\x05\xd8\xa2\xdcj\xf3\x0bT\xe8g\xf8\xf6\x87\xc5\xa3d\xac\xfd\xae\xd1\xa4\x1b\xed\xee${\x15\xa3\x03\xaf\xfac\xb1\xd2\xd7\xce\xa7\xae\xe6\x9c\xe9\x17;\xd0\x9a\x90o\xab\xe8\xa20\xb3\xd2\xd1,\x9dW7\xdd\xe3\xe2)\xd6\xbf\xa4\xb4\x0d\xaer\xcd\xfe\x1b\xca\xba\x16_\\\xda\x124\xa8.\xc1\xac\xab\xe6c#\x0f\xdb&\x13\xeb\xd4\x0d\xf4\xf4\xcd\xc6W?\xc1r/mI\xc0\x8eM\x98\x1cr\x01\xab\xa9\xbf\xd7\x81U\xbf\x80\xfc?\xe4\xfd\xf2)\xcd\x0e\xf2\xd5\xa7\xd5\xbaX\x1d|\xa2/\x07\xdd\xff\xe8\xa7\xfd\xff\xe8\x1e\xacW\x07\xff\xd1\xaf\xaf?lVk\xba\x1d3_\xd1\x8d\xc8\x03\xe0^\x89\x86ri\x19Xl\xc8\xa5R\x07\xaa\xae\x9c\x89\x9d\xcfu\x0fj5\xa3:\xb4r\x17\x8c\x1c\x96\x89\x16\x8c\xca\x1c\xea\xaf=B\x19a\x97\xb6\x0e\x91\xed\x1f\"s\x0d\xf1OX<\x1c\xad\xbc\x82\x82\xab\x81W]`\x1c\xeb\xd68\x15\xb2mC2\xc6r\x8b\x1c\xe6\x88\xd6Q\xed\xe7\x8f\x7f\xf9\xa0h\xfb\x98\xfe2\xf3\x88\x8d\x1f\xbbm!\x15,\x00\xff\xbbj/\x0e\xf3\x87\xccL\x9cf\xa4>\x05\xe3\xa7b5]9\x03\xac\x05\x01\x8b\xa7\x0f`8\x16M\xfcx\xcfQ\xdf\x9c\x0d\xca~\x93J\xb0o\xe5\x8cH\x13\x05\xfbP l\xcd\xb5\x1b\x1e\x0fEYW\x8c\xabk\x9d\xa4+\xc35,]\xf6\xfc\xf2\x99\xe9Ci\xf9\xee\xf0=[\xdd\xf9:\xe6\x13mo\x17\xd9-\\\xf4\xb6m\xb4#\x9a\x91s\xbb\xa3\xf7lE\x0ds\xc1\x0c\x7f\xfe@\xb3\xa8eGIt\xc1\xa9]\x85c\x80\xbe\x19\xac\xba<\xb8kQ\xce\xf5\xea`\xb1:`*H@\xc2\xe6\xb0\xabNT &6\xe5\x92\x97\x19\xf3\xdbJ\xac{%x\x9d\xbfB\x11KE\x15\xb8\xea\xc0\x8a\x1f\x90\xd1\xebPi\x7f\xd8\xbauD\xf5'\x82\xd6\x8d9\xf3pqw\xe7\xbb\x02\xd6+\xf3\xd0\x19\x9e\x17\xd9\x1cmS\xc8?\x98\xea\xfc\x83\xa9\x95m0m\xc96\x98\xca\\\x81:K\xa0.\x81|\xa2\xdfYIQ\xf5\x9bj\xb6\xc1\xd4\xca6X\xc95XySiM\x15Tj43\x15\xa6\x8d\xfc\x89\xa9#7b\xda\x92\x1b1\xdd\x9b\xe70m\xcds\x98\xee\xccsh\xcb\x7foi\xc65S[\xf4{K_\x9bC\x9b\xd7\xbc\x7f^?B@t\x8b\x10\xe7\xd7\xfd%\x0f?Qa\x8c\x96\x0d\xfc)\x11\xb3\xfb\x96fF\xa8\xac6\xb3S\xa24BG\xfd\xb3\xc5\xdd\x9d\xeb3\xb1\x1e\x1ck\x81\xf4f5\x81\xa3\x134\xe7\xb1\xef0\xc3\xd1\x98\x96\x0d\x1a\x8d\xb5\x9d\xfe\xb46%E\xc8FC\xf9\x8a\xadWus+k\xe6\xd7\x0d*\xfe$>#\xec\xd5n\xa9\xfa\xc2I\x90]\x82\x8eu>\xa5\x8eX\xaa7O2\xfb\x83\xd7\\>)\x9243;I\xb3M\xb1\xd8,\x9f#W\x02z\x8b\xe3p\xc2\xa4\x92\xcf\x8b\x03\xb3\x8a\x7f\x02\xdc#Y\x03\x1dx\xd9\xa5\xf4\xb6\x91\x89\xda\x0d>\xe9\x9c\xcb\x9c\xe9# ku\xb1\xa8\xd2^\x15r\xe5\xb0\x02\xec\x00\x94\x8b,\xe7\xe83;\xa4\x7f\xd0\xe7\x97\x16\xcf\x0emX\x82Tq\x9c\x1bK|\xcc\x15\x01\xaf\x01$\xcd\xdfg\xcf\x8b\xffO\xc3c\x87\xffL\x15\x1c\x9e\xb7\x17\x1cm\x89\xbcap\xb0\xef\xac\xdc\x06\xb8NAk\xed|y\x1elw7ys\xd5\xd6\x95d\xfaz\x98RX\x00\xcel\xf9*f\"\xdf\xa8\xb3\x99\xc9KM\x1e\x7fES\xcc\xd5\xd8\x9f\xd2]\xaaM\xbc^E\xc8,Y\xdbaA\xb3c\xb6\xfd\x04'\xc6\xe4\xe9\xeep\xf7\xf1+\xef\xa6]\xe1`N\xf5\xa7\xde\xcf_\xa6g\xecP.d#\\\x11\xf0_\xadX\xc0HA\x98#\xf0W\xf4\x97\xe1E#U\xf5\xdboe\xa6\xea\x87\x8cT\xa6gt\x10\xc3\xcal\x08\xa5\x8et/\xc2\xe3\x1f\xeb\xc1\xa4(\x12\x19\x04AcN#Af\xc0\x1f\x82\x7f\x0e\x82\xaf\x8f\"3?T\xf7\xbb\xaad\xbe\xad*=\x0fY\xc3g\xda\xe49\xca\xc5\x10RpV\xd6\xc9\xb4m\xb7_#u\xeb5\xcf6\x1b\x9feD\xf5\\\xb1\xce\xe8\xef\xec-\xe4\x96\xf7\xad\x1aV\xb2*\xf1A-Y\xd5\xff-R\xbfsRFc\xa9\xa4\xa9z\xc8\xb8:@:\x01~\x00\x85\xe0A+\x04\x0f\xb6\xa8\xae\x1e*\xa5@<\x1f,\x0d\x80\xbf\xdd#F?\xb4\x8a\xd1\x0f;\xc5\xe8\x87L\xa1\x18Qk-\xca\xf8\xfa\xaaE\xc6\x0e\xe7&)sk\xe7\xa6\xd7\x0b\xdc\xd6\x07\xff\x96\xdcm\xb5\xf3\xe7\xc4o\xd3@\xc3IJP\x06\xf3@\xec\x07\xa0\x13\xb7\x19\xce3\xe2\x1aC\xd5.a#M\xdb&\xcd\xff\x82Mj\xef\x155\xe3[\xbeWo+y\xc7\xf4\x96\xb5\xdcR*;\xf7m\xb6\xb8\xfd\xd4\xaa\xa4\xc3KP\xd3e5\xad\x99\x8b7\xea\xb6\x93\xbf=B\xfa\xa8\xb6\x01\xc6\x01\x07\xe9\xd5\x9b\xedb7\xb3x\x1c\xce.n\x19\xd7E\xebV\xcf_\x856w\xd9\xea\xb7\xc8\xf8'z]u\xf5\n\x9f m\xf0,%\xdfi\xff\xbb\x00\x80\x90\xad\xf7\x18\xbf\x80$d\xeez\x0d\xa2%Z\xea\xca|\x85')\xa9(\xdew\x1c\x1fX15S\xab\x83\xb3\x94\xd4g\xa9\x00[\x1b\x18\x95\xed\xe7=\xe9\xebG\x08\xddw|\x88\x9b\x1d\xe4\x8b\n\xe5\x17\xe2n\x85\x17)\xf1f\xe9z\x9d\x13\x16\xf96\xb2\xa1\x14P\x14\x12\x80\xbe\xefo'5\x9c\x1a\\\xda\x1a^\x96\xae\xd7\xa2\xb5\xe16m5\x1c\xe1\x0c\x04\xfc\xf0D\xca\xf9aqW\x94\x84\x98\xf8X\x9f|\x82\xe6\x0b\x0d\xcd\xb7H\x1b\xce\xe3\xc6\xf1\x07T\x06K\x94p\xa8(\xe1\x8d\xe3C\xb6E\xd3\x856\xf9\xa7\xf1\xb7Y\xc2\xd2Y\xf6\xa7\x8a\xd7\xb4\xdb\x90[/\x91\xebu\xd5\xd3\x96\x18\xed\xf4\x96\xf1\x8d\xe5d[\xbb\xddWe>\x19j\x96Y\xaf\x04zbt)f\xb6\xb6\xf5\x92\xa0\xef\x06\xfaALk\x06\xdb\xc4\x9e,\xa2\\\xf9\xcb\xf7\xae6\x0e\xcc}\xa6\x97\xbd\x08z\x99\xbck\xf0a6\"\x84\x98k~\xa6F\xba\xd9\xd9\x94\x99'\x86I\xa7[V\xd7u\xb6\xc5\xeeV\xde\xe9\x8d\xb9\xe8\xad\x128\x80+Z\xcdid\x0d\xa76\x8f\x13Z\x9b\xdc\x86I8Ii\xe24\xbc\xece\xa7\xef\xf0\xc2\xc4\x17a\x98\x98\xf1k\xe3\xed\xe61C\x8d@O\xaau\xd9,\xbf\xa8q\xfc\xcc\x1b\xfe\xef/_F\xf0\x9c\xf6\xe5\xcbN\xc7A\xf8\xd9\xf0\xcb\xaa\xddn~Yu\xaeG\xcfn\xf0,^\x8e\x1fRq+U\x0f\x0c\x85\x19S\xb9\x9eq`/\xae\xa4ar\x12O\xe9o\xa9\xd7F8#\x8f\x87\xbe3v\xf0\x91\xef\xa4\x0e\xee\xb4}'rp\xa7\xeb;\xd7\x0e\xee\xec\xfaN\xe2l\x86\xcc\x10vY\xdf\xf9\xf2\xc5id\xbe\xf3\xe5\xcb\xcaix\xecE\xe7@r8\x1d\xd4\x98\xea\x87=\xf3\xf0\xebu\x0e\x90\x05M\x8e\x94\xcd\x1aR;\xdbs\x1a\xbc\xe1 '/\xbbu\xcc[\x0b\xb8\xe1\xd4\x1ek}\xb11L\xf1\x02\xfd(-\x13\x05\x85\x0f<\xa7\xc1\x1a\x0e\xaa=:\x0d/\xe8\x17\xb6\xa1(j\x98|\x99\xdcw\xb0+\x8b\xab\xda\x94\xd7\x0b\xac\xea\n\xee\xa8\xe7[q+n\xb0\xd6\"\xa1\xf7\x0d\xd6\x1a\x87\x9c\x9a!4{\x9cc\x07;\x8d\x0c5\xac\xc2y\x93E\xe4\xad\x97l\xce\x05\xc0\x81 \xb8\xd9\xb5\x97\xa1G\xad\x7f\x92\xef \xbd\xb1\x96\xa4\xdd[\xe6\x17\xf8e\xa3\x81\x82\xe1rD\xe4\x86_\xa2>\xf3\xf8p9\xc2\x1c\xf9\x8e\x03|\xe1\x15\xbe\xab\x92\x0c\x18\xd0\xfe@\xac#_6zF\xd1\xe3\x8a\xc2\xae8\x8c\x82\x90\x11s\x9a\xb0\x0f?!\x80J\x0c\x8d\xbf\x06C[\xad8L2\xba\xa05h\xba\xefIL0\xec\x88F\xda\xb3PC\xfbQL\x1b\x15\xe9\x8bX\x92\xa5\n\xe9&\xa1n\xa7\x9f\n\x1d}\xdf9SSS'\xe0\xe9k\x103\x0dY\xa6!\xcb\xf4D0\xe32\xc9\x14\xba\x05\xac\x99\xe7\xb1\xad\xadu\x0d,\x95\x1aB\xd71}\xc0\x01$\x99\xc5\xb4\x19\n\xb6\xf3\x9a\x9dE\x8bVs\xeb:&?\xcc\xdd`\x91\xdc\xa4\xe2\xee\xad\xb9\xabSW\x8b'g\xe6 \x1c_\xc9\x17Bs[\x1dh\xc9'\xaf\xcc\x93\xb7\xe3xr\x15\x89\xfbf\xaf|\xb3\xd2\x91\xa7'\xb3\xf8T\x9c\xa3+\xf9\xcd:\xa4w\xfc\xde\xb3\xbe\xa4\xdc\xd9\xc9m|\xbaZe\xfcU\x19D\xc5,\x86\xa9)\x1e\x10LmS\xc94-\xccd\xb5/\x11\x9d\x05K\xc0\x96ZDT\x16t.A\xca\xfa\xb2\x99 \xc8\xc9(Ji\x86\xed\xe3\x1f{\x96\xf4X_X\xf5\xd5\x1a(\x15\xfd\xaeV)\x18)\x85 05&@y\xd9\xdd6\xd7\xfaR\x97MS]g\xcaC\xf7\xde2V\x96\xec\xe0\xb2\xb7\xedm\x9b\x1c\xbd\xb4\xeb\xc0\xa5'?8\x90z\xbd\xe51=9%_b\xfa\xd8v\xaf\xb7\xf8\xf3\x9d\x94\x18}\xbb\xd2\xcd+\xfe\xbc\xf3\xef/\xf1j\x85\xb4\xa3\x06\xcd\xe3\x93/\xf1)\x11\x7f\x04\x1f\xfd\x12?~l\x81\xf2F\x10\xc6/\xf1\xd6\x96j\xa6_7\x1e\x1f\xb2r{\x11\xd3\xbb5\xb9\x8c\xe9h\x8a\x8a\x18\x93Op\xd5\xe8b\xf2\"\xa6\x85\xb5\xe8\x8e\x1cz+\x9c^\xda\xd2b\xc1\xb73\x14\xdfi\xe8\xac\xeaE\xac\\\x0c\\\xe1+\xe4\xa2\xa6\\\xdd\x071,\xb9\xab\x8f2\xa7\xeb(\xbe\x1e\xa7\x97\x91(\xb7/\x93\xee\xd8[~\xe3\x8b\x1f+\xaf\x89 \x1dR\x80Kv\xb2@\xb9p\xa6.N\xf2S\xcaNr\xed$\x0d\x86\xd0\xd4\x06\x12\xff\x16t\x8c\xa4\x0f\x07\x8a\x16\x98\x14f\x9e\x8e\xad\x05 \xb3\xd0\x9bzi/,\xcc\xda\x99\xde\xb9\x10\xf5\n}\x8a1y\x85.c;\xf5\xfa\xcc\x92\xce.c5\xcd\\;(\xd7\x85\xee\xee\xedc\xdc\x7f\x83.c\xc20y\x83>\xc5PAV\xf5t6+;893\xc8\x14e\xb0A$5\xe5F\xc3\xf6,Z\xda\xe37\xe4@Q(\x98\x96\x90VZ\"0e6\xc4\xb4\xb1JI\xc4\xce>\xf9\"\xcc\xad\x99\xa5*j!\x1fh\x96H\xe9\xa3:TN\x0e\xf2B\x9d\xf0f\xc0L\xc4\xb7m\xff\xa4\xcc\xb8\x179\xdeIY\xadwR\xa6\xbd\x932\xdb;I\\\xf63\xfd|\x9d\x95\x9d\x93\xd4\x13\x9b\xa7\xad\xd7\xe4Sb\xe7\xc1Z\x93\x17.\xe6\xecJ\x085)SrY\xfb\xdfQ|]\xfdX\x9c\xdeI\x97\xd4~\xbd\xc9G\x1a\x1e!\xb7\x812A\x06\xf4\xe4\xb4\xce \xa3\xcc\x85y\xc5\\\x18n4$\x96\xfb2v\x0ei6\x84/+\x03\xa2\xd5\xbajzi\xd4\x98^j\x0c3\xe1F\xc3\x0c\x9f\xe3\x91\xb6G\x86\\\xc6\x00\x1e\x00F\xc9FX\xb6\xb1\x8d\xb0\xe7\xe5u7\xc5r\xcbOF\xa7X\x988\xa4\xb5r\xa4\x0e\xbd\xf8\xa3\xbe\xb6~\x0eq\x8d\xc1\xd3\xf3P\x06I\xf1\xef\xb8\xacsR\x9c\xd2fS\xc8\x1c\x1b-\x9d\x0dJG\x9eg\xac\x98\xf2\xf7\xafM\x8e\xa3_\x98\x1cGe\x93\xe3\xa8\xce\xe48\xc2\x83`\xb5B|\x8a \x98)\x80\x9a\xc5\xc2\xffv$\xf8\xa3(J\x0f(\x0e\x95E7\xe4\xb8`S4\x94\xec1\x1fp\xec\xc8\x05Bj\x91\xde\x92\x07\x80\xe2\x85\x96R^\x86\xb8\x8cn\xde\xad 0\x12\xd1\x8d\x1aL\xafV-\xcfk\xd5\xdd\xaf\x99\x013k-\\\xf3\x8e\xe7\x0dO\x8a\xd3\x06\xa5\xad\x93\xe2\xb4:\x85\xfc\xaeL5\xc2\x9fht\x91@\xa1)\xc3|\xd5\xb5\xfa\xf7N4\x1f\xdb\xa0\xce\x98M\x86t8\x18\x96\xeeI,y\xdeP\x14T\xabLM\x0b\x97l\xdf\xa3A\xc5,\xd7\xf2
p\x94\x97\xebe\x93\xb0\x1d\x8aC\x8f\x83XV\xe7\xac+\x1c \x8b\x16\xbag\xd0j\xfa<\x8f] \xa8\xb5U\" \xb7\xb2\x86K\xbd\xa1M\xa6\x96u\x14a\x95SG\xcf\x86\xe016\x99\x93\x18\xd7\xaeo\xd6\x91\x14\x13U\x062\xec\x8aGb/\x96&'\xd6\xe6;=M\xf8.\xd3\xa5d6\xa4g\x90\xde\x97\x7f/\nmh\"\xd0\xb8\xce3\xe5\x17\xa8\x9a\x0ea\xd8N\x17\xe7P\xdb1]\x9cS\xf8U\xd6\xf4$e\x16\xa8P9OT\xfe\x12\x99\xdd\xa4'\x97\xad\xe5m(\xfe\xee\xfa\xae\xfac\xfbT\x96\x04DA\x87\xec\xfdc\xa6\xaf\xa5\x8c -\xf7-\xab\x89t\xde:\xa2#\xcb\x89S-\x9b#\xcf;\x9bp\xa1R\x8dm\x13\xcf\xd8\xc6x\xcd7\xden\xb7g6\xd4\x979b\x8e`\xcc\x08S\x9cD\x1a\xec\x98p\x0fP> \xf0\x91\xb5\xe5\x8a\x90\x19\xdb\x1c\xc6w&/\x93\xea\xe6c\xa2\x18\xf2\xfac\xa2o[4\xe9\xe2\xd74\xa9\x16\x06E\x95\x14\xe9\xb4-\xb6\x7f\x07\x8e\xcb_\xc0\xc1i\xde\x83\xc8\xdb\xad.\x9c\xa5U\x99\xcf\\\x99*c\x1aT\x90_\xd3\xbfZG\xc2\n\xdd\xc3\x9a\xe2Y\x9f\xad\xa5\x8f.\x10P\x0fR\xd3%\xeb\xdd\x9a\xa5Q\x94\x00\xde\xd5\xa4\xe9\xfe\xf7\xe6\xf0\x8d\xcd\xcb\xec\xbe\x19\x0ejg8\xc0wA\xdd\x0c\x07u3\x0c\xa4(!\x1f\x12\xfaq\xbc\xbch\x9fG\xec\x8a\xbc\xaeT\xbf|\xc9\xd2\x1b\x0e`\xb4 \xdf7\x94\xc6lU\xee\x0f\xf9\x1b/\x92x\xcafd\x94\xd0\x0e\xf9)\x8d\xe7_\xe5\xdfo\xfc\xe6{\xfe\xdf\xdb\x84\x8e\xa6\xa8\x83\xc9;\xfe\xeb\x8d|~\xc4\x7f\x1c\xf2\xff\xfe\xe4\xff\x1d\xcb\xdb\xca\xd3c\x99\xd2\x0eY\xa4\xb4\xfb\xaf\x0eQ~*IJ\x1b]\x92\xca_c\xf9\xf7\n\xee\x9e\xcb_\x19\x7f\xef\x86\xffw!\xefLR\xfa\xb8K\xa6)\xed\x98s\xe3\x0f\xa6\xe4.x\xab{\xa3\x04\x0f~,\x11\xf6\x1fw\x1b\x94N\xd2\xc1$\xf5'\xc2\x88b\xc9\x10\x17\x96K\x88[\x0f\xb5\xeb\x8bc\xbaQ\"\xb2\xe7\xd3o\xc9\xe0[\xe2=\xfe\x96(\x19\xe9kl%\x8a\x85\x14\xf6t\xca\xc5\xeaiJ\x7f\x9c#\x8c\xc94\xc5~G\x1c\x9a\x1f,\xf1 \xf5Sj\xea\xd0\xa64g\xf1$\xc9\xdb\xd1-\x04\xe0u\xf7\xfc\xf9\x04 S\xb1]\xfd\xe0\xc2\xb8\xc2q]\xba\xf3\xec&\x95\xa6:\x07'\x9a8\xee\xefb\xdc\x7f~\x0e\xc9%C\x95\x12\x13\x06\x91RJ\x7f&\xab\x15\x12\x17\x9e\x07\xa9\xc5\xe5Ct\x98\xach\x86\xc9\x8e\x8c\x03|\xc9\x05\xe5o \xc6\xe4\xd5\xa5\xf0\x1a\xee\n\xde\xc8\x81\x1f%\xd2\xf7\xdf\n.\\\x08\xdcn\xedv:d\x1e{\xde|\x86\xb0\x1d\xd2\xf0\xaat\xc4\xa1\xaa\x14\x03ih\xe8f\xf99*\xf9\xb3\xa7\xa5D\xd6D\x95\xffU\xbfs\x9a\xb6\xa3\xe2\x86 \xef\xc7\xbf\xd8u\x04E\x14\x94\xbb\x104\xeaw\x9e\x15}%\xabow\x1f\x7fZ\xa2\x02\x93\x80v\x9f=\x9b\x93!\xcdO\xe6\xa7\xfd\xc7|\x84C\x88\x00 \xbcL\x867\x04^\x08e\x80O\xe6\xa7\xf4\xf6\x1c\x05\x84a\xec\x0f\x9fI\xdf,\xf8\xacJ\xb0M\x03L\n\x8f\xfe7XC\xfeg,\xb3\xc1f|D\x02\xe5\x83o\x89\xdfQI\xddi\xa8S\xd5y\xde\x04\xd2\x92\xb8X\x11\x13k\xee\x05\x0b\x96,\xd8\xf2\x075\xc5\xf1\x18\x0d\xbd\xc7aM\x1bqj\xa9\x89\x8c\xfeB\x17\xbc\xe9;\xca\xf7g`T\xa7\x19\xdf sH\x9a}\xc1\xaf\xd7\xe8\xb5s \x89\xb1\x7f1\xab\xdc#\xd3\xd8\xa9\x1e\xceQ\xb6'V\x14_\x00k\xac\xdc\xbf\x85$+y\xce\xcbs\x14b\x1d\xc9\x92\xd1\xb3\xa5{\xf4\x9f\xd1\xd0\xb9\xd3\xdd\xd3V\xdb\x8c\xber\x1e\x99\xe4\xe8\x19\xfd\xb2\\g\xf4\xcd%\xca\xc8\xdb\x12\x98\xeb\x1a,\xb22\xba3\x8b\x81\xbe\xbd\xd4~\x8a\x86\xda\x10MY\xca\xf1%\xbd'\xb22vee\xb3):\xb8DPs\xd5\xbe\x0f\x9c]\xd2\x9dX\x9d&\xdf\xbbV\xec\xc6R]\xd9\xee\xc0\xe2\xe4\x97\xa1\xe7.F\xbcZ1\xcc\xe8;\xb1we\x9c*\x0der\xb5Q\xd2\x1f%+\xda\x93\x89\xc7\xde_\"\xa1\xd7\xfdLD\x8c\xee7\xfe\x97\xadVH\xd1i{s\x7f\x10\xa8\xc1\xfd>\x98\xa2>^*\x81\xd5h\xf1\x7f\x88&\xeb?g\x08\x93\xd7\xa6\x88N\xc1\x19\x8b\xf6v\xf9\x9a\x0c\x18\xed\xf8\xe8\xa7\xcd_\x18}\x97\x00\x17\xed\xe8%\xccUW&\xdc&(\xcaiq\x8e \xf8\x08Aj$\xfa\xe9\x12\xc2\x1b\xb0Z\xdbbf2\xfa&\x11\x90v0y))\x18\x90 \xb0\xa2\x93\xac/\x0dl\x0c\xbftp4\x15v~\x01\xb0\xa5\xab\xf3\x85\x0d\xf8\xf6
\xce\xe1\xd5k\x1aP\x1b\xa8\x14\x0c\xd9\xc8\x8e\xd1=\xed_\x0f\xd1\xaa\xf87\x80\xa2:rX\xb8*8\x92\x9e\xe8\x86\xcc\xc5\x8c`T\xb1\x06D\x95\xa8\xd2\xcc\xab\x1e!\"x\x01]'\xb2\xc7\x92\x9f\xf0\nuu\xbd\xdb\xff\x14\xb2\xf3\xed-\x15M\xae\xe4\xb5M_\x03`bN_\x98\xba\x9eL\xcc\xe9\xa5;\xb4\xe2\x9eA\x7f\xf6\x12\x16\x9b v\xb6\xba~\xaf\xebF\xc7H\xd0}\xff\x81\xf1\xbb\x8b\xef\xe7w\xf8\xc3\x85\xf1a\xde\x03\x17\x00\xec\xf7\x14\xf6\x05\n\\\xf6\x04\xb5\x06{\xb9\xd8\xac\x1f\x14@\xd6<\xafX9\\\xda\x9604\x9d\xe0Y\x85i\xa2)\xfb?\xf7\xab\xa6\x1cmjP#\x99\"\x05hP{\x14Y\xaf\xb2\xef\xab\xddD\x83Z\xbe\xfeq=K\x97\x98O\x11K\xa8~2\x8e\xff\xf3\xad6\xa5\x8as\xf0\xe5\xb3\")x3\x1dL\xca\xdb\xe2r\x85\xce\x99$\x03\xbc=\xdb\x1a\xda\x1f\xbbY\x9a\xcd5\xd0\xcf\xf2t\xf6\x1b\x9d\xc8\x8b\x0f\xab\x0f\xd97i~6\xf9%\x9e~\x13O~\xf9\xb0\x9a~s\x01G\xd2\xdb\xd7\xfd\xa9\x1d\x93\xa9v\xa3\xdaw\x92\xfa^\xa1\xb3\xed?n\xf0c\xba\xc1oi;\x94\xc81\xe0F\xd6\xe7\xe7\x03\x90\xb1g\x87c\xa8\xbc\x8df\xf6l^\x18~Q\x03\xe5\xbb8\xe3\xcf\x0c?B\xe5s\xc20\xa4\xc3eh\xe8\xcf\xd2\xc7\xbcP\x1b?\xbd\xeb\x8f\xc1\xd3N\xd7\x8d\xfb\xe1=\x1b\x14\xdb\xe45\x86\x1d\x0dn\xd9{M*_B\xd6\xc0\x97\xfa\xc6\xf7Q.p\x1dJY\x07[\xea'v\xd8\xad\xd8*\xa6\x15.:\x86h\x9f\x9d\xc5\xee\xf7\xc6\xa9\xd8\xfbu7-\x18\x00\x00\x03v\xf3\xc7g\x96m\xb7\x96eF_>y\xa97\xbc\xc07m!%F\xb6\xe3[b\xcds\xcdj\\\x89\xfb\xfd[8\xe2!i\x1d\xaa(\xcb\xf30xE'\"t,\x0b\xc0\x9bz\xa6\xae\x15\xe5a\x93>\xbeT$\xe8C\xf5\xe9\xef\x9b\xf4\xf1\xb1\xc5\x00B\x04%Q\xbd\x82 \xd0*\x8e\xe5\xe1m\x01\x7f\x04rf\xca {\x14\xd3\x19s.qf5\xd2\xd8\x0bJ\x9al\x1f$+\xe1\xac\xaa\x14\x98\xd4^\xef\x8c\x0c\x1e^\xb4Hb\x16\x9dS\x9c\xa8d\xf5o(r\xdb\x9eA\x19\x8a\x0d\xe7\x9694\x83\x04\xc3\x14\xc3%\x863\x0c\x1f1\x9c\xe3\xeaV\x18\xde\xd2\xdfw\xcb\xf5\xc7t \xffo\xea\xdeD\xbbm\\[\x14\xfc\x15\x89OO\x97\xb8F\x14\xc9C\x06\xba\x10\x1d\xcbq\xaa\\\x95\xc4:\x1e\xaa\xec\xe8\xe81\xb4\x04\xd9PdQ!\xc8P\x8e\xc4\xf7?\xfd\x1b\xfde\xbd\xb0\x01\x90 EZ\xaewN\xf7Z]kU,b\xc6\x06\xb0\xb1\xb1\xc7G\xa5Q\x1c\xe2\xdb\xb47\xecR2\xa1]\xd7y\xa4]\x88\xae\xec\xd8\xae\x0e\xf3\x8f\x8c\x01\xc5P\xac\xe14d\xe6\x8d\xdd\xc0c\x88\x0c/\xbe\xf1\x05%\xb1\xe1!\x14d\x05\x94\xd6\xd8\xbc\xc6PL\xeavDz\xf6\x84v)u\xc6t\xc7~\xa4]\xab\x05^C\xd0\x0e\xa5\x18t\x91Gt,\xb0\xaeK\x9b\xcdk\xdb\xa5\x98\x82k\x1b\x12\xab\x10\xe0\xcd\xa6=\x13c\x1e\xfb\xf3\xf0\xd8\x9b\xcd~\xa5\xe1\x05\x0d\xbb\xf6\x82\x92\xbe*\x8e\x9a\xcd\x05U^o]\xa8\x06\xfe\xdd\xe2fsF\xbb3\xea0\xdd\x92BA\x1e\xcd|\xce\xd0\xf5\xda\x1eQ\xc5\x0en6\xe3\xee\x95\xcd(v\x91\xc3[b?\x8a\x94\xc2\xbe\xb4\x19E\xce-m6\xa7\xe2\x97xTS\xe40\x8am\xde\xe2\xf7\xde\xc3z\xcdh\xb3\xc9\xa8\xfa\xf0(\xf8\xdb\x11\x1f\xa8\xd9\xbc\xb1G\x14[\xe2\xc3\xc2\xf56\xc27v,f\x80G\x10*\xbb\xd9\xb4\xaf\xed\x06\xfeB\xc6t\xc7\xeag\xdc: \xf4/\xe0\xc7\xf1\xc6n\x0c\xbe\x0c\xe5\xd2\xcb\xf8\xb4\xde\xac\xd9\xbc\x00\xb7t\xebu\xfdBN_\xf4tAU)\xc0P\x80|\x9e\xf7\xf42y\n\xf5:\xb7\xd1\x86\x11u[P\xa6\x80\x0e\xb6\xa3\x8f\x836p\x047\xd9\xf3xIb)~\x11d3\xb0\x1fL\xf2\xa5H\xee\x9f\xd3\x89\xa0\x0c\x9bM\xf5CV]\xafm\xb7;\x95Q\xc1\x97\xa8\xe4}1\xd5q\xd1\xcd\x93\x88\x12\x0c\x98h\xdb\xe8\x15\x9a\x83\xdbd\xb7s\xa0\x18\x88jNS\xe2\xda2\x1ey\xf5\x1d\x98a\x03C\x8a\xce\xba\xdcY\xea\x0bes\xc4\xa51\xd1\xc5\xfbDt\xbbu\xc4[\xdej\xf2b1Y\xbb*\xa2\xbaBN%\xbe\x0c\xf9z\xcd\x0bbZ\xdb2y\xc9\xe2.\xd9\xdf\x7f\xf5z+\xf3[\x13#yh\xcag\xd44\xbb\x07\xfa )\xd8\xdf}\x8d\xe0\"Q\xe0n\xa4[\x08_I\x0e\xa4t\xfa&n\x13\xf8\x9c\xfal.\xee\x93\x95\x89:{\xdd\x06L0s\x99\x01\xd3M\xc5@\xb1\x8c\xd7\x0e6\xd1\xd9\xcetI?\xef\xb0\xb8G\xb2\xfa~\x04\xf6)\x80\x86\xc9\x95\xed\xe2\xbei\x87`\xba\xa56o\xa4\xde\x06\x1b\x05|P\xd8\xd7\x98\xa1\x8c\xf9\x05Z\xf9\xd2\x9b4\x037\xd2\xee \x1e\x12\xcb\x1bX;\xf1\x8e5\xb4\x0e\xaf\x07lH\x1a\xb6u\x8c=\x0b[\xc6\x05tl[;7\xb6\x8b-l\xa1\x1d\x0bY\xe9M$j\x80\xac\x16\x8cI\xb5C\xbc\x089L\xed3\xc8K\x9d\xd5\xd9\x91\xa0\x80{\xc6\xe5\x14!\xdc\x13\x0f\xd1\xbd\xb7{[%\x9aO\x1c\xf7\xe2\x01w\xbb\xb1\xdczq\xd9!P\x98\xc1\x8es\x87\x00\xef\xbdz\xb3\xb7u\x9b\x19\x8c-\xb5\xa3\xca\xa4\x83\xe2\xfc\x9a\xb1f\x8c\xed\xfd\x9e\xf2Q\xc0\x16\xa1\x1f\xe0\xbex\xd0c\x0b\x9cU\x89m\xd0\x17\x14\xad\xff@\xc3{\xe5r7\xdd\x17i*\x1c*ph\x03O\x1e\xbb.\xb5\xec\xa7Y;-\x93_c\x1e\xd6\xd5\xc9\xf5\xe9\xc5\xe5\x85\xd3\xc7\xfd\xf3\xb3\xfe\xc9\xb9\xd3\xc3\xc7g\x9f?\x9c\xfezu~\xd4\xfbx\xe24\x92\x04\x1ft\xde\xbc\xde\x8a\xb8\x8a'\xed \xbe\xab\xc1?v\xed\xd8\xde\x02\x10@Z\x83h\x88r\xfaX \x06L\xb9mT\x8a\xf3\x1e\x97\x88\x14\xcc\xdb\x87M\x0c\xc90!\xc4\x14\x10\xc5`\xd0\x8fE\xf5\xad\xbdm\xb9z\xc4~\x94\x9b@nDu\x89\xe0e\x9e\xfb9-\xd3O\xdd\xdc\xb0\xcb\xf44\xe5\xb16\x88\xbd\xb7\x0f5%\xb27\x84\xc7%\xc4\x1f\x89\x07\xdc$\x10\x86\x02\x916\x9b\xd1\x80\x81\x7f\xf9e\xea\x94\x06:\x98\x12w\xc0\x87\xb8O\xa6\xcd\xe6\xd4\xa0\xd4T!\xf1*\x1f\xb0!<\xb0\x0e\x9e\xc1#\x97\xc4|\x9c\x8dz\x99=\x02<\x0d\xear \x0eG]\xaeT3\xaa\xc9[U\xbaH\xb1\xff\xb2\xdbM[\x97^\xed\xd7\xeb,!\x16 \x8eHn6\xc5\xbf\x036\\\xafc\xf8\x8c\xe5'\xc8\x8c\xf6\xb7\xcb\x8c@\xb0$\xe7\xb7\xfbvO\xaa\x16D\xf6\x9b\xd7\x9d=%\xc8x\xbb\xf7z\x7fW^RZ|\xc4B\x1ax\xe2\xcd\xff\xc4\x8e\x06o!\xc6.\xc6}\xb4^\x8b\xbf\xd6?\xfe\x91\xd5_\xaf\xa7\x03\xb1\xdd\x87 O\xde{\x86\n\x89\xc0\xca\x1bw*\x08k\xd5\x9d\nro\x18\xad\x98\xbe\xc0aO\xcbd\xb3]V\xb2\x04}\x9b#\x87A\x9cL;\xca\x9c\x1f\xd9\xae\x1daq\xf9e\xd2\xdb\x9e=\xcdIoa\x8e\xb73){\x06\xc8n\x9b\x9a\x9aO\x9c\x82\x7f\xcbpA\xdb+\x05p\x84\xb4\xc7#\xd7\x8e@\xde-v\xeb\x86\x8cb\xa3\xe7\xd1=\x1d}+\xdb\xbe`D\xf9\xc9\x0b\xef \x01\xed\xcbf\x93\x9b\x9b\x18\xeamJ\xea\xe5\xfb\xeb\xf2\x9e\xf1f3\xfb\x8d\xd6\xeb\x8a\xf2Z\xe3\\\x99\xb0U\x96\xe3t6i6\xc5\xbf\xd5e\xa2\xd6]\xb3\x19\xb5\xee\xaaK\x840\xaeP\x8eh\x13\xa7\x89\x8c\xc4F\xebuz\xce,#\xc7B\xb6 \xfc\xc4\x0d\xbbm)\xb3\xebh\xef\xed\xee\xdb7R\xf0\xbb\xa1\xfcg.\xb0\xba\x86d\x01#\xde\x9cL\xc8a\n%\x19f@\x1f\xbc9\xd8{R\x80\xb6\x12(yw\xbf\xb3U:\x06\xc8\xb0\xa0\xae\x94\xda\x18b\xab`\xe3b!\x81^^mG/\x06m\xa2\xd8A@\x03\xbf=8\xd8\xcdS\xed\xe0f\xe8oIY\x96\xb65f?,\x84-\xcfzJ\xda\xd2\xf2$\xf7\xe7\xd5\xdb\xfd\xadP\xc8\x16\xce\x1c\xad\x16\xa0+1y_I\xf1\x173\x96\x93s\x94\x8d\xbf>\xb5\xad\x9f\x16\xb0\x176X\x9f6X\xc1v7\xcf\x9eu\x91E8\x10\x97H_\xa0M\x0b\x817\xa5\xc4\x99&xo\xbf\xfd\x0c\xd6\xa0\xa9\x0c\xa4D7\x91\xfd\xfam\xe7\xed\xeeS\xf4\x11\\\xa1\xb8oxsv\xed\xa9t\xfa\xa09\x02\xa8\xd9\x9c\xd6\x89\xb8\x82c\xbbO\x8c;\x165\x9b\xfd\xcc\xcfb\x08N|\x80\xb7)\x85\x84{ow\xb7\xeb0\xa5:5[D\x94h\xe5\xda\x0c5\x9b\xd6\xc8\x8b8\xd8\xa901\x1e\x8eU\x02f-\xf8\x81@x\xf0v\x8bx\x12\xc7\xe0u.\xb2\xf7\xdb\x07\x07\x1dy\x81\xa8\xfb\xbe\x97\x0d\xaa\x91\xf1\xf1\xae2j\xfb\x06n\xa0\x8e\xd8.\xd7@1\x1c\xec\xee\"\xfcE\xa4\x8a\xe3\x890\xa5Di!\xd4\xbcY@\xbd\xf1c\x8d\xcdY\xc8\xbc\x19\xfbI\xc7\x16f\x94\xf4[\xe9-\x85=\xf1\xf9\x17\xf5\xbe}\xf2\x16\xe2\xea\x99\xae\xd77\xd2\x96@\xae\xce\x0c\xfc\xfa\x8b\xef\xf5\xdaV\xbf\x80w\xeaQt8\x93\x81\xb7\xe4\x1f<\x931\xb0\xe4\x1f\xf1\xc5e\x1e\xa7!v7\xf9\xd7\xb2\x9c\xb8\xb8\xb3\x8b\x8dQ\x9bf\xa1\xddXk\xe2\x8d<\x08E(\x9b\x81\xba\x98%\x86\xa33\xe3\x12\x91\xc3\x80\x10\x9a\x02\x13-+\xca\xc8Ne\xa4:\x98\xe2\x88\x92k\xe0\xfb\x86\xd4B\x87_\x06#:$\xf5v\xd9\x90\xafl\x8eG\xf4Y\x03n@\xd1\xa7\x86\xab\x1a\xebr\xd1\xa1S9bU,1T\xc9\xc1-\xb4\x8b\x05\x16\x8a\xf1\xbd\xc7\x9d%\xa6s`\xf6\x95\x91\xd3p\xaa\x05\x16\x07\xfe\xfa*\x91\xd6a!\x0d>\xf8\xc1\x93\xe4\xb7\xbe\xfce\xc4Bp\xdfaG\xa0@\x82\xc0g\x16\x84\x92\xcd\x81\xc2\x92\x81\xcc\xbd\x90\xdd\xceh-\xa0#\xca~\xd0\x00\xd7\xac\x1d\xbec\xd5\x02\xfa=b\x01\x1d\x1b^Y\x13\x880\xfc\xfaMg+i,\xc9A\x89-%\x91\x08\xf2\x96\x8c\xba\xc3SRpf\xf0\xb4T\xd84\xfe\xb7\xe3\x16\xd4\x95\x86\xa4\xd3\xc1r\x08\xbe\xf2\xe1:\xdb\xadV&M\xc9\xf6\xd7o\xde\xec\x82\x06V\xab\xf0\x0coeb\xf02\xd4\xab\x93r\xca\x87\x9c\x10\x12'%+SV\x1c\x94\xf5^m}\xb5\x1b\xd2\x91TY\xeb\xe5\xffX\xff+\x03\xd6\xbfZ/1\xe3\x1f\x80c\\J\x01\xf6\x07\xe2FH\x89\xc0\x88\x10\xd2X\xaf\xa3:!=\x01@\x9b\xa1\xae\xc0\x91N\xbd\xce\xc01\xa0n\xac5\xf7\x83\x07@>e\xab\x90\xfa\x166c(\xb5\xac\xa2/H\xdc\xcf\xda\x1b{\xa1GV \xeeeI\x9f\x8f.O\xff\x97m\xab\x06,U\xc8\x04\xdc\x01Mo\x03\xbcq/\xaa]\x02\x8c\xd9\xdc.\x89\xb7\xec\x92M_T:\x90\xb38\xd1H\xee\x98e\xe9\x8e\xd9R\x15\xdemO\xcb]\xeb\xed\x04\xef\x1e\x1c\xbc\xddJ\x01H\x9a\xae\xa8\x0f\xa8\x94\xc9\xc5ew\xd0\xe9\xbc>\xc8\x14\x00\x8d>\xa6e\xb3\xe6\x8f\x0f\xb7\xfe\xcc\xdc\xea\x9b*\x7f\x02\x03\\\xc8r({\x9d\x88\x8bzi\x9b,G\xf1\xb2\x82\xa7\xd1\xfe\x9b\xed\xf6\x06J\x8c\x16g\x0f\xc0\xcaW\x1f`.yi+\xc5\xd7F6gqi\xc33S^\xda\xea\x85\x08\"\xb9v\xe7`_\\\xda\xd95|Ny4+\x86n\x04\xe7#<\xf4\x17\x0b:&R\xe4\xd5\ndA\x96\x88\x8b^\xd6\xda\x82\xf12JkC\x9e\x85'\x14?R`o\xb4\xc2{)\xc0\xaa\xdb\xf5h\xbd\xaeG\xad\xa3\x0b\xf7\xe4\xf3\xe5\xf9\xe9\xc9\x05\xc2\xae\x91~z\xe1\x9e\x9f\x1c\x9f\x9d\xbfG8\xce'\x9f^\x9e\x9c\x1f]\x9e\x9d#|af|\xbe<9?\xbf\xea_\x9e\xbcGxI\x89k3\xfcH\x11\xd8\xc8\x97\x9d0\x06\xb2*F\xb1%1\x07\xf8\x1f\x92\xd6\x9eb\xb6v]Z\x97\x8f\xbc\xd9\xecC)/\xe4\x96vmq\xe9\xe1\x0b\xda]R\x9b\x0f\xdaC\xcc!\xe8K\xe8/\x90c&!\xe4\xa8BF&\x02\x97(.E\x8c\x12\xde\xd27L\x1a\xd6+\x96\x19\xd2=\x07\x98~z\x94\xdc\x80\xf3\xb6\xec2\xfcR\xf9B\x17m\xf7m\x8f*\xc6\xf4\x8c\x926\x1eQ\xd2\xb39:\x1c\xd1w3*\x83\xf2\xb0\x89m/(\x91\xb3\xb49\x04\xe3A\xcdf\xc3\xa6b\xedR\xee@\xc6j2!\xd4A \xa3\xe4JF\xa2\x01\x87\xf6cJ\\\xda\xe5\xe0\xcb\xcaa\x14\xfe\x1e\xd6\xed %\xb1=\x96\x82\xac\xd6\xd8\x9f\xd3C\xc9\xb3\xccz\x9eP\x1d\xbc0eI\xca\xc5\x81\xb9\x8a\xb5I\xca\x94\xe8\x051.\xfe\xdf\x1coR>\xde\x04\xc3\xa9\xd8v8\x0d\x96\x8c:\x91\xcb\x94\x99\xf4\x8cw\x86 \x83\x0e\xb5_c{\n\xba\x10\xea\xd9m!i\x86\xab&F\x08aj=\xa3\x8c\\\x99\x12\xd7\x9e\x8a9\xa7\xc0\x00\x0f~S\xc2\x93\x8a\xaab\xb5\xd5\xc74CQS\x84A+\xeeu\xe7\xcdV\xc6\xee\xdb\x83N\xe7\x15j\x9d\xaa}\xd8\xcfd\xc7\x02\xa9\xbei\xbf>0\x95K\x01Cu\xf6\xdfh\x14\xa5\x88%\xd9\xf3\xe5=\xcb\xc9\xa7\xd4x\x80\x15Q =\xdc\x93\xf0k\x10\xb6c\xd5\xf40\xac\xcc\xd63\x93f\xc4\xb6\x8bW\xb0\xc5\x96\xf6N\xbd\x87#\x94 <\xb59n\xe0z\x07d\xb2\xfdAcH\xb2\xc1\xc0K\xedU\xbb\xb3E\x19J*>\xbf\xdd\xc4\xca\xe2\xf6\x92S\x06\xe1\x85\x9c\xb2\xba~\xe0)%\x00,\xb1r\xe7\xe0\xed\xeb]\x89\x95\xe5\xb3\x14\xb0\xb2\x82\xd4u\xf6\xd6\xfa\x0268\xed\x83\x03xJ\xa5\x84'\xa3\x190=\x9a.\x0b\x9eQ2mI\x81\x828\xc6\xd3\x96)S\xc0\x0b\x08\xba\xb3\xb9tcH\xef]\xfd\xfa\xeb\x8d{q\xf4\xe1\xe8\xfc4E\x9e\x17xB \xa59\xd2\xf6\x91\x12\xeb\x1b}\xe4\x96@\xd0RM\x89[\x02)[t\x1e\x06L|\xfc;\x0b<\xc5\x14n\x86\x98\xa2U\xcf\x8e0\xc3Si\x8ftA\xf1\x92\xe2>\x15\x0f\x069 \xe6\xcfK\xac: \xb8\x1c!\x946\x9b?\xb5{\xf0\xdaOi\x18?\xa6\xcd&o6y\x8d\xcdk\xdf\xd3\xcc\xef\xe0\x13<\x1f\xbb\xa6\xf6H\x9d\xc2\x1b\xa4\x06^63\xe2\x8b\xc6\xb5H\xda\xd8\n,\x0d\x95n7+I\x00=]\xcd\xdd\xac\xa6`YU/)\x94/+'\xf0\xd8%\xcd\x1f\x14|\x0e^\xf2\xbe\xe75Q\x1a\x94|\xa7\x83 \x1d\xae\xd7\xdf\xe9\xc0\xe4S\x0f\xd7k\x01\xc8\xefRE\xe3'%\x00\xc2\x06]\xaf7WA<>\xf1_\x94X\xf0|\xb1\xa4Z\xeew\xdaRSY\xaf\x1b\xb0\x08\x7f\xd1f\xd3\xbe\xa0\xa4a\xff\xa5\x9c\xbb\x81Z\x0dB\xa8\xc4\xd2\xb5\xd9\xbc\x90\xf7C\xb3i/\xd7\xeb\x86}A\x11!dA\xd7k\xfb\xaa{e_\x00Bw\xfa\xf6\x05\x8c\x1f\xad\xd7_D\xda\x84\x1a{\x10!\x0c:\x12\x97\x14\xd7\xdbp\xf0\x97\xcd\xa6\xcd\xe8\xe0\x92\x9a\xc7\x1f\x89\xf3\xd3lRJ\x08\xb9\x85I\x8a\xffA\xbeW\x97)v}\xd9l\x8eh\xf7\xda\xfeN\x95\x84\x0f\xdfR\xe4\xd8\xe7`3m<*6V=\xb6\x1b\x14\xcbEA\xe2,\x8b+uI\x89\xd4\xeb\xe6N 0o)\xc2b\xc39\x1e\xed\xfe\xa4e%\x04\xdd\xa2`[\x96\xedR\x94\x88S$n\xdc>\xe8\xe9,)\xb2\xc7t\xbd>\xa7\xebu]\xa5}\x07\xa5\x9a/bF}q\xc0\x06}:T\x11G]{%\x15\x8c\x1c\x86aA\x9cz\x1bK5\x1eG6\x93\xe0%5\xa3\x9f\xd5c\n;hB\xc5\x9b\xf5'\x15\xab\xf1\x1dV\xe3'\xc5\xd21,\xa5\x89\xc0_\x036$?E\x7fI\x82\x01y=\x8fG\xa5\x9e\x8eE\xc4\x9a\xf1\xa8\xd4\x15t\x95\xe1\xd8\x9b\x0c\x85^g\x18\xf4K\x8a\xaf)0\\\x0c\xfc\xc6\xc4 9\x1c\x0c\xc1\xa9.\x04\x06\xa4\xcb\xd0bs{IT\xa2\x8dP\xd7\x8e\xc9\x95}e/\xab\xb6\xad\xed\x92\x189\xa2\xad6\xc2\xf5\x9e\xed\xa2\xf5zZ\xa2\xa0\xb1J\x05\xf2\xae8b\xca\xe0Z\xb4\xc9\x13\x84\xba.Y%\xce\x17h\xaea\xbb\x08\xe1\xbe\x0d\xe5@S\xc8\x15\xa8\xb2\x84s\x0c\x186\x17Oy\xb5\x81\xf5\x1d\x17\x97c|\x87\xc1\x9a\x88\xcbe\x1b{\x1d\x9e\x19\xdb\xee\xca\xbd\xceng\x8bN\xbck\xa7\xdaz \xbe\xe9\x94\xbd\x02\x7fdn\xdeF\x94\xcd\xb4'7p\xdff4\x0f\x89a\x10\xcdG\x86,\x01\xbe\xf5C\xcd%;\\\xc1\xdcv\xdf\xb5\xbb\x91\xc3\x90\xed\x82La\xb7\xfdv+\xa3\xfcm\xbb\xf3\xaa\xbdU\x0f\xc8\xb0\xf9*\x11\xaeY\x96\xc3\xf4\x9bw\xf7\xed\xc1\xde\xdf\x11&HF\xfd2#=\n\xe7b\xf7\x8d8\x00=)K{\xdd\x96\xc7bw\xf7\xe0\xf5\xbe<\x16J.\x03\xf4\xc6\xab\xb7\xfb\xa0\x98\x993Z\xc6_\xca\xc5\x0e\xe2\xa4\xc4\x866\x8e\xf9.\xbf.nn\xf1fi6;uB\xae\xed\xd5\xad\xd3I\xf0\xb5\xfd\x05|\x92x\x16\xce\xd9\xf9\xb4qA\x80\xf1E^r\xd6\xad\xa5\xcd^\xf6\xb0Y\xa1\x93\xa0$Axu\xeb\xec&\x08\xb5nS[\xcbC}\xa20#\x10\xfc@\xbe\xc6mK\xce\xab6\xa6\xa14I\xb0\x04$-\xefv4\xa6\x93\xbb{6\xfd6{\x98\xfb\x8b\xef\x01\x0f3Br\x10\x0d\xc9k\x1ck\xcdt\xab\xcck\xb9 6\x06|\x08'\x15\x94n\xaf\xc5\x0c9\x1aD\xc3\xf5\xbao\xc3\x17K=\xe8[\xe2P\xc7\xa6\xdcC\xf9$\xb5\xb5\xe3\\\x15\x02\xf3J\x06#\xde\x88\xfa?%\x1d|Mz\xad \xfeB\x1a\xad\xc9a\xfcnz\x88Ro%\x82h\"7\x99\x82\xd2`\xba\xb33\x04\x92\xf0\xbaK\xa9|\xe5\xe1kx\xeb9\xf2cD\xc9L\x07_\x15\xc4a[<\xf9\x16\xf4P\xbc(gt\xb0\xa0;;C\xecB\xf8\x8b/\x82\"c\x14\x98\xae\x03F!\xe0(\xa3C\x83w\xea\\'\x18\x90\xef\x16D\x9e\x7f+\xed\xef\xee\xee\xaa-\x0cJ\xf7\x8a\x93!\x85\x07=\xc0\xf2\xfb\x82\xb0m\xa4\xa23\xd8\xc3J\xd0pC\x0c\xed4|M,\xa9\xbbb\xe1/\xe4\xca\xb6NO\xdc\xfe\xf9\xd9\xe5\x99\x85\xf0\xc9\xc3\"|,U8F+\xf0,\xc8\x16\xe1\xa5wW\x82\x9b\xac_\xac\x9d\xeb\x1d\xeb\x1d0\x8d\x7fy\xa9>\x12\xfc9\x9a\xcd\x00\x97\xca\xa3\xf2'\xf3\x8eF!\xfbA\xafsm\xf0V\x1c\xb0\x90\xdai\x0f\xe0C\x1d\xf3\x16\xb8\x7fM\x1dop\xe5\xbf\xe9/\xe9\x1aH\xb1\xa4\xf4N\x94\xf6\x85l\xa3Os\x12\xe2\x15)C\xed\xaba\xc8\"\xb6u\x1f>\xcc&\x0c\x84\xf1\x99\x16\x0f\x9c\x13\xb1H\x87\xc5&\xcbLI\xb4\x00\xb4k\xb8\xfd{\xf0\xd8\xbc\xd9t\xbb\x95`\xb0]\xe4\xd8\x8c4l\x8bM\x02\xa9R\x15\x11k\xea\xfd\xf0\x00\x84\x8e\x85Y\x8b\x87\x8f3\xda\x1a3\xbe\x98y\x8f\xc4\x9a\xfbsj\xe1\x9e\xf2\x94{|\xcffc\x9b!Q.\x18i\xeb\x85\x08a\x9bg~\xd8\x15\xc0\xf4\xc0P\xcb_\xd0\xb9-\x00\xbc\x01\xf7t\xf0\x1f\x14v\xcb-\x04\xe6\xad\x0f\xc8yj6\xa9k\x94\x98L\xb5yj\xfc\xe2\xc5\xa1\x0e\xb6^\xa8;\xb8\x19\x0e\xa6\x83x\x98\xb2\xa8\x0b\xf96J\x0e\xfb\x83/\xc3\x9c\xaf\x1d\x8dw\xa5}\x98q\x7f\xc9\x04\x83\x01\x9e\xf2Y\x14\x03\xb5k\x17\xb7\xf8\xe0fH@Z\x1eI\xe3\x82B\xf6\xc6\x91\x10\xe5a\xa3E\x10\xc8\x189\x11\xd9\x18\xb2\xa9\xd8\x1a9\xcb\xd6\x04\x02c\x81\x87\x81\xdd\xdd\xad\x82 \xe3\x0e;x\xf3\xeaUG=\x9a\xa5A\xea4\xc3\x0b \x80\x04s\xfe\x9e\xbe\xce\x0eYkB@P\xde-\xbb\x9a\x04\x01\x9c\xc2\xaa\x98#\xa16\xb5y\xb6\x84\x11\xa8}21\x96\x9e\xb4\xf1\x8f5\x1a\xbc\"mi\xd1\xbf\x04\x9b\xd7\x88\xc4`\xd3\x8f\xddA4\xcc\xd9\xa8\xc0\xb8\xff\xc6\x94Ag@NY\xcd\xbe0\xe5\xd7\xed\xfd\xd7\xed\x9c\xd2\x0enT\\\xc4Wd\x9b2\xe3\x8dx\x8cg\x86F\xd7\xc42\x15\x11\x05\x82\xb4\xb4\xe5\xa8%\x81\xdb]v\xcbA\xf8\xa8\xd9Vl\x02lD\xcc$\xec\xa6\xe20\x96I\x81\x9aM\x03+\xcbG\xa0\xe4\x12Xl^\x8b\x9a\xcd/5\xf9\xb7.v\x9a&\xc9\xae`\x99\x0e\xddf\xd3\x1d|\x19\x82O,6$\x91\n\xd6\x13\x91U\xce\xf0\xf5\x1a\x9a\xe8F\x83\xeb\xa1\xe3\x0e\xae\x87&}p\xa3\xf3nD\xde\xcd\xd00\x91\x15\x94\x83Z\xc2\x86\x9aU\xe24*\xb6\xce\x93\xf3\x8e\x91\xa1L\x99\xb6\x95aX6\xb1\xad;\n.\xaa\xa3\xf5\xda\xe2\xea'2\xb5\xa6\xac\xa3\xd1\x88r\xee\x07\x92)\xcb\xa3\x85@\x02\x86D2\x07\xb5\x1c@\xa4R\x01\x18\xe1\xfc\x8d-h\xb0\xaa\x14=8\xcd8u\xf9S\xa76c#\x13\xf5_e{\xf8f\xdb\xf6S;*s8Z{R\xc9Trl\xfa\x12\xc6p \xafL\xf0\xde@\xa1
\xa9M\xe1p\xf9\x88S\xb1\xd5 \x0d\x02\x80\xe1\xc6pX2\xd4\xbb\x19\x12`\xde.18\xf2\xdcD.8&\x96\x8c\xaao\xe5C2\x1c\xba\xe0#\xc6\x1e\xfb# \x96Z\xb2\x14\xf9\xdaXq\x93{\x9c\x90\xc6\x8a%\x87\xb5\x0b\xef\x81^\xb0\x90\x92\xcf\xfe\x9c\x1e\xd6`S\xd0\xaf\x95qY, \xdc\xb4\x98\x08\xd4\x8e\xa0\xfd\xda\xad\xc7\xc5-\x0b\xa3\x15\x17k\xa1\xff\x96\x05\xd6%ypJ\x85\xcb\x8d\xadQsI\x1e\x968&\xf2(\xa4\x87-\x8f9\x04T\xddR\x80\x175\xfe#\xd8\xe09\x04\xaa\x19\xae\xb1\xc4\x18XRA\x06\xdcY\xa5\xc8D\xacO\xb6\x08%\xe5\xd8\\ V\xa2f\xd3\xe0\x9d\x94\x94T\"\x92\xc3\xb2eK\xc8a\xed\x93\xb7|qtG\xc9\x8b\xb7\xea\xbf\xaf`|\xfd\xf4*\xc1=P\xb5F\xa0rY\xbaJb\xeb%\xc0\xb6\x0c\x83\xf2P[\xed\xce\xeb\xb7\x08\x07\xa5\xb9\xad\xb9\x1d\x06\xe8P\xfa`\xf9\xe8\x8f\xbe\x89\x059\x1d\xf9\xf3\x1a\x05\xeb\x10^\xfb\x8b\xb6R{\x86\xd5C\xc1\x18\xca\xb0\x12T\xeeY8\xf6\xe39d:A`#\x9b\x15\x0c(rF\x8bI\x12\x88\xc7^\xa0\x83\xaa\xadL\x0b!\xb3)\x96H\xcb;\xf1`\xe08\"\xdc\xb6\xc4`\xc5@3\xab\xd4\xbfhK\xbeMNf@\xba\x00SM\xf3\xd3\xe6\x011\xa7\xa7f|5\x9f\xfd\xffi\xcer\xb8\x7fc\xd6< \xf9)\xe6Uc3\x0e\xb3\x97YL)\x1e\xb6\xe1\xde\x82\x14\x13\xd6km\xaef$\xb6\xc4\xc5u&:R\xb4\x82\xba\"Z9\x89\xf8f\xb5E@S\xfcp\x04\xbb\x9dl&I\xb7\x1c\x9a?\xf1d\x1b m$\x1b)\xb9\x16\xf2\xde\x80\xcc\x8d\xe1\xcc\x03\x9c\x07\x99\xc3\x03\xacK\xa4Q\x9f7\x8b\xe6\xb3xP\xf4)\x04R\xc8\x95v\x16\xe1\xfc\x15b\x85X\x05i\x92\x91%\xd8\xb4\xe6\xc9.;\xa7\xfcf\xc3\x12);%\x88:\x11sT.\x90rm\xca+>I\x80\xac(\xe4)\xfa)\x1fvp\x03\x94\xb6\n\x8b\xa0w\xb0I\x0f\x98CN\n4\x17\xbc\x12\x7f\xe7@}\xa8HH\xd3D\xaa\x87Nm\xd4\x1dX\xd9\xa2X\xd8\xd2\x84\x0dx(\xa5\xdc\x1a:\x03\xab\x84L\xb2\x86\xb8G\x96\xa9\x91\xf0\xa0\xd5j\xf5\xc5;W\x9f\x8f^7\xb6\xc1\xd1\xc4J^\xdd\x99\x80:\xca\x14\x98\xdd\x04\xab\x1b\xbe\xa7\xa9\xa8\x04I\xb2\xb3\x14\x0crSj\x9d\xe5'\xa1\xe0VC!\xd6PX\x02\x14\xa6b\x1a\xff\xe7P\xe8\x938\x07\x85\xa9 \x85~\xd7\xcdA!\xd2\xf3\xedW\xce\x97\xf1\xcf~x/]\xfai\xb6\xa8r\xe9\x07\xdc,\x16\x10\x83\x99\xba\xa0\x9e\xe4\x1eHkfq\xd9Z\xc0\xa8\x8cH\xfb0\xfa\x85\x1dF;\xa4\x83\xdc\x1d\x92JD\xdd\x04{F\x13\x8c\x7f\xa6w^\xc8~\xd0/4\xf0\xedB<\xcaf\xf338\xe7m}>\xf9\xf5\xe8\xf2\xf4\xcf\x13\xf7\xf4\xf3\x87\xd3\xcf\xa7\x977\x84\x90\xceK\x9e\xe0Y@V\xe9\x90\xb16\xf6\xca\x82\x89N\xb9\xfb\xe8=\xcc\xdc\xcd0.OyBL\xb0\xf2\x1b\x9e5\xa4\x1d\x89?\x19e\xc6\x04^w0\x84\xa83XB\xc9a\x01\xceO\xd6\xf1\x02,\xaf\x9e\xac\x17\xaa\x8c3\x0d\x88\xe2XFZ`H\xc1\x15\xbb\xc4^\x92\xbc\x0f\x1b\xfdf:\x8c~q%\xcc\xf9 \x06#1\x08\xfc\x939*L\x92b\xecw\xa5\xee\x95\xf6H,\x0bt`\x02\xeaq\x7f\xbe^[v4\xff6\xf7c\xb1\xdc\"\x05Y\xa6\xf9n\xf0\xadk\xcb\xbf \x1an6\xedh\x87\xfc\x17\x9b\xd7\xac\xff\xda1\xd2w\xfe\xcb\xaa\xfd\x17\xc2\xd1\x0e\xb1lkG\xd7\x98\xb19\xdd\xe9 P\n\xd1i#\x7f\x16=\xcc!\x15Y\xb8\xce\x9aM\x95\xc1\xe7l\xb1\xa0\xa1\xec\xc1\xfa\xd7\xfc_sk'\x9f\x85\xb0\xbbc\xd5\xac\x9d(g\xf5zs\xf4\xe9\xe3\xc9rDA\xce\xd0\xe8\xc8\x99\xc2\xa43\xbb4u\xb7\x88\x91\x12+W\xc1\xd2>\xd3\xc4\xd4\x89r\xc1 :%\xca\x91\x87\xd2\x08#&0\xc1\xd4\xad\xdeAXw\xb3\x08\xc1\xed\x9b7\xfav\x19x#\xda\xadH\x97\x15\xa1YC\xbe\x8c\x94\xfb\x06Q\x8c\xd8\xa9\x86\x1e\x92)\xe0\x0d\xb20\xc7\xcc\x17\x87\xde&\x92V\xb0e\xbf\x99\xa7\x0e\\Y\xd1\x1c\x00)\x94z\xa2\x96\xd6\\%\xc6\xb9I=\x84\xe6\x04\xe2\xb0+,\xa7f\xedl@\x8e+\xcav\xb4\xd1\xf3\xff\xc3\xde\xbf\xae\xb7\x8d+\x8d\x82\xf0\xcf\xef\"\xbe?\x14^/\x85hA\xb2(\xf9H\x19\xd1\x8asX\xc9\xea\x1c\xb4\xdaqw\x1cY\xcd0\x12mC\x91I5\x0f\x91\xdc\x92\xf6\xbf\x99\x0b\x98+\x98k\x99K\x99+\x99\x07\x85\x03AJ\xb6\x9c\xde\xeb\xdd{?\xf3N\xaf\x15\x8b\x04q,\x14\nU\x85BU\xc1*\xe3-\x0b\x03\xdb\x08\xd5\xc3\x8b\xcc9\xf6\x8e\xf9\x9f\x1e\x85 \xfeW\x93(\x8a\xed\xd9n\x0b\xd7\x1dM\x82\xea\xeci\xafZ\xb5\x19\xf5\xea\xbd\x9a=\xa7\xc8j4\x1a\x16\xd2\x9e\xa0HV\xf7 GF\xbdZ\xafn\x8fE\x0e#\xc3\"Icw\xae\x1d7\xf1\xfd\xc0\xf0s\x99\xee^\x13\xf4\x7f\xff\xef\xff\x07\xc2\xb51\x99F\x89\xeb\xd5Ym\xae\x02h\x99\xbe;Gg\xa9\x1f\xa7\x05\xb7\x1b\x93\xb8!\xe9*\xb2\x10au\x15\x04\x00\xd7\x04\x01\xce\xe2\xa2\x9f\xad3\x81\xfc\xdag\x03+\xcd\xb9\x8c\x83\x8cI%i|\x85\xa8r\xd8 \xeb\x1d\xd6\xc8\xfd\xee.m\xe3\x8dr\xf1A\xb9Z\xcf\xa3*\x83\xaa&L\xe1\x08\\X\x0dg\xf1\xf2\x12\xd8-\xc2\xcf\xb78\xc8-\x089\xc9 \x88\"\x9f\xc0X\xc0\xed_\xea\x14\xa6\xc9\x98\x89\x0d\xac\xb6A\x1f\xbe\xb1\xe9Y0\xf5\x85\x7f\xa2\xb3\xa9?\xd4\xbc\x81\x12\xce\xd4\x11\xd7C\xbd\xef49\x7f\xd4\x11\x85:%U\xc3\x0cw`\xa7\x98U\xabp\xf3\xb1\xdc!\xe1\x90\xb3\xd8G\xa3\xee\xcd\x8d\xd7jf\xf3|\x1b\xabV\xdb\xfb\x10\xc2f\x14-\xb6\x17Y\xcdn\xd8$\xb0\x9d\xa6`\xec\x9c\xb6\xf8\x85W,\xc3\xaa\x83\xeac\x86\xb1\x88\xf4\xc9\x87V\xc6\x94\xad\x80!^\xadF\x8a\xe2O\x07\x04\xfcY\x07\x9b\xc9\xb5\xda#\x86)\x95\xb5\xc2\xb4S\xf4\xd5\xe3x\x93Ws\x92\xad\xb3\x8d|)\x0dEDQ\xc8\x033\xcd95C\xf8\x08\x92\xf4\x85\xe4\x1e%6DE\xb3R\xdd \xa5\xa0\xb4\xf7\xf6+\xf7\xad\x8e\x8c\xf3\xe4{\x07\xc2\x86\x94U6\xa2~Vs\xf0\x03\x1f[\x9c\x10e5\xda\x86\xc8\x03\x0f4S)\xe8\xa9\x18\xc6\x85\x98\xe5,\x0d^E\x93Q\x00\x93&\xfd\xb3\xc1\x15\x91n\xce\x12 \x0b\xb9\xec\xa9\x03X\xa8\xd2\x8cK\xf7\x97!\"\xac\xee\x98\xf5r,8\x9dD\xc3o\xb9\xd2\xa8\xe0\x8bG\xdc\x7f\x85\x13:?\x1c\xdeD\xb1:\xb71\x8eI\xca\x18_<\x86\xd1\x92\x98(\x0f}\x13\x8f\x9c\xd1S\xcf\x03:\x16\xa1\xa8\xb6.M\xafZ\xdd\xdc,\xd4\xacIx\xf9+)\xf3\xa1_\x0d\xbe\xca\xba\xcd\x92\x14\xf6\xeb\xaf\x81\x95%\xc2\x0ds\x01\xc50\xd9\xdb\x87-\xaeZ-j\x13\x1f\xeap\xcd\xc1\xb8\x83\x81\x1f\xad4I\x81\x8cn&V\x15\x90\xeeK\xeb\x802,\x8f\x9cB\xb8r\xbd\x15J\xca\xce\x8a\xe3\xba\xd4\x06\xdcN\xa3D\xc4\x9b\xe0\x14\xf1\xb7\x98T\x1cRib\"+V\xd8\x82\x1f\xec\xd7\xd6\x96\x89\xdao)\xcd\xd4\xde*\x06\xf1\x94a\xb9\xc8qq\x1e\xbe\xfa#\x13\xd0\xf2\xf6\xa7\xc4E\x0b|Q\xa3|D\x05\xb80I\xcc$\xb6Uz\x80\x00\xa9\x7fMgD\xa1\x15\x9d\x13\xe9\x98\xc08\x16S\xa3\xa5cR`0\xf9Z\xf8\xe8_\xeb\x9d\xbal6D+\x0e\x19K\xc4o\xb7\xc59\xd5\x96\x0d\xb5p\xb4\xa5W\x02\xdc(\x7fP\x1f\xe1KyL\xf4\x04ar\x00\x1b\xf8v\xba\x8a\xbb\xf6\x9c#\xdb#r\xba\xed6\xb0)\xf6\x98\x17\xc8(\xaaT\xd0\xa3\xca\xf1\xac\x880sc\x9e\xe3\xc5\x8flUr\xa7:h\x89-*\xcfp\xa2\xf4r]\xdb[\x93\xe1~l#-\xf3\x1dY\xa8\x05\xb5 \x1c)\x91VJ^3\x96\xde\xb0\xd0\xf2\xad\xefA\xfc\xd5O\xd9-\x87?\x12\xa1O\x05# \xbb\\\xa4\xd1\x9c\x1d\x10P\xacV\xedqw]\xd4\x95\xa2\xb9\x94\xac\xa4|g\x05\xf3\xe1\xc4\xbf\x15\x93}\xeb\xc7\xdf\x12\x84]X\xad\x85\xf1\xd6\x1dR %Z\x03\xb1.\xb9Ap*S\xf9Pj\x10\xaem\x9bb$\x8197\xa7\x90\xd3\xaaG@\xb5\xf3\xf0\xb4\xfcK+I\xd6\xc4\xdc{\xa1q5\x89f\x9c\x06p\xf4\x8f\xe2B7W^\xb5ZQ\xea\x8b\xcdu\xf2\xa1o\x19\xaek\xa1\x9a'=\xf2n\xd2Vx\x0fj+\xa0\x81\xb2\xae\xc2\xd3W0\xe6]As\x8f\x9ei\xc7\x99\x11\x88-d}\xbdK\x03\x15\xac\xce\x97\xd6^`\xc09\xcdR\x04!\xe3\xe0\x91\xf7\xb6\x89\xc4\x85\xc6l}\x8a3\x83B\xe1\xcc<\xea\xa3\x0e\xc9\x8c\x19\x97\xd14\xf2\xa4\x93L\x83\xa5\x83\x0b;|\x96G\xfb\xca\xd1\x14\x9c\x9e$!]\xf0I{6\xc9\x83\x0eX2A\x80\x85dx!y V\xad\xae\xdd\xfdf\xd5\xea\xf7\x88\x8d\xc0\xc1e\x06\xc12\x18a\xc2\xf4K\x06\xa4+\xe3D&.\x91\xab\xd6\x8c8\xd5:\x18\x85\x8eI-|(xk>\x14\x98\xed\xf5g\x03\xbc\"\xbc\xf2b\xc7\x95?\"1\xc7\xeb\x08\xc9\x1bo\x1a\x9e;\x80m\x07\xef\x98E\xd7\x7fV\xd6o\x0e\xc49\x88\x8e\xdc\x97\x1b\x86\xaa\xc3\x0e\xbd4d\x84A\xb1lL\x8b\x9e\xdb(\x0e\x10^\xadV\xc4\x0f\xefw\xbdH&\x1b>\x96<\xc8\x0dC\n\x18N\xb2\x90\x1e\x93iH\x9d&\xb9 \xa9\xd3&\xa3\x90\xb6[\xe4*\xa4\xed6\xb9\x0di{\x8f\\\x87\xb4\xbdO\xeeB\xda>$\xdfC\xda>\"_C\xda>&^H\xf7Z\xe4eH\xf7\xf6\xc8,\xa4{\xfb\xe4,\xa4\xfbGd\x1e\xd2\x03\x87|\x0b\xe9A\x8b|\x08\xe9A\x9b<\x0f\xe9\xc1\x1ey\x16\xd2c\x87\x8cCz\xdc&\xbd\x90\x1e\x1f\x907!uZm\xf2\x9e\xff\xec\x91w!\xd8|}\x0c\xe9\xa2\xe9\xa2\xcb\xcb&\"\x87\xfc\xd7G\xe4\x88\xff~E\xe4\x98\xff\xa6\x888\x90!D\xc4q\xf8\xc3wD\x9c\x16\x7f\xb8B\xc4i\xf3\x87\x18\x91\x16\x14\x0e\x10i\xef\xb9O./\xd1\x13r\x0cy./y&\xc8\xf5\x1e\x11\xe7\x00\xaa\xf2\x109j\xb5\xe1\xfb[x\x84\xef=\xb4\"\xbf\x84\xb4\x8f\xee\x10A\x17\x88\xa0\xbb \xe1O\xe2\xef\xcb3DP\x14\"\x82>\xc0\x9f\xf7\x88 \xfe\x00\xbf\x11\x7f\x80?\x1fx\xae\xab+\x9eC\xfc}\xf5\n\x0d\xc8\x8b\xd0\x0c\x0e!\xa2N\xb8\xf2\x11\xf3\x17#^\xc5\xcen\xeeS$\x08\x87\xd1(x\x1d\xcc\xd74\xd7\x8c>\x14\xa9\x83$'\xb4\xb5\xbf\x8f3\x8a\xe6\x88x\xb4\x95\x9b-J\x0fc\xfcS\xc6?\xed\x19& \xc9 \xddk\x1d\xef\x1d\x1f\x1c\xb6\x8e\xf7\xcb\xc1'yO,8\x021\x0e\xee\xa0}\xd3\xea\xf6\x1ax\xf2X0\x8d\xcd\xf9+\xf9\x1f\x1c}\xa0s\xde\xe0\x91\x14O\xd0\xe5%\xaae5\xe3\x84\xbc\x89\x88Wgj1\xd5\x18\xd0\x99\xd3\x90:\xe4mH[%\xefa\x1c\"\xa67\xb0d\xcd\x1b\x98\x0c\x85/\xc2\xbd\xfbs\xdb!*m\xb9l\xc9P\xd1a\x04N \xa4\xee\xab\xf4nD=\xfe\xc6\xa6oBp\x9eB\x0boy\x96\xabI4{\x1b|\x0f&T\xc4\x0e\x888\x88\xaem\xe3\x03\xee\xd6\x1d\xd7x7\x02*o\x8aKy&?\xbc\xa7\xc1\xfc\xd2\x04\xe6g\x03\xe6\x9f\xf5`z\x0f\xef=z\xa0\xc1|j\x02\xf3O\x03\xe6c=\x98\x83\x07\x07\xf7\xefk0\xbf6\x81\xf9h\xc0|n\xea\xcd\x83\x83\x03\x0d\x86\xf2\x060\x9f\x0d\x98\xa4\xb6\x88\xfb\xf0\xe0~\xd7\xe0f\xde\x04&\xe1\x1aLT\x0f\xe6\xde\xe1\x83\x87=\xf3f[\x13\x98H\x80\xc1\x9c\x93\x95\xd8:\xbc\xdc\xfa\xa6,\xc2\xe6%W\xcf \xd2$6''\x9e\xd3\xed<\xa0\xd7\x0e\xce\xf7'\xcf\xf9\x1f\x07\x07\x07\x0e\x1e\xcb}\nx\xad\x93a\xd8\x93\xf6eT\x8b\xd54\x8e\x92\xdfe\xfcO\xe7<\x0e'&\x9f'\xf38\xba\xd8TB\xca\x0f\x90/w\\\x87%A\xc8\xc6\xa6\xc1\xff\xf1\xe8\xd1#S\x9a^\xcf.\x03\xcexm\x0d]( D\x8b\xba\xfa\xe1\xbd\xf1\xa3\xe9\x81\xc9\xfc\x1e\xccYp\x1eR\xabD0\xa1\x0f\xa6Vuz=\x0b\x83\x84nQT\xdf\xd9\xdfg\x93-\n\xc1\xa6\xb9\xa1\x9c\xbcDh\xe5\xdf\x9b\x8e\x83{&\xff<\x0dC\x9aX\xf9\x93\x83\xc3\x83\xc3|d2z\x88\xc9\x9dN\x83<\x8b%aS\x1e\xa7\xd2\xcc\\\x9f\x1b$\xc9\x9c\x9d\xa7IS\xed?\xd2\xb81\xef
\xba;\x9fP\xa6\xf2\xffI\x93\xa3$2\xcc\x9b\xc3\xed\xcd\x94{c\xbeU\x87\xf3\xb7\x9dWI0\xbf\xa0\x89\xc7\xf0\x84\x86I\xf0I>\xf0\xbd\xe2PMq+\x1f\xc7\xd3)\xa7\x89\xfa\xb9\xc02W0\x85eFX\xdf\x7f\xbah\xb7\xe1\x86\xfa\xb2\xddN\x9ft\xd7\xeb\xc5\xde\x12^\xfdN\x9fv\x91 \x85\x99\xec\x8d\xa2N\x17e8\xa0dY\xbd\xa2\xf7[\x8cW\xe6&\x8f\xc6\x8c\\\x8eN!0\x91 \xa3\xd65\x13\xfd\x80\xd5\xab\xee\x9c\xe9\x0d\xcdmZ\xca\xc9%\xbd\xa6\x0eB\x19f\x14y\xd5\xc0HBH\x08\xe64p\xf0jN\x83\xc9\xbb(\xbc\x81\x07s\x8a-\xebK\\\x8cf\xcd\xd7}\x9c \xfb\xee\xd8\xb7\xe9\x1c\xc5\xd5\xf65\xcbs\xf0\x9cN\xbd\xab\xacz'H\xd5\x95\x83Z- X\x8f\xd3\xebv\xff\xa7\x83\x8b\x81S\xf0U\xca\x136\xbdy._\xe4\x95\xa9\xfbpE\xd1\xc1A\xc8.\xa2W \xbd\xe6\x9e3\xa6r\x13\x92\xbcZ\xf3\xe2\x9e\xe0\xd6Y]\x07.\xef;x\x15G\xcfC6\xfe\xe6 \xfa\xab\xa1KWGf\xaa\xecuY\x86\x1d\xcd\xbc\x1dT\x03\xfe