// Copyright 2019 The Nakama Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //* // The realtime protocol for Nakama server. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 // protoc v5.27.1 // source: realtime.proto package rtapi import ( api "github.com/heroiclabs/nakama-common/api" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // The type of chat channel. type ChannelJoin_Type int32 const ( // Default case. Assumed as ROOM type. ChannelJoin_TYPE_UNSPECIFIED ChannelJoin_Type = 0 // A room which anyone can join to chat. ChannelJoin_ROOM ChannelJoin_Type = 1 // A private channel for 1-on-1 chat. ChannelJoin_DIRECT_MESSAGE ChannelJoin_Type = 2 // A channel for group chat. ChannelJoin_GROUP ChannelJoin_Type = 3 ) // Enum value maps for ChannelJoin_Type. var ( ChannelJoin_Type_name = map[int32]string{ 0: "TYPE_UNSPECIFIED", 1: "ROOM", 2: "DIRECT_MESSAGE", 3: "GROUP", } ChannelJoin_Type_value = map[string]int32{ "TYPE_UNSPECIFIED": 0, "ROOM": 1, "DIRECT_MESSAGE": 2, "GROUP": 3, } ) func (x ChannelJoin_Type) Enum() *ChannelJoin_Type { p := new(ChannelJoin_Type) *p = x return p } func (x ChannelJoin_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ChannelJoin_Type) Descriptor() protoreflect.EnumDescriptor { return file_realtime_proto_enumTypes[0].Descriptor() } func (ChannelJoin_Type) Type() protoreflect.EnumType { return &file_realtime_proto_enumTypes[0] } func (x ChannelJoin_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ChannelJoin_Type.Descriptor instead. func (ChannelJoin_Type) EnumDescriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{2, 0} } // The selection of possible error codes. type Error_Code int32 const ( // An unexpected result from the server. Error_RUNTIME_EXCEPTION Error_Code = 0 // The server received a message which is not recognised. Error_UNRECOGNIZED_PAYLOAD Error_Code = 1 // A message was expected but contains no content. Error_MISSING_PAYLOAD Error_Code = 2 // Fields in the message have an invalid format. Error_BAD_INPUT Error_Code = 3 // The match id was not found. Error_MATCH_NOT_FOUND Error_Code = 4 // The match join was rejected. Error_MATCH_JOIN_REJECTED Error_Code = 5 // The runtime function does not exist on the server. Error_RUNTIME_FUNCTION_NOT_FOUND Error_Code = 6 // The runtime function executed with an error. Error_RUNTIME_FUNCTION_EXCEPTION Error_Code = 7 ) // Enum value maps for Error_Code. var ( Error_Code_name = map[int32]string{ 0: "RUNTIME_EXCEPTION", 1: "UNRECOGNIZED_PAYLOAD", 2: "MISSING_PAYLOAD", 3: "BAD_INPUT", 4: "MATCH_NOT_FOUND", 5: "MATCH_JOIN_REJECTED", 6: "RUNTIME_FUNCTION_NOT_FOUND", 7: "RUNTIME_FUNCTION_EXCEPTION", } Error_Code_value = map[string]int32{ "RUNTIME_EXCEPTION": 0, "UNRECOGNIZED_PAYLOAD": 1, "MISSING_PAYLOAD": 2, "BAD_INPUT": 3, "MATCH_NOT_FOUND": 4, "MATCH_JOIN_REJECTED": 5, "RUNTIME_FUNCTION_NOT_FOUND": 6, "RUNTIME_FUNCTION_EXCEPTION": 7, } ) func (x Error_Code) Enum() *Error_Code { p := new(Error_Code) *p = x return p } func (x Error_Code) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Error_Code) Descriptor() protoreflect.EnumDescriptor { return file_realtime_proto_enumTypes[1].Descriptor() } func (Error_Code) Type() protoreflect.EnumType { return &file_realtime_proto_enumTypes[1] } func (x Error_Code) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Error_Code.Descriptor instead. func (Error_Code) EnumDescriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{9, 0} } // An envelope for a realtime message. type Envelope struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` // Types that are assignable to Message: // // *Envelope_Channel // *Envelope_ChannelJoin // *Envelope_ChannelLeave // *Envelope_ChannelMessage // *Envelope_ChannelMessageAck // *Envelope_ChannelMessageSend // *Envelope_ChannelMessageUpdate // *Envelope_ChannelMessageRemove // *Envelope_ChannelPresenceEvent // *Envelope_Error // *Envelope_Match // *Envelope_MatchCreate // *Envelope_MatchData // *Envelope_MatchDataSend // *Envelope_MatchJoin // *Envelope_MatchLeave // *Envelope_MatchPresenceEvent // *Envelope_MatchmakerAdd // *Envelope_MatchmakerMatched // *Envelope_MatchmakerRemove // *Envelope_MatchmakerTicket // *Envelope_Notifications // *Envelope_Rpc // *Envelope_Status // *Envelope_StatusFollow // *Envelope_StatusPresenceEvent // *Envelope_StatusUnfollow // *Envelope_StatusUpdate // *Envelope_StreamData // *Envelope_StreamPresenceEvent // *Envelope_Ping // *Envelope_Pong // *Envelope_Party // *Envelope_PartyCreate // *Envelope_PartyJoin // *Envelope_PartyLeave // *Envelope_PartyPromote // *Envelope_PartyLeader // *Envelope_PartyAccept // *Envelope_PartyRemove // *Envelope_PartyClose // *Envelope_PartyJoinRequestList // *Envelope_PartyJoinRequest // *Envelope_PartyMatchmakerAdd // *Envelope_PartyMatchmakerRemove // *Envelope_PartyMatchmakerTicket // *Envelope_PartyData // *Envelope_PartyDataSend // *Envelope_PartyPresenceEvent Message isEnvelope_Message `protobuf_oneof:"message"` } func (x *Envelope) Reset() { *x = Envelope{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Envelope) String() string { return protoimpl.X.MessageStringOf(x) } func (*Envelope) ProtoMessage() {} func (x *Envelope) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[0] 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 Envelope.ProtoReflect.Descriptor instead. func (*Envelope) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{0} } func (x *Envelope) GetCid() string { if x != nil { return x.Cid } return "" } func (m *Envelope) GetMessage() isEnvelope_Message { if m != nil { return m.Message } return nil } func (x *Envelope) GetChannel() *Channel { if x, ok := x.GetMessage().(*Envelope_Channel); ok { return x.Channel } return nil } func (x *Envelope) GetChannelJoin() *ChannelJoin { if x, ok := x.GetMessage().(*Envelope_ChannelJoin); ok { return x.ChannelJoin } return nil } func (x *Envelope) GetChannelLeave() *ChannelLeave { if x, ok := x.GetMessage().(*Envelope_ChannelLeave); ok { return x.ChannelLeave } return nil } func (x *Envelope) GetChannelMessage() *api.ChannelMessage { if x, ok := x.GetMessage().(*Envelope_ChannelMessage); ok { return x.ChannelMessage } return nil } func (x *Envelope) GetChannelMessageAck() *ChannelMessageAck { if x, ok := x.GetMessage().(*Envelope_ChannelMessageAck); ok { return x.ChannelMessageAck } return nil } func (x *Envelope) GetChannelMessageSend() *ChannelMessageSend { if x, ok := x.GetMessage().(*Envelope_ChannelMessageSend); ok { return x.ChannelMessageSend } return nil } func (x *Envelope) GetChannelMessageUpdate() *ChannelMessageUpdate { if x, ok := x.GetMessage().(*Envelope_ChannelMessageUpdate); ok { return x.ChannelMessageUpdate } return nil } func (x *Envelope) GetChannelMessageRemove() *ChannelMessageRemove { if x, ok := x.GetMessage().(*Envelope_ChannelMessageRemove); ok { return x.ChannelMessageRemove } return nil } func (x *Envelope) GetChannelPresenceEvent() *ChannelPresenceEvent { if x, ok := x.GetMessage().(*Envelope_ChannelPresenceEvent); ok { return x.ChannelPresenceEvent } return nil } func (x *Envelope) GetError() *Error { if x, ok := x.GetMessage().(*Envelope_Error); ok { return x.Error } return nil } func (x *Envelope) GetMatch() *Match { if x, ok := x.GetMessage().(*Envelope_Match); ok { return x.Match } return nil } func (x *Envelope) GetMatchCreate() *MatchCreate { if x, ok := x.GetMessage().(*Envelope_MatchCreate); ok { return x.MatchCreate } return nil } func (x *Envelope) GetMatchData() *MatchData { if x, ok := x.GetMessage().(*Envelope_MatchData); ok { return x.MatchData } return nil } func (x *Envelope) GetMatchDataSend() *MatchDataSend { if x, ok := x.GetMessage().(*Envelope_MatchDataSend); ok { return x.MatchDataSend } return nil } func (x *Envelope) GetMatchJoin() *MatchJoin { if x, ok := x.GetMessage().(*Envelope_MatchJoin); ok { return x.MatchJoin } return nil } func (x *Envelope) GetMatchLeave() *MatchLeave { if x, ok := x.GetMessage().(*Envelope_MatchLeave); ok { return x.MatchLeave } return nil } func (x *Envelope) GetMatchPresenceEvent() *MatchPresenceEvent { if x, ok := x.GetMessage().(*Envelope_MatchPresenceEvent); ok { return x.MatchPresenceEvent } return nil } func (x *Envelope) GetMatchmakerAdd() *MatchmakerAdd { if x, ok := x.GetMessage().(*Envelope_MatchmakerAdd); ok { return x.MatchmakerAdd } return nil } func (x *Envelope) GetMatchmakerMatched() *MatchmakerMatched { if x, ok := x.GetMessage().(*Envelope_MatchmakerMatched); ok { return x.MatchmakerMatched } return nil } func (x *Envelope) GetMatchmakerRemove() *MatchmakerRemove { if x, ok := x.GetMessage().(*Envelope_MatchmakerRemove); ok { return x.MatchmakerRemove } return nil } func (x *Envelope) GetMatchmakerTicket() *MatchmakerTicket { if x, ok := x.GetMessage().(*Envelope_MatchmakerTicket); ok { return x.MatchmakerTicket } return nil } func (x *Envelope) GetNotifications() *Notifications { if x, ok := x.GetMessage().(*Envelope_Notifications); ok { return x.Notifications } return nil } func (x *Envelope) GetRpc() *api.Rpc { if x, ok := x.GetMessage().(*Envelope_Rpc); ok { return x.Rpc } return nil } func (x *Envelope) GetStatus() *Status { if x, ok := x.GetMessage().(*Envelope_Status); ok { return x.Status } return nil } func (x *Envelope) GetStatusFollow() *StatusFollow { if x, ok := x.GetMessage().(*Envelope_StatusFollow); ok { return x.StatusFollow } return nil } func (x *Envelope) GetStatusPresenceEvent() *StatusPresenceEvent { if x, ok := x.GetMessage().(*Envelope_StatusPresenceEvent); ok { return x.StatusPresenceEvent } return nil } func (x *Envelope) GetStatusUnfollow() *StatusUnfollow { if x, ok := x.GetMessage().(*Envelope_StatusUnfollow); ok { return x.StatusUnfollow } return nil } func (x *Envelope) GetStatusUpdate() *StatusUpdate { if x, ok := x.GetMessage().(*Envelope_StatusUpdate); ok { return x.StatusUpdate } return nil } func (x *Envelope) GetStreamData() *StreamData { if x, ok := x.GetMessage().(*Envelope_StreamData); ok { return x.StreamData } return nil } func (x *Envelope) GetStreamPresenceEvent() *StreamPresenceEvent { if x, ok := x.GetMessage().(*Envelope_StreamPresenceEvent); ok { return x.StreamPresenceEvent } return nil } func (x *Envelope) GetPing() *Ping { if x, ok := x.GetMessage().(*Envelope_Ping); ok { return x.Ping } return nil } func (x *Envelope) GetPong() *Pong { if x, ok := x.GetMessage().(*Envelope_Pong); ok { return x.Pong } return nil } func (x *Envelope) GetParty() *Party { if x, ok := x.GetMessage().(*Envelope_Party); ok { return x.Party } return nil } func (x *Envelope) GetPartyCreate() *PartyCreate { if x, ok := x.GetMessage().(*Envelope_PartyCreate); ok { return x.PartyCreate } return nil } func (x *Envelope) GetPartyJoin() *PartyJoin { if x, ok := x.GetMessage().(*Envelope_PartyJoin); ok { return x.PartyJoin } return nil } func (x *Envelope) GetPartyLeave() *PartyLeave { if x, ok := x.GetMessage().(*Envelope_PartyLeave); ok { return x.PartyLeave } return nil } func (x *Envelope) GetPartyPromote() *PartyPromote { if x, ok := x.GetMessage().(*Envelope_PartyPromote); ok { return x.PartyPromote } return nil } func (x *Envelope) GetPartyLeader() *PartyLeader { if x, ok := x.GetMessage().(*Envelope_PartyLeader); ok { return x.PartyLeader } return nil } func (x *Envelope) GetPartyAccept() *PartyAccept { if x, ok := x.GetMessage().(*Envelope_PartyAccept); ok { return x.PartyAccept } return nil } func (x *Envelope) GetPartyRemove() *PartyRemove { if x, ok := x.GetMessage().(*Envelope_PartyRemove); ok { return x.PartyRemove } return nil } func (x *Envelope) GetPartyClose() *PartyClose { if x, ok := x.GetMessage().(*Envelope_PartyClose); ok { return x.PartyClose } return nil } func (x *Envelope) GetPartyJoinRequestList() *PartyJoinRequestList { if x, ok := x.GetMessage().(*Envelope_PartyJoinRequestList); ok { return x.PartyJoinRequestList } return nil } func (x *Envelope) GetPartyJoinRequest() *PartyJoinRequest { if x, ok := x.GetMessage().(*Envelope_PartyJoinRequest); ok { return x.PartyJoinRequest } return nil } func (x *Envelope) GetPartyMatchmakerAdd() *PartyMatchmakerAdd { if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerAdd); ok { return x.PartyMatchmakerAdd } return nil } func (x *Envelope) GetPartyMatchmakerRemove() *PartyMatchmakerRemove { if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerRemove); ok { return x.PartyMatchmakerRemove } return nil } func (x *Envelope) GetPartyMatchmakerTicket() *PartyMatchmakerTicket { if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerTicket); ok { return x.PartyMatchmakerTicket } return nil } func (x *Envelope) GetPartyData() *PartyData { if x, ok := x.GetMessage().(*Envelope_PartyData); ok { return x.PartyData } return nil } func (x *Envelope) GetPartyDataSend() *PartyDataSend { if x, ok := x.GetMessage().(*Envelope_PartyDataSend); ok { return x.PartyDataSend } return nil } func (x *Envelope) GetPartyPresenceEvent() *PartyPresenceEvent { if x, ok := x.GetMessage().(*Envelope_PartyPresenceEvent); ok { return x.PartyPresenceEvent } return nil } type isEnvelope_Message interface { isEnvelope_Message() } type Envelope_Channel struct { // A response from a channel join operation. Channel *Channel `protobuf:"bytes,2,opt,name=channel,proto3,oneof"` } type Envelope_ChannelJoin struct { // Join a realtime chat channel. ChannelJoin *ChannelJoin `protobuf:"bytes,3,opt,name=channel_join,json=channelJoin,proto3,oneof"` } type Envelope_ChannelLeave struct { // Leave a realtime chat channel. ChannelLeave *ChannelLeave `protobuf:"bytes,4,opt,name=channel_leave,json=channelLeave,proto3,oneof"` } type Envelope_ChannelMessage struct { // An incoming message on a realtime chat channel. ChannelMessage *api.ChannelMessage `protobuf:"bytes,5,opt,name=channel_message,json=channelMessage,proto3,oneof"` } type Envelope_ChannelMessageAck struct { // An acknowledgement received in response to sending a message on a chat channel. ChannelMessageAck *ChannelMessageAck `protobuf:"bytes,6,opt,name=channel_message_ack,json=channelMessageAck,proto3,oneof"` } type Envelope_ChannelMessageSend struct { // Send a message to a realtime chat channel. ChannelMessageSend *ChannelMessageSend `protobuf:"bytes,7,opt,name=channel_message_send,json=channelMessageSend,proto3,oneof"` } type Envelope_ChannelMessageUpdate struct { // Update a message previously sent to a realtime chat channel. ChannelMessageUpdate *ChannelMessageUpdate `protobuf:"bytes,8,opt,name=channel_message_update,json=channelMessageUpdate,proto3,oneof"` } type Envelope_ChannelMessageRemove struct { // Remove a message previously sent to a realtime chat channel. ChannelMessageRemove *ChannelMessageRemove `protobuf:"bytes,9,opt,name=channel_message_remove,json=channelMessageRemove,proto3,oneof"` } type Envelope_ChannelPresenceEvent struct { // Presence update for a particular realtime chat channel. ChannelPresenceEvent *ChannelPresenceEvent `protobuf:"bytes,10,opt,name=channel_presence_event,json=channelPresenceEvent,proto3,oneof"` } type Envelope_Error struct { // Describes an error which occurred on the server. Error *Error `protobuf:"bytes,11,opt,name=error,proto3,oneof"` } type Envelope_Match struct { // Incoming information about a realtime match. Match *Match `protobuf:"bytes,12,opt,name=match,proto3,oneof"` } type Envelope_MatchCreate struct { // A client to server request to create a realtime match. MatchCreate *MatchCreate `protobuf:"bytes,13,opt,name=match_create,json=matchCreate,proto3,oneof"` } type Envelope_MatchData struct { // Incoming realtime match data delivered from the server. MatchData *MatchData `protobuf:"bytes,14,opt,name=match_data,json=matchData,proto3,oneof"` } type Envelope_MatchDataSend struct { // A client to server request to send data to a realtime match. MatchDataSend *MatchDataSend `protobuf:"bytes,15,opt,name=match_data_send,json=matchDataSend,proto3,oneof"` } type Envelope_MatchJoin struct { // A client to server request to join a realtime match. MatchJoin *MatchJoin `protobuf:"bytes,16,opt,name=match_join,json=matchJoin,proto3,oneof"` } type Envelope_MatchLeave struct { // A client to server request to leave a realtime match. MatchLeave *MatchLeave `protobuf:"bytes,17,opt,name=match_leave,json=matchLeave,proto3,oneof"` } type Envelope_MatchPresenceEvent struct { // Presence update for a particular realtime match. MatchPresenceEvent *MatchPresenceEvent `protobuf:"bytes,18,opt,name=match_presence_event,json=matchPresenceEvent,proto3,oneof"` } type Envelope_MatchmakerAdd struct { // Submit a new matchmaking process request. MatchmakerAdd *MatchmakerAdd `protobuf:"bytes,19,opt,name=matchmaker_add,json=matchmakerAdd,proto3,oneof"` } type Envelope_MatchmakerMatched struct { // A successful matchmaking result. MatchmakerMatched *MatchmakerMatched `protobuf:"bytes,20,opt,name=matchmaker_matched,json=matchmakerMatched,proto3,oneof"` } type Envelope_MatchmakerRemove struct { // Cancel a matchmaking process using a ticket. MatchmakerRemove *MatchmakerRemove `protobuf:"bytes,21,opt,name=matchmaker_remove,json=matchmakerRemove,proto3,oneof"` } type Envelope_MatchmakerTicket struct { // A response from starting a new matchmaking process. MatchmakerTicket *MatchmakerTicket `protobuf:"bytes,22,opt,name=matchmaker_ticket,json=matchmakerTicket,proto3,oneof"` } type Envelope_Notifications struct { // Notifications send by the server. Notifications *Notifications `protobuf:"bytes,23,opt,name=notifications,proto3,oneof"` } type Envelope_Rpc struct { // RPC call or response. Rpc *api.Rpc `protobuf:"bytes,24,opt,name=rpc,proto3,oneof"` } type Envelope_Status struct { // An incoming status snapshot for some set of users. Status *Status `protobuf:"bytes,25,opt,name=status,proto3,oneof"` } type Envelope_StatusFollow struct { // Start following some set of users to receive their status updates. StatusFollow *StatusFollow `protobuf:"bytes,26,opt,name=status_follow,json=statusFollow,proto3,oneof"` } type Envelope_StatusPresenceEvent struct { // An incoming status update. StatusPresenceEvent *StatusPresenceEvent `protobuf:"bytes,27,opt,name=status_presence_event,json=statusPresenceEvent,proto3,oneof"` } type Envelope_StatusUnfollow struct { // Stop following some set of users to no longer receive their status updates. StatusUnfollow *StatusUnfollow `protobuf:"bytes,28,opt,name=status_unfollow,json=statusUnfollow,proto3,oneof"` } type Envelope_StatusUpdate struct { // Set the user's own status. StatusUpdate *StatusUpdate `protobuf:"bytes,29,opt,name=status_update,json=statusUpdate,proto3,oneof"` } type Envelope_StreamData struct { // A data message delivered over a stream. StreamData *StreamData `protobuf:"bytes,30,opt,name=stream_data,json=streamData,proto3,oneof"` } type Envelope_StreamPresenceEvent struct { // Presence update for a particular stream. StreamPresenceEvent *StreamPresenceEvent `protobuf:"bytes,31,opt,name=stream_presence_event,json=streamPresenceEvent,proto3,oneof"` } type Envelope_Ping struct { // Application-level heartbeat and connection check. Ping *Ping `protobuf:"bytes,32,opt,name=ping,proto3,oneof"` } type Envelope_Pong struct { // Application-level heartbeat and connection check response. Pong *Pong `protobuf:"bytes,33,opt,name=pong,proto3,oneof"` } type Envelope_Party struct { // Incoming information about a party. Party *Party `protobuf:"bytes,34,opt,name=party,proto3,oneof"` } type Envelope_PartyCreate struct { // Create a party. PartyCreate *PartyCreate `protobuf:"bytes,35,opt,name=party_create,json=partyCreate,proto3,oneof"` } type Envelope_PartyJoin struct { // Join a party, or request to join if the party is not open. PartyJoin *PartyJoin `protobuf:"bytes,36,opt,name=party_join,json=partyJoin,proto3,oneof"` } type Envelope_PartyLeave struct { // Leave a party. PartyLeave *PartyLeave `protobuf:"bytes,37,opt,name=party_leave,json=partyLeave,proto3,oneof"` } type Envelope_PartyPromote struct { // Promote a new party leader. PartyPromote *PartyPromote `protobuf:"bytes,38,opt,name=party_promote,json=partyPromote,proto3,oneof"` } type Envelope_PartyLeader struct { // Announcement of a new party leader. PartyLeader *PartyLeader `protobuf:"bytes,39,opt,name=party_leader,json=partyLeader,proto3,oneof"` } type Envelope_PartyAccept struct { // Accept a request to join. PartyAccept *PartyAccept `protobuf:"bytes,40,opt,name=party_accept,json=partyAccept,proto3,oneof"` } type Envelope_PartyRemove struct { // Kick a party member, or decline a request to join. PartyRemove *PartyRemove `protobuf:"bytes,41,opt,name=party_remove,json=partyRemove,proto3,oneof"` } type Envelope_PartyClose struct { // End a party, kicking all party members and closing it. PartyClose *PartyClose `protobuf:"bytes,42,opt,name=party_close,json=partyClose,proto3,oneof"` } type Envelope_PartyJoinRequestList struct { // Request a list of pending join requests for a party. PartyJoinRequestList *PartyJoinRequestList `protobuf:"bytes,43,opt,name=party_join_request_list,json=partyJoinRequestList,proto3,oneof"` } type Envelope_PartyJoinRequest struct { // Incoming notification for one or more new presences attempting to join the party. PartyJoinRequest *PartyJoinRequest `protobuf:"bytes,44,opt,name=party_join_request,json=partyJoinRequest,proto3,oneof"` } type Envelope_PartyMatchmakerAdd struct { // Begin matchmaking as a party. PartyMatchmakerAdd *PartyMatchmakerAdd `protobuf:"bytes,45,opt,name=party_matchmaker_add,json=partyMatchmakerAdd,proto3,oneof"` } type Envelope_PartyMatchmakerRemove struct { // Cancel a party matchmaking process using a ticket. PartyMatchmakerRemove *PartyMatchmakerRemove `protobuf:"bytes,46,opt,name=party_matchmaker_remove,json=partyMatchmakerRemove,proto3,oneof"` } type Envelope_PartyMatchmakerTicket struct { // A response from starting a new party matchmaking process. PartyMatchmakerTicket *PartyMatchmakerTicket `protobuf:"bytes,47,opt,name=party_matchmaker_ticket,json=partyMatchmakerTicket,proto3,oneof"` } type Envelope_PartyData struct { // Incoming party data delivered from the server. PartyData *PartyData `protobuf:"bytes,48,opt,name=party_data,json=partyData,proto3,oneof"` } type Envelope_PartyDataSend struct { // A client to server request to send data to a party. PartyDataSend *PartyDataSend `protobuf:"bytes,49,opt,name=party_data_send,json=partyDataSend,proto3,oneof"` } type Envelope_PartyPresenceEvent struct { // Presence update for a particular party. PartyPresenceEvent *PartyPresenceEvent `protobuf:"bytes,50,opt,name=party_presence_event,json=partyPresenceEvent,proto3,oneof"` } func (*Envelope_Channel) isEnvelope_Message() {} func (*Envelope_ChannelJoin) isEnvelope_Message() {} func (*Envelope_ChannelLeave) isEnvelope_Message() {} func (*Envelope_ChannelMessage) isEnvelope_Message() {} func (*Envelope_ChannelMessageAck) isEnvelope_Message() {} func (*Envelope_ChannelMessageSend) isEnvelope_Message() {} func (*Envelope_ChannelMessageUpdate) isEnvelope_Message() {} func (*Envelope_ChannelMessageRemove) isEnvelope_Message() {} func (*Envelope_ChannelPresenceEvent) isEnvelope_Message() {} func (*Envelope_Error) isEnvelope_Message() {} func (*Envelope_Match) isEnvelope_Message() {} func (*Envelope_MatchCreate) isEnvelope_Message() {} func (*Envelope_MatchData) isEnvelope_Message() {} func (*Envelope_MatchDataSend) isEnvelope_Message() {} func (*Envelope_MatchJoin) isEnvelope_Message() {} func (*Envelope_MatchLeave) isEnvelope_Message() {} func (*Envelope_MatchPresenceEvent) isEnvelope_Message() {} func (*Envelope_MatchmakerAdd) isEnvelope_Message() {} func (*Envelope_MatchmakerMatched) isEnvelope_Message() {} func (*Envelope_MatchmakerRemove) isEnvelope_Message() {} func (*Envelope_MatchmakerTicket) isEnvelope_Message() {} func (*Envelope_Notifications) isEnvelope_Message() {} func (*Envelope_Rpc) isEnvelope_Message() {} func (*Envelope_Status) isEnvelope_Message() {} func (*Envelope_StatusFollow) isEnvelope_Message() {} func (*Envelope_StatusPresenceEvent) isEnvelope_Message() {} func (*Envelope_StatusUnfollow) isEnvelope_Message() {} func (*Envelope_StatusUpdate) isEnvelope_Message() {} func (*Envelope_StreamData) isEnvelope_Message() {} func (*Envelope_StreamPresenceEvent) isEnvelope_Message() {} func (*Envelope_Ping) isEnvelope_Message() {} func (*Envelope_Pong) isEnvelope_Message() {} func (*Envelope_Party) isEnvelope_Message() {} func (*Envelope_PartyCreate) isEnvelope_Message() {} func (*Envelope_PartyJoin) isEnvelope_Message() {} func (*Envelope_PartyLeave) isEnvelope_Message() {} func (*Envelope_PartyPromote) isEnvelope_Message() {} func (*Envelope_PartyLeader) isEnvelope_Message() {} func (*Envelope_PartyAccept) isEnvelope_Message() {} func (*Envelope_PartyRemove) isEnvelope_Message() {} func (*Envelope_PartyClose) isEnvelope_Message() {} func (*Envelope_PartyJoinRequestList) isEnvelope_Message() {} func (*Envelope_PartyJoinRequest) isEnvelope_Message() {} func (*Envelope_PartyMatchmakerAdd) isEnvelope_Message() {} func (*Envelope_PartyMatchmakerRemove) isEnvelope_Message() {} func (*Envelope_PartyMatchmakerTicket) isEnvelope_Message() {} func (*Envelope_PartyData) isEnvelope_Message() {} func (*Envelope_PartyDataSend) isEnvelope_Message() {} func (*Envelope_PartyPresenceEvent) isEnvelope_Message() {} // A realtime chat channel. type Channel struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The ID of the channel. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The users currently in the channel. Presences []*UserPresence `protobuf:"bytes,2,rep,name=presences,proto3" json:"presences,omitempty"` // A reference to the current user's presence in the channel. Self *UserPresence `protobuf:"bytes,3,opt,name=self,proto3" json:"self,omitempty"` // The name of the chat room, or an empty string if this message was not sent through a chat room. RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // The ID of the group, or an empty string if this message was not sent through a group channel. GroupId string `protobuf:"bytes,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. UserIdOne string `protobuf:"bytes,6,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. UserIdTwo string `protobuf:"bytes,7,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` } func (x *Channel) Reset() { *x = Channel{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Channel) String() string { return protoimpl.X.MessageStringOf(x) } func (*Channel) ProtoMessage() {} func (x *Channel) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[1] 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 Channel.ProtoReflect.Descriptor instead. func (*Channel) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{1} } func (x *Channel) GetId() string { if x != nil { return x.Id } return "" } func (x *Channel) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } func (x *Channel) GetSelf() *UserPresence { if x != nil { return x.Self } return nil } func (x *Channel) GetRoomName() string { if x != nil { return x.RoomName } return "" } func (x *Channel) GetGroupId() string { if x != nil { return x.GroupId } return "" } func (x *Channel) GetUserIdOne() string { if x != nil { return x.UserIdOne } return "" } func (x *Channel) GetUserIdTwo() string { if x != nil { return x.UserIdTwo } return "" } // Join operation for a realtime chat channel. type ChannelJoin struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The user ID to DM with, group ID to chat with, or room channel name to join. Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` // The type of the chat channel. Type int32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` // one of "ChannelId.Type". // Whether messages sent on this channel should be persistent. Persistence *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=persistence,proto3" json:"persistence,omitempty"` // Whether the user should appear in the channel's presence list and events. Hidden *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=hidden,proto3" json:"hidden,omitempty"` } func (x *ChannelJoin) Reset() { *x = ChannelJoin{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelJoin) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelJoin) ProtoMessage() {} func (x *ChannelJoin) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[2] 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 ChannelJoin.ProtoReflect.Descriptor instead. func (*ChannelJoin) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{2} } func (x *ChannelJoin) GetTarget() string { if x != nil { return x.Target } return "" } func (x *ChannelJoin) GetType() int32 { if x != nil { return x.Type } return 0 } func (x *ChannelJoin) GetPersistence() *wrapperspb.BoolValue { if x != nil { return x.Persistence } return nil } func (x *ChannelJoin) GetHidden() *wrapperspb.BoolValue { if x != nil { return x.Hidden } return nil } // Leave a realtime channel. type ChannelLeave struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The ID of the channel to leave. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` } func (x *ChannelLeave) Reset() { *x = ChannelLeave{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelLeave) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelLeave) ProtoMessage() {} func (x *ChannelLeave) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[3] 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 ChannelLeave.ProtoReflect.Descriptor instead. func (*ChannelLeave) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{3} } func (x *ChannelLeave) GetChannelId() string { if x != nil { return x.ChannelId } return "" } // A receipt reply from a channel message send operation. type ChannelMessageAck struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The channel the message was sent to. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // The unique ID assigned to the message. MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` // The code representing a message type or category. Code *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` // Username of the message sender. Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. UpdateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // True if the message was persisted to the channel's history, false otherwise. Persistent *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=persistent,proto3" json:"persistent,omitempty"` // The name of the chat room, or an empty string if this message was not sent through a chat room. RoomName string `protobuf:"bytes,8,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // The ID of the group, or an empty string if this message was not sent through a group channel. GroupId string `protobuf:"bytes,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. UserIdOne string `protobuf:"bytes,10,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. UserIdTwo string `protobuf:"bytes,11,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` } func (x *ChannelMessageAck) Reset() { *x = ChannelMessageAck{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelMessageAck) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelMessageAck) ProtoMessage() {} func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[4] 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 ChannelMessageAck.ProtoReflect.Descriptor instead. func (*ChannelMessageAck) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{4} } func (x *ChannelMessageAck) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *ChannelMessageAck) GetMessageId() string { if x != nil { return x.MessageId } return "" } func (x *ChannelMessageAck) GetCode() *wrapperspb.Int32Value { if x != nil { return x.Code } return nil } func (x *ChannelMessageAck) GetUsername() string { if x != nil { return x.Username } return "" } func (x *ChannelMessageAck) GetCreateTime() *timestamppb.Timestamp { if x != nil { return x.CreateTime } return nil } func (x *ChannelMessageAck) GetUpdateTime() *timestamppb.Timestamp { if x != nil { return x.UpdateTime } return nil } func (x *ChannelMessageAck) GetPersistent() *wrapperspb.BoolValue { if x != nil { return x.Persistent } return nil } func (x *ChannelMessageAck) GetRoomName() string { if x != nil { return x.RoomName } return "" } func (x *ChannelMessageAck) GetGroupId() string { if x != nil { return x.GroupId } return "" } func (x *ChannelMessageAck) GetUserIdOne() string { if x != nil { return x.UserIdOne } return "" } func (x *ChannelMessageAck) GetUserIdTwo() string { if x != nil { return x.UserIdTwo } return "" } // Send a message to a realtime channel. type ChannelMessageSend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The channel to sent to. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // Message content. Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` } func (x *ChannelMessageSend) Reset() { *x = ChannelMessageSend{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelMessageSend) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelMessageSend) ProtoMessage() {} func (x *ChannelMessageSend) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[5] 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 ChannelMessageSend.ProtoReflect.Descriptor instead. func (*ChannelMessageSend) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{5} } func (x *ChannelMessageSend) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *ChannelMessageSend) GetContent() string { if x != nil { return x.Content } return "" } // Update a message previously sent to a realtime channel. type ChannelMessageUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The channel the message was sent to. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // The ID assigned to the message to update. MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` // New message content. Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` } func (x *ChannelMessageUpdate) Reset() { *x = ChannelMessageUpdate{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelMessageUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelMessageUpdate) ProtoMessage() {} func (x *ChannelMessageUpdate) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[6] 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 ChannelMessageUpdate.ProtoReflect.Descriptor instead. func (*ChannelMessageUpdate) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{6} } func (x *ChannelMessageUpdate) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *ChannelMessageUpdate) GetMessageId() string { if x != nil { return x.MessageId } return "" } func (x *ChannelMessageUpdate) GetContent() string { if x != nil { return x.Content } return "" } // Remove a message previously sent to a realtime channel. type ChannelMessageRemove struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The channel the message was sent to. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // The ID assigned to the message to update. MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` } func (x *ChannelMessageRemove) Reset() { *x = ChannelMessageRemove{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelMessageRemove) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelMessageRemove) ProtoMessage() {} func (x *ChannelMessageRemove) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[7] 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 ChannelMessageRemove.ProtoReflect.Descriptor instead. func (*ChannelMessageRemove) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{7} } func (x *ChannelMessageRemove) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *ChannelMessageRemove) GetMessageId() string { if x != nil { return x.MessageId } return "" } // A set of joins and leaves on a particular channel. type ChannelPresenceEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The channel identifier this event is for. ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` // Presences joining the channel as part of this event, if any. Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` // Presences leaving the channel as part of this event, if any. Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` // The name of the chat room, or an empty string if this message was not sent through a chat room. RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // The ID of the group, or an empty string if this message was not sent through a group channel. GroupId string `protobuf:"bytes,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. UserIdOne string `protobuf:"bytes,6,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. UserIdTwo string `protobuf:"bytes,7,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` } func (x *ChannelPresenceEvent) Reset() { *x = ChannelPresenceEvent{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelPresenceEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelPresenceEvent) ProtoMessage() {} func (x *ChannelPresenceEvent) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[8] 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 ChannelPresenceEvent.ProtoReflect.Descriptor instead. func (*ChannelPresenceEvent) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{8} } func (x *ChannelPresenceEvent) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *ChannelPresenceEvent) GetJoins() []*UserPresence { if x != nil { return x.Joins } return nil } func (x *ChannelPresenceEvent) GetLeaves() []*UserPresence { if x != nil { return x.Leaves } return nil } func (x *ChannelPresenceEvent) GetRoomName() string { if x != nil { return x.RoomName } return "" } func (x *ChannelPresenceEvent) GetGroupId() string { if x != nil { return x.GroupId } return "" } func (x *ChannelPresenceEvent) GetUserIdOne() string { if x != nil { return x.UserIdOne } return "" } func (x *ChannelPresenceEvent) GetUserIdTwo() string { if x != nil { return x.UserIdTwo } return "" } // A logical error which may occur on the server. type Error struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The error code which should be one of "Error.Code" enums. Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // A message in English to help developers debug the response. Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // Additional error details which may be different for each response. Context map[string]string `protobuf:"bytes,3,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Error) Reset() { *x = Error{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Error) String() string { return protoimpl.X.MessageStringOf(x) } func (*Error) ProtoMessage() {} func (x *Error) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[9] 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 Error.ProtoReflect.Descriptor instead. func (*Error) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{9} } func (x *Error) GetCode() int32 { if x != nil { return x.Code } return 0 } func (x *Error) GetMessage() string { if x != nil { return x.Message } return "" } func (x *Error) GetContext() map[string]string { if x != nil { return x.Context } return nil } // A realtime match. type Match struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // True if it's an server-managed authoritative match, false otherwise. Authoritative bool `protobuf:"varint,2,opt,name=authoritative,proto3" json:"authoritative,omitempty"` // Match label, if any. Label *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` // The number of users currently in the match. Size int32 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` // The users currently in the match. Presences []*UserPresence `protobuf:"bytes,5,rep,name=presences,proto3" json:"presences,omitempty"` // A reference to the current user's presence in the match. Self *UserPresence `protobuf:"bytes,6,opt,name=self,proto3" json:"self,omitempty"` } func (x *Match) Reset() { *x = Match{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Match) String() string { return protoimpl.X.MessageStringOf(x) } func (*Match) ProtoMessage() {} func (x *Match) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Match.ProtoReflect.Descriptor instead. func (*Match) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{10} } func (x *Match) GetMatchId() string { if x != nil { return x.MatchId } return "" } func (x *Match) GetAuthoritative() bool { if x != nil { return x.Authoritative } return false } func (x *Match) GetLabel() *wrapperspb.StringValue { if x != nil { return x.Label } return nil } func (x *Match) GetSize() int32 { if x != nil { return x.Size } return 0 } func (x *Match) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } func (x *Match) GetSelf() *UserPresence { if x != nil { return x.Self } return nil } // Create a new realtime match. type MatchCreate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Optional name to use when creating the match. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (x *MatchCreate) Reset() { *x = MatchCreate{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchCreate) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchCreate) ProtoMessage() {} func (x *MatchCreate) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[11] 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 MatchCreate.ProtoReflect.Descriptor instead. func (*MatchCreate) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{11} } func (x *MatchCreate) GetName() string { if x != nil { return x.Name } return "" } // Realtime match data received from the server. type MatchData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // A reference to the user presence that sent this data, if any. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` // Op code value. OpCode int64 `protobuf:"varint,3,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // Data payload, if any. Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` // True if this data was delivered reliably, false otherwise. Reliable bool `protobuf:"varint,5,opt,name=reliable,proto3" json:"reliable,omitempty"` } func (x *MatchData) Reset() { *x = MatchData{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchData) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchData) ProtoMessage() {} func (x *MatchData) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[12] 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 MatchData.ProtoReflect.Descriptor instead. func (*MatchData) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{12} } func (x *MatchData) GetMatchId() string { if x != nil { return x.MatchId } return "" } func (x *MatchData) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } func (x *MatchData) GetOpCode() int64 { if x != nil { return x.OpCode } return 0 } func (x *MatchData) GetData() []byte { if x != nil { return x.Data } return nil } func (x *MatchData) GetReliable() bool { if x != nil { return x.Reliable } return false } // Send realtime match data to the server. type MatchDataSend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // Op code value. OpCode int64 `protobuf:"varint,2,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // Data payload, if any. Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // List of presences in the match to deliver to, if filtering is required. Otherwise deliver to everyone in the match. Presences []*UserPresence `protobuf:"bytes,4,rep,name=presences,proto3" json:"presences,omitempty"` // True if the data should be sent reliably, false otherwise. Reliable bool `protobuf:"varint,5,opt,name=reliable,proto3" json:"reliable,omitempty"` } func (x *MatchDataSend) Reset() { *x = MatchDataSend{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchDataSend) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchDataSend) ProtoMessage() {} func (x *MatchDataSend) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[13] 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 MatchDataSend.ProtoReflect.Descriptor instead. func (*MatchDataSend) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{13} } func (x *MatchDataSend) GetMatchId() string { if x != nil { return x.MatchId } return "" } func (x *MatchDataSend) GetOpCode() int64 { if x != nil { return x.OpCode } return 0 } func (x *MatchDataSend) GetData() []byte { if x != nil { return x.Data } return nil } func (x *MatchDataSend) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } func (x *MatchDataSend) GetReliable() bool { if x != nil { return x.Reliable } return false } // Join an existing realtime match. type MatchJoin struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Id: // // *MatchJoin_MatchId // *MatchJoin_Token Id isMatchJoin_Id `protobuf_oneof:"id"` // An optional set of key-value metadata pairs to be passed to the match handler, if any. Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *MatchJoin) Reset() { *x = MatchJoin{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchJoin) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchJoin) ProtoMessage() {} func (x *MatchJoin) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[14] 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 MatchJoin.ProtoReflect.Descriptor instead. func (*MatchJoin) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{14} } func (m *MatchJoin) GetId() isMatchJoin_Id { if m != nil { return m.Id } return nil } func (x *MatchJoin) GetMatchId() string { if x, ok := x.GetId().(*MatchJoin_MatchId); ok { return x.MatchId } return "" } func (x *MatchJoin) GetToken() string { if x, ok := x.GetId().(*MatchJoin_Token); ok { return x.Token } return "" } func (x *MatchJoin) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } type isMatchJoin_Id interface { isMatchJoin_Id() } type MatchJoin_MatchId struct { // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3,oneof"` } type MatchJoin_Token struct { // A matchmaking result token. Token string `protobuf:"bytes,2,opt,name=token,proto3,oneof"` } func (*MatchJoin_MatchId) isMatchJoin_Id() {} func (*MatchJoin_Token) isMatchJoin_Id() {} // Leave a realtime match. type MatchLeave struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` } func (x *MatchLeave) Reset() { *x = MatchLeave{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchLeave) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchLeave) ProtoMessage() {} func (x *MatchLeave) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[15] 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 MatchLeave.ProtoReflect.Descriptor instead. func (*MatchLeave) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{15} } func (x *MatchLeave) GetMatchId() string { if x != nil { return x.MatchId } return "" } // A set of joins and leaves on a particular realtime match. type MatchPresenceEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match unique ID. MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // User presences that have just joined the match. Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` // User presences that have just left the match. Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` } func (x *MatchPresenceEvent) Reset() { *x = MatchPresenceEvent{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchPresenceEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchPresenceEvent) ProtoMessage() {} func (x *MatchPresenceEvent) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[16] 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 MatchPresenceEvent.ProtoReflect.Descriptor instead. func (*MatchPresenceEvent) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{16} } func (x *MatchPresenceEvent) GetMatchId() string { if x != nil { return x.MatchId } return "" } func (x *MatchPresenceEvent) GetJoins() []*UserPresence { if x != nil { return x.Joins } return nil } func (x *MatchPresenceEvent) GetLeaves() []*UserPresence { if x != nil { return x.Leaves } return nil } // Start a new matchmaking process. type MatchmakerAdd struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Minimum total user count to match together. MinCount int32 `protobuf:"varint,1,opt,name=min_count,json=minCount,proto3" json:"min_count,omitempty"` // Maximum total user count to match together. MaxCount int32 `protobuf:"varint,2,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` // Filter query used to identify suitable users. Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` // String properties. StringProperties map[string]string `protobuf:"bytes,4,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Numeric properties. NumericProperties map[string]float64 `protobuf:"bytes,5,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` // Optional multiple of the count that must be satisfied. CountMultiple *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=count_multiple,json=countMultiple,proto3" json:"count_multiple,omitempty"` } func (x *MatchmakerAdd) Reset() { *x = MatchmakerAdd{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchmakerAdd) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchmakerAdd) ProtoMessage() {} func (x *MatchmakerAdd) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[17] 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 MatchmakerAdd.ProtoReflect.Descriptor instead. func (*MatchmakerAdd) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{17} } func (x *MatchmakerAdd) GetMinCount() int32 { if x != nil { return x.MinCount } return 0 } func (x *MatchmakerAdd) GetMaxCount() int32 { if x != nil { return x.MaxCount } return 0 } func (x *MatchmakerAdd) GetQuery() string { if x != nil { return x.Query } return "" } func (x *MatchmakerAdd) GetStringProperties() map[string]string { if x != nil { return x.StringProperties } return nil } func (x *MatchmakerAdd) GetNumericProperties() map[string]float64 { if x != nil { return x.NumericProperties } return nil } func (x *MatchmakerAdd) GetCountMultiple() *wrapperspb.Int32Value { if x != nil { return x.CountMultiple } return nil } // A successful matchmaking result. type MatchmakerMatched struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The matchmaking ticket that has completed. Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` // The match token or match ID to join. // // Types that are assignable to Id: // // *MatchmakerMatched_MatchId // *MatchmakerMatched_Token Id isMatchmakerMatched_Id `protobuf_oneof:"id"` // The users that have been matched together, and information about their matchmaking data. Users []*MatchmakerMatched_MatchmakerUser `protobuf:"bytes,4,rep,name=users,proto3" json:"users,omitempty"` // A reference to the current user and their properties. Self *MatchmakerMatched_MatchmakerUser `protobuf:"bytes,5,opt,name=self,proto3" json:"self,omitempty"` } func (x *MatchmakerMatched) Reset() { *x = MatchmakerMatched{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchmakerMatched) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchmakerMatched) ProtoMessage() {} func (x *MatchmakerMatched) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[18] 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 MatchmakerMatched.ProtoReflect.Descriptor instead. func (*MatchmakerMatched) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{18} } func (x *MatchmakerMatched) GetTicket() string { if x != nil { return x.Ticket } return "" } func (m *MatchmakerMatched) GetId() isMatchmakerMatched_Id { if m != nil { return m.Id } return nil } func (x *MatchmakerMatched) GetMatchId() string { if x, ok := x.GetId().(*MatchmakerMatched_MatchId); ok { return x.MatchId } return "" } func (x *MatchmakerMatched) GetToken() string { if x, ok := x.GetId().(*MatchmakerMatched_Token); ok { return x.Token } return "" } func (x *MatchmakerMatched) GetUsers() []*MatchmakerMatched_MatchmakerUser { if x != nil { return x.Users } return nil } func (x *MatchmakerMatched) GetSelf() *MatchmakerMatched_MatchmakerUser { if x != nil { return x.Self } return nil } type isMatchmakerMatched_Id interface { isMatchmakerMatched_Id() } type MatchmakerMatched_MatchId struct { // Match ID. MatchId string `protobuf:"bytes,2,opt,name=match_id,json=matchId,proto3,oneof"` } type MatchmakerMatched_Token struct { // Match join token. Token string `protobuf:"bytes,3,opt,name=token,proto3,oneof"` } func (*MatchmakerMatched_MatchId) isMatchmakerMatched_Id() {} func (*MatchmakerMatched_Token) isMatchmakerMatched_Id() {} // Cancel an existing ongoing matchmaking process. type MatchmakerRemove struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The ticket to cancel. Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` } func (x *MatchmakerRemove) Reset() { *x = MatchmakerRemove{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchmakerRemove) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchmakerRemove) ProtoMessage() {} func (x *MatchmakerRemove) ProtoReflect() protoreflect.Message { mi := &file_realtime_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 MatchmakerRemove.ProtoReflect.Descriptor instead. func (*MatchmakerRemove) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{19} } func (x *MatchmakerRemove) GetTicket() string { if x != nil { return x.Ticket } return "" } // A ticket representing a new matchmaking process. type MatchmakerTicket struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The ticket that can be used to cancel matchmaking. Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` } func (x *MatchmakerTicket) Reset() { *x = MatchmakerTicket{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchmakerTicket) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchmakerTicket) ProtoMessage() {} func (x *MatchmakerTicket) ProtoReflect() protoreflect.Message { mi := &file_realtime_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 MatchmakerTicket.ProtoReflect.Descriptor instead. func (*MatchmakerTicket) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{20} } func (x *MatchmakerTicket) GetTicket() string { if x != nil { return x.Ticket } return "" } // A collection of zero or more notifications. type Notifications struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Collection of notifications. Notifications []*api.Notification `protobuf:"bytes,1,rep,name=notifications,proto3" json:"notifications,omitempty"` } func (x *Notifications) Reset() { *x = Notifications{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Notifications) String() string { return protoimpl.X.MessageStringOf(x) } func (*Notifications) ProtoMessage() {} func (x *Notifications) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[21] 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 Notifications.ProtoReflect.Descriptor instead. func (*Notifications) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{21} } func (x *Notifications) GetNotifications() []*api.Notification { if x != nil { return x.Notifications } return nil } // Incoming information about a party. type Party struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Unique party identifier. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // Open flag. Open bool `protobuf:"varint,2,opt,name=open,proto3" json:"open,omitempty"` // Maximum number of party members. MaxSize int32 `protobuf:"varint,3,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // Self. Self *UserPresence `protobuf:"bytes,4,opt,name=self,proto3" json:"self,omitempty"` // Leader. Leader *UserPresence `protobuf:"bytes,5,opt,name=leader,proto3" json:"leader,omitempty"` // All current party members. Presences []*UserPresence `protobuf:"bytes,6,rep,name=presences,proto3" json:"presences,omitempty"` } func (x *Party) Reset() { *x = Party{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Party) String() string { return protoimpl.X.MessageStringOf(x) } func (*Party) ProtoMessage() {} func (x *Party) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[22] 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 Party.ProtoReflect.Descriptor instead. func (*Party) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{22} } func (x *Party) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *Party) GetOpen() bool { if x != nil { return x.Open } return false } func (x *Party) GetMaxSize() int32 { if x != nil { return x.MaxSize } return 0 } func (x *Party) GetSelf() *UserPresence { if x != nil { return x.Self } return nil } func (x *Party) GetLeader() *UserPresence { if x != nil { return x.Leader } return nil } func (x *Party) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } // Create a party. type PartyCreate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Whether or not the party will require join requests to be approved by the party leader. Open bool `protobuf:"varint,1,opt,name=open,proto3" json:"open,omitempty"` // Maximum number of party members. MaxSize int32 `protobuf:"varint,2,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` } func (x *PartyCreate) Reset() { *x = PartyCreate{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyCreate) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyCreate) ProtoMessage() {} func (x *PartyCreate) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[23] 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 PartyCreate.ProtoReflect.Descriptor instead. func (*PartyCreate) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{23} } func (x *PartyCreate) GetOpen() bool { if x != nil { return x.Open } return false } func (x *PartyCreate) GetMaxSize() int32 { if x != nil { return x.MaxSize } return 0 } // Join a party, or request to join if the party is not open. type PartyJoin struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to join. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` } func (x *PartyJoin) Reset() { *x = PartyJoin{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyJoin) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyJoin) ProtoMessage() {} func (x *PartyJoin) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[24] 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 PartyJoin.ProtoReflect.Descriptor instead. func (*PartyJoin) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{24} } func (x *PartyJoin) GetPartyId() string { if x != nil { return x.PartyId } return "" } // Leave a party. type PartyLeave struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to leave. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` } func (x *PartyLeave) Reset() { *x = PartyLeave{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyLeave) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyLeave) ProtoMessage() {} func (x *PartyLeave) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[25] 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 PartyLeave.ProtoReflect.Descriptor instead. func (*PartyLeave) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{25} } func (x *PartyLeave) GetPartyId() string { if x != nil { return x.PartyId } return "" } // Promote a new party leader. type PartyPromote struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to promote a new leader for. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The presence of an existing party member to promote as the new leader. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` } func (x *PartyPromote) Reset() { *x = PartyPromote{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyPromote) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyPromote) ProtoMessage() {} func (x *PartyPromote) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[26] 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 PartyPromote.ProtoReflect.Descriptor instead. func (*PartyPromote) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{26} } func (x *PartyPromote) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyPromote) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } // Announcement of a new party leader. type PartyLeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to announce the new leader for. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The presence of the new party leader. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` } func (x *PartyLeader) Reset() { *x = PartyLeader{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyLeader) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyLeader) ProtoMessage() {} func (x *PartyLeader) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[27] 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 PartyLeader.ProtoReflect.Descriptor instead. func (*PartyLeader) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{27} } func (x *PartyLeader) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyLeader) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } // Accept a request to join. type PartyAccept struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to accept a join request for. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The presence to accept as a party member. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` } func (x *PartyAccept) Reset() { *x = PartyAccept{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyAccept) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyAccept) ProtoMessage() {} func (x *PartyAccept) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[28] 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 PartyAccept.ProtoReflect.Descriptor instead. func (*PartyAccept) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{28} } func (x *PartyAccept) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyAccept) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } // Kick a party member, or decline a request to join. type PartyRemove struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to remove/reject from. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The presence to remove or reject. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` } func (x *PartyRemove) Reset() { *x = PartyRemove{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyRemove) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyRemove) ProtoMessage() {} func (x *PartyRemove) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[29] 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 PartyRemove.ProtoReflect.Descriptor instead. func (*PartyRemove) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{29} } func (x *PartyRemove) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyRemove) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } // End a party, kicking all party members and closing it. type PartyClose struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to close. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` } func (x *PartyClose) Reset() { *x = PartyClose{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyClose) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyClose) ProtoMessage() {} func (x *PartyClose) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[30] 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 PartyClose.ProtoReflect.Descriptor instead. func (*PartyClose) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{30} } func (x *PartyClose) GetPartyId() string { if x != nil { return x.PartyId } return "" } // Request a list of pending join requests for a party. type PartyJoinRequestList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to get a list of join requests for. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` } func (x *PartyJoinRequestList) Reset() { *x = PartyJoinRequestList{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyJoinRequestList) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyJoinRequestList) ProtoMessage() {} func (x *PartyJoinRequestList) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[31] 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 PartyJoinRequestList.ProtoReflect.Descriptor instead. func (*PartyJoinRequestList) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{31} } func (x *PartyJoinRequestList) GetPartyId() string { if x != nil { return x.PartyId } return "" } // Incoming notification for one or more new presences attempting to join the party. type PartyJoinRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID these presences are attempting to join. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // Presences attempting to join. Presences []*UserPresence `protobuf:"bytes,2,rep,name=presences,proto3" json:"presences,omitempty"` } func (x *PartyJoinRequest) Reset() { *x = PartyJoinRequest{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyJoinRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyJoinRequest) ProtoMessage() {} func (x *PartyJoinRequest) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[32] 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 PartyJoinRequest.ProtoReflect.Descriptor instead. func (*PartyJoinRequest) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{32} } func (x *PartyJoinRequest) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyJoinRequest) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } // Begin matchmaking as a party. type PartyMatchmakerAdd struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // Minimum total user count to match together. MinCount int32 `protobuf:"varint,2,opt,name=min_count,json=minCount,proto3" json:"min_count,omitempty"` // Maximum total user count to match together. MaxCount int32 `protobuf:"varint,3,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` // Filter query used to identify suitable users. Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` // String properties. StringProperties map[string]string `protobuf:"bytes,5,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Numeric properties. NumericProperties map[string]float64 `protobuf:"bytes,6,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` // Optional multiple of the count that must be satisfied. CountMultiple *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=count_multiple,json=countMultiple,proto3" json:"count_multiple,omitempty"` } func (x *PartyMatchmakerAdd) Reset() { *x = PartyMatchmakerAdd{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyMatchmakerAdd) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyMatchmakerAdd) ProtoMessage() {} func (x *PartyMatchmakerAdd) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[33] 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 PartyMatchmakerAdd.ProtoReflect.Descriptor instead. func (*PartyMatchmakerAdd) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{33} } func (x *PartyMatchmakerAdd) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyMatchmakerAdd) GetMinCount() int32 { if x != nil { return x.MinCount } return 0 } func (x *PartyMatchmakerAdd) GetMaxCount() int32 { if x != nil { return x.MaxCount } return 0 } func (x *PartyMatchmakerAdd) GetQuery() string { if x != nil { return x.Query } return "" } func (x *PartyMatchmakerAdd) GetStringProperties() map[string]string { if x != nil { return x.StringProperties } return nil } func (x *PartyMatchmakerAdd) GetNumericProperties() map[string]float64 { if x != nil { return x.NumericProperties } return nil } func (x *PartyMatchmakerAdd) GetCountMultiple() *wrapperspb.Int32Value { if x != nil { return x.CountMultiple } return nil } // Cancel a party matchmaking process using a ticket. type PartyMatchmakerRemove struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The ticket to cancel. Ticket string `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` } func (x *PartyMatchmakerRemove) Reset() { *x = PartyMatchmakerRemove{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyMatchmakerRemove) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyMatchmakerRemove) ProtoMessage() {} func (x *PartyMatchmakerRemove) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[34] 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 PartyMatchmakerRemove.ProtoReflect.Descriptor instead. func (*PartyMatchmakerRemove) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{34} } func (x *PartyMatchmakerRemove) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyMatchmakerRemove) GetTicket() string { if x != nil { return x.Ticket } return "" } // A response from starting a new party matchmaking process. type PartyMatchmakerTicket struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // The ticket that can be used to cancel matchmaking. Ticket string `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` } func (x *PartyMatchmakerTicket) Reset() { *x = PartyMatchmakerTicket{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyMatchmakerTicket) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyMatchmakerTicket) ProtoMessage() {} func (x *PartyMatchmakerTicket) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[35] 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 PartyMatchmakerTicket.ProtoReflect.Descriptor instead. func (*PartyMatchmakerTicket) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{35} } func (x *PartyMatchmakerTicket) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyMatchmakerTicket) GetTicket() string { if x != nil { return x.Ticket } return "" } // Incoming party data delivered from the server. type PartyData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The party ID. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // A reference to the user presence that sent this data, if any. Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` // Op code value. OpCode int64 `protobuf:"varint,3,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // Data payload, if any. Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` } func (x *PartyData) Reset() { *x = PartyData{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyData) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyData) ProtoMessage() {} func (x *PartyData) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[36] 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 PartyData.ProtoReflect.Descriptor instead. func (*PartyData) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{36} } func (x *PartyData) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyData) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } func (x *PartyData) GetOpCode() int64 { if x != nil { return x.OpCode } return 0 } func (x *PartyData) GetData() []byte { if x != nil { return x.Data } return nil } // Send data to a party. type PartyDataSend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Party ID to send to. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // Op code value. OpCode int64 `protobuf:"varint,2,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` // Data payload, if any. Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` } func (x *PartyDataSend) Reset() { *x = PartyDataSend{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyDataSend) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyDataSend) ProtoMessage() {} func (x *PartyDataSend) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[37] 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 PartyDataSend.ProtoReflect.Descriptor instead. func (*PartyDataSend) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{37} } func (x *PartyDataSend) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyDataSend) GetOpCode() int64 { if x != nil { return x.OpCode } return 0 } func (x *PartyDataSend) GetData() []byte { if x != nil { return x.Data } return nil } // Presence update for a particular party. type PartyPresenceEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The party ID. PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // User presences that have just joined the party. Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` // User presences that have just left the party. Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` } func (x *PartyPresenceEvent) Reset() { *x = PartyPresenceEvent{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PartyPresenceEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*PartyPresenceEvent) ProtoMessage() {} func (x *PartyPresenceEvent) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[38] 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 PartyPresenceEvent.ProtoReflect.Descriptor instead. func (*PartyPresenceEvent) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{38} } func (x *PartyPresenceEvent) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *PartyPresenceEvent) GetJoins() []*UserPresence { if x != nil { return x.Joins } return nil } func (x *PartyPresenceEvent) GetLeaves() []*UserPresence { if x != nil { return x.Leaves } return nil } // Application-level heartbeat and connection check. type Ping struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *Ping) Reset() { *x = Ping{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Ping) String() string { return protoimpl.X.MessageStringOf(x) } func (*Ping) ProtoMessage() {} func (x *Ping) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[39] 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 Ping.ProtoReflect.Descriptor instead. func (*Ping) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{39} } // Application-level heartbeat and connection check response. type Pong struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *Pong) Reset() { *x = Pong{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Pong) String() string { return protoimpl.X.MessageStringOf(x) } func (*Pong) ProtoMessage() {} func (x *Pong) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[40] 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 Pong.ProtoReflect.Descriptor instead. func (*Pong) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{40} } // A snapshot of statuses for some set of users. type Status struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // User statuses. Presences []*UserPresence `protobuf:"bytes,1,rep,name=presences,proto3" json:"presences,omitempty"` } func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Status) String() string { return protoimpl.X.MessageStringOf(x) } func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[41] 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 Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{41} } func (x *Status) GetPresences() []*UserPresence { if x != nil { return x.Presences } return nil } // Start receiving status updates for some set of users. type StatusFollow struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // User IDs to follow. UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // Usernames to follow. Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` } func (x *StatusFollow) Reset() { *x = StatusFollow{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StatusFollow) String() string { return protoimpl.X.MessageStringOf(x) } func (*StatusFollow) ProtoMessage() {} func (x *StatusFollow) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[42] 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 StatusFollow.ProtoReflect.Descriptor instead. func (*StatusFollow) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{42} } func (x *StatusFollow) GetUserIds() []string { if x != nil { return x.UserIds } return nil } func (x *StatusFollow) GetUsernames() []string { if x != nil { return x.Usernames } return nil } // A batch of status updates for a given user. type StatusPresenceEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // New statuses for the user. Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` // Previous statuses for the user. Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` } func (x *StatusPresenceEvent) Reset() { *x = StatusPresenceEvent{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StatusPresenceEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*StatusPresenceEvent) ProtoMessage() {} func (x *StatusPresenceEvent) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[43] 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 StatusPresenceEvent.ProtoReflect.Descriptor instead. func (*StatusPresenceEvent) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{43} } func (x *StatusPresenceEvent) GetJoins() []*UserPresence { if x != nil { return x.Joins } return nil } func (x *StatusPresenceEvent) GetLeaves() []*UserPresence { if x != nil { return x.Leaves } return nil } // Stop receiving status updates for some set of users. type StatusUnfollow struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Users to unfollow. UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` } func (x *StatusUnfollow) Reset() { *x = StatusUnfollow{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StatusUnfollow) String() string { return protoimpl.X.MessageStringOf(x) } func (*StatusUnfollow) ProtoMessage() {} func (x *StatusUnfollow) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[44] 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 StatusUnfollow.ProtoReflect.Descriptor instead. func (*StatusUnfollow) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{44} } func (x *StatusUnfollow) GetUserIds() []string { if x != nil { return x.UserIds } return nil } // Set the user's own status. type StatusUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Status string to set, if not present the user will appear offline. Status *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` } func (x *StatusUpdate) Reset() { *x = StatusUpdate{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StatusUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*StatusUpdate) ProtoMessage() {} func (x *StatusUpdate) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[45] 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 StatusUpdate.ProtoReflect.Descriptor instead. func (*StatusUpdate) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{45} } func (x *StatusUpdate) GetStatus() *wrapperspb.StringValue { if x != nil { return x.Status } return nil } // Represents identifying information for a stream. type Stream struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Mode identifies the type of stream. Mode int32 `protobuf:"varint,1,opt,name=mode,proto3" json:"mode,omitempty"` // Subject is the primary identifier, if any. Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` // Subcontext is a secondary identifier, if any. Subcontext string `protobuf:"bytes,3,opt,name=subcontext,proto3" json:"subcontext,omitempty"` // The label is an arbitrary identifying string, if the stream has one. Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` } func (x *Stream) Reset() { *x = Stream{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Stream) String() string { return protoimpl.X.MessageStringOf(x) } func (*Stream) ProtoMessage() {} func (x *Stream) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[46] 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 Stream.ProtoReflect.Descriptor instead. func (*Stream) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{46} } func (x *Stream) GetMode() int32 { if x != nil { return x.Mode } return 0 } func (x *Stream) GetSubject() string { if x != nil { return x.Subject } return "" } func (x *Stream) GetSubcontext() string { if x != nil { return x.Subcontext } return "" } func (x *Stream) GetLabel() string { if x != nil { return x.Label } return "" } // A data message delivered over a stream. type StreamData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The stream this data message relates to. Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` // The sender, if any. Sender *UserPresence `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` // Arbitrary contents of the data message. Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // True if this data was delivered reliably, false otherwise. Reliable bool `protobuf:"varint,4,opt,name=reliable,proto3" json:"reliable,omitempty"` } func (x *StreamData) Reset() { *x = StreamData{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StreamData) String() string { return protoimpl.X.MessageStringOf(x) } func (*StreamData) ProtoMessage() {} func (x *StreamData) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[47] 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 StreamData.ProtoReflect.Descriptor instead. func (*StreamData) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{47} } func (x *StreamData) GetStream() *Stream { if x != nil { return x.Stream } return nil } func (x *StreamData) GetSender() *UserPresence { if x != nil { return x.Sender } return nil } func (x *StreamData) GetData() string { if x != nil { return x.Data } return "" } func (x *StreamData) GetReliable() bool { if x != nil { return x.Reliable } return false } // A set of joins and leaves on a particular stream. type StreamPresenceEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The stream this event relates to. Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` // Presences joining the stream as part of this event, if any. Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` // Presences leaving the stream as part of this event, if any. Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` } func (x *StreamPresenceEvent) Reset() { *x = StreamPresenceEvent{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StreamPresenceEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*StreamPresenceEvent) ProtoMessage() {} func (x *StreamPresenceEvent) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[48] 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 StreamPresenceEvent.ProtoReflect.Descriptor instead. func (*StreamPresenceEvent) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{48} } func (x *StreamPresenceEvent) GetStream() *Stream { if x != nil { return x.Stream } return nil } func (x *StreamPresenceEvent) GetJoins() []*UserPresence { if x != nil { return x.Joins } return nil } func (x *StreamPresenceEvent) GetLeaves() []*UserPresence { if x != nil { return x.Leaves } return nil } // A user session associated to a stream, usually through a list operation or a join/leave event. type UserPresence struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The user this presence belongs to. UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // A unique session ID identifying the particular connection, because the user may have many. SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // The username for display purposes. Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` // Whether this presence generates persistent data/messages, if applicable for the stream type. Persistence bool `protobuf:"varint,4,opt,name=persistence,proto3" json:"persistence,omitempty"` // A user-set status message for this stream, if applicable. Status *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` } func (x *UserPresence) Reset() { *x = UserPresence{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserPresence) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserPresence) ProtoMessage() {} func (x *UserPresence) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[49] 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 UserPresence.ProtoReflect.Descriptor instead. func (*UserPresence) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{49} } func (x *UserPresence) GetUserId() string { if x != nil { return x.UserId } return "" } func (x *UserPresence) GetSessionId() string { if x != nil { return x.SessionId } return "" } func (x *UserPresence) GetUsername() string { if x != nil { return x.Username } return "" } func (x *UserPresence) GetPersistence() bool { if x != nil { return x.Persistence } return false } func (x *UserPresence) GetStatus() *wrapperspb.StringValue { if x != nil { return x.Status } return nil } type MatchmakerMatched_MatchmakerUser struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // User info. Presence *UserPresence `protobuf:"bytes,1,opt,name=presence,proto3" json:"presence,omitempty"` // Party identifier, if this user was matched as a party member. PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` // String properties. StringProperties map[string]string `protobuf:"bytes,5,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Numeric properties. NumericProperties map[string]float64 `protobuf:"bytes,6,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` } func (x *MatchmakerMatched_MatchmakerUser) Reset() { *x = MatchmakerMatched_MatchmakerUser{} if protoimpl.UnsafeEnabled { mi := &file_realtime_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MatchmakerMatched_MatchmakerUser) String() string { return protoimpl.X.MessageStringOf(x) } func (*MatchmakerMatched_MatchmakerUser) ProtoMessage() {} func (x *MatchmakerMatched_MatchmakerUser) ProtoReflect() protoreflect.Message { mi := &file_realtime_proto_msgTypes[54] 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 MatchmakerMatched_MatchmakerUser.ProtoReflect.Descriptor instead. func (*MatchmakerMatched_MatchmakerUser) Descriptor() ([]byte, []int) { return file_realtime_proto_rawDescGZIP(), []int{18, 0} } func (x *MatchmakerMatched_MatchmakerUser) GetPresence() *UserPresence { if x != nil { return x.Presence } return nil } func (x *MatchmakerMatched_MatchmakerUser) GetPartyId() string { if x != nil { return x.PartyId } return "" } func (x *MatchmakerMatched_MatchmakerUser) GetStringProperties() map[string]string { if x != nil { return x.StringProperties } return nil } func (x *MatchmakerMatched_MatchmakerUser) GetNumericProperties() map[string]float64 { if x != nil { return x.NumericProperties } return nil } var File_realtime_proto protoreflect.FileDescriptor var file_realtime_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf4, 0x1b, 0x0a, 0x08, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x3e, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x57, 0x0a, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x53, 0x0a, 0x12, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x12, 0x50, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x46, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x70, 0x63, 0x48, 0x00, 0x52, 0x03, 0x72, 0x70, 0x63, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x79, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x3e, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x17, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x60, 0x0a, 0x17, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x60, 0x0a, 0x17, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, 0xf2, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x45, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x03, 0x22, 0x2d, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, 0x4d, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x6e, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x99, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, 0xfc, 0x02, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x52, 0x45, 0x43, 0x4f, 0x47, 0x4e, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x22, 0x80, 0x02, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x22, 0x21, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x04, 0x0a, 0x02, 0x69, 0x64, 0x22, 0x27, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x12, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0xf7, 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd9, 0x05, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x1a, 0xe0, 0x03, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x74, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x77, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x04, 0x0a, 0x02, 0x69, 0x64, 0x22, 0x2a, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x2a, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf8, 0x01, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x74, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x26, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x27, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x27, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x10, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xa1, 0x04, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x66, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x4a, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x57, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9b, 0x01, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0x06, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x22, 0x06, 0x0a, 0x04, 0x50, 0x6f, 0x6e, 0x67, 0x22, 0x45, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6c, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x6c, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x74, 0x61, 0x70, 0x69, 0x42, 0x0e, 0x4e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x74, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0f, 0x4e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_realtime_proto_rawDescOnce sync.Once file_realtime_proto_rawDescData = file_realtime_proto_rawDesc ) func file_realtime_proto_rawDescGZIP() []byte { file_realtime_proto_rawDescOnce.Do(func() { file_realtime_proto_rawDescData = protoimpl.X.CompressGZIP(file_realtime_proto_rawDescData) }) return file_realtime_proto_rawDescData } var file_realtime_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_realtime_proto_msgTypes = make([]protoimpl.MessageInfo, 59) var file_realtime_proto_goTypes = []interface{}{ (ChannelJoin_Type)(0), // 0: nakama.realtime.ChannelJoin.Type (Error_Code)(0), // 1: nakama.realtime.Error.Code (*Envelope)(nil), // 2: nakama.realtime.Envelope (*Channel)(nil), // 3: nakama.realtime.Channel (*ChannelJoin)(nil), // 4: nakama.realtime.ChannelJoin (*ChannelLeave)(nil), // 5: nakama.realtime.ChannelLeave (*ChannelMessageAck)(nil), // 6: nakama.realtime.ChannelMessageAck (*ChannelMessageSend)(nil), // 7: nakama.realtime.ChannelMessageSend (*ChannelMessageUpdate)(nil), // 8: nakama.realtime.ChannelMessageUpdate (*ChannelMessageRemove)(nil), // 9: nakama.realtime.ChannelMessageRemove (*ChannelPresenceEvent)(nil), // 10: nakama.realtime.ChannelPresenceEvent (*Error)(nil), // 11: nakama.realtime.Error (*Match)(nil), // 12: nakama.realtime.Match (*MatchCreate)(nil), // 13: nakama.realtime.MatchCreate (*MatchData)(nil), // 14: nakama.realtime.MatchData (*MatchDataSend)(nil), // 15: nakama.realtime.MatchDataSend (*MatchJoin)(nil), // 16: nakama.realtime.MatchJoin (*MatchLeave)(nil), // 17: nakama.realtime.MatchLeave (*MatchPresenceEvent)(nil), // 18: nakama.realtime.MatchPresenceEvent (*MatchmakerAdd)(nil), // 19: nakama.realtime.MatchmakerAdd (*MatchmakerMatched)(nil), // 20: nakama.realtime.MatchmakerMatched (*MatchmakerRemove)(nil), // 21: nakama.realtime.MatchmakerRemove (*MatchmakerTicket)(nil), // 22: nakama.realtime.MatchmakerTicket (*Notifications)(nil), // 23: nakama.realtime.Notifications (*Party)(nil), // 24: nakama.realtime.Party (*PartyCreate)(nil), // 25: nakama.realtime.PartyCreate (*PartyJoin)(nil), // 26: nakama.realtime.PartyJoin (*PartyLeave)(nil), // 27: nakama.realtime.PartyLeave (*PartyPromote)(nil), // 28: nakama.realtime.PartyPromote (*PartyLeader)(nil), // 29: nakama.realtime.PartyLeader (*PartyAccept)(nil), // 30: nakama.realtime.PartyAccept (*PartyRemove)(nil), // 31: nakama.realtime.PartyRemove (*PartyClose)(nil), // 32: nakama.realtime.PartyClose (*PartyJoinRequestList)(nil), // 33: nakama.realtime.PartyJoinRequestList (*PartyJoinRequest)(nil), // 34: nakama.realtime.PartyJoinRequest (*PartyMatchmakerAdd)(nil), // 35: nakama.realtime.PartyMatchmakerAdd (*PartyMatchmakerRemove)(nil), // 36: nakama.realtime.PartyMatchmakerRemove (*PartyMatchmakerTicket)(nil), // 37: nakama.realtime.PartyMatchmakerTicket (*PartyData)(nil), // 38: nakama.realtime.PartyData (*PartyDataSend)(nil), // 39: nakama.realtime.PartyDataSend (*PartyPresenceEvent)(nil), // 40: nakama.realtime.PartyPresenceEvent (*Ping)(nil), // 41: nakama.realtime.Ping (*Pong)(nil), // 42: nakama.realtime.Pong (*Status)(nil), // 43: nakama.realtime.Status (*StatusFollow)(nil), // 44: nakama.realtime.StatusFollow (*StatusPresenceEvent)(nil), // 45: nakama.realtime.StatusPresenceEvent (*StatusUnfollow)(nil), // 46: nakama.realtime.StatusUnfollow (*StatusUpdate)(nil), // 47: nakama.realtime.StatusUpdate (*Stream)(nil), // 48: nakama.realtime.Stream (*StreamData)(nil), // 49: nakama.realtime.StreamData (*StreamPresenceEvent)(nil), // 50: nakama.realtime.StreamPresenceEvent (*UserPresence)(nil), // 51: nakama.realtime.UserPresence nil, // 52: nakama.realtime.Error.ContextEntry nil, // 53: nakama.realtime.MatchJoin.MetadataEntry nil, // 54: nakama.realtime.MatchmakerAdd.StringPropertiesEntry nil, // 55: nakama.realtime.MatchmakerAdd.NumericPropertiesEntry (*MatchmakerMatched_MatchmakerUser)(nil), // 56: nakama.realtime.MatchmakerMatched.MatchmakerUser nil, // 57: nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry nil, // 58: nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry nil, // 59: nakama.realtime.PartyMatchmakerAdd.StringPropertiesEntry nil, // 60: nakama.realtime.PartyMatchmakerAdd.NumericPropertiesEntry (*api.ChannelMessage)(nil), // 61: nakama.api.ChannelMessage (*api.Rpc)(nil), // 62: nakama.api.Rpc (*wrapperspb.BoolValue)(nil), // 63: google.protobuf.BoolValue (*wrapperspb.Int32Value)(nil), // 64: google.protobuf.Int32Value (*timestamppb.Timestamp)(nil), // 65: google.protobuf.Timestamp (*wrapperspb.StringValue)(nil), // 66: google.protobuf.StringValue (*api.Notification)(nil), // 67: nakama.api.Notification } var file_realtime_proto_depIdxs = []int32{ 3, // 0: nakama.realtime.Envelope.channel:type_name -> nakama.realtime.Channel 4, // 1: nakama.realtime.Envelope.channel_join:type_name -> nakama.realtime.ChannelJoin 5, // 2: nakama.realtime.Envelope.channel_leave:type_name -> nakama.realtime.ChannelLeave 61, // 3: nakama.realtime.Envelope.channel_message:type_name -> nakama.api.ChannelMessage 6, // 4: nakama.realtime.Envelope.channel_message_ack:type_name -> nakama.realtime.ChannelMessageAck 7, // 5: nakama.realtime.Envelope.channel_message_send:type_name -> nakama.realtime.ChannelMessageSend 8, // 6: nakama.realtime.Envelope.channel_message_update:type_name -> nakama.realtime.ChannelMessageUpdate 9, // 7: nakama.realtime.Envelope.channel_message_remove:type_name -> nakama.realtime.ChannelMessageRemove 10, // 8: nakama.realtime.Envelope.channel_presence_event:type_name -> nakama.realtime.ChannelPresenceEvent 11, // 9: nakama.realtime.Envelope.error:type_name -> nakama.realtime.Error 12, // 10: nakama.realtime.Envelope.match:type_name -> nakama.realtime.Match 13, // 11: nakama.realtime.Envelope.match_create:type_name -> nakama.realtime.MatchCreate 14, // 12: nakama.realtime.Envelope.match_data:type_name -> nakama.realtime.MatchData 15, // 13: nakama.realtime.Envelope.match_data_send:type_name -> nakama.realtime.MatchDataSend 16, // 14: nakama.realtime.Envelope.match_join:type_name -> nakama.realtime.MatchJoin 17, // 15: nakama.realtime.Envelope.match_leave:type_name -> nakama.realtime.MatchLeave 18, // 16: nakama.realtime.Envelope.match_presence_event:type_name -> nakama.realtime.MatchPresenceEvent 19, // 17: nakama.realtime.Envelope.matchmaker_add:type_name -> nakama.realtime.MatchmakerAdd 20, // 18: nakama.realtime.Envelope.matchmaker_matched:type_name -> nakama.realtime.MatchmakerMatched 21, // 19: nakama.realtime.Envelope.matchmaker_remove:type_name -> nakama.realtime.MatchmakerRemove 22, // 20: nakama.realtime.Envelope.matchmaker_ticket:type_name -> nakama.realtime.MatchmakerTicket 23, // 21: nakama.realtime.Envelope.notifications:type_name -> nakama.realtime.Notifications 62, // 22: nakama.realtime.Envelope.rpc:type_name -> nakama.api.Rpc 43, // 23: nakama.realtime.Envelope.status:type_name -> nakama.realtime.Status 44, // 24: nakama.realtime.Envelope.status_follow:type_name -> nakama.realtime.StatusFollow 45, // 25: nakama.realtime.Envelope.status_presence_event:type_name -> nakama.realtime.StatusPresenceEvent 46, // 26: nakama.realtime.Envelope.status_unfollow:type_name -> nakama.realtime.StatusUnfollow 47, // 27: nakama.realtime.Envelope.status_update:type_name -> nakama.realtime.StatusUpdate 49, // 28: nakama.realtime.Envelope.stream_data:type_name -> nakama.realtime.StreamData 50, // 29: nakama.realtime.Envelope.stream_presence_event:type_name -> nakama.realtime.StreamPresenceEvent 41, // 30: nakama.realtime.Envelope.ping:type_name -> nakama.realtime.Ping 42, // 31: nakama.realtime.Envelope.pong:type_name -> nakama.realtime.Pong 24, // 32: nakama.realtime.Envelope.party:type_name -> nakama.realtime.Party 25, // 33: nakama.realtime.Envelope.party_create:type_name -> nakama.realtime.PartyCreate 26, // 34: nakama.realtime.Envelope.party_join:type_name -> nakama.realtime.PartyJoin 27, // 35: nakama.realtime.Envelope.party_leave:type_name -> nakama.realtime.PartyLeave 28, // 36: nakama.realtime.Envelope.party_promote:type_name -> nakama.realtime.PartyPromote 29, // 37: nakama.realtime.Envelope.party_leader:type_name -> nakama.realtime.PartyLeader 30, // 38: nakama.realtime.Envelope.party_accept:type_name -> nakama.realtime.PartyAccept 31, // 39: nakama.realtime.Envelope.party_remove:type_name -> nakama.realtime.PartyRemove 32, // 40: nakama.realtime.Envelope.party_close:type_name -> nakama.realtime.PartyClose 33, // 41: nakama.realtime.Envelope.party_join_request_list:type_name -> nakama.realtime.PartyJoinRequestList 34, // 42: nakama.realtime.Envelope.party_join_request:type_name -> nakama.realtime.PartyJoinRequest 35, // 43: nakama.realtime.Envelope.party_matchmaker_add:type_name -> nakama.realtime.PartyMatchmakerAdd 36, // 44: nakama.realtime.Envelope.party_matchmaker_remove:type_name -> nakama.realtime.PartyMatchmakerRemove 37, // 45: nakama.realtime.Envelope.party_matchmaker_ticket:type_name -> nakama.realtime.PartyMatchmakerTicket 38, // 46: nakama.realtime.Envelope.party_data:type_name -> nakama.realtime.PartyData 39, // 47: nakama.realtime.Envelope.party_data_send:type_name -> nakama.realtime.PartyDataSend 40, // 48: nakama.realtime.Envelope.party_presence_event:type_name -> nakama.realtime.PartyPresenceEvent 51, // 49: nakama.realtime.Channel.presences:type_name -> nakama.realtime.UserPresence 51, // 50: nakama.realtime.Channel.self:type_name -> nakama.realtime.UserPresence 63, // 51: nakama.realtime.ChannelJoin.persistence:type_name -> google.protobuf.BoolValue 63, // 52: nakama.realtime.ChannelJoin.hidden:type_name -> google.protobuf.BoolValue 64, // 53: nakama.realtime.ChannelMessageAck.code:type_name -> google.protobuf.Int32Value 65, // 54: nakama.realtime.ChannelMessageAck.create_time:type_name -> google.protobuf.Timestamp 65, // 55: nakama.realtime.ChannelMessageAck.update_time:type_name -> google.protobuf.Timestamp 63, // 56: nakama.realtime.ChannelMessageAck.persistent:type_name -> google.protobuf.BoolValue 51, // 57: nakama.realtime.ChannelPresenceEvent.joins:type_name -> nakama.realtime.UserPresence 51, // 58: nakama.realtime.ChannelPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence 52, // 59: nakama.realtime.Error.context:type_name -> nakama.realtime.Error.ContextEntry 66, // 60: nakama.realtime.Match.label:type_name -> google.protobuf.StringValue 51, // 61: nakama.realtime.Match.presences:type_name -> nakama.realtime.UserPresence 51, // 62: nakama.realtime.Match.self:type_name -> nakama.realtime.UserPresence 51, // 63: nakama.realtime.MatchData.presence:type_name -> nakama.realtime.UserPresence 51, // 64: nakama.realtime.MatchDataSend.presences:type_name -> nakama.realtime.UserPresence 53, // 65: nakama.realtime.MatchJoin.metadata:type_name -> nakama.realtime.MatchJoin.MetadataEntry 51, // 66: nakama.realtime.MatchPresenceEvent.joins:type_name -> nakama.realtime.UserPresence 51, // 67: nakama.realtime.MatchPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence 54, // 68: nakama.realtime.MatchmakerAdd.string_properties:type_name -> nakama.realtime.MatchmakerAdd.StringPropertiesEntry 55, // 69: nakama.realtime.MatchmakerAdd.numeric_properties:type_name -> nakama.realtime.MatchmakerAdd.NumericPropertiesEntry 64, // 70: nakama.realtime.MatchmakerAdd.count_multiple:type_name -> google.protobuf.Int32Value 56, // 71: nakama.realtime.MatchmakerMatched.users:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser 56, // 72: nakama.realtime.MatchmakerMatched.self:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser 67, // 73: nakama.realtime.Notifications.notifications:type_name -> nakama.api.Notification 51, // 74: nakama.realtime.Party.self:type_name -> nakama.realtime.UserPresence 51, // 75: nakama.realtime.Party.leader:type_name -> nakama.realtime.UserPresence 51, // 76: nakama.realtime.Party.presences:type_name -> nakama.realtime.UserPresence 51, // 77: nakama.realtime.PartyPromote.presence:type_name -> nakama.realtime.UserPresence 51, // 78: nakama.realtime.PartyLeader.presence:type_name -> nakama.realtime.UserPresence 51, // 79: nakama.realtime.PartyAccept.presence:type_name -> nakama.realtime.UserPresence 51, // 80: nakama.realtime.PartyRemove.presence:type_name -> nakama.realtime.UserPresence 51, // 81: nakama.realtime.PartyJoinRequest.presences:type_name -> nakama.realtime.UserPresence 59, // 82: nakama.realtime.PartyMatchmakerAdd.string_properties:type_name -> nakama.realtime.PartyMatchmakerAdd.StringPropertiesEntry 60, // 83: nakama.realtime.PartyMatchmakerAdd.numeric_properties:type_name -> nakama.realtime.PartyMatchmakerAdd.NumericPropertiesEntry 64, // 84: nakama.realtime.PartyMatchmakerAdd.count_multiple:type_name -> google.protobuf.Int32Value 51, // 85: nakama.realtime.PartyData.presence:type_name -> nakama.realtime.UserPresence 51, // 86: nakama.realtime.PartyPresenceEvent.joins:type_name -> nakama.realtime.UserPresence 51, // 87: nakama.realtime.PartyPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence 51, // 88: nakama.realtime.Status.presences:type_name -> nakama.realtime.UserPresence 51, // 89: nakama.realtime.StatusPresenceEvent.joins:type_name -> nakama.realtime.UserPresence 51, // 90: nakama.realtime.StatusPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence 66, // 91: nakama.realtime.StatusUpdate.status:type_name -> google.protobuf.StringValue 48, // 92: nakama.realtime.StreamData.stream:type_name -> nakama.realtime.Stream 51, // 93: nakama.realtime.StreamData.sender:type_name -> nakama.realtime.UserPresence 48, // 94: nakama.realtime.StreamPresenceEvent.stream:type_name -> nakama.realtime.Stream 51, // 95: nakama.realtime.StreamPresenceEvent.joins:type_name -> nakama.realtime.UserPresence 51, // 96: nakama.realtime.StreamPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence 66, // 97: nakama.realtime.UserPresence.status:type_name -> google.protobuf.StringValue 51, // 98: nakama.realtime.MatchmakerMatched.MatchmakerUser.presence:type_name -> nakama.realtime.UserPresence 57, // 99: nakama.realtime.MatchmakerMatched.MatchmakerUser.string_properties:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry 58, // 100: nakama.realtime.MatchmakerMatched.MatchmakerUser.numeric_properties:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry 101, // [101:101] is the sub-list for method output_type 101, // [101:101] is the sub-list for method input_type 101, // [101:101] is the sub-list for extension type_name 101, // [101:101] is the sub-list for extension extendee 0, // [0:101] is the sub-list for field type_name } func init() { file_realtime_proto_init() } func file_realtime_proto_init() { if File_realtime_proto != nil { return } if !protoimpl.UnsafeEnabled { file_realtime_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Envelope); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Channel); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelJoin); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelLeave); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelMessageAck); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelMessageSend); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelMessageUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelMessageRemove); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelPresenceEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Error); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Match); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchCreate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchDataSend); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchJoin); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchLeave); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchPresenceEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchmakerAdd); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchmakerMatched); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchmakerRemove); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchmakerTicket); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Notifications); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Party); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyCreate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyJoin); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyLeave); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyPromote); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyLeader); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyAccept); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyRemove); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyClose); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyJoinRequestList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyJoinRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyMatchmakerAdd); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyMatchmakerRemove); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyMatchmakerTicket); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyDataSend); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PartyPresenceEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ping); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pong); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Status); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusFollow); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusPresenceEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusUnfollow); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Stream); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamPresenceEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserPresence); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_realtime_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchmakerMatched_MatchmakerUser); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_realtime_proto_msgTypes[0].OneofWrappers = []interface{}{ (*Envelope_Channel)(nil), (*Envelope_ChannelJoin)(nil), (*Envelope_ChannelLeave)(nil), (*Envelope_ChannelMessage)(nil), (*Envelope_ChannelMessageAck)(nil), (*Envelope_ChannelMessageSend)(nil), (*Envelope_ChannelMessageUpdate)(nil), (*Envelope_ChannelMessageRemove)(nil), (*Envelope_ChannelPresenceEvent)(nil), (*Envelope_Error)(nil), (*Envelope_Match)(nil), (*Envelope_MatchCreate)(nil), (*Envelope_MatchData)(nil), (*Envelope_MatchDataSend)(nil), (*Envelope_MatchJoin)(nil), (*Envelope_MatchLeave)(nil), (*Envelope_MatchPresenceEvent)(nil), (*Envelope_MatchmakerAdd)(nil), (*Envelope_MatchmakerMatched)(nil), (*Envelope_MatchmakerRemove)(nil), (*Envelope_MatchmakerTicket)(nil), (*Envelope_Notifications)(nil), (*Envelope_Rpc)(nil), (*Envelope_Status)(nil), (*Envelope_StatusFollow)(nil), (*Envelope_StatusPresenceEvent)(nil), (*Envelope_StatusUnfollow)(nil), (*Envelope_StatusUpdate)(nil), (*Envelope_StreamData)(nil), (*Envelope_StreamPresenceEvent)(nil), (*Envelope_Ping)(nil), (*Envelope_Pong)(nil), (*Envelope_Party)(nil), (*Envelope_PartyCreate)(nil), (*Envelope_PartyJoin)(nil), (*Envelope_PartyLeave)(nil), (*Envelope_PartyPromote)(nil), (*Envelope_PartyLeader)(nil), (*Envelope_PartyAccept)(nil), (*Envelope_PartyRemove)(nil), (*Envelope_PartyClose)(nil), (*Envelope_PartyJoinRequestList)(nil), (*Envelope_PartyJoinRequest)(nil), (*Envelope_PartyMatchmakerAdd)(nil), (*Envelope_PartyMatchmakerRemove)(nil), (*Envelope_PartyMatchmakerTicket)(nil), (*Envelope_PartyData)(nil), (*Envelope_PartyDataSend)(nil), (*Envelope_PartyPresenceEvent)(nil), } file_realtime_proto_msgTypes[14].OneofWrappers = []interface{}{ (*MatchJoin_MatchId)(nil), (*MatchJoin_Token)(nil), } file_realtime_proto_msgTypes[18].OneofWrappers = []interface{}{ (*MatchmakerMatched_MatchId)(nil), (*MatchmakerMatched_Token)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_realtime_proto_rawDesc, NumEnums: 2, NumMessages: 59, NumExtensions: 0, NumServices: 0, }, GoTypes: file_realtime_proto_goTypes, DependencyIndexes: file_realtime_proto_depIdxs, EnumInfos: file_realtime_proto_enumTypes, MessageInfos: file_realtime_proto_msgTypes, }.Build() File_realtime_proto = out.File file_realtime_proto_rawDesc = nil file_realtime_proto_goTypes = nil file_realtime_proto_depIdxs = nil }