// // Copyright 2022 The Dragonfly Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.6 // source: pkg/apis/common/v2/common.proto package common import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" 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) ) // SizeScope represents size scope of task. type SizeScope int32 const ( // NORMAL task has pieces is more than one piece. SizeScope_NORMAL SizeScope = 0 // SMALL task's content length is more than 128 byte and has only one piece. SizeScope_SMALL SizeScope = 1 // TINY task's content length is less than 128 byte. SizeScope_TINY SizeScope = 2 // EMPTY task's content length is equal to zero. SizeScope_EMPTY SizeScope = 3 // UNKNOW task has invalid size scope. SizeScope_UNKNOW SizeScope = 4 ) // Enum value maps for SizeScope. var ( SizeScope_name = map[int32]string{ 0: "NORMAL", 1: "SMALL", 2: "TINY", 3: "EMPTY", 4: "UNKNOW", } SizeScope_value = map[string]int32{ "NORMAL": 0, "SMALL": 1, "TINY": 2, "EMPTY": 3, "UNKNOW": 4, } ) func (x SizeScope) Enum() *SizeScope { p := new(SizeScope) *p = x return p } func (x SizeScope) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SizeScope) Descriptor() protoreflect.EnumDescriptor { return file_pkg_apis_common_v2_common_proto_enumTypes[0].Descriptor() } func (SizeScope) Type() protoreflect.EnumType { return &file_pkg_apis_common_v2_common_proto_enumTypes[0] } func (x SizeScope) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SizeScope.Descriptor instead. func (SizeScope) EnumDescriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{0} } // TaskType represents type of task. type TaskType int32 const ( // STANDARD is standard type of task, it can download from source, remote peer and // local peer(local cache). When the standard task is never downloaded in the // P2P cluster, dfdaemon will download the task from the source. When the standard // task is downloaded in the P2P cluster, dfdaemon will download the task from // the remote peer or local peer(local cache). TaskType_STANDARD TaskType = 0 // PERSISTENT is persistent type of task, it can import file and export file in P2P cluster. // When the persistent task is imported into the P2P cluster, dfdaemon will store // the task in the peer's disk and copy multiple replicas to remote peers to // prevent data loss. TaskType_PERSISTENT TaskType = 1 // PERSIST_CACHE is persistent cache type of task, it can import file and export file in P2P cluster. // When the persistent cache task is imported into the P2P cluster, dfdaemon will store // the task in the peer's disk and copy multiple replicas to remote peers to prevent data loss. // When the expiration time is reached, task will be deleted in the P2P cluster. TaskType_PERSISTENT_CACHE TaskType = 2 ) // Enum value maps for TaskType. var ( TaskType_name = map[int32]string{ 0: "STANDARD", 1: "PERSISTENT", 2: "PERSISTENT_CACHE", } TaskType_value = map[string]int32{ "STANDARD": 0, "PERSISTENT": 1, "PERSISTENT_CACHE": 2, } ) func (x TaskType) Enum() *TaskType { p := new(TaskType) *p = x return p } func (x TaskType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TaskType) Descriptor() protoreflect.EnumDescriptor { return file_pkg_apis_common_v2_common_proto_enumTypes[1].Descriptor() } func (TaskType) Type() protoreflect.EnumType { return &file_pkg_apis_common_v2_common_proto_enumTypes[1] } func (x TaskType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TaskType.Descriptor instead. func (TaskType) EnumDescriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{1} } // TrafficType represents type of traffic. type TrafficType int32 const ( // BACK_TO_SOURCE is to download traffic from the source. TrafficType_BACK_TO_SOURCE TrafficType = 0 // REMOTE_PEER is to download traffic from the remote peer. TrafficType_REMOTE_PEER TrafficType = 1 // LOCAL_PEER is to download traffic from the local peer. TrafficType_LOCAL_PEER TrafficType = 2 ) // Enum value maps for TrafficType. var ( TrafficType_name = map[int32]string{ 0: "BACK_TO_SOURCE", 1: "REMOTE_PEER", 2: "LOCAL_PEER", } TrafficType_value = map[string]int32{ "BACK_TO_SOURCE": 0, "REMOTE_PEER": 1, "LOCAL_PEER": 2, } ) func (x TrafficType) Enum() *TrafficType { p := new(TrafficType) *p = x return p } func (x TrafficType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TrafficType) Descriptor() protoreflect.EnumDescriptor { return file_pkg_apis_common_v2_common_proto_enumTypes[2].Descriptor() } func (TrafficType) Type() protoreflect.EnumType { return &file_pkg_apis_common_v2_common_proto_enumTypes[2] } func (x TrafficType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TrafficType.Descriptor instead. func (TrafficType) EnumDescriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{2} } // Priority represents priority of application. type Priority int32 const ( // LEVEL0 has no special meaning for scheduler. Priority_LEVEL0 Priority = 0 // LEVEL1 represents the download task is forbidden, // and an error code is returned during the registration. Priority_LEVEL1 Priority = 1 // LEVEL2 represents when the task is downloaded for the first time, // allow peers to download from the other peers, // but not back-to-source. When the task is not downloaded for // the first time, it is scheduled normally. Priority_LEVEL2 Priority = 2 // LEVEL3 represents when the task is downloaded for the first time, // the normal peer is first to download back-to-source. // When the task is not downloaded for the first time, it is scheduled normally. Priority_LEVEL3 Priority = 3 // LEVEL4 represents when the task is downloaded for the first time, // the weak peer is first triggered to back-to-source. // When the task is not downloaded for the first time, it is scheduled normally. Priority_LEVEL4 Priority = 4 // LEVEL5 represents when the task is downloaded for the first time, // the strong peer is first triggered to back-to-source. // When the task is not downloaded for the first time, it is scheduled normally. Priority_LEVEL5 Priority = 5 // LEVEL6 represents when the task is downloaded for the first time, // the super peer is first triggered to back-to-source. // When the task is not downloaded for the first time, it is scheduled normally. Priority_LEVEL6 Priority = 6 ) // Enum value maps for Priority. var ( Priority_name = map[int32]string{ 0: "LEVEL0", 1: "LEVEL1", 2: "LEVEL2", 3: "LEVEL3", 4: "LEVEL4", 5: "LEVEL5", 6: "LEVEL6", } Priority_value = map[string]int32{ "LEVEL0": 0, "LEVEL1": 1, "LEVEL2": 2, "LEVEL3": 3, "LEVEL4": 4, "LEVEL5": 5, "LEVEL6": 6, } ) func (x Priority) Enum() *Priority { p := new(Priority) *p = x return p } func (x Priority) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Priority) Descriptor() protoreflect.EnumDescriptor { return file_pkg_apis_common_v2_common_proto_enumTypes[3].Descriptor() } func (Priority) Type() protoreflect.EnumType { return &file_pkg_apis_common_v2_common_proto_enumTypes[3] } func (x Priority) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Priority.Descriptor instead. func (Priority) EnumDescriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{3} } // Peer metadata. type Peer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Peer id. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Range is url range of request. Range *Range `protobuf:"bytes,2,opt,name=range,proto3,oneof" json:"range,omitempty"` // Peer priority. Priority Priority `protobuf:"varint,3,opt,name=priority,proto3,enum=common.v2.Priority" json:"priority,omitempty"` // Pieces of peer. Pieces []*Piece `protobuf:"bytes,4,rep,name=pieces,proto3" json:"pieces,omitempty"` // Peer downloads costs time. Cost *durationpb.Duration `protobuf:"bytes,5,opt,name=cost,proto3" json:"cost,omitempty"` // Peer state. State string `protobuf:"bytes,6,opt,name=state,proto3" json:"state,omitempty"` // Task info. Task *Task `protobuf:"bytes,7,opt,name=task,proto3" json:"task,omitempty"` // Host info. Host *Host `protobuf:"bytes,8,opt,name=host,proto3" json:"host,omitempty"` // NeedBackToSource needs downloaded from source. NeedBackToSource bool `protobuf:"varint,9,opt,name=need_back_to_source,json=needBackToSource,proto3" json:"need_back_to_source,omitempty"` // Peer create time. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Peer update time. UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` } func (x *Peer) Reset() { *x = Peer{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Peer) String() string { return protoimpl.X.MessageStringOf(x) } func (*Peer) ProtoMessage() {} func (x *Peer) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Peer.ProtoReflect.Descriptor instead. func (*Peer) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{0} } func (x *Peer) GetId() string { if x != nil { return x.Id } return "" } func (x *Peer) GetRange() *Range { if x != nil { return x.Range } return nil } func (x *Peer) GetPriority() Priority { if x != nil { return x.Priority } return Priority_LEVEL0 } func (x *Peer) GetPieces() []*Piece { if x != nil { return x.Pieces } return nil } func (x *Peer) GetCost() *durationpb.Duration { if x != nil { return x.Cost } return nil } func (x *Peer) GetState() string { if x != nil { return x.State } return "" } func (x *Peer) GetTask() *Task { if x != nil { return x.Task } return nil } func (x *Peer) GetHost() *Host { if x != nil { return x.Host } return nil } func (x *Peer) GetNeedBackToSource() bool { if x != nil { return x.NeedBackToSource } return false } func (x *Peer) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } return nil } func (x *Peer) GetUpdatedAt() *timestamppb.Timestamp { if x != nil { return x.UpdatedAt } return nil } // PersistentCachePeer metadata. type PersistentCachePeer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Peer id. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Persistent represents whether the persistent cache peer is persistent. // If the persistent cache peer is persistent, the persistent cache peer will // not be deleted when dfdaemon runs garbage collection. It only be deleted // when the task is deleted by the user. Persistent bool `protobuf:"varint,2,opt,name=persistent,proto3" json:"persistent,omitempty"` // Peer downloads costs time. Cost *durationpb.Duration `protobuf:"bytes,3,opt,name=cost,proto3" json:"cost,omitempty"` // Peer state. State string `protobuf:"bytes,4,opt,name=state,proto3" json:"state,omitempty"` // Task info. Task *PersistentCacheTask `protobuf:"bytes,5,opt,name=task,proto3" json:"task,omitempty"` // Host info. Host *Host `protobuf:"bytes,6,opt,name=host,proto3" json:"host,omitempty"` // Peer create time. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Peer update time. UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` } func (x *PersistentCachePeer) Reset() { *x = PersistentCachePeer{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PersistentCachePeer) String() string { return protoimpl.X.MessageStringOf(x) } func (*PersistentCachePeer) ProtoMessage() {} func (x *PersistentCachePeer) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 PersistentCachePeer.ProtoReflect.Descriptor instead. func (*PersistentCachePeer) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{1} } func (x *PersistentCachePeer) GetId() string { if x != nil { return x.Id } return "" } func (x *PersistentCachePeer) GetPersistent() bool { if x != nil { return x.Persistent } return false } func (x *PersistentCachePeer) GetCost() *durationpb.Duration { if x != nil { return x.Cost } return nil } func (x *PersistentCachePeer) GetState() string { if x != nil { return x.State } return "" } func (x *PersistentCachePeer) GetTask() *PersistentCacheTask { if x != nil { return x.Task } return nil } func (x *PersistentCachePeer) GetHost() *Host { if x != nil { return x.Host } return nil } func (x *PersistentCachePeer) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } return nil } func (x *PersistentCachePeer) GetUpdatedAt() *timestamppb.Timestamp { if x != nil { return x.UpdatedAt } return nil } // Task metadata. type Task struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Task id. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Task type. Type TaskType `protobuf:"varint,2,opt,name=type,proto3,enum=common.v2.TaskType" json:"type,omitempty"` // Download url. Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` // Digest of the task digest, for example blake3:xxx or sha256:yyy. Digest *string `protobuf:"bytes,4,opt,name=digest,proto3,oneof" json:"digest,omitempty"` // URL tag identifies different task for same url. Tag *string `protobuf:"bytes,5,opt,name=tag,proto3,oneof" json:"tag,omitempty"` // Application of task. Application *string `protobuf:"bytes,6,opt,name=application,proto3,oneof" json:"application,omitempty"` // Filtered query params to generate the task id. // When filter is ["Signature", "Expires", "ns"], for example: // http://example.com/xyz?Expires=e1&Signature=s1&ns=docker.io and http://example.com/xyz?Expires=e2&Signature=s2&ns=docker.io // will generate the same task id. // Default value includes the filtered query params of s3, gcs, oss, obs, cos. FilteredQueryParams []string `protobuf:"bytes,7,rep,name=filtered_query_params,json=filteredQueryParams,proto3" json:"filtered_query_params,omitempty"` // Task request headers. RequestHeader map[string]string `protobuf:"bytes,8,rep,name=request_header,json=requestHeader,proto3" json:"request_header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Task piece length. PieceLength uint64 `protobuf:"varint,9,opt,name=piece_length,json=pieceLength,proto3" json:"piece_length,omitempty"` // Task content length. ContentLength uint64 `protobuf:"varint,10,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` // Task piece count. PieceCount uint32 `protobuf:"varint,11,opt,name=piece_count,json=pieceCount,proto3" json:"piece_count,omitempty"` // Task size scope. SizeScope SizeScope `protobuf:"varint,12,opt,name=size_scope,json=sizeScope,proto3,enum=common.v2.SizeScope" json:"size_scope,omitempty"` // Pieces of task. Pieces []*Piece `protobuf:"bytes,13,rep,name=pieces,proto3" json:"pieces,omitempty"` // Task state. State string `protobuf:"bytes,14,opt,name=state,proto3" json:"state,omitempty"` // Task peer count. PeerCount uint32 `protobuf:"varint,15,opt,name=peer_count,json=peerCount,proto3" json:"peer_count,omitempty"` // Task contains available peer. HasAvailablePeer bool `protobuf:"varint,16,opt,name=has_available_peer,json=hasAvailablePeer,proto3" json:"has_available_peer,omitempty"` // Task create time. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Task update time. UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,18,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` } func (x *Task) Reset() { *x = Task{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Task) String() string { return protoimpl.X.MessageStringOf(x) } func (*Task) ProtoMessage() {} func (x *Task) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Task.ProtoReflect.Descriptor instead. func (*Task) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{2} } func (x *Task) GetId() string { if x != nil { return x.Id } return "" } func (x *Task) GetType() TaskType { if x != nil { return x.Type } return TaskType_STANDARD } func (x *Task) GetUrl() string { if x != nil { return x.Url } return "" } func (x *Task) GetDigest() string { if x != nil && x.Digest != nil { return *x.Digest } return "" } func (x *Task) GetTag() string { if x != nil && x.Tag != nil { return *x.Tag } return "" } func (x *Task) GetApplication() string { if x != nil && x.Application != nil { return *x.Application } return "" } func (x *Task) GetFilteredQueryParams() []string { if x != nil { return x.FilteredQueryParams } return nil } func (x *Task) GetRequestHeader() map[string]string { if x != nil { return x.RequestHeader } return nil } func (x *Task) GetPieceLength() uint64 { if x != nil { return x.PieceLength } return 0 } func (x *Task) GetContentLength() uint64 { if x != nil { return x.ContentLength } return 0 } func (x *Task) GetPieceCount() uint32 { if x != nil { return x.PieceCount } return 0 } func (x *Task) GetSizeScope() SizeScope { if x != nil { return x.SizeScope } return SizeScope_NORMAL } func (x *Task) GetPieces() []*Piece { if x != nil { return x.Pieces } return nil } func (x *Task) GetState() string { if x != nil { return x.State } return "" } func (x *Task) GetPeerCount() uint32 { if x != nil { return x.PeerCount } return 0 } func (x *Task) GetHasAvailablePeer() bool { if x != nil { return x.HasAvailablePeer } return false } func (x *Task) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } return nil } func (x *Task) GetUpdatedAt() *timestamppb.Timestamp { if x != nil { return x.UpdatedAt } return nil } // PersistentCacheTask metadata. type PersistentCacheTask struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Task id. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Replica count of the persistent cache task. The persistent cache task will // not be deleted when dfdamon runs garbage collection. It only be deleted // when the task is deleted by the user. PersistentReplicaCount uint64 `protobuf:"varint,2,opt,name=persistent_replica_count,json=persistentReplicaCount,proto3" json:"persistent_replica_count,omitempty"` // Current replica count of the persistent cache task. The persistent cache task // will not be deleted when dfdaemon runs garbage collection. It only be deleted // when the task is deleted by the user. CurrentPersistentReplicaCount uint64 `protobuf:"varint,3,opt,name=current_persistent_replica_count,json=currentPersistentReplicaCount,proto3" json:"current_persistent_replica_count,omitempty"` // Current replica count of the cache task. If cache task is not persistent, // the persistent cache task will be deleted when dfdaemon runs garbage collection. CurrentReplicaCount uint64 `protobuf:"varint,4,opt,name=current_replica_count,json=currentReplicaCount,proto3" json:"current_replica_count,omitempty"` // Digest of the task digest, for example blake3:xxx or sha256:yyy. Digest string `protobuf:"bytes,5,opt,name=digest,proto3" json:"digest,omitempty"` // Tag is used to distinguish different persistent cache tasks. Tag *string `protobuf:"bytes,6,opt,name=tag,proto3,oneof" json:"tag,omitempty"` // Application of task. Application *string `protobuf:"bytes,7,opt,name=application,proto3,oneof" json:"application,omitempty"` // Task piece length. PieceLength uint64 `protobuf:"varint,8,opt,name=piece_length,json=pieceLength,proto3" json:"piece_length,omitempty"` // Task content length. ContentLength uint64 `protobuf:"varint,9,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` // Task piece count. PieceCount uint32 `protobuf:"varint,10,opt,name=piece_count,json=pieceCount,proto3" json:"piece_count,omitempty"` // Task state. State string `protobuf:"bytes,11,opt,name=state,proto3" json:"state,omitempty"` // Task create time. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Task update time. UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` } func (x *PersistentCacheTask) Reset() { *x = PersistentCacheTask{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PersistentCacheTask) String() string { return protoimpl.X.MessageStringOf(x) } func (*PersistentCacheTask) ProtoMessage() {} func (x *PersistentCacheTask) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 PersistentCacheTask.ProtoReflect.Descriptor instead. func (*PersistentCacheTask) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{3} } func (x *PersistentCacheTask) GetId() string { if x != nil { return x.Id } return "" } func (x *PersistentCacheTask) GetPersistentReplicaCount() uint64 { if x != nil { return x.PersistentReplicaCount } return 0 } func (x *PersistentCacheTask) GetCurrentPersistentReplicaCount() uint64 { if x != nil { return x.CurrentPersistentReplicaCount } return 0 } func (x *PersistentCacheTask) GetCurrentReplicaCount() uint64 { if x != nil { return x.CurrentReplicaCount } return 0 } func (x *PersistentCacheTask) GetDigest() string { if x != nil { return x.Digest } return "" } func (x *PersistentCacheTask) GetTag() string { if x != nil && x.Tag != nil { return *x.Tag } return "" } func (x *PersistentCacheTask) GetApplication() string { if x != nil && x.Application != nil { return *x.Application } return "" } func (x *PersistentCacheTask) GetPieceLength() uint64 { if x != nil { return x.PieceLength } return 0 } func (x *PersistentCacheTask) GetContentLength() uint64 { if x != nil { return x.ContentLength } return 0 } func (x *PersistentCacheTask) GetPieceCount() uint32 { if x != nil { return x.PieceCount } return 0 } func (x *PersistentCacheTask) GetState() string { if x != nil { return x.State } return "" } func (x *PersistentCacheTask) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } return nil } func (x *PersistentCacheTask) GetUpdatedAt() *timestamppb.Timestamp { if x != nil { return x.UpdatedAt } return nil } // Host metadata. type Host struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Host id. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Host type. Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` // Hostname. Hostname string `protobuf:"bytes,3,opt,name=hostname,proto3" json:"hostname,omitempty"` // Host ip. Ip string `protobuf:"bytes,4,opt,name=ip,proto3" json:"ip,omitempty"` // Port of grpc service. Port int32 `protobuf:"varint,5,opt,name=port,proto3" json:"port,omitempty"` // Port of download server. DownloadPort int32 `protobuf:"varint,6,opt,name=download_port,json=downloadPort,proto3" json:"download_port,omitempty"` // Host OS. Os string `protobuf:"bytes,7,opt,name=os,proto3" json:"os,omitempty"` // Host platform. Platform string `protobuf:"bytes,8,opt,name=platform,proto3" json:"platform,omitempty"` // Host platform family. PlatformFamily string `protobuf:"bytes,9,opt,name=platform_family,json=platformFamily,proto3" json:"platform_family,omitempty"` // Host platform version. PlatformVersion string `protobuf:"bytes,10,opt,name=platform_version,json=platformVersion,proto3" json:"platform_version,omitempty"` // Host kernel version. KernelVersion string `protobuf:"bytes,11,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"` // CPU Stat. Cpu *CPU `protobuf:"bytes,12,opt,name=cpu,proto3,oneof" json:"cpu,omitempty"` // Memory Stat. Memory *Memory `protobuf:"bytes,13,opt,name=memory,proto3,oneof" json:"memory,omitempty"` // Network Stat. Network *Network `protobuf:"bytes,14,opt,name=network,proto3,oneof" json:"network,omitempty"` // Disk Stat. Disk *Disk `protobuf:"bytes,15,opt,name=disk,proto3,oneof" json:"disk,omitempty"` // Build information. Build *Build `protobuf:"bytes,16,opt,name=build,proto3,oneof" json:"build,omitempty"` // ID of the cluster to which the host belongs. SchedulerClusterId uint64 `protobuf:"varint,17,opt,name=scheduler_cluster_id,json=schedulerClusterId,proto3" json:"scheduler_cluster_id,omitempty"` // Disable shared data for other peers. DisableShared bool `protobuf:"varint,18,opt,name=disable_shared,json=disableShared,proto3" json:"disable_shared,omitempty"` } func (x *Host) Reset() { *x = Host{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Host) String() string { return protoimpl.X.MessageStringOf(x) } func (*Host) ProtoMessage() {} func (x *Host) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Host.ProtoReflect.Descriptor instead. func (*Host) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{4} } func (x *Host) GetId() string { if x != nil { return x.Id } return "" } func (x *Host) GetType() uint32 { if x != nil { return x.Type } return 0 } func (x *Host) GetHostname() string { if x != nil { return x.Hostname } return "" } func (x *Host) GetIp() string { if x != nil { return x.Ip } return "" } func (x *Host) GetPort() int32 { if x != nil { return x.Port } return 0 } func (x *Host) GetDownloadPort() int32 { if x != nil { return x.DownloadPort } return 0 } func (x *Host) GetOs() string { if x != nil { return x.Os } return "" } func (x *Host) GetPlatform() string { if x != nil { return x.Platform } return "" } func (x *Host) GetPlatformFamily() string { if x != nil { return x.PlatformFamily } return "" } func (x *Host) GetPlatformVersion() string { if x != nil { return x.PlatformVersion } return "" } func (x *Host) GetKernelVersion() string { if x != nil { return x.KernelVersion } return "" } func (x *Host) GetCpu() *CPU { if x != nil { return x.Cpu } return nil } func (x *Host) GetMemory() *Memory { if x != nil { return x.Memory } return nil } func (x *Host) GetNetwork() *Network { if x != nil { return x.Network } return nil } func (x *Host) GetDisk() *Disk { if x != nil { return x.Disk } return nil } func (x *Host) GetBuild() *Build { if x != nil { return x.Build } return nil } func (x *Host) GetSchedulerClusterId() uint64 { if x != nil { return x.SchedulerClusterId } return 0 } func (x *Host) GetDisableShared() bool { if x != nil { return x.DisableShared } return false } // CPU Stat. type CPU struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Number of logical cores in the system. LogicalCount uint32 `protobuf:"varint,1,opt,name=logical_count,json=logicalCount,proto3" json:"logical_count,omitempty"` // Number of physical cores in the system PhysicalCount uint32 `protobuf:"varint,2,opt,name=physical_count,json=physicalCount,proto3" json:"physical_count,omitempty"` // Percent calculates the percentage of cpu used. Percent float64 `protobuf:"fixed64,3,opt,name=percent,proto3" json:"percent,omitempty"` // Calculates the percentage of cpu used by process. ProcessPercent float64 `protobuf:"fixed64,4,opt,name=process_percent,json=processPercent,proto3" json:"process_percent,omitempty"` // CPUTimes contains the amounts of time the CPU has spent performing different kinds of work. Times *CPUTimes `protobuf:"bytes,5,opt,name=times,proto3,oneof" json:"times,omitempty"` } func (x *CPU) Reset() { *x = CPU{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CPU) String() string { return protoimpl.X.MessageStringOf(x) } func (*CPU) ProtoMessage() {} func (x *CPU) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 CPU.ProtoReflect.Descriptor instead. func (*CPU) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{5} } func (x *CPU) GetLogicalCount() uint32 { if x != nil { return x.LogicalCount } return 0 } func (x *CPU) GetPhysicalCount() uint32 { if x != nil { return x.PhysicalCount } return 0 } func (x *CPU) GetPercent() float64 { if x != nil { return x.Percent } return 0 } func (x *CPU) GetProcessPercent() float64 { if x != nil { return x.ProcessPercent } return 0 } func (x *CPU) GetTimes() *CPUTimes { if x != nil { return x.Times } return nil } // CPUTimes contains the amounts of time the CPU has spent performing different // kinds of work. Time units are in seconds. type CPUTimes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // CPU time of user. User float64 `protobuf:"fixed64,1,opt,name=user,proto3" json:"user,omitempty"` // CPU time of system. System float64 `protobuf:"fixed64,2,opt,name=system,proto3" json:"system,omitempty"` // CPU time of idle. Idle float64 `protobuf:"fixed64,3,opt,name=idle,proto3" json:"idle,omitempty"` // CPU time of nice. Nice float64 `protobuf:"fixed64,4,opt,name=nice,proto3" json:"nice,omitempty"` // CPU time of iowait. Iowait float64 `protobuf:"fixed64,5,opt,name=iowait,proto3" json:"iowait,omitempty"` // CPU time of irq. Irq float64 `protobuf:"fixed64,6,opt,name=irq,proto3" json:"irq,omitempty"` // CPU time of softirq. Softirq float64 `protobuf:"fixed64,7,opt,name=softirq,proto3" json:"softirq,omitempty"` // CPU time of steal. Steal float64 `protobuf:"fixed64,8,opt,name=steal,proto3" json:"steal,omitempty"` // CPU time of guest. Guest float64 `protobuf:"fixed64,9,opt,name=guest,proto3" json:"guest,omitempty"` // CPU time of guest nice. GuestNice float64 `protobuf:"fixed64,10,opt,name=guest_nice,json=guestNice,proto3" json:"guest_nice,omitempty"` } func (x *CPUTimes) Reset() { *x = CPUTimes{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CPUTimes) String() string { return protoimpl.X.MessageStringOf(x) } func (*CPUTimes) ProtoMessage() {} func (x *CPUTimes) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 CPUTimes.ProtoReflect.Descriptor instead. func (*CPUTimes) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{6} } func (x *CPUTimes) GetUser() float64 { if x != nil { return x.User } return 0 } func (x *CPUTimes) GetSystem() float64 { if x != nil { return x.System } return 0 } func (x *CPUTimes) GetIdle() float64 { if x != nil { return x.Idle } return 0 } func (x *CPUTimes) GetNice() float64 { if x != nil { return x.Nice } return 0 } func (x *CPUTimes) GetIowait() float64 { if x != nil { return x.Iowait } return 0 } func (x *CPUTimes) GetIrq() float64 { if x != nil { return x.Irq } return 0 } func (x *CPUTimes) GetSoftirq() float64 { if x != nil { return x.Softirq } return 0 } func (x *CPUTimes) GetSteal() float64 { if x != nil { return x.Steal } return 0 } func (x *CPUTimes) GetGuest() float64 { if x != nil { return x.Guest } return 0 } func (x *CPUTimes) GetGuestNice() float64 { if x != nil { return x.GuestNice } return 0 } // Memory Stat. type Memory struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Total amount of RAM on this system. Total uint64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` // RAM available for programs to allocate. Available uint64 `protobuf:"varint,2,opt,name=available,proto3" json:"available,omitempty"` // RAM used by programs. Used uint64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"` // Percentage of RAM used by programs. UsedPercent float64 `protobuf:"fixed64,4,opt,name=used_percent,json=usedPercent,proto3" json:"used_percent,omitempty"` // Calculates the percentage of memory used by process. ProcessUsedPercent float64 `protobuf:"fixed64,5,opt,name=process_used_percent,json=processUsedPercent,proto3" json:"process_used_percent,omitempty"` // This is the kernel's notion of free memory. Free uint64 `protobuf:"varint,6,opt,name=free,proto3" json:"free,omitempty"` } func (x *Memory) Reset() { *x = Memory{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Memory) String() string { return protoimpl.X.MessageStringOf(x) } func (*Memory) ProtoMessage() {} func (x *Memory) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Memory.ProtoReflect.Descriptor instead. func (*Memory) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{7} } func (x *Memory) GetTotal() uint64 { if x != nil { return x.Total } return 0 } func (x *Memory) GetAvailable() uint64 { if x != nil { return x.Available } return 0 } func (x *Memory) GetUsed() uint64 { if x != nil { return x.Used } return 0 } func (x *Memory) GetUsedPercent() float64 { if x != nil { return x.UsedPercent } return 0 } func (x *Memory) GetProcessUsedPercent() float64 { if x != nil { return x.ProcessUsedPercent } return 0 } func (x *Memory) GetFree() uint64 { if x != nil { return x.Free } return 0 } // Network Stat. type Network struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Return count of tcp connections opened and status is ESTABLISHED. TcpConnectionCount uint32 `protobuf:"varint,1,opt,name=tcp_connection_count,json=tcpConnectionCount,proto3" json:"tcp_connection_count,omitempty"` // Return count of upload tcp connections opened and status is ESTABLISHED. UploadTcpConnectionCount uint32 `protobuf:"varint,2,opt,name=upload_tcp_connection_count,json=uploadTcpConnectionCount,proto3" json:"upload_tcp_connection_count,omitempty"` // Location path(area|country|province|city|...). Location *string `protobuf:"bytes,3,opt,name=location,proto3,oneof" json:"location,omitempty"` // IDC where the peer host is located Idc *string `protobuf:"bytes,4,opt,name=idc,proto3,oneof" json:"idc,omitempty"` // Download rate is received bytes per second. DownloadRate uint64 `protobuf:"varint,5,opt,name=download_rate,json=downloadRate,proto3" json:"download_rate,omitempty"` // Download rate is the limit of received bytes per second. DownloadRateLimit uint64 `protobuf:"varint,6,opt,name=download_rate_limit,json=downloadRateLimit,proto3" json:"download_rate_limit,omitempty"` // Upload rate is transmitted bytes per second. UploadRate uint64 `protobuf:"varint,7,opt,name=upload_rate,json=uploadRate,proto3" json:"upload_rate,omitempty"` // Upload rate is the limit of transmitted bytes per second. UploadRateLimit uint64 `protobuf:"varint,8,opt,name=upload_rate_limit,json=uploadRateLimit,proto3" json:"upload_rate_limit,omitempty"` } func (x *Network) Reset() { *x = Network{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Network) String() string { return protoimpl.X.MessageStringOf(x) } func (*Network) ProtoMessage() {} func (x *Network) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Network.ProtoReflect.Descriptor instead. func (*Network) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{8} } func (x *Network) GetTcpConnectionCount() uint32 { if x != nil { return x.TcpConnectionCount } return 0 } func (x *Network) GetUploadTcpConnectionCount() uint32 { if x != nil { return x.UploadTcpConnectionCount } return 0 } func (x *Network) GetLocation() string { if x != nil && x.Location != nil { return *x.Location } return "" } func (x *Network) GetIdc() string { if x != nil && x.Idc != nil { return *x.Idc } return "" } func (x *Network) GetDownloadRate() uint64 { if x != nil { return x.DownloadRate } return 0 } func (x *Network) GetDownloadRateLimit() uint64 { if x != nil { return x.DownloadRateLimit } return 0 } func (x *Network) GetUploadRate() uint64 { if x != nil { return x.UploadRate } return 0 } func (x *Network) GetUploadRateLimit() uint64 { if x != nil { return x.UploadRateLimit } return 0 } // Disk Stat. type Disk struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Total amount of disk on the data path of dragonfly. Total uint64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` // Free amount of disk on the data path of dragonfly. Free uint64 `protobuf:"varint,2,opt,name=free,proto3" json:"free,omitempty"` // Used amount of disk on the data path of dragonfly. Used uint64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"` // Used percent of disk on the data path of dragonfly directory. UsedPercent float64 `protobuf:"fixed64,4,opt,name=used_percent,json=usedPercent,proto3" json:"used_percent,omitempty"` // Total amount of indoes on the data path of dragonfly directory. InodesTotal uint64 `protobuf:"varint,5,opt,name=inodes_total,json=inodesTotal,proto3" json:"inodes_total,omitempty"` // Used amount of indoes on the data path of dragonfly directory. InodesUsed uint64 `protobuf:"varint,6,opt,name=inodes_used,json=inodesUsed,proto3" json:"inodes_used,omitempty"` // Free amount of indoes on the data path of dragonfly directory. InodesFree uint64 `protobuf:"varint,7,opt,name=inodes_free,json=inodesFree,proto3" json:"inodes_free,omitempty"` // Used percent of indoes on the data path of dragonfly directory. InodesUsedPercent float64 `protobuf:"fixed64,8,opt,name=inodes_used_percent,json=inodesUsedPercent,proto3" json:"inodes_used_percent,omitempty"` // Disk read bandwidth, in bytes per second. ReadBandwidth uint64 `protobuf:"varint,9,opt,name=read_bandwidth,json=readBandwidth,proto3" json:"read_bandwidth,omitempty"` // Disk write bandwidth, in bytes per second. WriteBandwidth uint64 `protobuf:"varint,10,opt,name=write_bandwidth,json=writeBandwidth,proto3" json:"write_bandwidth,omitempty"` } func (x *Disk) Reset() { *x = Disk{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Disk) String() string { return protoimpl.X.MessageStringOf(x) } func (*Disk) ProtoMessage() {} func (x *Disk) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Disk.ProtoReflect.Descriptor instead. func (*Disk) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{9} } func (x *Disk) GetTotal() uint64 { if x != nil { return x.Total } return 0 } func (x *Disk) GetFree() uint64 { if x != nil { return x.Free } return 0 } func (x *Disk) GetUsed() uint64 { if x != nil { return x.Used } return 0 } func (x *Disk) GetUsedPercent() float64 { if x != nil { return x.UsedPercent } return 0 } func (x *Disk) GetInodesTotal() uint64 { if x != nil { return x.InodesTotal } return 0 } func (x *Disk) GetInodesUsed() uint64 { if x != nil { return x.InodesUsed } return 0 } func (x *Disk) GetInodesFree() uint64 { if x != nil { return x.InodesFree } return 0 } func (x *Disk) GetInodesUsedPercent() float64 { if x != nil { return x.InodesUsedPercent } return 0 } func (x *Disk) GetReadBandwidth() uint64 { if x != nil { return x.ReadBandwidth } return 0 } func (x *Disk) GetWriteBandwidth() uint64 { if x != nil { return x.WriteBandwidth } return 0 } // Build information. type Build struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Git version. GitVersion string `protobuf:"bytes,1,opt,name=git_version,json=gitVersion,proto3" json:"git_version,omitempty"` // Git commit. GitCommit *string `protobuf:"bytes,2,opt,name=git_commit,json=gitCommit,proto3,oneof" json:"git_commit,omitempty"` // Golang version. GoVersion *string `protobuf:"bytes,3,opt,name=go_version,json=goVersion,proto3,oneof" json:"go_version,omitempty"` // Rust version. RustVersion *string `protobuf:"bytes,4,opt,name=rust_version,json=rustVersion,proto3,oneof" json:"rust_version,omitempty"` // Build platform. Platform *string `protobuf:"bytes,5,opt,name=platform,proto3,oneof" json:"platform,omitempty"` } func (x *Build) Reset() { *x = Build{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Build) String() string { return protoimpl.X.MessageStringOf(x) } func (*Build) ProtoMessage() {} func (x *Build) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Build.ProtoReflect.Descriptor instead. func (*Build) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{10} } func (x *Build) GetGitVersion() string { if x != nil { return x.GitVersion } return "" } func (x *Build) GetGitCommit() string { if x != nil && x.GitCommit != nil { return *x.GitCommit } return "" } func (x *Build) GetGoVersion() string { if x != nil && x.GoVersion != nil { return *x.GoVersion } return "" } func (x *Build) GetRustVersion() string { if x != nil && x.RustVersion != nil { return *x.RustVersion } return "" } func (x *Build) GetPlatform() string { if x != nil && x.Platform != nil { return *x.Platform } return "" } // Download information. type Download struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Download url. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // Digest of the task digest, for example blake3:xxx or sha256:yyy. Digest *string `protobuf:"bytes,2,opt,name=digest,proto3,oneof" json:"digest,omitempty"` // Range is url range of request. If protocol is http, range // will set in request header. If protocol is others, range // will set in range field. Range *Range `protobuf:"bytes,3,opt,name=range,proto3,oneof" json:"range,omitempty"` // Task type. Type TaskType `protobuf:"varint,4,opt,name=type,proto3,enum=common.v2.TaskType" json:"type,omitempty"` // URL tag identifies different task for same url. Tag *string `protobuf:"bytes,5,opt,name=tag,proto3,oneof" json:"tag,omitempty"` // Application of task. Application *string `protobuf:"bytes,6,opt,name=application,proto3,oneof" json:"application,omitempty"` // Peer priority. Priority Priority `protobuf:"varint,7,opt,name=priority,proto3,enum=common.v2.Priority" json:"priority,omitempty"` // Filtered query params to generate the task id. // When filter is ["Signature", "Expires", "ns"], for example: // http://example.com/xyz?Expires=e1&Signature=s1&ns=docker.io and http://example.com/xyz?Expires=e2&Signature=s2&ns=docker.io // will generate the same task id. // Default value includes the filtered query params of s3, gcs, oss, obs, cos. FilteredQueryParams []string `protobuf:"bytes,8,rep,name=filtered_query_params,json=filteredQueryParams,proto3" json:"filtered_query_params,omitempty"` // Task request headers. RequestHeader map[string]string `protobuf:"bytes,9,rep,name=request_header,json=requestHeader,proto3" json:"request_header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Task piece length. PieceLength *uint64 `protobuf:"varint,10,opt,name=piece_length,json=pieceLength,proto3,oneof" json:"piece_length,omitempty"` // File path to be exported. OutputPath *string `protobuf:"bytes,11,opt,name=output_path,json=outputPath,proto3,oneof" json:"output_path,omitempty"` // Download timeout. Timeout *durationpb.Duration `protobuf:"bytes,12,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` // Dfdaemon will disable download back-to-source by itself, if disable_back_to_source is true. DisableBackToSource bool `protobuf:"varint,13,opt,name=disable_back_to_source,json=disableBackToSource,proto3" json:"disable_back_to_source,omitempty"` // Scheduler will triggers peer to download back-to-source, if need_back_to_source is true. NeedBackToSource bool `protobuf:"varint,14,opt,name=need_back_to_source,json=needBackToSource,proto3" json:"need_back_to_source,omitempty"` // certificate_chain is the client certs with DER format for the backend client to download back-to-source. CertificateChain [][]byte `protobuf:"bytes,15,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` // Prefetch pre-downloads all pieces of the task when download task with range request. Prefetch bool `protobuf:"varint,16,opt,name=prefetch,proto3" json:"prefetch,omitempty"` // Object Storage related information. ObjectStorage *ObjectStorage `protobuf:"bytes,17,opt,name=object_storage,json=objectStorage,proto3,oneof" json:"object_storage,omitempty"` // HDFS related information. Hdfs *HDFS `protobuf:"bytes,18,opt,name=hdfs,proto3,oneof" json:"hdfs,omitempty"` // is_prefetch is the flag to indicate whether the request is a prefetch request. IsPrefetch bool `protobuf:"varint,19,opt,name=is_prefetch,json=isPrefetch,proto3" json:"is_prefetch,omitempty"` } func (x *Download) Reset() { *x = Download{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Download) String() string { return protoimpl.X.MessageStringOf(x) } func (*Download) ProtoMessage() {} func (x *Download) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Download.ProtoReflect.Descriptor instead. func (*Download) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{11} } func (x *Download) GetUrl() string { if x != nil { return x.Url } return "" } func (x *Download) GetDigest() string { if x != nil && x.Digest != nil { return *x.Digest } return "" } func (x *Download) GetRange() *Range { if x != nil { return x.Range } return nil } func (x *Download) GetType() TaskType { if x != nil { return x.Type } return TaskType_STANDARD } func (x *Download) GetTag() string { if x != nil && x.Tag != nil { return *x.Tag } return "" } func (x *Download) GetApplication() string { if x != nil && x.Application != nil { return *x.Application } return "" } func (x *Download) GetPriority() Priority { if x != nil { return x.Priority } return Priority_LEVEL0 } func (x *Download) GetFilteredQueryParams() []string { if x != nil { return x.FilteredQueryParams } return nil } func (x *Download) GetRequestHeader() map[string]string { if x != nil { return x.RequestHeader } return nil } func (x *Download) GetPieceLength() uint64 { if x != nil && x.PieceLength != nil { return *x.PieceLength } return 0 } func (x *Download) GetOutputPath() string { if x != nil && x.OutputPath != nil { return *x.OutputPath } return "" } func (x *Download) GetTimeout() *durationpb.Duration { if x != nil { return x.Timeout } return nil } func (x *Download) GetDisableBackToSource() bool { if x != nil { return x.DisableBackToSource } return false } func (x *Download) GetNeedBackToSource() bool { if x != nil { return x.NeedBackToSource } return false } func (x *Download) GetCertificateChain() [][]byte { if x != nil { return x.CertificateChain } return nil } func (x *Download) GetPrefetch() bool { if x != nil { return x.Prefetch } return false } func (x *Download) GetObjectStorage() *ObjectStorage { if x != nil { return x.ObjectStorage } return nil } func (x *Download) GetHdfs() *HDFS { if x != nil { return x.Hdfs } return nil } func (x *Download) GetIsPrefetch() bool { if x != nil { return x.IsPrefetch } return false } // Object Storage related information. type ObjectStorage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Region is the region of the object storage service. Region *string `protobuf:"bytes,1,opt,name=region,proto3,oneof" json:"region,omitempty"` // Endpoint is the endpoint of the object storage service. Endpoint *string `protobuf:"bytes,2,opt,name=endpoint,proto3,oneof" json:"endpoint,omitempty"` // Access key that used to access the object storage service. AccessKeyId *string `protobuf:"bytes,3,opt,name=access_key_id,json=accessKeyId,proto3,oneof" json:"access_key_id,omitempty"` // Access secret that used to access the object storage service. AccessKeySecret *string `protobuf:"bytes,4,opt,name=access_key_secret,json=accessKeySecret,proto3,oneof" json:"access_key_secret,omitempty"` // Session token that used to access s3 storage service. SessionToken *string `protobuf:"bytes,5,opt,name=session_token,json=sessionToken,proto3,oneof" json:"session_token,omitempty"` // Local path to credential file for Google Cloud Storage service OAuth2 authentication. CredentialPath *string `protobuf:"bytes,6,opt,name=credential_path,json=credentialPath,proto3,oneof" json:"credential_path,omitempty"` // Predefined ACL that used for the Google Cloud Storage service. PredefinedAcl *string `protobuf:"bytes,7,opt,name=predefined_acl,json=predefinedAcl,proto3,oneof" json:"predefined_acl,omitempty"` } func (x *ObjectStorage) Reset() { *x = ObjectStorage{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ObjectStorage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ObjectStorage) ProtoMessage() {} func (x *ObjectStorage) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 ObjectStorage.ProtoReflect.Descriptor instead. func (*ObjectStorage) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{12} } func (x *ObjectStorage) GetRegion() string { if x != nil && x.Region != nil { return *x.Region } return "" } func (x *ObjectStorage) GetEndpoint() string { if x != nil && x.Endpoint != nil { return *x.Endpoint } return "" } func (x *ObjectStorage) GetAccessKeyId() string { if x != nil && x.AccessKeyId != nil { return *x.AccessKeyId } return "" } func (x *ObjectStorage) GetAccessKeySecret() string { if x != nil && x.AccessKeySecret != nil { return *x.AccessKeySecret } return "" } func (x *ObjectStorage) GetSessionToken() string { if x != nil && x.SessionToken != nil { return *x.SessionToken } return "" } func (x *ObjectStorage) GetCredentialPath() string { if x != nil && x.CredentialPath != nil { return *x.CredentialPath } return "" } func (x *ObjectStorage) GetPredefinedAcl() string { if x != nil && x.PredefinedAcl != nil { return *x.PredefinedAcl } return "" } // HDFS related information. type HDFS struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Delegation token for Web HDFS operator. DelegationToken *string `protobuf:"bytes,1,opt,name=delegation_token,json=delegationToken,proto3,oneof" json:"delegation_token,omitempty"` } func (x *HDFS) Reset() { *x = HDFS{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HDFS) String() string { return protoimpl.X.MessageStringOf(x) } func (*HDFS) ProtoMessage() {} func (x *HDFS) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 HDFS.ProtoReflect.Descriptor instead. func (*HDFS) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{13} } func (x *HDFS) GetDelegationToken() string { if x != nil && x.DelegationToken != nil { return *x.DelegationToken } return "" } // Range represents download range. type Range struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Start of range. Start uint64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` // Length of range. Length uint64 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` } func (x *Range) Reset() { *x = Range{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Range) String() string { return protoimpl.X.MessageStringOf(x) } func (*Range) ProtoMessage() {} func (x *Range) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Range.ProtoReflect.Descriptor instead. func (*Range) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{14} } func (x *Range) GetStart() uint64 { if x != nil { return x.Start } return 0 } func (x *Range) GetLength() uint64 { if x != nil { return x.Length } return 0 } // Piece represents information of piece. type Piece struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Piece number. Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` // Parent peer id. ParentId *string `protobuf:"bytes,2,opt,name=parent_id,json=parentId,proto3,oneof" json:"parent_id,omitempty"` // Piece offset. Offset uint64 `protobuf:"varint,3,opt,name=offset,proto3" json:"offset,omitempty"` // Piece length. Length uint64 `protobuf:"varint,4,opt,name=length,proto3" json:"length,omitempty"` // Digest of the piece data, for example blake3:xxx or sha256:yyy. Digest string `protobuf:"bytes,5,opt,name=digest,proto3" json:"digest,omitempty"` // Piece content. Content []byte `protobuf:"bytes,6,opt,name=content,proto3,oneof" json:"content,omitempty"` // Traffic type. TrafficType *TrafficType `protobuf:"varint,7,opt,name=traffic_type,json=trafficType,proto3,enum=common.v2.TrafficType,oneof" json:"traffic_type,omitempty"` // Downloading piece costs time. Cost *durationpb.Duration `protobuf:"bytes,8,opt,name=cost,proto3" json:"cost,omitempty"` // Piece create time. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } func (x *Piece) Reset() { *x = Piece{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_common_v2_common_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Piece) String() string { return protoimpl.X.MessageStringOf(x) } func (*Piece) ProtoMessage() {} func (x *Piece) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_common_v2_common_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 Piece.ProtoReflect.Descriptor instead. func (*Piece) Descriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{15} } func (x *Piece) GetNumber() uint32 { if x != nil { return x.Number } return 0 } func (x *Piece) GetParentId() string { if x != nil && x.ParentId != nil { return *x.ParentId } return "" } func (x *Piece) GetOffset() uint64 { if x != nil { return x.Offset } return 0 } func (x *Piece) GetLength() uint64 { if x != nil { return x.Length } return 0 } func (x *Piece) GetDigest() string { if x != nil { return x.Digest } return "" } func (x *Piece) GetContent() []byte { if x != nil { return x.Content } return nil } func (x *Piece) GetTrafficType() TrafficType { if x != nil && x.TrafficType != nil { return *x.TrafficType } return TrafficType_BACK_TO_SOURCE } func (x *Piece) GetCost() *durationpb.Duration { if x != nil { return x.Cost } return nil } func (x *Piece) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } return nil } var File_pkg_apis_common_v2_common_proto protoreflect.FileDescriptor var file_pkg_apis_common_v2_common_proto_rawDesc = []byte{ 0x0a, 0x1f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x04, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x28, 0x01, 0x52, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x9d, 0x03, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x98, 0x08, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x49, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x28, 0x01, 0x52, 0x06, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x68, 0x61, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x06, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8f, 0x01, 0xfa, 0x42, 0x8b, 0x01, 0x72, 0x88, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe2, 0x05, 0x0a, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x02, 0x69, 0x70, 0x12, 0x20, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x1a, 0x07, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x31, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x1a, 0x07, 0x10, 0xff, 0xff, 0x03, 0x28, 0x80, 0x08, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x50, 0x55, 0x48, 0x00, 0x52, 0x03, 0x63, 0x70, 0x75, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x01, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x02, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x48, 0x03, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x48, 0x04, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x63, 0x70, 0x75, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x22, 0xee, 0x01, 0x0a, 0x03, 0x43, 0x50, 0x55, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x22, 0x8d, 0x03, 0x0a, 0x08, 0x43, 0x50, 0x55, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x28, 0x0a, 0x07, 0x73, 0x6f, 0x66, 0x74, 0x69, 0x72, 0x71, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x66, 0x74, 0x69, 0x72, 0x71, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x09, 0x67, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x69, 0x63, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x12, 0x12, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x12, 0x12, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x55, 0x73, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x66, 0x72, 0x65, 0x65, 0x22, 0xe9, 0x02, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x69, 0x64, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x69, 0x64, 0x63, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x69, 0x64, 0x63, 0x22, 0xfe, 0x02, 0x0a, 0x04, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x66, 0x72, 0x65, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x12, 0x12, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x46, 0x72, 0x65, 0x65, 0x12, 0x47, 0x0a, 0x13, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x12, 0x12, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x55, 0x73, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0xf5, 0x01, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x69, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x69, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x67, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x67, 0x6f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x72, 0x75, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xca, 0x09, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x01, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, 0x28, 0x01, 0x40, 0x01, 0x48, 0x04, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x06, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x07, 0x52, 0x0d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x04, 0x68, 0x64, 0x66, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x44, 0x46, 0x53, 0x48, 0x08, 0x52, 0x04, 0x68, 0x64, 0x66, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x68, 0x64, 0x66, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x03, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x04, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x06, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x22, 0x57, 0x0a, 0x04, 0x48, 0x44, 0x46, 0x53, 0x12, 0x3a, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x35, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xbe, 0x04, 0x0a, 0x05, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0xab, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x10, 0x01, 0x70, 0x01, 0x48, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x43, 0x0a, 0x09, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4d, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x49, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x10, 0x04, 0x2a, 0x3e, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x02, 0x2a, 0x42, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, 0x02, 0x2a, 0x5e, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x30, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x31, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x32, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x33, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x34, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x35, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x36, 0x10, 0x06, 0x42, 0x29, 0x5a, 0x27, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_pkg_apis_common_v2_common_proto_rawDescOnce sync.Once file_pkg_apis_common_v2_common_proto_rawDescData = file_pkg_apis_common_v2_common_proto_rawDesc ) func file_pkg_apis_common_v2_common_proto_rawDescGZIP() []byte { file_pkg_apis_common_v2_common_proto_rawDescOnce.Do(func() { file_pkg_apis_common_v2_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_apis_common_v2_common_proto_rawDescData) }) return file_pkg_apis_common_v2_common_proto_rawDescData } var file_pkg_apis_common_v2_common_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_pkg_apis_common_v2_common_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_pkg_apis_common_v2_common_proto_goTypes = []interface{}{ (SizeScope)(0), // 0: common.v2.SizeScope (TaskType)(0), // 1: common.v2.TaskType (TrafficType)(0), // 2: common.v2.TrafficType (Priority)(0), // 3: common.v2.Priority (*Peer)(nil), // 4: common.v2.Peer (*PersistentCachePeer)(nil), // 5: common.v2.PersistentCachePeer (*Task)(nil), // 6: common.v2.Task (*PersistentCacheTask)(nil), // 7: common.v2.PersistentCacheTask (*Host)(nil), // 8: common.v2.Host (*CPU)(nil), // 9: common.v2.CPU (*CPUTimes)(nil), // 10: common.v2.CPUTimes (*Memory)(nil), // 11: common.v2.Memory (*Network)(nil), // 12: common.v2.Network (*Disk)(nil), // 13: common.v2.Disk (*Build)(nil), // 14: common.v2.Build (*Download)(nil), // 15: common.v2.Download (*ObjectStorage)(nil), // 16: common.v2.ObjectStorage (*HDFS)(nil), // 17: common.v2.HDFS (*Range)(nil), // 18: common.v2.Range (*Piece)(nil), // 19: common.v2.Piece nil, // 20: common.v2.Task.RequestHeaderEntry nil, // 21: common.v2.Download.RequestHeaderEntry (*durationpb.Duration)(nil), // 22: google.protobuf.Duration (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp } var file_pkg_apis_common_v2_common_proto_depIdxs = []int32{ 18, // 0: common.v2.Peer.range:type_name -> common.v2.Range 3, // 1: common.v2.Peer.priority:type_name -> common.v2.Priority 19, // 2: common.v2.Peer.pieces:type_name -> common.v2.Piece 22, // 3: common.v2.Peer.cost:type_name -> google.protobuf.Duration 6, // 4: common.v2.Peer.task:type_name -> common.v2.Task 8, // 5: common.v2.Peer.host:type_name -> common.v2.Host 23, // 6: common.v2.Peer.created_at:type_name -> google.protobuf.Timestamp 23, // 7: common.v2.Peer.updated_at:type_name -> google.protobuf.Timestamp 22, // 8: common.v2.PersistentCachePeer.cost:type_name -> google.protobuf.Duration 7, // 9: common.v2.PersistentCachePeer.task:type_name -> common.v2.PersistentCacheTask 8, // 10: common.v2.PersistentCachePeer.host:type_name -> common.v2.Host 23, // 11: common.v2.PersistentCachePeer.created_at:type_name -> google.protobuf.Timestamp 23, // 12: common.v2.PersistentCachePeer.updated_at:type_name -> google.protobuf.Timestamp 1, // 13: common.v2.Task.type:type_name -> common.v2.TaskType 20, // 14: common.v2.Task.request_header:type_name -> common.v2.Task.RequestHeaderEntry 0, // 15: common.v2.Task.size_scope:type_name -> common.v2.SizeScope 19, // 16: common.v2.Task.pieces:type_name -> common.v2.Piece 23, // 17: common.v2.Task.created_at:type_name -> google.protobuf.Timestamp 23, // 18: common.v2.Task.updated_at:type_name -> google.protobuf.Timestamp 23, // 19: common.v2.PersistentCacheTask.created_at:type_name -> google.protobuf.Timestamp 23, // 20: common.v2.PersistentCacheTask.updated_at:type_name -> google.protobuf.Timestamp 9, // 21: common.v2.Host.cpu:type_name -> common.v2.CPU 11, // 22: common.v2.Host.memory:type_name -> common.v2.Memory 12, // 23: common.v2.Host.network:type_name -> common.v2.Network 13, // 24: common.v2.Host.disk:type_name -> common.v2.Disk 14, // 25: common.v2.Host.build:type_name -> common.v2.Build 10, // 26: common.v2.CPU.times:type_name -> common.v2.CPUTimes 18, // 27: common.v2.Download.range:type_name -> common.v2.Range 1, // 28: common.v2.Download.type:type_name -> common.v2.TaskType 3, // 29: common.v2.Download.priority:type_name -> common.v2.Priority 21, // 30: common.v2.Download.request_header:type_name -> common.v2.Download.RequestHeaderEntry 22, // 31: common.v2.Download.timeout:type_name -> google.protobuf.Duration 16, // 32: common.v2.Download.object_storage:type_name -> common.v2.ObjectStorage 17, // 33: common.v2.Download.hdfs:type_name -> common.v2.HDFS 2, // 34: common.v2.Piece.traffic_type:type_name -> common.v2.TrafficType 22, // 35: common.v2.Piece.cost:type_name -> google.protobuf.Duration 23, // 36: common.v2.Piece.created_at:type_name -> google.protobuf.Timestamp 37, // [37:37] is the sub-list for method output_type 37, // [37:37] is the sub-list for method input_type 37, // [37:37] is the sub-list for extension type_name 37, // [37:37] is the sub-list for extension extendee 0, // [0:37] is the sub-list for field type_name } func init() { file_pkg_apis_common_v2_common_proto_init() } func file_pkg_apis_common_v2_common_proto_init() { if File_pkg_apis_common_v2_common_proto != nil { return } if !protoimpl.UnsafeEnabled { file_pkg_apis_common_v2_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Peer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PersistentCachePeer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Task); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PersistentCacheTask); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Host); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPU); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPUTimes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Memory); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Network); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Disk); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Build); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Download); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObjectStorage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HDFS); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Range); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_pkg_apis_common_v2_common_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Piece); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_pkg_apis_common_v2_common_proto_msgTypes[0].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[2].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[3].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[4].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[5].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[8].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[10].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[11].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[12].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[13].OneofWrappers = []interface{}{} file_pkg_apis_common_v2_common_proto_msgTypes[15].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_common_v2_common_proto_rawDesc, NumEnums: 4, NumMessages: 18, NumExtensions: 0, NumServices: 0, }, GoTypes: file_pkg_apis_common_v2_common_proto_goTypes, DependencyIndexes: file_pkg_apis_common_v2_common_proto_depIdxs, EnumInfos: file_pkg_apis_common_v2_common_proto_enumTypes, MessageInfos: file_pkg_apis_common_v2_common_proto_msgTypes, }.Build() File_pkg_apis_common_v2_common_proto = out.File file_pkg_apis_common_v2_common_proto_rawDesc = nil file_pkg_apis_common_v2_common_proto_goTypes = nil file_pkg_apis_common_v2_common_proto_depIdxs = nil }