diff --git a/cmd/cmd_temp.go b/cmd/cmd_temp.go index ccba459..ec69c95 100644 --- a/cmd/cmd_temp.go +++ b/cmd/cmd_temp.go @@ -3,6 +3,7 @@ package cmd import ( "context" "log" + "os" "time" "github.com/hiddify/hiddify-core/v2/hcommon" @@ -16,26 +17,29 @@ const ( ) func init() { - conn, err := grpc.Dial(address, grpc.WithInsecure()) - if err != nil { - log.Fatalf("did not connect: %v", err) - } - defer conn.Close() - c := hcore.NewCoreClient(conn) + if os.Args[1] == "test" { + conn, err := grpc.Dial(address, grpc.WithInsecure()) + if err != nil { + log.Fatalf("did not connect: %v", err) + } + defer conn.Close() + c := hcore.NewCoreClient(conn) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() + // ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + // defer cancel() + ctx := context.Background() - // SayHello - stream, err := c.OutboundsInfo(ctx, &hcommon.Empty{}) + // SayHello + stream, err := c.OutboundsInfo(ctx, &hcommon.Empty{}) - for { - r, err := stream.Recv() - if err != nil { - log.Fatalf("could not receive: %v", err) - } - log.Printf("Received1: %s", r.String()) + for { + r, err := stream.Recv() + if err != nil { + log.Fatalf("could not receive: %v", err) + } + log.Printf("Received1: %s", r.String()) - time.Sleep(1 * time.Second) + time.Sleep(1 * time.Second) + } } } diff --git a/docs/hiddifyrpc.md b/docs/hiddifyrpc.md index f74c2c1..6141dbb 100644 --- a/docs/hiddifyrpc.md +++ b/docs/hiddifyrpc.md @@ -9,6 +9,7 @@ - [GenerateConfigRequest](#hcore-GenerateConfigRequest) - [GenerateConfigResponse](#hcore-GenerateConfigResponse) - [GenerateWarpConfigRequest](#hcore-GenerateWarpConfigRequest) + - [IpInfo](#hcore-IpInfo) - [LogMessage](#hcore-LogMessage) - [OutboundGroup](#hcore-OutboundGroup) - [OutboundGroupList](#hcore-OutboundGroupList) @@ -192,6 +193,29 @@ + + +### IpInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| ip | [string](#string) | | The IP address. | +| country_code | [string](#string) | | The country code. | +| region | [string](#string) | | The region (optional). | +| city | [string](#string) | | The city (optional). | +| asn | [int32](#int32) | | The Autonomous System Number (optional). | +| org | [string](#string) | | The organization (optional). | +| latitude | [double](#double) | | The latitude (optional). | +| longitude | [double](#double) | | The longitude (optional). | +| postal_code | [string](#string) | | The postal code (optional). | + + + + + + ### LogMessage @@ -257,6 +281,7 @@ | type | [string](#string) | | | | url_test_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | | | url_test_delay | [int32](#int32) | | | +| ipinfo | [IpInfo](#hcore-IpInfo) | | | diff --git a/go.mod b/go.mod index bf8e721..9586b4c 100644 --- a/go.mod +++ b/go.mod @@ -302,7 +302,7 @@ require ( lukechampine.com/blake3 v1.3.0 // indirect ) -replace github.com/sagernet/sing-box => github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020064059-08c71ee5f82f +replace github.com/sagernet/sing-box => github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020111745-22b807080fe7 replace github.com/xtls/xray-core => github.com/hiddify/xray-core v0.0.0-20241019134126-3f94892df016 diff --git a/go.sum b/go.sum index 793db88..85bd3c5 100644 --- a/go.sum +++ b/go.sum @@ -242,8 +242,8 @@ github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= -github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020064059-08c71ee5f82f h1:UYYtEiK8bx2sBzUkr1YV9HhAvBMjb+4Dm0Uc0OvnUfY= -github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020064059-08c71ee5f82f/go.mod h1:6apAGQPqJIb58BIYsr66tu49S5UcCNyuv1lVX+72eQA= +github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020111745-22b807080fe7 h1:+eeJtla199xUya0DonMvsMhpr/rsQrM5ePFTgfJZunI= +github.com/hiddify/hiddify-sing-box v1.8.9-0.20241020111745-22b807080fe7/go.mod h1:6apAGQPqJIb58BIYsr66tu49S5UcCNyuv1lVX+72eQA= github.com/hiddify/ray2sing v0.0.0-20240928221833-190b549d5222 h1:+MFxFxoWCA44WhqIixqL/Zkt4DwnqhQvafS0Dm4+dKM= github.com/hiddify/ray2sing v0.0.0-20240928221833-190b549d5222/go.mod h1:cFEg1b0eBgL9kBgIPAD71lHO1Q5g20PZL4dUGhQpAO8= github.com/hiddify/warp-plus v0.0.0-20240717223357-4f3122e0d11d h1:vRGKh9ou+/vQGfVYa8MczhbIVjHxlP52OWwrDWO77RA= diff --git a/v2/hcore/hcore.pb.go b/v2/hcore/hcore.pb.go index f18b994..b6889e6 100644 --- a/v2/hcore/hcore.pb.go +++ b/v2/hcore/hcore.pb.go @@ -596,6 +596,7 @@ type OutboundInfo struct { Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` UrlTestTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=url_test_time,json=urlTestTime,proto3" json:"url_test_time,omitempty"` UrlTestDelay int32 `protobuf:"varint,4,opt,name=url_test_delay,json=urlTestDelay,proto3" json:"url_test_delay,omitempty"` + Ipinfo *IpInfo `protobuf:"bytes,5,opt,name=ipinfo,proto3" json:"ipinfo,omitempty"` } func (x *OutboundInfo) Reset() { @@ -658,6 +659,124 @@ func (x *OutboundInfo) GetUrlTestDelay() int32 { return 0 } +func (x *OutboundInfo) GetIpinfo() *IpInfo { + if x != nil { + return x.Ipinfo + } + return nil +} + +type IpInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` // The IP address. + CountryCode string `protobuf:"bytes,2,opt,name=country_code,proto3" json:"country_code,omitempty"` // The country code. + Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"` // The region (optional). + City string `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"` // The city (optional). + Asn int32 `protobuf:"varint,5,opt,name=asn,proto3" json:"asn,omitempty"` // The Autonomous System Number (optional). + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` // The organization (optional). + Latitude float64 `protobuf:"fixed64,7,opt,name=latitude,proto3" json:"latitude,omitempty"` // The latitude (optional). + Longitude float64 `protobuf:"fixed64,8,opt,name=longitude,proto3" json:"longitude,omitempty"` // The longitude (optional). + PostalCode string `protobuf:"bytes,9,opt,name=postal_code,proto3" json:"postal_code,omitempty"` // The postal code (optional). +} + +func (x *IpInfo) Reset() { + *x = IpInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_v2_hcore_hcore_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IpInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpInfo) ProtoMessage() {} + +func (x *IpInfo) ProtoReflect() protoreflect.Message { + mi := &file_v2_hcore_hcore_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 IpInfo.ProtoReflect.Descriptor instead. +func (*IpInfo) Descriptor() ([]byte, []int) { + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{5} +} + +func (x *IpInfo) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *IpInfo) GetCountryCode() string { + if x != nil { + return x.CountryCode + } + return "" +} + +func (x *IpInfo) GetRegion() string { + if x != nil { + return x.Region + } + return "" +} + +func (x *IpInfo) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *IpInfo) GetAsn() int32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *IpInfo) GetOrg() string { + if x != nil { + return x.Org + } + return "" +} + +func (x *IpInfo) GetLatitude() float64 { + if x != nil { + return x.Latitude + } + return 0 +} + +func (x *IpInfo) GetLongitude() float64 { + if x != nil { + return x.Longitude + } + return 0 +} + +func (x *IpInfo) GetPostalCode() string { + if x != nil { + return x.PostalCode + } + return "" +} + type OutboundGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -674,7 +793,7 @@ type OutboundGroup struct { func (x *OutboundGroup) Reset() { *x = OutboundGroup{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[5] + mi := &file_v2_hcore_hcore_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -687,7 +806,7 @@ func (x *OutboundGroup) String() string { func (*OutboundGroup) ProtoMessage() {} func (x *OutboundGroup) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[5] + mi := &file_v2_hcore_hcore_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -700,7 +819,7 @@ func (x *OutboundGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use OutboundGroup.ProtoReflect.Descriptor instead. func (*OutboundGroup) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{5} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{6} } func (x *OutboundGroup) GetTag() string { @@ -756,7 +875,7 @@ type OutboundGroupList struct { func (x *OutboundGroupList) Reset() { *x = OutboundGroupList{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[6] + mi := &file_v2_hcore_hcore_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -769,7 +888,7 @@ func (x *OutboundGroupList) String() string { func (*OutboundGroupList) ProtoMessage() {} func (x *OutboundGroupList) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[6] + mi := &file_v2_hcore_hcore_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -782,7 +901,7 @@ func (x *OutboundGroupList) ProtoReflect() protoreflect.Message { // Deprecated: Use OutboundGroupList.ProtoReflect.Descriptor instead. func (*OutboundGroupList) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{6} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{7} } func (x *OutboundGroupList) GetItems() []*OutboundGroup { @@ -804,7 +923,7 @@ type WarpAccount struct { func (x *WarpAccount) Reset() { *x = WarpAccount{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[7] + mi := &file_v2_hcore_hcore_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -817,7 +936,7 @@ func (x *WarpAccount) String() string { func (*WarpAccount) ProtoMessage() {} func (x *WarpAccount) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[7] + mi := &file_v2_hcore_hcore_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -830,7 +949,7 @@ func (x *WarpAccount) ProtoReflect() protoreflect.Message { // Deprecated: Use WarpAccount.ProtoReflect.Descriptor instead. func (*WarpAccount) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{7} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{8} } func (x *WarpAccount) GetAccountId() string { @@ -862,7 +981,7 @@ type WarpWireguardConfig struct { func (x *WarpWireguardConfig) Reset() { *x = WarpWireguardConfig{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[8] + mi := &file_v2_hcore_hcore_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -875,7 +994,7 @@ func (x *WarpWireguardConfig) String() string { func (*WarpWireguardConfig) ProtoMessage() {} func (x *WarpWireguardConfig) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[8] + mi := &file_v2_hcore_hcore_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,7 +1007,7 @@ func (x *WarpWireguardConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use WarpWireguardConfig.ProtoReflect.Descriptor instead. func (*WarpWireguardConfig) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{8} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{9} } func (x *WarpWireguardConfig) GetPrivateKey() string { @@ -939,7 +1058,7 @@ type WarpGenerationResponse struct { func (x *WarpGenerationResponse) Reset() { *x = WarpGenerationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[9] + mi := &file_v2_hcore_hcore_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -952,7 +1071,7 @@ func (x *WarpGenerationResponse) String() string { func (*WarpGenerationResponse) ProtoMessage() {} func (x *WarpGenerationResponse) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[9] + mi := &file_v2_hcore_hcore_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -965,7 +1084,7 @@ func (x *WarpGenerationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WarpGenerationResponse.ProtoReflect.Descriptor instead. func (*WarpGenerationResponse) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{9} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{10} } func (x *WarpGenerationResponse) GetAccount() *WarpAccount { @@ -1001,7 +1120,7 @@ type SystemProxyStatus struct { func (x *SystemProxyStatus) Reset() { *x = SystemProxyStatus{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[10] + mi := &file_v2_hcore_hcore_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1014,7 +1133,7 @@ func (x *SystemProxyStatus) String() string { func (*SystemProxyStatus) ProtoMessage() {} func (x *SystemProxyStatus) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[10] + mi := &file_v2_hcore_hcore_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1027,7 +1146,7 @@ func (x *SystemProxyStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemProxyStatus.ProtoReflect.Descriptor instead. func (*SystemProxyStatus) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{10} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{11} } func (x *SystemProxyStatus) GetAvailable() bool { @@ -1058,7 +1177,7 @@ type ParseRequest struct { func (x *ParseRequest) Reset() { *x = ParseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[11] + mi := &file_v2_hcore_hcore_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1071,7 +1190,7 @@ func (x *ParseRequest) String() string { func (*ParseRequest) ProtoMessage() {} func (x *ParseRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[11] + mi := &file_v2_hcore_hcore_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1084,7 +1203,7 @@ func (x *ParseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ParseRequest.ProtoReflect.Descriptor instead. func (*ParseRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{11} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{12} } func (x *ParseRequest) GetContent() string { @@ -1128,7 +1247,7 @@ type ParseResponse struct { func (x *ParseResponse) Reset() { *x = ParseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[12] + mi := &file_v2_hcore_hcore_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1141,7 +1260,7 @@ func (x *ParseResponse) String() string { func (*ParseResponse) ProtoMessage() {} func (x *ParseResponse) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[12] + mi := &file_v2_hcore_hcore_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1154,7 +1273,7 @@ func (x *ParseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ParseResponse.ProtoReflect.Descriptor instead. func (*ParseResponse) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{12} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{13} } func (x *ParseResponse) GetResponseCode() hcommon.ResponseCode { @@ -1189,7 +1308,7 @@ type ChangeHiddifySettingsRequest struct { func (x *ChangeHiddifySettingsRequest) Reset() { *x = ChangeHiddifySettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[13] + mi := &file_v2_hcore_hcore_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1202,7 +1321,7 @@ func (x *ChangeHiddifySettingsRequest) String() string { func (*ChangeHiddifySettingsRequest) ProtoMessage() {} func (x *ChangeHiddifySettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[13] + mi := &file_v2_hcore_hcore_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1215,7 +1334,7 @@ func (x *ChangeHiddifySettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeHiddifySettingsRequest.ProtoReflect.Descriptor instead. func (*ChangeHiddifySettingsRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{13} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{14} } func (x *ChangeHiddifySettingsRequest) GetHiddifySettingsJson() string { @@ -1238,7 +1357,7 @@ type GenerateConfigRequest struct { func (x *GenerateConfigRequest) Reset() { *x = GenerateConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[14] + mi := &file_v2_hcore_hcore_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1251,7 +1370,7 @@ func (x *GenerateConfigRequest) String() string { func (*GenerateConfigRequest) ProtoMessage() {} func (x *GenerateConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[14] + mi := &file_v2_hcore_hcore_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1264,7 +1383,7 @@ func (x *GenerateConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateConfigRequest.ProtoReflect.Descriptor instead. func (*GenerateConfigRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{14} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{15} } func (x *GenerateConfigRequest) GetPath() string { @@ -1299,7 +1418,7 @@ type GenerateConfigResponse struct { func (x *GenerateConfigResponse) Reset() { *x = GenerateConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[15] + mi := &file_v2_hcore_hcore_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1312,7 +1431,7 @@ func (x *GenerateConfigResponse) String() string { func (*GenerateConfigResponse) ProtoMessage() {} func (x *GenerateConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[15] + mi := &file_v2_hcore_hcore_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1325,7 +1444,7 @@ func (x *GenerateConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateConfigResponse.ProtoReflect.Descriptor instead. func (*GenerateConfigResponse) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{15} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{16} } func (x *GenerateConfigResponse) GetConfigContent() string { @@ -1347,7 +1466,7 @@ type SelectOutboundRequest struct { func (x *SelectOutboundRequest) Reset() { *x = SelectOutboundRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[16] + mi := &file_v2_hcore_hcore_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1360,7 +1479,7 @@ func (x *SelectOutboundRequest) String() string { func (*SelectOutboundRequest) ProtoMessage() {} func (x *SelectOutboundRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[16] + mi := &file_v2_hcore_hcore_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1373,7 +1492,7 @@ func (x *SelectOutboundRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SelectOutboundRequest.ProtoReflect.Descriptor instead. func (*SelectOutboundRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{16} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{17} } func (x *SelectOutboundRequest) GetGroupTag() string { @@ -1401,7 +1520,7 @@ type UrlTestRequest struct { func (x *UrlTestRequest) Reset() { *x = UrlTestRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[17] + mi := &file_v2_hcore_hcore_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1414,7 +1533,7 @@ func (x *UrlTestRequest) String() string { func (*UrlTestRequest) ProtoMessage() {} func (x *UrlTestRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[17] + mi := &file_v2_hcore_hcore_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1427,7 +1546,7 @@ func (x *UrlTestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UrlTestRequest.ProtoReflect.Descriptor instead. func (*UrlTestRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{17} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{18} } func (x *UrlTestRequest) GetGroupTag() string { @@ -1450,7 +1569,7 @@ type GenerateWarpConfigRequest struct { func (x *GenerateWarpConfigRequest) Reset() { *x = GenerateWarpConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[18] + mi := &file_v2_hcore_hcore_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1463,7 +1582,7 @@ func (x *GenerateWarpConfigRequest) String() string { func (*GenerateWarpConfigRequest) ProtoMessage() {} func (x *GenerateWarpConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[18] + mi := &file_v2_hcore_hcore_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1476,7 +1595,7 @@ func (x *GenerateWarpConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateWarpConfigRequest.ProtoReflect.Descriptor instead. func (*GenerateWarpConfigRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{18} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{19} } func (x *GenerateWarpConfigRequest) GetLicenseKey() string { @@ -1511,7 +1630,7 @@ type SetSystemProxyEnabledRequest struct { func (x *SetSystemProxyEnabledRequest) Reset() { *x = SetSystemProxyEnabledRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[19] + mi := &file_v2_hcore_hcore_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1524,7 +1643,7 @@ func (x *SetSystemProxyEnabledRequest) String() string { func (*SetSystemProxyEnabledRequest) ProtoMessage() {} func (x *SetSystemProxyEnabledRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[19] + mi := &file_v2_hcore_hcore_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1537,7 +1656,7 @@ func (x *SetSystemProxyEnabledRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSystemProxyEnabledRequest.ProtoReflect.Descriptor instead. func (*SetSystemProxyEnabledRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{19} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{20} } func (x *SetSystemProxyEnabledRequest) GetIsEnabled() bool { @@ -1561,7 +1680,7 @@ type LogMessage struct { func (x *LogMessage) Reset() { *x = LogMessage{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[20] + mi := &file_v2_hcore_hcore_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1574,7 +1693,7 @@ func (x *LogMessage) String() string { func (*LogMessage) ProtoMessage() {} func (x *LogMessage) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[20] + mi := &file_v2_hcore_hcore_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1587,7 +1706,7 @@ func (x *LogMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessage.ProtoReflect.Descriptor instead. func (*LogMessage) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{20} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{21} } func (x *LogMessage) GetLevel() LogLevel { @@ -1627,7 +1746,7 @@ type StopRequest struct { func (x *StopRequest) Reset() { *x = StopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v2_hcore_hcore_proto_msgTypes[21] + mi := &file_v2_hcore_hcore_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1640,7 +1759,7 @@ func (x *StopRequest) String() string { func (*StopRequest) ProtoMessage() {} func (x *StopRequest) ProtoReflect() protoreflect.Message { - mi := &file_v2_hcore_hcore_proto_msgTypes[21] + mi := &file_v2_hcore_hcore_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1653,7 +1772,7 @@ func (x *StopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopRequest.ProtoReflect.Descriptor instead. func (*StopRequest) Descriptor() ([]byte, []int) { - return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{21} + return file_v2_hcore_hcore_proto_rawDescGZIP(), []int{22} } var File_v2_hcore_hcore_proto protoreflect.FileDescriptor @@ -1718,7 +1837,7 @@ var file_v2_hcore_hcore_proto_rawDesc = []byte{ 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x22, 0x9a, 0x01, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, + 0x6c, 0x22, 0xc1, 0x01, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x75, 0x72, 0x6c, 0x5f, @@ -1727,156 +1846,173 @@ var file_v2_hcore_hcore_proto_rawDesc = []byte{ 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x75, 0x72, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x75, 0x72, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0xb9, - 0x01, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, - 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x49, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x12, - 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3f, 0x0a, 0x11, 0x4f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x4f, 0x0a, 0x0b, 0x57, - 0x61, 0x72, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xdf, 0x01, 0x0a, - 0x13, 0x57, 0x61, 0x72, 0x70, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x2d, 0x69, 0x70, 0x76, 0x34, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x2d, 0x69, 0x70, 0x76, 0x36, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x70, 0x65, 0x65, 0x72, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x6b, 0x65, 0x79, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x69, 0x64, 0x22, 0x8c, - 0x01, 0x0a, 0x16, 0x57, 0x61, 0x72, 0x70, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x57, 0x61, 0x72, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x57, 0x61, 0x72, 0x70, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x4b, 0x0a, - 0x11, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x0c, 0x50, 0x61, - 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x22, 0x7f, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x68, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x48, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x68, 0x69, 0x64, - 0x64, 0x69, 0x66, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, - 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x5e, 0x0a, - 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, - 0x6d, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x22, 0x3f, 0x0a, - 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x57, - 0x0a, 0x15, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x54, 0x61, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x22, 0x2d, 0x0a, 0x0e, 0x55, 0x72, 0x6c, 0x54, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x6f, + 0x52, 0x0c, 0x75, 0x72, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x25, + 0x0a, 0x06, 0x69, 0x70, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x49, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x69, + 0x70, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xe8, 0x01, 0x0a, 0x06, 0x49, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, + 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, + 0x73, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x72, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6f, 0x72, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x22, 0xb9, 0x01, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x49, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x45, 0x78, 0x70, 0x61, 0x6e, + 0x64, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3f, 0x0a, 0x11, + 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x4f, 0x0a, + 0x0b, 0x57, 0x61, 0x72, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xdf, + 0x01, 0x0a, 0x13, 0x57, 0x61, 0x72, 0x70, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x2d, 0x69, 0x70, 0x76, 0x34, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x2d, 0x69, 0x70, 0x76, 0x36, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, + 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x6b, + 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x69, 0x64, + 0x22, 0x8c, 0x01, 0x0a, 0x16, 0x57, 0x61, 0x72, 0x70, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x61, 0x72, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x61, 0x72, 0x70, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x4b, 0x0a, 0x11, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x0c, + 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x22, 0x7f, 0x0a, 0x0d, 0x50, 0x61, + 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x68, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x68, + 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, + 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x68, 0x69, 0x64, 0x64, + 0x69, 0x66, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, + 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, + 0x75, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x22, + 0x3f, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x22, 0x57, 0x0a, 0x15, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x22, 0x7e, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x57, 0x61, 0x72, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3d, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x68, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x42, 0x0a, 0x0a, 0x43, 0x6f, 0x72, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x2a, 0xe2, 0x02, 0x0a, - 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, - 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x50, 0x54, 0x59, - 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, - 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, - 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x03, 0x12, 0x11, - 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, - 0x04, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x52, 0x45, 0x41, - 0x44, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, - 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x07, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, - 0x44, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x19, 0x0a, - 0x15, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x49, 0x4e, 0x47, 0x5f, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0b, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x10, 0x0c, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x10, - 0x0e, 0x2a, 0x42, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, - 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, - 0x54, 0x41, 0x4c, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0x02, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, - 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, + 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x22, 0x2d, 0x0a, 0x0e, 0x55, 0x72, 0x6c, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x67, 0x22, 0x7e, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x57, 0x61, 0x72, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3d, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x68, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, + 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x68, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x42, 0x0a, 0x0a, 0x43, 0x6f, + 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, + 0x50, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x2a, 0xe2, + 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, + 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x50, + 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x03, + 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, + 0x45, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, + 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x52, + 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x13, + 0x0a, 0x0f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, + 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, + 0x50, 0x45, 0x44, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, + 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x12, + 0x19, 0x0a, 0x15, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x49, 0x4e, + 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0b, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x10, 0x0c, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, + 0x41, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x0d, 0x12, 0x13, + 0x0a, 0x0f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, + 0x4e, 0x10, 0x0e, 0x2a, 0x42, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, + 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x10, 0x02, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x69, 0x64, 0x64, 0x69, 0x66, 0x79, 0x2f, 0x68, 0x69, 0x64, 0x64, + 0x69, 0x66, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x68, 0x63, 0x6f, 0x72, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1892,7 +2028,7 @@ func file_v2_hcore_hcore_proto_rawDescGZIP() []byte { } var file_v2_hcore_hcore_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_v2_hcore_hcore_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_v2_hcore_hcore_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_v2_hcore_hcore_proto_goTypes = []any{ (CoreStates)(0), // 0: hcore.CoreStates (MessageType)(0), // 1: hcore.MessageType @@ -1903,43 +2039,45 @@ var file_v2_hcore_hcore_proto_goTypes = []any{ (*SetupRequest)(nil), // 6: hcore.SetupRequest (*SystemInfo)(nil), // 7: hcore.SystemInfo (*OutboundInfo)(nil), // 8: hcore.OutboundInfo - (*OutboundGroup)(nil), // 9: hcore.OutboundGroup - (*OutboundGroupList)(nil), // 10: hcore.OutboundGroupList - (*WarpAccount)(nil), // 11: hcore.WarpAccount - (*WarpWireguardConfig)(nil), // 12: hcore.WarpWireguardConfig - (*WarpGenerationResponse)(nil), // 13: hcore.WarpGenerationResponse - (*SystemProxyStatus)(nil), // 14: hcore.SystemProxyStatus - (*ParseRequest)(nil), // 15: hcore.ParseRequest - (*ParseResponse)(nil), // 16: hcore.ParseResponse - (*ChangeHiddifySettingsRequest)(nil), // 17: hcore.ChangeHiddifySettingsRequest - (*GenerateConfigRequest)(nil), // 18: hcore.GenerateConfigRequest - (*GenerateConfigResponse)(nil), // 19: hcore.GenerateConfigResponse - (*SelectOutboundRequest)(nil), // 20: hcore.SelectOutboundRequest - (*UrlTestRequest)(nil), // 21: hcore.UrlTestRequest - (*GenerateWarpConfigRequest)(nil), // 22: hcore.GenerateWarpConfigRequest - (*SetSystemProxyEnabledRequest)(nil), // 23: hcore.SetSystemProxyEnabledRequest - (*LogMessage)(nil), // 24: hcore.LogMessage - (*StopRequest)(nil), // 25: hcore.StopRequest - (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp - (hcommon.ResponseCode)(0), // 27: hcommon.ResponseCode + (*IpInfo)(nil), // 9: hcore.IpInfo + (*OutboundGroup)(nil), // 10: hcore.OutboundGroup + (*OutboundGroupList)(nil), // 11: hcore.OutboundGroupList + (*WarpAccount)(nil), // 12: hcore.WarpAccount + (*WarpWireguardConfig)(nil), // 13: hcore.WarpWireguardConfig + (*WarpGenerationResponse)(nil), // 14: hcore.WarpGenerationResponse + (*SystemProxyStatus)(nil), // 15: hcore.SystemProxyStatus + (*ParseRequest)(nil), // 16: hcore.ParseRequest + (*ParseResponse)(nil), // 17: hcore.ParseResponse + (*ChangeHiddifySettingsRequest)(nil), // 18: hcore.ChangeHiddifySettingsRequest + (*GenerateConfigRequest)(nil), // 19: hcore.GenerateConfigRequest + (*GenerateConfigResponse)(nil), // 20: hcore.GenerateConfigResponse + (*SelectOutboundRequest)(nil), // 21: hcore.SelectOutboundRequest + (*UrlTestRequest)(nil), // 22: hcore.UrlTestRequest + (*GenerateWarpConfigRequest)(nil), // 23: hcore.GenerateWarpConfigRequest + (*SetSystemProxyEnabledRequest)(nil), // 24: hcore.SetSystemProxyEnabledRequest + (*LogMessage)(nil), // 25: hcore.LogMessage + (*StopRequest)(nil), // 26: hcore.StopRequest + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (hcommon.ResponseCode)(0), // 28: hcommon.ResponseCode } var file_v2_hcore_hcore_proto_depIdxs = []int32{ 0, // 0: hcore.CoreInfoResponse.core_state:type_name -> hcore.CoreStates 1, // 1: hcore.CoreInfoResponse.message_type:type_name -> hcore.MessageType - 26, // 2: hcore.OutboundInfo.url_test_time:type_name -> google.protobuf.Timestamp - 8, // 3: hcore.OutboundGroup.items:type_name -> hcore.OutboundInfo - 9, // 4: hcore.OutboundGroupList.items:type_name -> hcore.OutboundGroup - 11, // 5: hcore.WarpGenerationResponse.account:type_name -> hcore.WarpAccount - 12, // 6: hcore.WarpGenerationResponse.config:type_name -> hcore.WarpWireguardConfig - 27, // 7: hcore.ParseResponse.response_code:type_name -> hcommon.ResponseCode - 2, // 8: hcore.LogMessage.level:type_name -> hcore.LogLevel - 3, // 9: hcore.LogMessage.type:type_name -> hcore.LogType - 26, // 10: hcore.LogMessage.time:type_name -> google.protobuf.Timestamp - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 27, // 2: hcore.OutboundInfo.url_test_time:type_name -> google.protobuf.Timestamp + 9, // 3: hcore.OutboundInfo.ipinfo:type_name -> hcore.IpInfo + 8, // 4: hcore.OutboundGroup.items:type_name -> hcore.OutboundInfo + 10, // 5: hcore.OutboundGroupList.items:type_name -> hcore.OutboundGroup + 12, // 6: hcore.WarpGenerationResponse.account:type_name -> hcore.WarpAccount + 13, // 7: hcore.WarpGenerationResponse.config:type_name -> hcore.WarpWireguardConfig + 28, // 8: hcore.ParseResponse.response_code:type_name -> hcommon.ResponseCode + 2, // 9: hcore.LogMessage.level:type_name -> hcore.LogLevel + 3, // 10: hcore.LogMessage.type:type_name -> hcore.LogType + 27, // 11: hcore.LogMessage.time:type_name -> google.protobuf.Timestamp + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_v2_hcore_hcore_proto_init() } @@ -2009,7 +2147,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*OutboundGroup); i { + switch v := v.(*IpInfo); i { case 0: return &v.state case 1: @@ -2021,7 +2159,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*OutboundGroupList); i { + switch v := v.(*OutboundGroup); i { case 0: return &v.state case 1: @@ -2033,7 +2171,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*WarpAccount); i { + switch v := v.(*OutboundGroupList); i { case 0: return &v.state case 1: @@ -2045,7 +2183,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*WarpWireguardConfig); i { + switch v := v.(*WarpAccount); i { case 0: return &v.state case 1: @@ -2057,7 +2195,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*WarpGenerationResponse); i { + switch v := v.(*WarpWireguardConfig); i { case 0: return &v.state case 1: @@ -2069,7 +2207,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*SystemProxyStatus); i { + switch v := v.(*WarpGenerationResponse); i { case 0: return &v.state case 1: @@ -2081,7 +2219,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ParseRequest); i { + switch v := v.(*SystemProxyStatus); i { case 0: return &v.state case 1: @@ -2093,7 +2231,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ParseResponse); i { + switch v := v.(*ParseRequest); i { case 0: return &v.state case 1: @@ -2105,7 +2243,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*ChangeHiddifySettingsRequest); i { + switch v := v.(*ParseResponse); i { case 0: return &v.state case 1: @@ -2117,7 +2255,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*GenerateConfigRequest); i { + switch v := v.(*ChangeHiddifySettingsRequest); i { case 0: return &v.state case 1: @@ -2129,7 +2267,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*GenerateConfigResponse); i { + switch v := v.(*GenerateConfigRequest); i { case 0: return &v.state case 1: @@ -2141,7 +2279,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*SelectOutboundRequest); i { + switch v := v.(*GenerateConfigResponse); i { case 0: return &v.state case 1: @@ -2153,7 +2291,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*UrlTestRequest); i { + switch v := v.(*SelectOutboundRequest); i { case 0: return &v.state case 1: @@ -2165,7 +2303,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*GenerateWarpConfigRequest); i { + switch v := v.(*UrlTestRequest); i { case 0: return &v.state case 1: @@ -2177,7 +2315,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*SetSystemProxyEnabledRequest); i { + switch v := v.(*GenerateWarpConfigRequest); i { case 0: return &v.state case 1: @@ -2189,7 +2327,7 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*LogMessage); i { + switch v := v.(*SetSystemProxyEnabledRequest); i { case 0: return &v.state case 1: @@ -2201,6 +2339,18 @@ func file_v2_hcore_hcore_proto_init() { } } file_v2_hcore_hcore_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*LogMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v2_hcore_hcore_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*StopRequest); i { case 0: return &v.state @@ -2219,7 +2369,7 @@ func file_v2_hcore_hcore_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_v2_hcore_hcore_proto_rawDesc, NumEnums: 4, - NumMessages: 22, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/v2/hcore/hcore.proto b/v2/hcore/hcore.proto index 42d6226..8dd2d5e 100644 --- a/v2/hcore/hcore.proto +++ b/v2/hcore/hcore.proto @@ -70,8 +70,20 @@ message OutboundInfo { string type = 2; google.protobuf.Timestamp url_test_time = 3; int32 url_test_delay = 4; + IpInfo ipinfo = 5; } +message IpInfo { + string ip = 1 [json_name = "ip"]; // The IP address. + string country_code = 2 [json_name = "country_code"]; // The country code. + string region = 3 [json_name = "region"]; // The region (optional). + string city = 4 [json_name = "city"]; // The city (optional). + int32 asn = 5 [json_name = "asn"]; // The Autonomous System Number (optional). + string org = 6 [json_name = "org"]; // The organization (optional). + double latitude = 7 [json_name = "latitude"]; // The latitude (optional). + double longitude = 8 [json_name = "longitude"]; // The longitude (optional). + string postal_code = 9 [json_name = "postal_code"]; // The postal code (optional). +} message OutboundGroup { string tag = 1; string type = 2; diff --git a/v2/hcore/proxy_info.go b/v2/hcore/proxy_info.go index afa9893..fb91c62 100644 --- a/v2/hcore/proxy_info.go +++ b/v2/hcore/proxy_info.go @@ -22,6 +22,19 @@ func GetProxyInfo(detour adapter.Outbound) *OutboundInfo { if url_test_history != nil { out.UrlTestTime = timestamppb.New(url_test_history.Time) out.UrlTestDelay = int32(url_test_history.Delay) + if url_test_history.IpInfo != nil { + out.Ipinfo = &IpInfo{ + Ip: url_test_history.IpInfo.IP, + CountryCode: url_test_history.IpInfo.CountryCode, + Region: url_test_history.IpInfo.Region, + City: url_test_history.IpInfo.City, + Asn: int32(url_test_history.IpInfo.ASN), + Org: url_test_history.IpInfo.Org, + Latitude: url_test_history.IpInfo.Latitude, + Longitude: url_test_history.IpInfo.Longitude, + PostalCode: url_test_history.IpInfo.PostalCode, + } + } } return out @@ -87,6 +100,7 @@ func AllProxiesInfoStream(stream grpc.ServerStreamingServer[OutboundGroupList], if err != nil { return err } + stream.Send(GetAllProxiesInfo(onlyMain)) for { select { case <-stream.Context().Done():