From d54bc7551de8ef4e3aa6f36690b44f556547d6f0 Mon Sep 17 00:00:00 2001 From: LINCKODE Date: Tue, 30 Jul 2024 16:11:36 +0300 Subject: [PATCH 1/5] Add check to see if broadcast transaction target tick is smaller than network tick + 15 --- foundation/rpc_server/rpc_server.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/foundation/rpc_server/rpc_server.go b/foundation/rpc_server/rpc_server.go index b923087..a7730ae 100644 --- a/foundation/rpc_server/rpc_server.go +++ b/foundation/rpc_server/rpc_server.go @@ -5,6 +5,7 @@ import ( "context" "encoding/base64" "encoding/json" + "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/pkg/errors" "github.com/qubic/go-node-connector/types" @@ -187,6 +188,10 @@ func (s *Server) BroadcastTransaction(ctx context.Context, req *protobuff.Broadc return nil, status.Error(codes.Internal, err.Error()) } + if transaction.Tick < maxTick+15 { + fmt.Printf("WARN: Transaction %s has a taget tick smaller than network tick(%d) + 15(%d)", transactionId, maxTick, maxTick+15) + } + return &protobuff.BroadcastTransactionResponse{ PeersBroadcasted: int32(broadcastTxToMultiple(ctx, s.qPool, decodedTx)), EncodedTransaction: req.EncodedTransaction, From e2646e1c4e88f58c20dfbf17449cac0f809bc1fc Mon Sep 17 00:00:00 2001 From: LINCKODE Date: Tue, 30 Jul 2024 16:43:48 +0300 Subject: [PATCH 2/5] Print transaction id, target tick and max tick. --- foundation/rpc_server/rpc_server.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/foundation/rpc_server/rpc_server.go b/foundation/rpc_server/rpc_server.go index a7730ae..f5ea1f0 100644 --- a/foundation/rpc_server/rpc_server.go +++ b/foundation/rpc_server/rpc_server.go @@ -188,9 +188,7 @@ func (s *Server) BroadcastTransaction(ctx context.Context, req *protobuff.Broadc return nil, status.Error(codes.Internal, err.Error()) } - if transaction.Tick < maxTick+15 { - fmt.Printf("WARN: Transaction %s has a taget tick smaller than network tick(%d) + 15(%d)", transactionId, maxTick, maxTick+15) - } + fmt.Printf("Transaction: %s | Target tick: %d | Max tick: %d", transactionId, transaction.Tick, maxTick) return &protobuff.BroadcastTransactionResponse{ PeersBroadcasted: int32(broadcastTxToMultiple(ctx, s.qPool, decodedTx)), From 1d06b2eaee806fb45e26a1dcc7f0e03c7621f8d9 Mon Sep 17 00:00:00 2001 From: LINCKODE Date: Tue, 30 Jul 2024 17:09:18 +0300 Subject: [PATCH 3/5] Add missing newline --- foundation/rpc_server/rpc_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundation/rpc_server/rpc_server.go b/foundation/rpc_server/rpc_server.go index f5ea1f0..75f1405 100644 --- a/foundation/rpc_server/rpc_server.go +++ b/foundation/rpc_server/rpc_server.go @@ -188,7 +188,7 @@ func (s *Server) BroadcastTransaction(ctx context.Context, req *protobuff.Broadc return nil, status.Error(codes.Internal, err.Error()) } - fmt.Printf("Transaction: %s | Target tick: %d | Max tick: %d", transactionId, transaction.Tick, maxTick) + fmt.Printf("Transaction: %s | Target tick: %d | Max tick: %d\n", transactionId, transaction.Tick, maxTick) return &protobuff.BroadcastTransactionResponse{ PeersBroadcasted: int32(broadcastTxToMultiple(ctx, s.qPool, decodedTx)), From 17e349a788db044a18531ed570b361953ee9fa1f Mon Sep 17 00:00:00 2001 From: 0xluk Date: Thu, 1 Aug 2024 11:51:57 +0300 Subject: [PATCH 4/5] improved logging capabilities on broadcast transaction --- app/grpc_server/main.go | 17 ++-- foundation/rpc_server/rpc_server.go | 142 +++++++++++++++------------- 2 files changed, 88 insertions(+), 71 deletions(-) diff --git a/app/grpc_server/main.go b/app/grpc_server/main.go index 8a179fc..c5e2a9d 100644 --- a/app/grpc_server/main.go +++ b/app/grpc_server/main.go @@ -17,13 +17,13 @@ import ( const prefix = "QUBIC_API_SIDECAR" func main() { - log := log.New(os.Stdout, prefix, log.LstdFlags|log.Lmicroseconds|log.Lshortfile) - if err := run(log); err != nil { - log.Fatalf("main: exited with error: %s", err.Error()) + logger := log.New(os.Stdout, prefix, log.LstdFlags|log.Lmicroseconds|log.Lshortfile) + if err := run(logger); err != nil { + logger.Fatalf("main: exited with error: %s", err.Error()) } } -func run(log *log.Logger) error { +func run(logger *log.Logger) error { var cfg struct { Server struct { ReadTimeout time.Duration `conf:"default:5s"` @@ -68,7 +68,7 @@ func run(log *log.Logger) error { if err != nil { return errors.Wrap(err, "generating config for output") } - log.Printf("main: Config :\n%v\n", out) + logger.Printf("main: Config :\n%v\n", out) pool, err := qubic.NewPoolConnection(qubic.PoolConfig{ InitialCap: cfg.Pool.InitialCap, @@ -83,8 +83,11 @@ func run(log *log.Logger) error { return errors.Wrap(err, "creating qubic pool") } - rpcServer := rpc.NewServer(cfg.Server.GrpcHost, cfg.Server.HttpHost, pool, cfg.Server.MaxTickFetchUrl) - rpcServer.Start() + rpcServer := rpc.NewServer(cfg.Server.GrpcHost, cfg.Server.HttpHost, logger, pool, cfg.Server.MaxTickFetchUrl) + err = rpcServer.Start() + if err != nil { + return errors.Wrap(err, "starting rpc server") + } shutdown := make(chan os.Signal, 1) signal.Notify(shutdown, os.Interrupt, syscall.SIGTERM) diff --git a/foundation/rpc_server/rpc_server.go b/foundation/rpc_server/rpc_server.go index 75f1405..9614aad 100644 --- a/foundation/rpc_server/rpc_server.go +++ b/foundation/rpc_server/rpc_server.go @@ -5,27 +5,23 @@ import ( "context" "encoding/base64" "encoding/json" - "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/pkg/errors" "github.com/qubic/go-node-connector/types" "github.com/qubic/go-schnorrq" + "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/reflection" "google.golang.org/grpc/status" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/emptypb" "io" + "net" qubic "github.com/qubic/go-node-connector" "github.com/qubic/qubic-http/protobuff" - "google.golang.org/grpc" - - "google.golang.org/grpc/credentials/insecure" - "google.golang.org/grpc/reflection" - - "google.golang.org/protobuf/encoding/protojson" - "log" - "net" "net/http" ) @@ -33,16 +29,18 @@ var _ protobuff.QubicLiveServiceServer = &Server{} type Server struct { protobuff.UnimplementedQubicLiveServiceServer + logger *log.Logger listenAddrGRPC string listenAddrHTTP string qPool *qubic.Pool maxTickFetchUrl string } -func NewServer(listenAddrGRPC, listenAddrHTTP string, qPool *qubic.Pool, maxTickFetchUrl string) *Server { +func NewServer(listenAddrGRPC, listenAddrHTTP string, logger *log.Logger, qPool *qubic.Pool, maxTickFetchUrl string) *Server { return &Server{ listenAddrGRPC: listenAddrGRPC, listenAddrHTTP: listenAddrHTTP, + logger: logger, qPool: qPool, maxTickFetchUrl: maxTickFetchUrl, } @@ -174,12 +172,12 @@ func (s *Server) BroadcastTransaction(ctx context.Context, req *protobuff.Broadc } maxTick, err := fetchMaxTick(ctx, s.maxTickFetchUrl) - if err != nil { return nil, status.Error(codes.Internal, err.Error()) } - if transaction.Tick < maxTick { + offsetTick := transaction.Tick - maxTick + if offsetTick <= 0 { return nil, status.Errorf(codes.InvalidArgument, "Target tick: %d for the transaction should be greater than max tick: %d", transaction.Tick, maxTick) } @@ -188,10 +186,26 @@ func (s *Server) BroadcastTransaction(ctx context.Context, req *protobuff.Broadc return nil, status.Error(codes.Internal, err.Error()) } - fmt.Printf("Transaction: %s | Target tick: %d | Max tick: %d\n", transactionId, transaction.Tick, maxTick) + var sourceID types.Identity + sourceID, err = sourceID.FromPubKey(transaction.SourcePublicKey, false) + if err != nil { + return nil, status.Error(codes.Internal, errors.Wrap(err, "getting source ID").Error()) + } + + var destID types.Identity + destID, err = destID.FromPubKey(transaction.DestinationPublicKey, false) + if err != nil { + return nil, status.Error(codes.Internal, errors.Wrap(err, "getting dest ID").Error()) + } + + peersBroadcasted := broadcastTxToMultiple(ctx, s.qPool, decodedTx) + s.logger.Printf("Tx ID: %s | Source: %s | Dest: %s | Target tick: %d | Max tick: %d | Offset tick: %d | Peers broadcasted: %d\n", transactionId, sourceID, destID, transaction.Tick, maxTick, offsetTick, peersBroadcasted) + if peersBroadcasted == 0 { + return nil, status.Error(codes.Internal, "tx wasn't broadcast to any peers, please retry") + } return &protobuff.BroadcastTransactionResponse{ - PeersBroadcasted: int32(broadcastTxToMultiple(ctx, s.qPool, decodedTx)), + PeersBroadcasted: int32(peersBroadcasted), EncodedTransaction: req.EncodedTransaction, TransactionId: transactionId, }, nil @@ -219,56 +233,6 @@ func broadcastTxToMultiple(ctx context.Context, pool *qubic.Pool, decodedTx []by return nrSuccess } -func (s *Server) Start() error { - srv := grpc.NewServer( - grpc.MaxRecvMsgSize(600*1024*1024), - grpc.MaxSendMsgSize(600*1024*1024), - ) - protobuff.RegisterQubicLiveServiceServer(srv, s) - reflection.Register(srv) - - lis, err := net.Listen("tcp", s.listenAddrGRPC) - if err != nil { - log.Fatalf("failed to listen: %v", err) - } - - go func() { - if err := srv.Serve(lis); err != nil { - panic(err) - } - }() - - if s.listenAddrHTTP != "" { - go func() { - mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ - MarshalOptions: protojson.MarshalOptions{EmitDefaultValues: true, EmitUnpopulated: false}, - })) - opts := []grpc.DialOption{ - grpc.WithTransportCredentials(insecure.NewCredentials()), - grpc.WithDefaultCallOptions( - grpc.MaxCallRecvMsgSize(600*1024*1024), - grpc.MaxCallSendMsgSize(600*1024*1024), - ), - } - - if err := protobuff.RegisterQubicLiveServiceHandlerFromEndpoint( - context.Background(), - mux, - s.listenAddrGRPC, - opts, - ); err != nil { - panic(err) - } - - if err := http.ListenAndServe(s.listenAddrHTTP, mux); err != nil { - panic(err) - } - }() - } - - return nil -} - func int8ArrayToString(array []int8) string { runes := make([]rune, 0) @@ -489,3 +453,53 @@ func (s *Server) GetPossessedAssets(ctx context.Context, req *protobuff.Possesse return &protobuff.PossessedAssetsResponse{PossessedAssets: possessedAssets}, nil } + +func (s *Server) Start() error { + srv := grpc.NewServer( + grpc.MaxRecvMsgSize(600*1024*1024), + grpc.MaxSendMsgSize(600*1024*1024), + ) + protobuff.RegisterQubicLiveServiceServer(srv, s) + reflection.Register(srv) + + lis, err := net.Listen("tcp", s.listenAddrGRPC) + if err != nil { + return errors.Wrap(err, "listening gRPC") + } + + go func() { + if err := srv.Serve(lis); err != nil { + panic(err) + } + }() + + if s.listenAddrHTTP != "" { + go func() { + mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{EmitDefaultValues: true, EmitUnpopulated: false}, + })) + opts := []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithDefaultCallOptions( + grpc.MaxCallRecvMsgSize(600*1024*1024), + grpc.MaxCallSendMsgSize(600*1024*1024), + ), + } + + if err := protobuff.RegisterQubicLiveServiceHandlerFromEndpoint( + context.Background(), + mux, + s.listenAddrGRPC, + opts, + ); err != nil { + panic(err) + } + + if err := http.ListenAndServe(s.listenAddrHTTP, mux); err != nil { + panic(err) + } + }() + } + + return nil +} From 55f1b2902be044118b389e7adfd96a9d74c52faa Mon Sep 17 00:00:00 2001 From: 0xluk Date: Thu, 1 Aug 2024 11:56:54 +0300 Subject: [PATCH 5/5] added more balance related fields to GetBalance request --- foundation/rpc_server/rpc_server.go | 4 + protobuff/qubic.pb.go | 443 +++++++++++++++------------- protobuff/qubic.pb.gw.go | 12 +- protobuff/qubic.proto | 10 +- protobuff/qubic_grpc.pb.go | 2 +- 5 files changed, 266 insertions(+), 205 deletions(-) diff --git a/foundation/rpc_server/rpc_server.go b/foundation/rpc_server/rpc_server.go index 9614aad..a755b76 100644 --- a/foundation/rpc_server/rpc_server.go +++ b/foundation/rpc_server/rpc_server.go @@ -66,6 +66,10 @@ func (s *Server) GetBalance(ctx context.Context, req *protobuff.GetBalanceReques ValidForTick: identityInfo.Tick, LatestIncomingTransferTick: identityInfo.AddressData.LatestIncomingTransferTick, LatestOutgoingTransferTick: identityInfo.AddressData.LatestOutgoingTransferTick, + IncomingAmount: identityInfo.AddressData.IncomingAmount, + OutgoingAmount: identityInfo.AddressData.OutgoingAmount, + NumberOfIncomingTransfers: identityInfo.AddressData.NumberOfIncomingTransfers, + NumberOfOutgoingTransfers: identityInfo.AddressData.NumberOfOutgoingTransfers, } return &protobuff.GetBalanceResponse{Balance: &balance}, nil } diff --git a/protobuff/qubic.pb.go b/protobuff/qubic.pb.go index 74b2de9..d825c90 100644 --- a/protobuff/qubic.pb.go +++ b/protobuff/qubic.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 -// protoc v4.25.3 +// protoc-gen-go v1.32.0 +// protoc v4.23.4 // source: qubic.proto package protobuff @@ -32,6 +32,10 @@ type Balance struct { ValidForTick uint32 `protobuf:"varint,3,opt,name=valid_for_tick,json=validForTick,proto3" json:"valid_for_tick,omitempty"` LatestIncomingTransferTick uint32 `protobuf:"varint,4,opt,name=latest_incoming_transfer_tick,json=latestIncomingTransferTick,proto3" json:"latest_incoming_transfer_tick,omitempty"` LatestOutgoingTransferTick uint32 `protobuf:"varint,5,opt,name=latest_outgoing_transfer_tick,json=latestOutgoingTransferTick,proto3" json:"latest_outgoing_transfer_tick,omitempty"` + IncomingAmount int64 `protobuf:"varint,6,opt,name=incoming_amount,json=incomingAmount,proto3" json:"incoming_amount,omitempty"` + OutgoingAmount int64 `protobuf:"varint,7,opt,name=outgoing_amount,json=outgoingAmount,proto3" json:"outgoing_amount,omitempty"` + NumberOfIncomingTransfers uint32 `protobuf:"varint,8,opt,name=number_of_incoming_transfers,json=numberOfIncomingTransfers,proto3" json:"number_of_incoming_transfers,omitempty"` + NumberOfOutgoingTransfers uint32 `protobuf:"varint,9,opt,name=number_of_outgoing_transfers,json=numberOfOutgoingTransfers,proto3" json:"number_of_outgoing_transfers,omitempty"` } func (x *Balance) Reset() { @@ -101,6 +105,34 @@ func (x *Balance) GetLatestOutgoingTransferTick() uint32 { return 0 } +func (x *Balance) GetIncomingAmount() int64 { + if x != nil { + return x.IncomingAmount + } + return 0 +} + +func (x *Balance) GetOutgoingAmount() int64 { + if x != nil { + return x.OutgoingAmount + } + return 0 +} + +func (x *Balance) GetNumberOfIncomingTransfers() uint32 { + if x != nil { + return x.NumberOfIncomingTransfers + } + return 0 +} + +func (x *Balance) GetNumberOfOutgoingTransfers() uint32 { + if x != nil { + return x.NumberOfOutgoingTransfers + } + return 0 +} + type GetBalanceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1252,7 +1284,7 @@ var file_qubic_proto_rawDesc = []byte{ 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdf, 0x01, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb3, 0x03, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, @@ -1266,86 +1298,136 @@ var file_qubic_proto_rawDesc = []byte{ 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x67, 0x6f, - 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x22, - 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, + 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x12, + 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, + 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x67, + 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x69, + 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, + 0x66, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, + 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x4f, 0x66, 0x4f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x73, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, + 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, + 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x4e, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, + 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x73, + 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x70, 0x65, 0x65, 0x72, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, + 0x73, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x73, 0x0a, 0x08, + 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x21, + 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x63, + 0x6b, 0x22, 0x51, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x69, 0x63, 0x6b, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, - 0x62, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x22, 0x4e, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x73, 0x5f, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, - 0x70, 0x65, 0x65, 0x72, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x64, - 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x73, 0x0a, 0x08, 0x54, 0x69, 0x63, 0x6b, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x63, 0x6b, 0x22, 0x51, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x69, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x22, 0x5a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, - 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x46, 0x0a, 0x09, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x63, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x63, 0x6b, 0x12, 0x25, 0x0a, - 0x0e, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x22, 0xcb, 0x01, 0x0a, 0x0f, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x5f, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x4f, 0x66, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x50, 0x6c, 0x61, 0x63, - 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x11, 0x75, 0x6e, 0x69, 0x74, 0x4f, 0x66, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x0b, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, - 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x62, 0x69, + 0x62, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x69, 0x63, 0x6b, + 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, + 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x22, 0x46, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x63, + 0x6b, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xcb, 0x01, 0x0a, 0x0f, 0x49, 0x73, 0x73, + 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, + 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, + 0x18, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x15, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x11, 0x75, 0x6e, 0x69, 0x74, 0x4f, 0x66, 0x4d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x0b, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x32, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, + 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x22, 0x31, 0x0a, 0x13, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x5d, 0x0a, 0x14, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, + 0x0a, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, + 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x0c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x0e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, + 0x17, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, + 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x55, + 0x6e, 0x69, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x62, + 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, + 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x79, 0x0a, + 0x0a, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, - 0x31, 0x0a, 0x13, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x22, 0x5d, 0x0a, 0x14, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, - 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x52, 0x0c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x0e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x30, 0x0a, 0x12, 0x4f, 0x77, 0x6e, 0x65, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x59, 0x0a, 0x13, 0x4f, 0x77, + 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x42, 0x0a, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, + 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0xbe, 0x02, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x12, + 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, + 0x73, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x61, 0x6e, @@ -1357,128 +1439,91 @@ var file_qubic_proto_rawDesc = []byte{ 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x55, 0x6e, 0x69, 0x74, 0x73, - 0x12, 0x47, 0x0a, 0x0c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x79, 0x0a, 0x0a, 0x4f, 0x77, 0x6e, - 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, + 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, 0x6e, 0x65, - 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x32, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x73, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, + 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x34, 0x0a, 0x16, 0x50, 0x6f, + 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x22, 0x69, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, + 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x73, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x0f, 0x70, 0x6f, 0x73, 0x73, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x32, 0xa9, 0x07, 0x0a, 0x10, + 0x51, 0x75, 0x62, 0x69, 0x63, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x75, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, - 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x30, 0x0a, 0x12, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x59, 0x0a, 0x13, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, - 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, + 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x30, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, + 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, + 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, + 0x22, 0x16, 0x2f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, + 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x28, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, + 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0c, 0x12, 0x0a, 0x2f, 0x74, 0x69, 0x63, 0x6b, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x6c, 0x0a, + 0x0e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x89, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, + 0x28, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, + 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x62, 0x69, + 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x7d, + 0x2f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4f, + 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x71, 0x75, 0x62, + 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, + 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x22, 0xbe, 0x02, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x73, - 0x65, 0x73, 0x73, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x25, 0x0a, - 0x0e, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, - 0x66, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x0b, - 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, - 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x7d, 0x2f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x12, + 0x95, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, + 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, - 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x34, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x69, 0x0a, 0x17, - 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x6f, 0x73, 0x73, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, - 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x0f, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x32, 0xa9, 0x07, 0x0a, 0x10, 0x51, 0x75, 0x62, 0x69, - 0x63, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0a, - 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x62, - 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, - 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x2e, 0x71, - 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, - 0x70, 0x62, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, - 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x62, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x71, 0x75, - 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, - 0x74, 0x69, 0x63, 0x6b, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x6c, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x89, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x71, 0x75, - 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, - 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x7d, 0x2f, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x64, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, 0x6e, - 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, - 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x12, 0x18, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x7d, 0x2f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x12, 0x95, 0x01, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, - 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x71, 0x75, 0x62, - 0x69, 0x63, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x7d, 0x2f, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2f, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2d, 0x68, 0x74, - 0x74, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x66, 0x2f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x7d, 0x2f, 0x70, 0x6f, + 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x62, 0x69, 0x63, 0x2f, 0x71, 0x75, 0x62, 0x69, + 0x63, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x66, + 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protobuff/qubic.pb.gw.go b/protobuff/qubic.pb.gw.go index 8805b76..93b4d77 100644 --- a/protobuff/qubic.pb.gw.go +++ b/protobuff/qubic.pb.gw.go @@ -88,7 +88,11 @@ func request_QubicLiveService_BroadcastTransaction_0(ctx context.Context, marsha var protoReq BroadcastTransactionRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -101,7 +105,11 @@ func local_request_QubicLiveService_BroadcastTransaction_0(ctx context.Context, var protoReq BroadcastTransactionRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/protobuff/qubic.proto b/protobuff/qubic.proto index 2d58058..05348c5 100644 --- a/protobuff/qubic.proto +++ b/protobuff/qubic.proto @@ -12,6 +12,10 @@ message Balance { uint32 valid_for_tick = 3; uint32 latest_incoming_transfer_tick = 4; uint32 latest_outgoing_transfer_tick = 5; + int64 incoming_amount = 6; + int64 outgoing_amount = 7; + uint32 number_of_incoming_transfers = 8; + uint32 number_of_outgoing_transfers = 9; } message GetBalanceRequest { @@ -151,9 +155,9 @@ service QubicLiveService { }; rpc GetIssuedAssets(IssuedAssetsRequest) returns (IssuedAssetsResponse) { - option (google.api.http) = { - get: "/assets/{identity}/issued" - }; + option (google.api.http) = { + get: "/assets/{identity}/issued" + }; }; rpc GetOwnedAssets(OwnedAssetsRequest) returns (OwnedAssetsResponse) { diff --git a/protobuff/qubic_grpc.pb.go b/protobuff/qubic_grpc.pb.go index cf8e984..fded329 100644 --- a/protobuff/qubic_grpc.pb.go +++ b/protobuff/qubic_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 +// - protoc v4.23.4 // source: qubic.proto package protobuff