// Extracted from: Spotify 1.1.61.583 (Windows) // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.12 // source: player.proto package proto import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" 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) ) type BitrateLevel int32 const ( BitrateLevel_unknown_bitrate_level BitrateLevel = 0 BitrateLevel_low BitrateLevel = 1 BitrateLevel_normal BitrateLevel = 2 BitrateLevel_high BitrateLevel = 3 BitrateLevel_very_high BitrateLevel = 4 BitrateLevel_hifi BitrateLevel = 5 ) // Enum value maps for BitrateLevel. var ( BitrateLevel_name = map[int32]string{ 0: "unknown_bitrate_level", 1: "low", 2: "normal", 3: "high", 4: "very_high", 5: "hifi", } BitrateLevel_value = map[string]int32{ "unknown_bitrate_level": 0, "low": 1, "normal": 2, "high": 3, "very_high": 4, "hifi": 5, } ) func (x BitrateLevel) Enum() *BitrateLevel { p := new(BitrateLevel) *p = x return p } func (x BitrateLevel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (BitrateLevel) Descriptor() protoreflect.EnumDescriptor { return file_player_proto_enumTypes[0].Descriptor() } func (BitrateLevel) Type() protoreflect.EnumType { return &file_player_proto_enumTypes[0] } func (x BitrateLevel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use BitrateLevel.Descriptor instead. func (BitrateLevel) EnumDescriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{0} } type BitrateStrategy int32 const ( BitrateStrategy_unknown_strategy BitrateStrategy = 0 BitrateStrategy_best_matching BitrateStrategy = 1 BitrateStrategy_backend_advised BitrateStrategy = 2 BitrateStrategy_offlined_file BitrateStrategy = 3 BitrateStrategy_cached_file BitrateStrategy = 4 BitrateStrategy_local_file BitrateStrategy = 5 ) // Enum value maps for BitrateStrategy. var ( BitrateStrategy_name = map[int32]string{ 0: "unknown_strategy", 1: "best_matching", 2: "backend_advised", 3: "offlined_file", 4: "cached_file", 5: "local_file", } BitrateStrategy_value = map[string]int32{ "unknown_strategy": 0, "best_matching": 1, "backend_advised": 2, "offlined_file": 3, "cached_file": 4, "local_file": 5, } ) func (x BitrateStrategy) Enum() *BitrateStrategy { p := new(BitrateStrategy) *p = x return p } func (x BitrateStrategy) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (BitrateStrategy) Descriptor() protoreflect.EnumDescriptor { return file_player_proto_enumTypes[1].Descriptor() } func (BitrateStrategy) Type() protoreflect.EnumType { return &file_player_proto_enumTypes[1] } func (x BitrateStrategy) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use BitrateStrategy.Descriptor instead. func (BitrateStrategy) EnumDescriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{1} } type HiFiStatus int32 const ( HiFiStatus_none HiFiStatus = 0 HiFiStatus_off HiFiStatus = 1 HiFiStatus_on HiFiStatus = 2 ) // Enum value maps for HiFiStatus. var ( HiFiStatus_name = map[int32]string{ 0: "none", 1: "off", 2: "on", } HiFiStatus_value = map[string]int32{ "none": 0, "off": 1, "on": 2, } ) func (x HiFiStatus) Enum() *HiFiStatus { p := new(HiFiStatus) *p = x return p } func (x HiFiStatus) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (HiFiStatus) Descriptor() protoreflect.EnumDescriptor { return file_player_proto_enumTypes[2].Descriptor() } func (HiFiStatus) Type() protoreflect.EnumType { return &file_player_proto_enumTypes[2] } func (x HiFiStatus) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use HiFiStatus.Descriptor instead. func (HiFiStatus) EnumDescriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{2} } type PlayerState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` ContextUri string `protobuf:"bytes,2,opt,name=context_uri,json=contextUri,proto3" json:"context_uri,omitempty"` ContextUrl string `protobuf:"bytes,3,opt,name=context_url,json=contextUrl,proto3" json:"context_url,omitempty"` ContextRestrictions *Restrictions `protobuf:"bytes,4,opt,name=context_restrictions,json=contextRestrictions,proto3" json:"context_restrictions,omitempty"` PlayOrigin *PlayOrigin `protobuf:"bytes,5,opt,name=play_origin,json=playOrigin,proto3" json:"play_origin,omitempty"` Index *ContextIndex `protobuf:"bytes,6,opt,name=index,proto3" json:"index,omitempty"` Track *ProvidedTrack `protobuf:"bytes,7,opt,name=track,proto3" json:"track,omitempty"` PlaybackId string `protobuf:"bytes,8,opt,name=playback_id,json=playbackId,proto3" json:"playback_id,omitempty"` PlaybackSpeed float64 `protobuf:"fixed64,9,opt,name=playback_speed,json=playbackSpeed,proto3" json:"playback_speed,omitempty"` PositionAsOfTimestamp int64 `protobuf:"varint,10,opt,name=position_as_of_timestamp,json=positionAsOfTimestamp,proto3" json:"position_as_of_timestamp,omitempty"` Duration int64 `protobuf:"varint,11,opt,name=duration,proto3" json:"duration,omitempty"` IsPlaying bool `protobuf:"varint,12,opt,name=is_playing,json=isPlaying,proto3" json:"is_playing,omitempty"` IsPaused bool `protobuf:"varint,13,opt,name=is_paused,json=isPaused,proto3" json:"is_paused,omitempty"` IsBuffering bool `protobuf:"varint,14,opt,name=is_buffering,json=isBuffering,proto3" json:"is_buffering,omitempty"` IsSystemInitiated bool `protobuf:"varint,15,opt,name=is_system_initiated,json=isSystemInitiated,proto3" json:"is_system_initiated,omitempty"` Options *ContextPlayerOptions `protobuf:"bytes,16,opt,name=options,proto3" json:"options,omitempty"` Restrictions *Restrictions `protobuf:"bytes,17,opt,name=restrictions,proto3" json:"restrictions,omitempty"` Suppressions *Suppressions `protobuf:"bytes,18,opt,name=suppressions,proto3" json:"suppressions,omitempty"` PrevTracks []*ProvidedTrack `protobuf:"bytes,19,rep,name=prev_tracks,json=prevTracks,proto3" json:"prev_tracks,omitempty"` NextTracks []*ProvidedTrack `protobuf:"bytes,20,rep,name=next_tracks,json=nextTracks,proto3" json:"next_tracks,omitempty"` ContextMetadata map[string]string `protobuf:"bytes,21,rep,name=context_metadata,json=contextMetadata,proto3" json:"context_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` PageMetadata map[string]string `protobuf:"bytes,22,rep,name=page_metadata,json=pageMetadata,proto3" json:"page_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` SessionId string `protobuf:"bytes,23,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` QueueRevision string `protobuf:"bytes,24,opt,name=queue_revision,json=queueRevision,proto3" json:"queue_revision,omitempty"` Position int64 `protobuf:"varint,25,opt,name=position,proto3" json:"position,omitempty"` EntityUri string `protobuf:"bytes,26,opt,name=entity_uri,json=entityUri,proto3" json:"entity_uri,omitempty"` Reverse []*ProvidedTrack `protobuf:"bytes,27,rep,name=reverse,proto3" json:"reverse,omitempty"` Future []*ProvidedTrack `protobuf:"bytes,28,rep,name=future,proto3" json:"future,omitempty"` AudioStream string `protobuf:"bytes,29,opt,name=audio_stream,json=audioStream,proto3" json:"audio_stream,omitempty"` // Deprecated: Do not use. IsOptional bool `protobuf:"varint,30,opt,name=is_optional,json=isOptional,proto3" json:"is_optional,omitempty"` // Deprecated: Do not use. Bitrate int64 `protobuf:"varint,31,opt,name=bitrate,proto3" json:"bitrate,omitempty"` PlaybackQuality *PlaybackQuality `protobuf:"bytes,32,opt,name=playback_quality,json=playbackQuality,proto3" json:"playback_quality,omitempty"` } func (x *PlayerState) Reset() { *x = PlayerState{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlayerState) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlayerState) ProtoMessage() {} func (x *PlayerState) ProtoReflect() protoreflect.Message { mi := &file_player_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 PlayerState.ProtoReflect.Descriptor instead. func (*PlayerState) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{0} } func (x *PlayerState) GetTimestamp() int64 { if x != nil { return x.Timestamp } return 0 } func (x *PlayerState) GetContextUri() string { if x != nil { return x.ContextUri } return "" } func (x *PlayerState) GetContextUrl() string { if x != nil { return x.ContextUrl } return "" } func (x *PlayerState) GetContextRestrictions() *Restrictions { if x != nil { return x.ContextRestrictions } return nil } func (x *PlayerState) GetPlayOrigin() *PlayOrigin { if x != nil { return x.PlayOrigin } return nil } func (x *PlayerState) GetIndex() *ContextIndex { if x != nil { return x.Index } return nil } func (x *PlayerState) GetTrack() *ProvidedTrack { if x != nil { return x.Track } return nil } func (x *PlayerState) GetPlaybackId() string { if x != nil { return x.PlaybackId } return "" } func (x *PlayerState) GetPlaybackSpeed() float64 { if x != nil { return x.PlaybackSpeed } return 0 } func (x *PlayerState) GetPositionAsOfTimestamp() int64 { if x != nil { return x.PositionAsOfTimestamp } return 0 } func (x *PlayerState) GetDuration() int64 { if x != nil { return x.Duration } return 0 } func (x *PlayerState) GetIsPlaying() bool { if x != nil { return x.IsPlaying } return false } func (x *PlayerState) GetIsPaused() bool { if x != nil { return x.IsPaused } return false } func (x *PlayerState) GetIsBuffering() bool { if x != nil { return x.IsBuffering } return false } func (x *PlayerState) GetIsSystemInitiated() bool { if x != nil { return x.IsSystemInitiated } return false } func (x *PlayerState) GetOptions() *ContextPlayerOptions { if x != nil { return x.Options } return nil } func (x *PlayerState) GetRestrictions() *Restrictions { if x != nil { return x.Restrictions } return nil } func (x *PlayerState) GetSuppressions() *Suppressions { if x != nil { return x.Suppressions } return nil } func (x *PlayerState) GetPrevTracks() []*ProvidedTrack { if x != nil { return x.PrevTracks } return nil } func (x *PlayerState) GetNextTracks() []*ProvidedTrack { if x != nil { return x.NextTracks } return nil } func (x *PlayerState) GetContextMetadata() map[string]string { if x != nil { return x.ContextMetadata } return nil } func (x *PlayerState) GetPageMetadata() map[string]string { if x != nil { return x.PageMetadata } return nil } func (x *PlayerState) GetSessionId() string { if x != nil { return x.SessionId } return "" } func (x *PlayerState) GetQueueRevision() string { if x != nil { return x.QueueRevision } return "" } func (x *PlayerState) GetPosition() int64 { if x != nil { return x.Position } return 0 } func (x *PlayerState) GetEntityUri() string { if x != nil { return x.EntityUri } return "" } func (x *PlayerState) GetReverse() []*ProvidedTrack { if x != nil { return x.Reverse } return nil } func (x *PlayerState) GetFuture() []*ProvidedTrack { if x != nil { return x.Future } return nil } func (x *PlayerState) GetAudioStream() string { if x != nil { return x.AudioStream } return "" } // Deprecated: Do not use. func (x *PlayerState) GetIsOptional() bool { if x != nil { return x.IsOptional } return false } // Deprecated: Do not use. func (x *PlayerState) GetBitrate() int64 { if x != nil { return x.Bitrate } return 0 } func (x *PlayerState) GetPlaybackQuality() *PlaybackQuality { if x != nil { return x.PlaybackQuality } return nil } type ProvidedTrack struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` 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"` Removed []string `protobuf:"bytes,4,rep,name=removed,proto3" json:"removed,omitempty"` Blocked []string `protobuf:"bytes,5,rep,name=blocked,proto3" json:"blocked,omitempty"` Provider string `protobuf:"bytes,6,opt,name=provider,proto3" json:"provider,omitempty"` Restrictions *Restrictions `protobuf:"bytes,7,opt,name=restrictions,proto3" json:"restrictions,omitempty"` AlbumUri string `protobuf:"bytes,8,opt,name=album_uri,json=albumUri,proto3" json:"album_uri,omitempty"` DisallowReasons []string `protobuf:"bytes,9,rep,name=disallow_reasons,json=disallowReasons,proto3" json:"disallow_reasons,omitempty"` ArtistUri string `protobuf:"bytes,10,opt,name=artist_uri,json=artistUri,proto3" json:"artist_uri,omitempty"` DisallowUndecided []string `protobuf:"bytes,11,rep,name=disallow_undecided,json=disallowUndecided,proto3" json:"disallow_undecided,omitempty"` } func (x *ProvidedTrack) Reset() { *x = ProvidedTrack{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProvidedTrack) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProvidedTrack) ProtoMessage() {} func (x *ProvidedTrack) ProtoReflect() protoreflect.Message { mi := &file_player_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 ProvidedTrack.ProtoReflect.Descriptor instead. func (*ProvidedTrack) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{1} } func (x *ProvidedTrack) GetUri() string { if x != nil { return x.Uri } return "" } func (x *ProvidedTrack) GetUid() string { if x != nil { return x.Uid } return "" } func (x *ProvidedTrack) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } func (x *ProvidedTrack) GetRemoved() []string { if x != nil { return x.Removed } return nil } func (x *ProvidedTrack) GetBlocked() []string { if x != nil { return x.Blocked } return nil } func (x *ProvidedTrack) GetProvider() string { if x != nil { return x.Provider } return "" } func (x *ProvidedTrack) GetRestrictions() *Restrictions { if x != nil { return x.Restrictions } return nil } func (x *ProvidedTrack) GetAlbumUri() string { if x != nil { return x.AlbumUri } return "" } func (x *ProvidedTrack) GetDisallowReasons() []string { if x != nil { return x.DisallowReasons } return nil } func (x *ProvidedTrack) GetArtistUri() string { if x != nil { return x.ArtistUri } return "" } func (x *ProvidedTrack) GetDisallowUndecided() []string { if x != nil { return x.DisallowUndecided } return nil } type ContextIndex struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Page uint32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` Track uint32 `protobuf:"varint,2,opt,name=track,proto3" json:"track,omitempty"` } func (x *ContextIndex) Reset() { *x = ContextIndex{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContextIndex) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContextIndex) ProtoMessage() {} func (x *ContextIndex) ProtoReflect() protoreflect.Message { mi := &file_player_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 ContextIndex.ProtoReflect.Descriptor instead. func (*ContextIndex) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{2} } func (x *ContextIndex) GetPage() uint32 { if x != nil { return x.Page } return 0 } func (x *ContextIndex) GetTrack() uint32 { if x != nil { return x.Track } return 0 } type Restrictions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DisallowPausingReasons []string `protobuf:"bytes,1,rep,name=disallow_pausing_reasons,json=disallowPausingReasons,proto3" json:"disallow_pausing_reasons,omitempty"` DisallowResumingReasons []string `protobuf:"bytes,2,rep,name=disallow_resuming_reasons,json=disallowResumingReasons,proto3" json:"disallow_resuming_reasons,omitempty"` DisallowSeekingReasons []string `protobuf:"bytes,3,rep,name=disallow_seeking_reasons,json=disallowSeekingReasons,proto3" json:"disallow_seeking_reasons,omitempty"` DisallowPeekingPrevReasons []string `protobuf:"bytes,4,rep,name=disallow_peeking_prev_reasons,json=disallowPeekingPrevReasons,proto3" json:"disallow_peeking_prev_reasons,omitempty"` DisallowPeekingNextReasons []string `protobuf:"bytes,5,rep,name=disallow_peeking_next_reasons,json=disallowPeekingNextReasons,proto3" json:"disallow_peeking_next_reasons,omitempty"` DisallowSkippingPrevReasons []string `protobuf:"bytes,6,rep,name=disallow_skipping_prev_reasons,json=disallowSkippingPrevReasons,proto3" json:"disallow_skipping_prev_reasons,omitempty"` DisallowSkippingNextReasons []string `protobuf:"bytes,7,rep,name=disallow_skipping_next_reasons,json=disallowSkippingNextReasons,proto3" json:"disallow_skipping_next_reasons,omitempty"` DisallowTogglingRepeatContextReasons []string `protobuf:"bytes,8,rep,name=disallow_toggling_repeat_context_reasons,json=disallowTogglingRepeatContextReasons,proto3" json:"disallow_toggling_repeat_context_reasons,omitempty"` DisallowTogglingRepeatTrackReasons []string `protobuf:"bytes,9,rep,name=disallow_toggling_repeat_track_reasons,json=disallowTogglingRepeatTrackReasons,proto3" json:"disallow_toggling_repeat_track_reasons,omitempty"` DisallowTogglingShuffleReasons []string `protobuf:"bytes,10,rep,name=disallow_toggling_shuffle_reasons,json=disallowTogglingShuffleReasons,proto3" json:"disallow_toggling_shuffle_reasons,omitempty"` DisallowSetQueueReasons []string `protobuf:"bytes,11,rep,name=disallow_set_queue_reasons,json=disallowSetQueueReasons,proto3" json:"disallow_set_queue_reasons,omitempty"` DisallowInterruptingPlaybackReasons []string `protobuf:"bytes,12,rep,name=disallow_interrupting_playback_reasons,json=disallowInterruptingPlaybackReasons,proto3" json:"disallow_interrupting_playback_reasons,omitempty"` DisallowTransferringPlaybackReasons []string `protobuf:"bytes,13,rep,name=disallow_transferring_playback_reasons,json=disallowTransferringPlaybackReasons,proto3" json:"disallow_transferring_playback_reasons,omitempty"` DisallowRemoteControlReasons []string `protobuf:"bytes,14,rep,name=disallow_remote_control_reasons,json=disallowRemoteControlReasons,proto3" json:"disallow_remote_control_reasons,omitempty"` DisallowInsertingIntoNextTracksReasons []string `protobuf:"bytes,15,rep,name=disallow_inserting_into_next_tracks_reasons,json=disallowInsertingIntoNextTracksReasons,proto3" json:"disallow_inserting_into_next_tracks_reasons,omitempty"` DisallowInsertingIntoContextTracksReasons []string `protobuf:"bytes,16,rep,name=disallow_inserting_into_context_tracks_reasons,json=disallowInsertingIntoContextTracksReasons,proto3" json:"disallow_inserting_into_context_tracks_reasons,omitempty"` DisallowReorderingInNextTracksReasons []string `protobuf:"bytes,17,rep,name=disallow_reordering_in_next_tracks_reasons,json=disallowReorderingInNextTracksReasons,proto3" json:"disallow_reordering_in_next_tracks_reasons,omitempty"` DisallowReorderingInContextTracksReasons []string `protobuf:"bytes,18,rep,name=disallow_reordering_in_context_tracks_reasons,json=disallowReorderingInContextTracksReasons,proto3" json:"disallow_reordering_in_context_tracks_reasons,omitempty"` DisallowRemovingFromNextTracksReasons []string `protobuf:"bytes,19,rep,name=disallow_removing_from_next_tracks_reasons,json=disallowRemovingFromNextTracksReasons,proto3" json:"disallow_removing_from_next_tracks_reasons,omitempty"` DisallowRemovingFromContextTracksReasons []string `protobuf:"bytes,20,rep,name=disallow_removing_from_context_tracks_reasons,json=disallowRemovingFromContextTracksReasons,proto3" json:"disallow_removing_from_context_tracks_reasons,omitempty"` DisallowUpdatingContextReasons []string `protobuf:"bytes,21,rep,name=disallow_updating_context_reasons,json=disallowUpdatingContextReasons,proto3" json:"disallow_updating_context_reasons,omitempty"` DisallowPlayingReasons []string `protobuf:"bytes,22,rep,name=disallow_playing_reasons,json=disallowPlayingReasons,proto3" json:"disallow_playing_reasons,omitempty"` DisallowStoppingReasons []string `protobuf:"bytes,23,rep,name=disallow_stopping_reasons,json=disallowStoppingReasons,proto3" json:"disallow_stopping_reasons,omitempty"` } func (x *Restrictions) Reset() { *x = Restrictions{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Restrictions) String() string { return protoimpl.X.MessageStringOf(x) } func (*Restrictions) ProtoMessage() {} func (x *Restrictions) ProtoReflect() protoreflect.Message { mi := &file_player_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 Restrictions.ProtoReflect.Descriptor instead. func (*Restrictions) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{3} } func (x *Restrictions) GetDisallowPausingReasons() []string { if x != nil { return x.DisallowPausingReasons } return nil } func (x *Restrictions) GetDisallowResumingReasons() []string { if x != nil { return x.DisallowResumingReasons } return nil } func (x *Restrictions) GetDisallowSeekingReasons() []string { if x != nil { return x.DisallowSeekingReasons } return nil } func (x *Restrictions) GetDisallowPeekingPrevReasons() []string { if x != nil { return x.DisallowPeekingPrevReasons } return nil } func (x *Restrictions) GetDisallowPeekingNextReasons() []string { if x != nil { return x.DisallowPeekingNextReasons } return nil } func (x *Restrictions) GetDisallowSkippingPrevReasons() []string { if x != nil { return x.DisallowSkippingPrevReasons } return nil } func (x *Restrictions) GetDisallowSkippingNextReasons() []string { if x != nil { return x.DisallowSkippingNextReasons } return nil } func (x *Restrictions) GetDisallowTogglingRepeatContextReasons() []string { if x != nil { return x.DisallowTogglingRepeatContextReasons } return nil } func (x *Restrictions) GetDisallowTogglingRepeatTrackReasons() []string { if x != nil { return x.DisallowTogglingRepeatTrackReasons } return nil } func (x *Restrictions) GetDisallowTogglingShuffleReasons() []string { if x != nil { return x.DisallowTogglingShuffleReasons } return nil } func (x *Restrictions) GetDisallowSetQueueReasons() []string { if x != nil { return x.DisallowSetQueueReasons } return nil } func (x *Restrictions) GetDisallowInterruptingPlaybackReasons() []string { if x != nil { return x.DisallowInterruptingPlaybackReasons } return nil } func (x *Restrictions) GetDisallowTransferringPlaybackReasons() []string { if x != nil { return x.DisallowTransferringPlaybackReasons } return nil } func (x *Restrictions) GetDisallowRemoteControlReasons() []string { if x != nil { return x.DisallowRemoteControlReasons } return nil } func (x *Restrictions) GetDisallowInsertingIntoNextTracksReasons() []string { if x != nil { return x.DisallowInsertingIntoNextTracksReasons } return nil } func (x *Restrictions) GetDisallowInsertingIntoContextTracksReasons() []string { if x != nil { return x.DisallowInsertingIntoContextTracksReasons } return nil } func (x *Restrictions) GetDisallowReorderingInNextTracksReasons() []string { if x != nil { return x.DisallowReorderingInNextTracksReasons } return nil } func (x *Restrictions) GetDisallowReorderingInContextTracksReasons() []string { if x != nil { return x.DisallowReorderingInContextTracksReasons } return nil } func (x *Restrictions) GetDisallowRemovingFromNextTracksReasons() []string { if x != nil { return x.DisallowRemovingFromNextTracksReasons } return nil } func (x *Restrictions) GetDisallowRemovingFromContextTracksReasons() []string { if x != nil { return x.DisallowRemovingFromContextTracksReasons } return nil } func (x *Restrictions) GetDisallowUpdatingContextReasons() []string { if x != nil { return x.DisallowUpdatingContextReasons } return nil } func (x *Restrictions) GetDisallowPlayingReasons() []string { if x != nil { return x.DisallowPlayingReasons } return nil } func (x *Restrictions) GetDisallowStoppingReasons() []string { if x != nil { return x.DisallowStoppingReasons } return nil } type PlayOrigin struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FeatureIdentifier string `protobuf:"bytes,1,opt,name=feature_identifier,json=featureIdentifier,proto3" json:"feature_identifier,omitempty"` FeatureVersion string `protobuf:"bytes,2,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version,omitempty"` ViewUri string `protobuf:"bytes,3,opt,name=view_uri,json=viewUri,proto3" json:"view_uri,omitempty"` ExternalReferrer string `protobuf:"bytes,4,opt,name=external_referrer,json=externalReferrer,proto3" json:"external_referrer,omitempty"` ReferrerIdentifier string `protobuf:"bytes,5,opt,name=referrer_identifier,json=referrerIdentifier,proto3" json:"referrer_identifier,omitempty"` DeviceIdentifier string `protobuf:"bytes,6,opt,name=device_identifier,json=deviceIdentifier,proto3" json:"device_identifier,omitempty"` FeatureClasses []string `protobuf:"bytes,7,rep,name=feature_classes,json=featureClasses,proto3" json:"feature_classes,omitempty"` } func (x *PlayOrigin) Reset() { *x = PlayOrigin{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlayOrigin) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlayOrigin) ProtoMessage() {} func (x *PlayOrigin) ProtoReflect() protoreflect.Message { mi := &file_player_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 PlayOrigin.ProtoReflect.Descriptor instead. func (*PlayOrigin) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{4} } func (x *PlayOrigin) GetFeatureIdentifier() string { if x != nil { return x.FeatureIdentifier } return "" } func (x *PlayOrigin) GetFeatureVersion() string { if x != nil { return x.FeatureVersion } return "" } func (x *PlayOrigin) GetViewUri() string { if x != nil { return x.ViewUri } return "" } func (x *PlayOrigin) GetExternalReferrer() string { if x != nil { return x.ExternalReferrer } return "" } func (x *PlayOrigin) GetReferrerIdentifier() string { if x != nil { return x.ReferrerIdentifier } return "" } func (x *PlayOrigin) GetDeviceIdentifier() string { if x != nil { return x.DeviceIdentifier } return "" } func (x *PlayOrigin) GetFeatureClasses() []string { if x != nil { return x.FeatureClasses } return nil } type ContextPlayerOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ShufflingContext bool `protobuf:"varint,1,opt,name=shuffling_context,json=shufflingContext,proto3" json:"shuffling_context,omitempty"` RepeatingContext bool `protobuf:"varint,2,opt,name=repeating_context,json=repeatingContext,proto3" json:"repeating_context,omitempty"` RepeatingTrack bool `protobuf:"varint,3,opt,name=repeating_track,json=repeatingTrack,proto3" json:"repeating_track,omitempty"` } func (x *ContextPlayerOptions) Reset() { *x = ContextPlayerOptions{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContextPlayerOptions) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContextPlayerOptions) ProtoMessage() {} func (x *ContextPlayerOptions) ProtoReflect() protoreflect.Message { mi := &file_player_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 ContextPlayerOptions.ProtoReflect.Descriptor instead. func (*ContextPlayerOptions) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{5} } func (x *ContextPlayerOptions) GetShufflingContext() bool { if x != nil { return x.ShufflingContext } return false } func (x *ContextPlayerOptions) GetRepeatingContext() bool { if x != nil { return x.RepeatingContext } return false } func (x *ContextPlayerOptions) GetRepeatingTrack() bool { if x != nil { return x.RepeatingTrack } return false } type Suppressions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Providers []string `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"` } func (x *Suppressions) Reset() { *x = Suppressions{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Suppressions) String() string { return protoimpl.X.MessageStringOf(x) } func (*Suppressions) ProtoMessage() {} func (x *Suppressions) ProtoReflect() protoreflect.Message { mi := &file_player_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 Suppressions.ProtoReflect.Descriptor instead. func (*Suppressions) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{6} } func (x *Suppressions) GetProviders() []string { if x != nil { return x.Providers } return nil } type InstrumentationParams struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields InteractionIds []string `protobuf:"bytes,6,rep,name=interaction_ids,json=interactionIds,proto3" json:"interaction_ids,omitempty"` PageInstanceIds []string `protobuf:"bytes,7,rep,name=page_instance_ids,json=pageInstanceIds,proto3" json:"page_instance_ids,omitempty"` } func (x *InstrumentationParams) Reset() { *x = InstrumentationParams{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *InstrumentationParams) String() string { return protoimpl.X.MessageStringOf(x) } func (*InstrumentationParams) ProtoMessage() {} func (x *InstrumentationParams) ProtoReflect() protoreflect.Message { mi := &file_player_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 InstrumentationParams.ProtoReflect.Descriptor instead. func (*InstrumentationParams) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{7} } func (x *InstrumentationParams) GetInteractionIds() []string { if x != nil { return x.InteractionIds } return nil } func (x *InstrumentationParams) GetPageInstanceIds() []string { if x != nil { return x.PageInstanceIds } return nil } type Playback struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` PositionAsOfTimestamp int32 `protobuf:"varint,2,opt,name=position_as_of_timestamp,json=positionAsOfTimestamp,proto3" json:"position_as_of_timestamp,omitempty"` PlaybackSpeed float64 `protobuf:"fixed64,3,opt,name=playback_speed,json=playbackSpeed,proto3" json:"playback_speed,omitempty"` IsPaused bool `protobuf:"varint,4,opt,name=is_paused,json=isPaused,proto3" json:"is_paused,omitempty"` CurrentTrack *ContextTrack `protobuf:"bytes,5,opt,name=current_track,json=currentTrack,proto3" json:"current_track,omitempty"` } func (x *Playback) Reset() { *x = Playback{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Playback) String() string { return protoimpl.X.MessageStringOf(x) } func (*Playback) ProtoMessage() {} func (x *Playback) ProtoReflect() protoreflect.Message { mi := &file_player_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 Playback.ProtoReflect.Descriptor instead. func (*Playback) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{8} } func (x *Playback) GetTimestamp() int64 { if x != nil { return x.Timestamp } return 0 } func (x *Playback) GetPositionAsOfTimestamp() int32 { if x != nil { return x.PositionAsOfTimestamp } return 0 } func (x *Playback) GetPlaybackSpeed() float64 { if x != nil { return x.PlaybackSpeed } return 0 } func (x *Playback) GetIsPaused() bool { if x != nil { return x.IsPaused } return false } func (x *Playback) GetCurrentTrack() *ContextTrack { if x != nil { return x.CurrentTrack } return nil } type Queue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Tracks []*ContextTrack `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"` IsPlayingQueue bool `protobuf:"varint,2,opt,name=is_playing_queue,json=isPlayingQueue,proto3" json:"is_playing_queue,omitempty"` } func (x *Queue) Reset() { *x = Queue{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Queue) String() string { return protoimpl.X.MessageStringOf(x) } func (*Queue) ProtoMessage() {} func (x *Queue) ProtoReflect() protoreflect.Message { mi := &file_player_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 Queue.ProtoReflect.Descriptor instead. func (*Queue) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{9} } func (x *Queue) GetTracks() []*ContextTrack { if x != nil { return x.Tracks } return nil } func (x *Queue) GetIsPlayingQueue() bool { if x != nil { return x.IsPlayingQueue } return false } type Session struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields PlayOrigin *PlayOrigin `protobuf:"bytes,1,opt,name=play_origin,json=playOrigin,proto3" json:"play_origin,omitempty"` Context *Context `protobuf:"bytes,2,opt,name=context,proto3" json:"context,omitempty"` CurrentUid string `protobuf:"bytes,3,opt,name=current_uid,json=currentUid,proto3" json:"current_uid,omitempty"` OptionOverrides *ContextPlayerOptionOverrides `protobuf:"bytes,4,opt,name=option_overrides,json=optionOverrides,proto3" json:"option_overrides,omitempty"` Suppressions *Suppressions `protobuf:"bytes,5,opt,name=suppressions,proto3" json:"suppressions,omitempty"` InstrumentationParams *InstrumentationParams `protobuf:"bytes,6,opt,name=instrumentation_params,json=instrumentationParams,proto3" json:"instrumentation_params,omitempty"` } func (x *Session) Reset() { *x = Session{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Session) String() string { return protoimpl.X.MessageStringOf(x) } func (*Session) ProtoMessage() {} func (x *Session) ProtoReflect() protoreflect.Message { mi := &file_player_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 Session.ProtoReflect.Descriptor instead. func (*Session) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{10} } func (x *Session) GetPlayOrigin() *PlayOrigin { if x != nil { return x.PlayOrigin } return nil } func (x *Session) GetContext() *Context { if x != nil { return x.Context } return nil } func (x *Session) GetCurrentUid() string { if x != nil { return x.CurrentUid } return "" } func (x *Session) GetOptionOverrides() *ContextPlayerOptionOverrides { if x != nil { return x.OptionOverrides } return nil } func (x *Session) GetSuppressions() *Suppressions { if x != nil { return x.Suppressions } return nil } func (x *Session) GetInstrumentationParams() *InstrumentationParams { if x != nil { return x.InstrumentationParams } return nil } type TransferState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Options *ContextPlayerOptions `protobuf:"bytes,1,opt,name=options,proto3" json:"options,omitempty"` Playback *Playback `protobuf:"bytes,2,opt,name=playback,proto3" json:"playback,omitempty"` CurrentSession *Session `protobuf:"bytes,3,opt,name=current_session,json=currentSession,proto3" json:"current_session,omitempty"` Queue *Queue `protobuf:"bytes,4,opt,name=queue,proto3" json:"queue,omitempty"` } func (x *TransferState) Reset() { *x = TransferState{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TransferState) String() string { return protoimpl.X.MessageStringOf(x) } func (*TransferState) ProtoMessage() {} func (x *TransferState) ProtoReflect() protoreflect.Message { mi := &file_player_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 TransferState.ProtoReflect.Descriptor instead. func (*TransferState) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{11} } func (x *TransferState) GetOptions() *ContextPlayerOptions { if x != nil { return x.Options } return nil } func (x *TransferState) GetPlayback() *Playback { if x != nil { return x.Playback } return nil } func (x *TransferState) GetCurrentSession() *Session { if x != nil { return x.CurrentSession } return nil } func (x *TransferState) GetQueue() *Queue { if x != nil { return x.Queue } return nil } type ContextTrack struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` Gid []byte `protobuf:"bytes,3,opt,name=gid,proto3" json:"gid,omitempty"` Metadata map[string]string `protobuf:"bytes,4,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 *ContextTrack) Reset() { *x = ContextTrack{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContextTrack) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContextTrack) ProtoMessage() {} func (x *ContextTrack) ProtoReflect() protoreflect.Message { mi := &file_player_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 ContextTrack.ProtoReflect.Descriptor instead. func (*ContextTrack) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{12} } func (x *ContextTrack) GetUri() string { if x != nil { return x.Uri } return "" } func (x *ContextTrack) GetUid() string { if x != nil { return x.Uid } return "" } func (x *ContextTrack) GetGid() []byte { if x != nil { return x.Gid } return nil } func (x *ContextTrack) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } type ContextPlayerOptionOverrides struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ShufflingContext bool `protobuf:"varint,1,opt,name=shuffling_context,json=shufflingContext,proto3" json:"shuffling_context,omitempty"` RepeatingContext bool `protobuf:"varint,2,opt,name=repeating_context,json=repeatingContext,proto3" json:"repeating_context,omitempty"` RepeatingTrack bool `protobuf:"varint,3,opt,name=repeating_track,json=repeatingTrack,proto3" json:"repeating_track,omitempty"` } func (x *ContextPlayerOptionOverrides) Reset() { *x = ContextPlayerOptionOverrides{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContextPlayerOptionOverrides) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContextPlayerOptionOverrides) ProtoMessage() {} func (x *ContextPlayerOptionOverrides) ProtoReflect() protoreflect.Message { mi := &file_player_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 ContextPlayerOptionOverrides.ProtoReflect.Descriptor instead. func (*ContextPlayerOptionOverrides) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{13} } func (x *ContextPlayerOptionOverrides) GetShufflingContext() bool { if x != nil { return x.ShufflingContext } return false } func (x *ContextPlayerOptionOverrides) GetRepeatingContext() bool { if x != nil { return x.RepeatingContext } return false } func (x *ContextPlayerOptionOverrides) GetRepeatingTrack() bool { if x != nil { return x.RepeatingTrack } return false } type Context struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` 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"` Restrictions *Restrictions `protobuf:"bytes,4,opt,name=restrictions,proto3" json:"restrictions,omitempty"` Pages []*ContextPage `protobuf:"bytes,5,rep,name=pages,proto3" json:"pages,omitempty"` Loading bool `protobuf:"varint,6,opt,name=loading,proto3" json:"loading,omitempty"` } func (x *Context) Reset() { *x = Context{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Context) String() string { return protoimpl.X.MessageStringOf(x) } func (*Context) ProtoMessage() {} func (x *Context) ProtoReflect() protoreflect.Message { mi := &file_player_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 Context.ProtoReflect.Descriptor instead. func (*Context) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{14} } func (x *Context) GetUri() string { if x != nil { return x.Uri } return "" } func (x *Context) GetUrl() string { if x != nil { return x.Url } return "" } func (x *Context) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } func (x *Context) GetRestrictions() *Restrictions { if x != nil { return x.Restrictions } return nil } func (x *Context) GetPages() []*ContextPage { if x != nil { return x.Pages } return nil } func (x *Context) GetLoading() bool { if x != nil { return x.Loading } return false } type ContextPage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields PageUrl string `protobuf:"bytes,1,opt,name=page_url,json=pageUrl,proto3" json:"page_url,omitempty"` NextPageUrl string `protobuf:"bytes,2,opt,name=next_page_url,json=nextPageUrl,proto3" json:"next_page_url,omitempty"` 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"` Tracks []*ContextTrack `protobuf:"bytes,4,rep,name=tracks,proto3" json:"tracks,omitempty"` Loading bool `protobuf:"varint,5,opt,name=loading,proto3" json:"loading,omitempty"` } func (x *ContextPage) Reset() { *x = ContextPage{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContextPage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContextPage) ProtoMessage() {} func (x *ContextPage) ProtoReflect() protoreflect.Message { mi := &file_player_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 ContextPage.ProtoReflect.Descriptor instead. func (*ContextPage) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{15} } func (x *ContextPage) GetPageUrl() string { if x != nil { return x.PageUrl } return "" } func (x *ContextPage) GetNextPageUrl() string { if x != nil { return x.NextPageUrl } return "" } func (x *ContextPage) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } func (x *ContextPage) GetTracks() []*ContextTrack { if x != nil { return x.Tracks } return nil } func (x *ContextPage) GetLoading() bool { if x != nil { return x.Loading } return false } type PlayerQueue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Revision string `protobuf:"bytes,1,opt,name=revision,proto3" json:"revision,omitempty"` NextTracks []*ProvidedTrack `protobuf:"bytes,2,rep,name=next_tracks,json=nextTracks,proto3" json:"next_tracks,omitempty"` PrevTracks []*ProvidedTrack `protobuf:"bytes,3,rep,name=prev_tracks,json=prevTracks,proto3" json:"prev_tracks,omitempty"` Track *ProvidedTrack `protobuf:"bytes,4,opt,name=track,proto3" json:"track,omitempty"` } func (x *PlayerQueue) Reset() { *x = PlayerQueue{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlayerQueue) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlayerQueue) ProtoMessage() {} func (x *PlayerQueue) ProtoReflect() protoreflect.Message { mi := &file_player_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 PlayerQueue.ProtoReflect.Descriptor instead. func (*PlayerQueue) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{16} } func (x *PlayerQueue) GetRevision() string { if x != nil { return x.Revision } return "" } func (x *PlayerQueue) GetNextTracks() []*ProvidedTrack { if x != nil { return x.NextTracks } return nil } func (x *PlayerQueue) GetPrevTracks() []*ProvidedTrack { if x != nil { return x.PrevTracks } return nil } func (x *PlayerQueue) GetTrack() *ProvidedTrack { if x != nil { return x.Track } return nil } type PlaybackQuality struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BitrateLevel BitrateLevel `protobuf:"varint,1,opt,name=bitrate_level,json=bitrateLevel,proto3,enum=spotify.connectstate.BitrateLevel" json:"bitrate_level,omitempty"` Strategy BitrateStrategy `protobuf:"varint,2,opt,name=strategy,proto3,enum=spotify.connectstate.BitrateStrategy" json:"strategy,omitempty"` TargetBitrateLevel BitrateLevel `protobuf:"varint,3,opt,name=target_bitrate_level,json=targetBitrateLevel,proto3,enum=spotify.connectstate.BitrateLevel" json:"target_bitrate_level,omitempty"` TargetBitrateAvailable bool `protobuf:"varint,4,opt,name=target_bitrate_available,json=targetBitrateAvailable,proto3" json:"target_bitrate_available,omitempty"` HifiStatus HiFiStatus `protobuf:"varint,5,opt,name=hifi_status,json=hifiStatus,proto3,enum=spotify.connectstate.HiFiStatus" json:"hifi_status,omitempty"` } func (x *PlaybackQuality) Reset() { *x = PlaybackQuality{} if protoimpl.UnsafeEnabled { mi := &file_player_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlaybackQuality) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlaybackQuality) ProtoMessage() {} func (x *PlaybackQuality) ProtoReflect() protoreflect.Message { mi := &file_player_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 PlaybackQuality.ProtoReflect.Descriptor instead. func (*PlaybackQuality) Descriptor() ([]byte, []int) { return file_player_proto_rawDescGZIP(), []int{17} } func (x *PlaybackQuality) GetBitrateLevel() BitrateLevel { if x != nil { return x.BitrateLevel } return BitrateLevel_unknown_bitrate_level } func (x *PlaybackQuality) GetStrategy() BitrateStrategy { if x != nil { return x.Strategy } return BitrateStrategy_unknown_strategy } func (x *PlaybackQuality) GetTargetBitrateLevel() BitrateLevel { if x != nil { return x.TargetBitrateLevel } return BitrateLevel_unknown_bitrate_level } func (x *PlaybackQuality) GetTargetBitrateAvailable() bool { if x != nil { return x.TargetBitrateAvailable } return false } func (x *PlaybackQuality) GetHifiStatus() HiFiStatus { if x != nil { return x.HifiStatus } return HiFiStatus_none } var File_player_proto protoreflect.FileDescriptor var file_player_proto_rawDesc = []byte{ 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x81, 0x0e, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x55, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x4f, 0x66, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x61, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x0d, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x70, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x55, 0x72, 0x69, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0x1a, 0x3f, 0x0a, 0x11, 0x50, 0x61, 0x67, 0x65, 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, 0x22, 0xed, 0x03, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x4d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x55, 0x72, 0x69, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x72, 0x69, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x6e, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x64, 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, 0x22, 0x38, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x22, 0xec, 0x0d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x76, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x65, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x76, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x28, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x24, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x26, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x22, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x26, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x23, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x26, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x23, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1c, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x5b, 0x0a, 0x2b, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x6f, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x26, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x6f, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x2e, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, 0x29, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x2a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x25, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x5f, 0x0a, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x09, 0x52, 0x28, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x2a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x25, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x5f, 0x0a, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x28, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x69, 0x65, 0x77, 0x55, 0x72, 0x69, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0x6c, 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0xee, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x4f, 0x66, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x22, 0x6d, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x75, 0x65, 0x22, 0xb1, 0x03, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x69, 0x64, 0x12, 0x5d, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x15, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 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, 0x22, 0xa1, 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x22, 0xce, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x47, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 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, 0x22, 0xac, 0x02, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 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, 0x22, 0xf0, 0x01, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x22, 0xf0, 0x02, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0d, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0c, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x54, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x38, 0x0a, 0x18, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x68, 0x69, 0x66, 0x69, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x48, 0x69, 0x46, 0x69, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x68, 0x69, 0x66, 0x69, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x61, 0x0a, 0x0c, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x15, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x68, 0x69, 0x66, 0x69, 0x10, 0x05, 0x2a, 0x83, 0x01, 0x0a, 0x0f, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x14, 0x0a, 0x10, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x62, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x65, 0x64, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x10, 0x05, 0x2a, 0x27, 0x0a, 0x0a, 0x48, 0x69, 0x46, 0x69, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x6f, 0x66, 0x66, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x6f, 0x6e, 0x10, 0x02, 0x42, 0x45, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x48, 0x02, 0x5a, 0x21, 0x74, 0x75, 0x78, 0x70, 0x61, 0x2e, 0x69, 0x6e, 0x2f, 0x61, 0x2f, 0x67, 0x6f, 0x70, 0x6c, 0x61, 0x79, 0x64, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x70, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_player_proto_rawDescOnce sync.Once file_player_proto_rawDescData = file_player_proto_rawDesc ) func file_player_proto_rawDescGZIP() []byte { file_player_proto_rawDescOnce.Do(func() { file_player_proto_rawDescData = protoimpl.X.CompressGZIP(file_player_proto_rawDescData) }) return file_player_proto_rawDescData } var file_player_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_player_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_player_proto_goTypes = []interface{}{ (BitrateLevel)(0), // 0: spotify.connectstate.BitrateLevel (BitrateStrategy)(0), // 1: spotify.connectstate.BitrateStrategy (HiFiStatus)(0), // 2: spotify.connectstate.HiFiStatus (*PlayerState)(nil), // 3: spotify.connectstate.PlayerState (*ProvidedTrack)(nil), // 4: spotify.connectstate.ProvidedTrack (*ContextIndex)(nil), // 5: spotify.connectstate.ContextIndex (*Restrictions)(nil), // 6: spotify.connectstate.Restrictions (*PlayOrigin)(nil), // 7: spotify.connectstate.PlayOrigin (*ContextPlayerOptions)(nil), // 8: spotify.connectstate.ContextPlayerOptions (*Suppressions)(nil), // 9: spotify.connectstate.Suppressions (*InstrumentationParams)(nil), // 10: spotify.connectstate.InstrumentationParams (*Playback)(nil), // 11: spotify.connectstate.Playback (*Queue)(nil), // 12: spotify.connectstate.Queue (*Session)(nil), // 13: spotify.connectstate.Session (*TransferState)(nil), // 14: spotify.connectstate.TransferState (*ContextTrack)(nil), // 15: spotify.connectstate.ContextTrack (*ContextPlayerOptionOverrides)(nil), // 16: spotify.connectstate.ContextPlayerOptionOverrides (*Context)(nil), // 17: spotify.connectstate.Context (*ContextPage)(nil), // 18: spotify.connectstate.ContextPage (*PlayerQueue)(nil), // 19: spotify.connectstate.PlayerQueue (*PlaybackQuality)(nil), // 20: spotify.connectstate.PlaybackQuality nil, // 21: spotify.connectstate.PlayerState.ContextMetadataEntry nil, // 22: spotify.connectstate.PlayerState.PageMetadataEntry nil, // 23: spotify.connectstate.ProvidedTrack.MetadataEntry nil, // 24: spotify.connectstate.ContextTrack.MetadataEntry nil, // 25: spotify.connectstate.Context.MetadataEntry nil, // 26: spotify.connectstate.ContextPage.MetadataEntry } var file_player_proto_depIdxs = []int32{ 6, // 0: spotify.connectstate.PlayerState.context_restrictions:type_name -> spotify.connectstate.Restrictions 7, // 1: spotify.connectstate.PlayerState.play_origin:type_name -> spotify.connectstate.PlayOrigin 5, // 2: spotify.connectstate.PlayerState.index:type_name -> spotify.connectstate.ContextIndex 4, // 3: spotify.connectstate.PlayerState.track:type_name -> spotify.connectstate.ProvidedTrack 8, // 4: spotify.connectstate.PlayerState.options:type_name -> spotify.connectstate.ContextPlayerOptions 6, // 5: spotify.connectstate.PlayerState.restrictions:type_name -> spotify.connectstate.Restrictions 9, // 6: spotify.connectstate.PlayerState.suppressions:type_name -> spotify.connectstate.Suppressions 4, // 7: spotify.connectstate.PlayerState.prev_tracks:type_name -> spotify.connectstate.ProvidedTrack 4, // 8: spotify.connectstate.PlayerState.next_tracks:type_name -> spotify.connectstate.ProvidedTrack 21, // 9: spotify.connectstate.PlayerState.context_metadata:type_name -> spotify.connectstate.PlayerState.ContextMetadataEntry 22, // 10: spotify.connectstate.PlayerState.page_metadata:type_name -> spotify.connectstate.PlayerState.PageMetadataEntry 4, // 11: spotify.connectstate.PlayerState.reverse:type_name -> spotify.connectstate.ProvidedTrack 4, // 12: spotify.connectstate.PlayerState.future:type_name -> spotify.connectstate.ProvidedTrack 20, // 13: spotify.connectstate.PlayerState.playback_quality:type_name -> spotify.connectstate.PlaybackQuality 23, // 14: spotify.connectstate.ProvidedTrack.metadata:type_name -> spotify.connectstate.ProvidedTrack.MetadataEntry 6, // 15: spotify.connectstate.ProvidedTrack.restrictions:type_name -> spotify.connectstate.Restrictions 15, // 16: spotify.connectstate.Playback.current_track:type_name -> spotify.connectstate.ContextTrack 15, // 17: spotify.connectstate.Queue.tracks:type_name -> spotify.connectstate.ContextTrack 7, // 18: spotify.connectstate.Session.play_origin:type_name -> spotify.connectstate.PlayOrigin 17, // 19: spotify.connectstate.Session.context:type_name -> spotify.connectstate.Context 16, // 20: spotify.connectstate.Session.option_overrides:type_name -> spotify.connectstate.ContextPlayerOptionOverrides 9, // 21: spotify.connectstate.Session.suppressions:type_name -> spotify.connectstate.Suppressions 10, // 22: spotify.connectstate.Session.instrumentation_params:type_name -> spotify.connectstate.InstrumentationParams 8, // 23: spotify.connectstate.TransferState.options:type_name -> spotify.connectstate.ContextPlayerOptions 11, // 24: spotify.connectstate.TransferState.playback:type_name -> spotify.connectstate.Playback 13, // 25: spotify.connectstate.TransferState.current_session:type_name -> spotify.connectstate.Session 12, // 26: spotify.connectstate.TransferState.queue:type_name -> spotify.connectstate.Queue 24, // 27: spotify.connectstate.ContextTrack.metadata:type_name -> spotify.connectstate.ContextTrack.MetadataEntry 25, // 28: spotify.connectstate.Context.metadata:type_name -> spotify.connectstate.Context.MetadataEntry 6, // 29: spotify.connectstate.Context.restrictions:type_name -> spotify.connectstate.Restrictions 18, // 30: spotify.connectstate.Context.pages:type_name -> spotify.connectstate.ContextPage 26, // 31: spotify.connectstate.ContextPage.metadata:type_name -> spotify.connectstate.ContextPage.MetadataEntry 15, // 32: spotify.connectstate.ContextPage.tracks:type_name -> spotify.connectstate.ContextTrack 4, // 33: spotify.connectstate.PlayerQueue.next_tracks:type_name -> spotify.connectstate.ProvidedTrack 4, // 34: spotify.connectstate.PlayerQueue.prev_tracks:type_name -> spotify.connectstate.ProvidedTrack 4, // 35: spotify.connectstate.PlayerQueue.track:type_name -> spotify.connectstate.ProvidedTrack 0, // 36: spotify.connectstate.PlaybackQuality.bitrate_level:type_name -> spotify.connectstate.BitrateLevel 1, // 37: spotify.connectstate.PlaybackQuality.strategy:type_name -> spotify.connectstate.BitrateStrategy 0, // 38: spotify.connectstate.PlaybackQuality.target_bitrate_level:type_name -> spotify.connectstate.BitrateLevel 2, // 39: spotify.connectstate.PlaybackQuality.hifi_status:type_name -> spotify.connectstate.HiFiStatus 40, // [40:40] is the sub-list for method output_type 40, // [40:40] is the sub-list for method input_type 40, // [40:40] is the sub-list for extension type_name 40, // [40:40] is the sub-list for extension extendee 0, // [0:40] is the sub-list for field type_name } func init() { file_player_proto_init() } func file_player_proto_init() { if File_player_proto != nil { return } if !protoimpl.UnsafeEnabled { file_player_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvidedTrack); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContextIndex); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Restrictions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayOrigin); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContextPlayerOptions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Suppressions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InstrumentationParams); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Playback); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Queue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Session); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransferState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContextTrack); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContextPlayerOptionOverrides); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Context); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContextPage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerQueue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_player_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlaybackQuality); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_player_proto_rawDesc, NumEnums: 3, NumMessages: 24, NumExtensions: 0, NumServices: 0, }, GoTypes: file_player_proto_goTypes, DependencyIndexes: file_player_proto_depIdxs, EnumInfos: file_player_proto_enumTypes, MessageInfos: file_player_proto_msgTypes, }.Build() File_player_proto = out.File file_player_proto_rawDesc = nil file_player_proto_goTypes = nil file_player_proto_depIdxs = nil }