From 53db332780656dee11a1da0e8ed7e91399e7f908 Mon Sep 17 00:00:00 2001 From: zhangxu Date: Thu, 4 Apr 2019 14:08:23 +0800 Subject: [PATCH] dev: add option for setting host --- cmd/backend/backend.go | 4 + pkg/client/api.go | 22 ++ pkg/pb/metapb/metapb.pb.go | 430 +++++++++++++++++++++++-------------- pkg/pb/metapb/metapb.proto | 8 + pkg/pb/rpcpb/rpcpb.pb.go | 90 ++++---- pkg/proxy/dispatcher.go | 14 ++ pkg/proxy/proxy.go | 2 +- 7 files changed, 368 insertions(+), 202 deletions(-) diff --git a/cmd/backend/backend.go b/cmd/backend/backend.go index 9e7e2af5..8c230143 100644 --- a/cmd/backend/backend.go +++ b/cmd/backend/backend.go @@ -44,6 +44,10 @@ func main() { return c.String(http.StatusOK, c.Request().Header.Get(name)) }) + server.GET("/host", func(c echo.Context) error { + return c.String(http.StatusOK, c.Request().Host) + }) + server.GET("/error", func(c echo.Context) error { return c.NoContent(http.StatusBadRequest) }) diff --git a/pkg/client/api.go b/pkg/client/api.go index af3ab374..4bf603d1 100644 --- a/pkg/client/api.go +++ b/pkg/client/api.go @@ -647,6 +647,28 @@ func (ab *APIBuilder) addRenderObject(nameInTemplate string, flatAttrs bool, nam return ab } +// AddDispatchNodeHost add host +func (ab *APIBuilder) AddDispatchNodeHost(cluster uint64, hostType metapb.HostType, custom string) *APIBuilder { + return ab.AddDispatchNodeHostWithIndex(cluster, 0, hostType, custom) +} + +// AddDispatchNodeHostWithIndex add host +func (ab *APIBuilder) AddDispatchNodeHostWithIndex(cluster uint64, idx int, hostType metapb.HostType, custom string) *APIBuilder { + node := ab.getNode(cluster, idx) + if nil == node { + ab.value.Nodes = append(ab.value.Nodes, &metapb.DispatchNode{ + ClusterID: cluster, + HostType: hostType, + CustemHost: custom, + }) + } else { + node.HostType = hostType + node.CustemHost = custom + } + + return ab +} + // AddTag add tag for api func (ab *APIBuilder) AddTag(key, value string) *APIBuilder { ab.value.Tags = append(ab.value.Tags, &metapb.PairValue{ diff --git a/pkg/pb/metapb/metapb.pb.go b/pkg/pb/metapb/metapb.pb.go index c2ef40d6..83333722 100644 --- a/pkg/pb/metapb/metapb.pb.go +++ b/pkg/pb/metapb/metapb.pb.go @@ -63,7 +63,7 @@ func (x *Status) UnmarshalJSON(data []byte) error { return nil } func (Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{0} + return fileDescriptor_metapb_484856c546ff2519, []int{0} } // CircuitStatus is the circuit breaker status @@ -103,7 +103,7 @@ func (x *CircuitStatus) UnmarshalJSON(data []byte) error { return nil } func (CircuitStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{1} + return fileDescriptor_metapb_484856c546ff2519, []int{1} } // LoadBalance the load balance enum @@ -143,7 +143,7 @@ func (x *LoadBalance) UnmarshalJSON(data []byte) error { return nil } func (LoadBalance) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{2} + return fileDescriptor_metapb_484856c546ff2519, []int{2} } // Protocol is the protocol of the backend api @@ -186,7 +186,7 @@ func (x *Protocol) UnmarshalJSON(data []byte) error { return nil } func (Protocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{3} + return fileDescriptor_metapb_484856c546ff2519, []int{3} } type Source int32 @@ -234,7 +234,7 @@ func (x *Source) UnmarshalJSON(data []byte) error { return nil } func (Source) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{4} + return fileDescriptor_metapb_484856c546ff2519, []int{4} } type RuleType int32 @@ -267,7 +267,7 @@ func (x *RuleType) UnmarshalJSON(data []byte) error { return nil } func (RuleType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{5} + return fileDescriptor_metapb_484856c546ff2519, []int{5} } type CMP int32 @@ -318,7 +318,7 @@ func (x *CMP) UnmarshalJSON(data []byte) error { return nil } func (CMP) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{6} + return fileDescriptor_metapb_484856c546ff2519, []int{6} } type RoutingStrategy int32 @@ -354,7 +354,7 @@ func (x *RoutingStrategy) UnmarshalJSON(data []byte) error { return nil } func (RoutingStrategy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{7} + return fileDescriptor_metapb_484856c546ff2519, []int{7} } type MatchRule int32 @@ -393,7 +393,46 @@ func (x *MatchRule) UnmarshalJSON(data []byte) error { return nil } func (MatchRule) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{8} + return fileDescriptor_metapb_484856c546ff2519, []int{8} +} + +type HostType int32 + +const ( + HostOrigin HostType = 0 + HostServerAddress HostType = 1 + HostCustom HostType = 2 +) + +var HostType_name = map[int32]string{ + 0: "HostOrigin", + 1: "HostServerAddress", + 2: "HostCustom", +} +var HostType_value = map[string]int32{ + "HostOrigin": 0, + "HostServerAddress": 1, + "HostCustom": 2, +} + +func (x HostType) Enum() *HostType { + p := new(HostType) + *p = x + return p +} +func (x HostType) String() string { + return proto.EnumName(HostType_name, int32(x)) +} +func (x *HostType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(HostType_value, data, "HostType") + if err != nil { + return err + } + *x = HostType(value) + return nil +} +func (HostType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_metapb_484856c546ff2519, []int{9} } // Proxy is a meta data of the gateway proxy @@ -409,7 +448,7 @@ func (m *Proxy) Reset() { *m = Proxy{} } func (m *Proxy) String() string { return proto.CompactTextString(m) } func (*Proxy) ProtoMessage() {} func (*Proxy) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{0} + return fileDescriptor_metapb_484856c546ff2519, []int{0} } func (m *Proxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -466,7 +505,7 @@ func (m *Cluster) Reset() { *m = Cluster{} } func (m *Cluster) String() string { return proto.CompactTextString(m) } func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{1} + return fileDescriptor_metapb_484856c546ff2519, []int{1} } func (m *Cluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -531,7 +570,7 @@ func (m *HeathCheck) Reset() { *m = HeathCheck{} } func (m *HeathCheck) String() string { return proto.CompactTextString(m) } func (*HeathCheck) ProtoMessage() {} func (*HeathCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{2} + return fileDescriptor_metapb_484856c546ff2519, []int{2} } func (m *HeathCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -604,7 +643,7 @@ func (m *CircuitBreaker) Reset() { *m = CircuitBreaker{} } func (m *CircuitBreaker) String() string { return proto.CompactTextString(m) } func (*CircuitBreaker) ProtoMessage() {} func (*CircuitBreaker) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{3} + return fileDescriptor_metapb_484856c546ff2519, []int{3} } func (m *CircuitBreaker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -686,7 +725,7 @@ func (m *Server) Reset() { *m = Server{} } func (m *Server) String() string { return proto.CompactTextString(m) } func (*Server) ProtoMessage() {} func (*Server) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{4} + return fileDescriptor_metapb_484856c546ff2519, []int{4} } func (m *Server) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -777,7 +816,7 @@ func (m *Bind) Reset() { *m = Bind{} } func (m *Bind) String() string { return proto.CompactTextString(m) } func (*Bind) ProtoMessage() {} func (*Bind) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{5} + return fileDescriptor_metapb_484856c546ff2519, []int{5} } func (m *Bind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -833,7 +872,7 @@ func (m *PairValue) Reset() { *m = PairValue{} } func (m *PairValue) String() string { return proto.CompactTextString(m) } func (*PairValue) ProtoMessage() {} func (*PairValue) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{6} + return fileDescriptor_metapb_484856c546ff2519, []int{6} } func (m *PairValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -889,7 +928,7 @@ func (m *IPAccessControl) Reset() { *m = IPAccessControl{} } func (m *IPAccessControl) String() string { return proto.CompactTextString(m) } func (*IPAccessControl) ProtoMessage() {} func (*IPAccessControl) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{7} + return fileDescriptor_metapb_484856c546ff2519, []int{7} } func (m *IPAccessControl) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -947,7 +986,7 @@ func (m *HTTPResult) Reset() { *m = HTTPResult{} } func (m *HTTPResult) String() string { return proto.CompactTextString(m) } func (*HTTPResult) ProtoMessage() {} func (*HTTPResult) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{8} + return fileDescriptor_metapb_484856c546ff2519, []int{8} } func (m *HTTPResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1018,7 +1057,7 @@ func (m *Parameter) Reset() { *m = Parameter{} } func (m *Parameter) String() string { return proto.CompactTextString(m) } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{9} + return fileDescriptor_metapb_484856c546ff2519, []int{9} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1081,7 +1120,7 @@ func (m *ValidationRule) Reset() { *m = ValidationRule{} } func (m *ValidationRule) String() string { return proto.CompactTextString(m) } func (*ValidationRule) ProtoMessage() {} func (*ValidationRule) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{10} + return fileDescriptor_metapb_484856c546ff2519, []int{10} } func (m *ValidationRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1138,7 +1177,7 @@ func (m *Validation) Reset() { *m = Validation{} } func (m *Validation) String() string { return proto.CompactTextString(m) } func (*Validation) ProtoMessage() {} func (*Validation) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{11} + return fileDescriptor_metapb_484856c546ff2519, []int{11} } func (m *Validation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1202,7 +1241,7 @@ func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (m *RetryStrategy) String() string { return proto.CompactTextString(m) } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{12} + return fileDescriptor_metapb_484856c546ff2519, []int{12} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1265,6 +1304,8 @@ type DispatchNode struct { RetryStrategy *RetryStrategy `protobuf:"bytes,9,opt,name=retryStrategy" json:"retryStrategy,omitempty"` WriteTimeout int64 `protobuf:"varint,10,opt,name=writeTimeout" json:"writeTimeout"` ReadTimeout int64 `protobuf:"varint,11,opt,name=readTimeout" json:"readTimeout"` + HostType HostType `protobuf:"varint,12,opt,name=hostType,enum=metapb.HostType" json:"hostType"` + CustemHost string `protobuf:"bytes,13,opt,name=custemHost" json:"custemHost"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1274,7 +1315,7 @@ func (m *DispatchNode) Reset() { *m = DispatchNode{} } func (m *DispatchNode) String() string { return proto.CompactTextString(m) } func (*DispatchNode) ProtoMessage() {} func (*DispatchNode) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{13} + return fileDescriptor_metapb_484856c546ff2519, []int{13} } func (m *DispatchNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1380,6 +1421,20 @@ func (m *DispatchNode) GetReadTimeout() int64 { return 0 } +func (m *DispatchNode) GetHostType() HostType { + if m != nil { + return m.HostType + } + return HostOrigin +} + +func (m *DispatchNode) GetCustemHost() string { + if m != nil { + return m.CustemHost + } + return "" +} + // Cache is used for cache api result type Cache struct { Keys []Parameter `protobuf:"bytes,1,rep,name=keys" json:"keys"` @@ -1394,7 +1449,7 @@ func (m *Cache) Reset() { *m = Cache{} } func (m *Cache) String() string { return proto.CompactTextString(m) } func (*Cache) ProtoMessage() {} func (*Cache) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{14} + return fileDescriptor_metapb_484856c546ff2519, []int{14} } func (m *Cache) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1456,7 +1511,7 @@ func (m *RenderTemplate) Reset() { *m = RenderTemplate{} } func (m *RenderTemplate) String() string { return proto.CompactTextString(m) } func (*RenderTemplate) ProtoMessage() {} func (*RenderTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{15} + return fileDescriptor_metapb_484856c546ff2519, []int{15} } func (m *RenderTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1506,7 +1561,7 @@ func (m *RenderObject) Reset() { *m = RenderObject{} } func (m *RenderObject) String() string { return proto.CompactTextString(m) } func (*RenderObject) ProtoMessage() {} func (*RenderObject) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{16} + return fileDescriptor_metapb_484856c546ff2519, []int{16} } func (m *RenderObject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1569,7 +1624,7 @@ func (m *RenderAttr) Reset() { *m = RenderAttr{} } func (m *RenderAttr) String() string { return proto.CompactTextString(m) } func (*RenderAttr) ProtoMessage() {} func (*RenderAttr) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{17} + return fileDescriptor_metapb_484856c546ff2519, []int{17} } func (m *RenderAttr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1642,7 +1697,7 @@ func (m *API) Reset() { *m = API{} } func (m *API) String() string { return proto.CompactTextString(m) } func (*API) ProtoMessage() {} func (*API) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{18} + return fileDescriptor_metapb_484856c546ff2519, []int{18} } func (m *API) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1818,7 +1873,7 @@ func (m *Condition) Reset() { *m = Condition{} } func (m *Condition) String() string { return proto.CompactTextString(m) } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{19} + return fileDescriptor_metapb_484856c546ff2519, []int{19} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1887,7 +1942,7 @@ func (m *Routing) Reset() { *m = Routing{} } func (m *Routing) String() string { return proto.CompactTextString(m) } func (*Routing) ProtoMessage() {} func (*Routing) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{20} + return fileDescriptor_metapb_484856c546ff2519, []int{20} } func (m *Routing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1984,7 +2039,7 @@ func (m *WebSocketOptions) Reset() { *m = WebSocketOptions{} } func (m *WebSocketOptions) String() string { return proto.CompactTextString(m) } func (*WebSocketOptions) ProtoMessage() {} func (*WebSocketOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{21} + return fileDescriptor_metapb_484856c546ff2519, []int{21} } func (m *WebSocketOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2032,7 +2087,7 @@ func (m *System) Reset() { *m = System{} } func (m *System) String() string { return proto.CompactTextString(m) } func (*System) ProtoMessage() {} func (*System) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{22} + return fileDescriptor_metapb_484856c546ff2519, []int{22} } func (m *System) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2083,7 +2138,7 @@ func (m *CountMetric) Reset() { *m = CountMetric{} } func (m *CountMetric) String() string { return proto.CompactTextString(m) } func (*CountMetric) ProtoMessage() {} func (*CountMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_metapb_14c347b5dffc2e38, []int{23} + return fileDescriptor_metapb_484856c546ff2519, []int{23} } func (m *CountMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2174,6 +2229,7 @@ func init() { proto.RegisterEnum("metapb.CMP", CMP_name, CMP_value) proto.RegisterEnum("metapb.RoutingStrategy", RoutingStrategy_name, RoutingStrategy_value) proto.RegisterEnum("metapb.MatchRule", MatchRule_name, MatchRule_value) + proto.RegisterEnum("metapb.HostType", HostType_name, HostType_value) } func (m *Proxy) Marshal() (dAtA []byte, err error) { size := m.Size() @@ -2751,6 +2807,13 @@ func (m *DispatchNode) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x58 i++ i = encodeVarintMetapb(dAtA, i, uint64(m.ReadTimeout)) + dAtA[i] = 0x60 + i++ + i = encodeVarintMetapb(dAtA, i, uint64(m.HostType)) + dAtA[i] = 0x6a + i++ + i = encodeVarintMetapb(dAtA, i, uint64(len(m.CustemHost))) + i += copy(dAtA[i:], m.CustemHost) if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -3540,6 +3603,9 @@ func (m *DispatchNode) Size() (n int) { } n += 1 + sovMetapb(uint64(m.WriteTimeout)) n += 1 + sovMetapb(uint64(m.ReadTimeout)) + n += 1 + sovMetapb(uint64(m.HostType)) + l = len(m.CustemHost) + n += 1 + l + sovMetapb(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -5828,6 +5894,54 @@ func (m *DispatchNode) Unmarshal(dAtA []byte) error { break } } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostType", wireType) + } + m.HostType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetapb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HostType |= (HostType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CustemHost", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetapb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetapb + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CustemHost = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipMetapb(dAtA[iNdEx:]) @@ -7618,127 +7732,131 @@ var ( ErrIntOverflowMetapb = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("metapb.proto", fileDescriptor_metapb_14c347b5dffc2e38) } - -var fileDescriptor_metapb_14c347b5dffc2e38 = []byte{ - // 1895 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4d, 0x8f, 0x1b, 0x49, - 0x19, 0x9e, 0x6e, 0x7f, 0x8c, 0xfd, 0x7a, 0x3e, 0x3a, 0x95, 0xc0, 0x5a, 0x11, 0x4c, 0xa2, 0x5e, - 0x08, 0x23, 0x2f, 0xca, 0x22, 0x6b, 0x57, 0x28, 0x2c, 0x42, 0xcc, 0xd8, 0xd9, 0x8d, 0xd1, 0x4c, - 0xe2, 0xb4, 0x9d, 0x8d, 0x84, 0xb8, 0x94, 0xbb, 0x6b, 0xec, 0xda, 0x69, 0x77, 0x35, 0xd5, 0xd5, - 0x99, 0xb1, 0xc4, 0x11, 0x2e, 0x08, 0x89, 0x0b, 0x07, 0xb8, 0xf2, 0x6b, 0xf6, 0xc0, 0x61, 0x7f, - 0x41, 0x04, 0x83, 0xf8, 0x17, 0x1c, 0x50, 0x7d, 0xb5, 0xbb, 0x3d, 0x93, 0xb0, 0xc9, 0xc9, 0xdd, - 0xcf, 0xfb, 0x54, 0x57, 0xd5, 0xfb, 0xf1, 0xbc, 0x55, 0x86, 0x9d, 0x25, 0x11, 0x38, 0x9d, 0x3d, - 0x4c, 0x39, 0x13, 0x0c, 0x35, 0xf5, 0xdb, 0xdd, 0x3b, 0x73, 0x36, 0x67, 0x0a, 0xfa, 0x58, 0x3e, - 0x69, 0xab, 0x7f, 0x04, 0x8d, 0x31, 0x67, 0x97, 0x2b, 0xd4, 0x85, 0x3a, 0x8e, 0x22, 0xde, 0x75, - 0xee, 0x3b, 0x87, 0xed, 0xe3, 0xfa, 0xd7, 0xaf, 0xef, 0x6d, 0x05, 0x0a, 0x41, 0x07, 0xb0, 0x2d, - 0x7f, 0x83, 0xf1, 0xa0, 0xeb, 0x96, 0x8c, 0x16, 0xf4, 0x7f, 0x07, 0xdb, 0x83, 0x38, 0xcf, 0x04, - 0xe1, 0xe8, 0x2e, 0xb8, 0x34, 0x52, 0x9f, 0xa8, 0x1f, 0x83, 0x64, 0x5d, 0xbd, 0xbe, 0xe7, 0x8e, - 0x86, 0x81, 0x4b, 0x23, 0x39, 0x41, 0x82, 0x97, 0xa4, 0xf2, 0x0d, 0x85, 0xa0, 0xcf, 0xa0, 0x13, - 0x33, 0x1c, 0x1d, 0xe3, 0x18, 0x27, 0x21, 0xe9, 0xd6, 0xee, 0x3b, 0x87, 0x7b, 0xfd, 0xdb, 0x0f, - 0xcd, 0x2e, 0x4e, 0xd6, 0x26, 0x33, 0xaa, 0xcc, 0xf6, 0xff, 0xe4, 0x00, 0x3c, 0x21, 0x58, 0x2c, - 0x06, 0x0b, 0x12, 0x9e, 0xcb, 0x59, 0x52, 0x2c, 0x16, 0xd5, 0x6d, 0x48, 0x44, 0x5a, 0x66, 0x2c, - 0x5a, 0x55, 0xe7, 0x97, 0x08, 0xea, 0xc1, 0x6e, 0x28, 0x07, 0x8f, 0x12, 0x41, 0xf8, 0x2b, 0x1c, - 0xab, 0x15, 0xd4, 0x0c, 0xa5, 0x6a, 0x92, 0xce, 0x10, 0x74, 0x49, 0x58, 0x2e, 0xba, 0xf5, 0x12, - 0xcb, 0x82, 0xfe, 0xef, 0x5d, 0xd8, 0x1b, 0x50, 0x1e, 0xe6, 0x54, 0x1c, 0x73, 0x82, 0xcf, 0x09, - 0x47, 0x87, 0xb0, 0x13, 0xc6, 0x2c, 0x23, 0x53, 0x33, 0xce, 0x29, 0x8d, 0xab, 0x58, 0xd0, 0x43, - 0xd8, 0x5f, 0xe0, 0xf8, 0x6c, 0xca, 0xf1, 0xd9, 0x19, 0x0d, 0x03, 0x2c, 0xb4, 0xb7, 0x1a, 0x86, - 0xbc, 0x69, 0x94, 0x7c, 0x8e, 0x05, 0x51, 0x3b, 0x1f, 0x13, 0x4e, 0x59, 0x54, 0x59, 0xfa, 0xa6, - 0x11, 0x7d, 0x02, 0xe8, 0x0c, 0xd3, 0x38, 0xe7, 0x44, 0x0e, 0x9f, 0xb2, 0x81, 0x9c, 0x5c, 0xed, - 0xc3, 0x4e, 0x71, 0x83, 0x1d, 0xf5, 0xe1, 0x56, 0x96, 0x87, 0x21, 0x21, 0x91, 0x46, 0x9f, 0xa5, - 0x24, 0xe9, 0x36, 0x4a, 0x83, 0xae, 0x9b, 0xfd, 0xbf, 0xbb, 0xd0, 0x9c, 0x10, 0xfe, 0xea, 0xff, - 0xe7, 0x84, 0x4a, 0x3a, 0xf7, 0x5a, 0xd2, 0xf5, 0xa1, 0xa5, 0x12, 0x34, 0x64, 0xb1, 0x49, 0x08, - 0xcf, 0x26, 0xc4, 0xd8, 0xe0, 0x86, 0x5f, 0xf0, 0xd0, 0xf7, 0xa0, 0xb9, 0xc4, 0x97, 0xcf, 0xc7, - 0x93, 0x4a, 0x68, 0x0c, 0x86, 0xfa, 0x00, 0x8b, 0x22, 0x4f, 0xd4, 0xfa, 0x3b, 0x7d, 0x64, 0xbf, - 0xb9, 0xce, 0xa0, 0xa0, 0xc4, 0x42, 0xbf, 0x80, 0xbd, 0xb0, 0x12, 0xcc, 0x6e, 0x53, 0x8d, 0xfb, - 0xae, 0x1d, 0x57, 0x0d, 0x75, 0xb0, 0xc1, 0x96, 0x2b, 0xba, 0x20, 0x74, 0xbe, 0x10, 0xdd, 0xed, - 0xf2, 0x8a, 0x34, 0xe6, 0x9f, 0x40, 0xfd, 0x98, 0x26, 0x11, 0xf2, 0xa1, 0x1d, 0xea, 0x02, 0x1a, - 0x0d, 0x8d, 0xa3, 0x34, 0x71, 0x0d, 0xa3, 0xfb, 0xd0, 0xca, 0x94, 0x3f, 0x47, 0x43, 0xe5, 0x2d, - 0x4b, 0x29, 0x50, 0xff, 0x08, 0xda, 0x63, 0x4c, 0xf9, 0x97, 0x38, 0xce, 0x49, 0x51, 0x6c, 0xce, - 0xb5, 0x62, 0xbb, 0x0b, 0x8d, 0x57, 0x92, 0x52, 0xf1, 0xb9, 0x86, 0xfc, 0x53, 0xd8, 0x1f, 0x8d, - 0x8f, 0xc2, 0x90, 0x64, 0xd9, 0x80, 0x25, 0x82, 0x2b, 0x9f, 0xb6, 0x2f, 0x16, 0x54, 0x90, 0x98, - 0x66, 0x32, 0x73, 0x6b, 0x87, 0xed, 0x60, 0x0d, 0x48, 0xeb, 0x2c, 0xc6, 0xe1, 0xb9, 0xb2, 0xba, - 0xda, 0x5a, 0x00, 0xfe, 0x5f, 0x64, 0x69, 0x4e, 0xa7, 0xe3, 0x80, 0x64, 0x79, 0x2c, 0x10, 0x32, - 0x05, 0x28, 0xd7, 0xb4, 0x63, 0x4a, 0xef, 0x23, 0xd8, 0x5e, 0x10, 0x1c, 0x11, 0x9e, 0xa9, 0xe1, - 0x9d, 0xfe, 0xad, 0x22, 0xca, 0x76, 0x2f, 0x81, 0x65, 0x48, 0x72, 0xc8, 0xd8, 0x39, 0x25, 0x59, - 0xb7, 0xf6, 0x46, 0xb2, 0x61, 0x48, 0x0f, 0x84, 0x2c, 0xaa, 0x66, 0xb7, 0x42, 0x7c, 0x26, 0x1d, - 0xc5, 0xf1, 0x92, 0x48, 0xc5, 0x7a, 0xb3, 0xa3, 0x7e, 0x0c, 0xcd, 0x8c, 0xe5, 0x3c, 0xd4, 0x9e, - 0xda, 0xeb, 0xef, 0xd9, 0xc9, 0x26, 0x0a, 0xb5, 0xb1, 0xd4, 0x1c, 0xe9, 0x56, 0x9a, 0x44, 0xe4, - 0x52, 0x25, 0xab, 0x9d, 0x4f, 0x43, 0xfe, 0x57, 0xb0, 0xf7, 0x25, 0x8e, 0x69, 0x84, 0x05, 0x65, - 0x49, 0x90, 0xc7, 0xb2, 0xa4, 0x5a, 0x3c, 0x8f, 0xc9, 0x74, 0x95, 0xea, 0x99, 0x4b, 0xd9, 0x1d, - 0x18, 0xdc, 0xc6, 0xd7, 0xf2, 0xd0, 0x0f, 0x00, 0xc8, 0x65, 0xca, 0x49, 0x96, 0x51, 0x96, 0x54, - 0xa2, 0x57, 0xc2, 0xfd, 0xbf, 0x39, 0x00, 0xeb, 0xc9, 0xd0, 0xa7, 0xd0, 0x4e, 0xed, 0x5e, 0xd5, - 0x4c, 0x15, 0xa7, 0x19, 0x83, 0xcd, 0xb6, 0x82, 0x29, 0xb3, 0x8d, 0x93, 0xdf, 0xe6, 0x94, 0x93, - 0x48, 0xcd, 0xd4, 0x2a, 0x56, 0x63, 0x50, 0xd4, 0x87, 0x86, 0x5c, 0x99, 0x8d, 0x44, 0x51, 0x10, - 0xd5, 0x8d, 0x5a, 0x3f, 0x28, 0xaa, 0x4f, 0x61, 0x37, 0x20, 0x82, 0xaf, 0x26, 0x42, 0x0a, 0xd3, - 0x7c, 0x25, 0xa7, 0xa1, 0x56, 0x73, 0x9d, 0x92, 0xdf, 0x0a, 0x54, 0x32, 0x96, 0xf8, 0x52, 0xea, - 0x63, 0x56, 0x91, 0xc2, 0x02, 0x45, 0x77, 0xa0, 0x21, 0xa3, 0xaa, 0x17, 0xd2, 0x08, 0xf4, 0x8b, - 0xff, 0xdf, 0x1a, 0xec, 0x0c, 0x69, 0x96, 0x62, 0x11, 0x2e, 0x9e, 0xb2, 0x88, 0x7c, 0xab, 0x1a, - 0xeb, 0x03, 0xe4, 0x3c, 0x0e, 0xc8, 0x05, 0xa7, 0xc2, 0xd6, 0x07, 0x32, 0x8a, 0x05, 0x2f, 0x82, - 0x13, 0x63, 0x09, 0x4a, 0x2c, 0xb9, 0x40, 0x2c, 0x04, 0x7f, 0x2a, 0x73, 0xa8, 0x56, 0x8a, 0x49, - 0x81, 0xa2, 0x4f, 0xa0, 0xf3, 0xaa, 0x70, 0x4a, 0xd6, 0xad, 0x2b, 0x7f, 0xa1, 0x1b, 0xfc, 0x55, - 0xa6, 0xa1, 0x0f, 0xa1, 0x11, 0xe2, 0x70, 0x41, 0x8c, 0x50, 0xed, 0x16, 0x82, 0x23, 0xc1, 0x40, - 0xdb, 0xd0, 0xcf, 0x61, 0x27, 0x22, 0x67, 0x38, 0x8f, 0x85, 0x4a, 0x7e, 0x23, 0x4e, 0x6b, 0x51, - 0x2b, 0x6a, 0x4f, 0x2d, 0xca, 0x09, 0x2a, 0x6c, 0x99, 0x50, 0x79, 0x46, 0x86, 0x1a, 0x52, 0x02, - 0x65, 0xc3, 0x5c, 0xc2, 0x25, 0x6b, 0x26, 0xbd, 0x38, 0x52, 0xd9, 0xdd, 0x2a, 0xc5, 0xa0, 0x84, - 0xa3, 0xcf, 0x60, 0x97, 0x97, 0x43, 0xdb, 0x6d, 0xab, 0xa5, 0x7c, 0xa7, 0xc8, 0xea, 0xb2, 0x31, - 0xa8, 0x72, 0x65, 0x83, 0x54, 0xce, 0xb4, 0x0d, 0x12, 0xca, 0x0d, 0xb2, 0x6c, 0x41, 0x0f, 0xa0, - 0xc3, 0x09, 0x8e, 0x2c, 0xb1, 0x53, 0x22, 0x96, 0x0d, 0xfe, 0x9f, 0x1d, 0x68, 0x28, 0x4f, 0xa1, - 0x8f, 0xa0, 0x7e, 0x4e, 0x56, 0x99, 0x92, 0xae, 0xb7, 0xe4, 0xbe, 0x22, 0xc9, 0x60, 0x46, 0x04, - 0x47, 0x31, 0x4d, 0x48, 0x55, 0x64, 0x2d, 0x8a, 0x7e, 0x0a, 0x10, 0xb2, 0x24, 0xa2, 0x3a, 0x96, - 0x1b, 0x2a, 0x34, 0xb0, 0x16, 0xeb, 0xa0, 0x35, 0xd5, 0xff, 0x25, 0xec, 0x05, 0x24, 0x89, 0x08, - 0x9f, 0x92, 0x65, 0x1a, 0xeb, 0xe6, 0xbd, 0xcd, 0x66, 0x5f, 0x91, 0x50, 0xd8, 0xc5, 0xdd, 0x59, - 0x3b, 0x4b, 0x12, 0x9f, 0x29, 0x63, 0x60, 0x49, 0xfe, 0x2b, 0xd8, 0x29, 0x1b, 0xde, 0xa2, 0x5c, - 0x87, 0xd0, 0x90, 0xd9, 0x67, 0x25, 0x15, 0x55, 0xbf, 0x7b, 0x24, 0x04, 0x0f, 0x34, 0x41, 0x56, - 0xc5, 0x59, 0x8c, 0xc5, 0x91, 0x62, 0xd7, 0x4a, 0x19, 0xb0, 0x86, 0xfd, 0x13, 0x80, 0xf5, 0xc0, - 0xb7, 0xcc, 0xaa, 0xf4, 0x49, 0x70, 0x1c, 0x8a, 0xc7, 0x97, 0xe9, 0xa6, 0x3e, 0x59, 0xdc, 0xff, - 0x4f, 0x13, 0x6a, 0x47, 0xe3, 0xd1, 0x7b, 0x9e, 0x14, 0x75, 0x85, 0x8e, 0xb1, 0x10, 0x84, 0x27, - 0xa6, 0xde, 0xca, 0x15, 0x6a, 0x2c, 0x41, 0x89, 0xa5, 0x4e, 0x05, 0x44, 0x2c, 0x58, 0xa4, 0x5a, - 0x41, 0xbb, 0x38, 0x15, 0x28, 0x4c, 0x5a, 0x23, 0xb6, 0xc4, 0x54, 0x9f, 0x68, 0x0a, 0xab, 0xc6, - 0x54, 0x0f, 0x10, 0x58, 0xe4, 0x99, 0x2a, 0xad, 0x72, 0x0f, 0x50, 0x68, 0xd1, 0x03, 0xd4, 0x1b, - 0xfa, 0x35, 0xec, 0xd3, 0xb4, 0xd2, 0x3e, 0x55, 0x55, 0x75, 0xfa, 0x1f, 0xd8, 0x61, 0x1b, 0xdd, - 0xf5, 0xf8, 0x03, 0x59, 0x96, 0x57, 0xaf, 0xef, 0x6d, 0xb6, 0xdd, 0x60, 0xf3, 0x43, 0xd7, 0x4a, - 0xbd, 0xf5, 0x4e, 0xa5, 0xde, 0x83, 0x46, 0xa2, 0x44, 0xb2, 0x5d, 0xcd, 0xb4, 0xb2, 0x44, 0x06, - 0x9a, 0x22, 0x05, 0x35, 0x25, 0x7c, 0x99, 0x75, 0x41, 0xf5, 0x73, 0xfd, 0x22, 0xa3, 0x8b, 0x73, - 0xb1, 0xf8, 0x9c, 0xc6, 0xb2, 0x93, 0x74, 0xca, 0xd1, 0x5d, 0xe3, 0xf2, 0xbc, 0xc4, 0x2b, 0x59, - 0xde, 0xdd, 0xa9, 0x9e, 0x97, 0xaa, 0x35, 0x10, 0x6c, 0xb0, 0x37, 0x24, 0x69, 0xf7, 0x0d, 0x92, - 0xf4, 0x29, 0xb4, 0x97, 0x72, 0xd5, 0xb2, 0xc3, 0x74, 0xf7, 0x54, 0x60, 0x8a, 0x1a, 0x3c, 0xb5, - 0x06, 0x9b, 0xc8, 0x05, 0x53, 0x56, 0x77, 0xca, 0x32, 0x55, 0x8f, 0xdd, 0xfd, 0xfb, 0xce, 0xe1, - 0x6e, 0x71, 0x80, 0x34, 0x28, 0xfa, 0x21, 0xd4, 0x05, 0x9e, 0x67, 0x5d, 0xef, 0x4d, 0xa7, 0x0b, - 0x65, 0x46, 0x43, 0xf0, 0x2e, 0xc8, 0x6c, 0xc2, 0xc2, 0x73, 0x22, 0x9e, 0xa5, 0x5a, 0x0a, 0x6e, - 0xa9, 0x7d, 0x76, 0xed, 0x90, 0x97, 0x1b, 0xf6, 0xe0, 0xda, 0x88, 0xd2, 0x69, 0x15, 0xdd, 0x70, - 0x5a, 0xbd, 0x7e, 0xf2, 0xbc, 0xfd, 0x2e, 0x27, 0x4f, 0xff, 0x0f, 0x0e, 0xb4, 0x0b, 0x3d, 0x7a, - 0xdf, 0x63, 0xc0, 0x87, 0x50, 0x0b, 0x97, 0xa9, 0x39, 0xff, 0x74, 0x8a, 0x99, 0x4f, 0xc7, 0x86, - 0x2a, 0xad, 0x72, 0x1f, 0xe4, 0x32, 0x25, 0xa1, 0xa8, 0xf4, 0x3f, 0x83, 0xf9, 0xff, 0x70, 0x61, - 0x3b, 0x60, 0xb9, 0xa0, 0xc9, 0xfc, 0xad, 0x35, 0x5f, 0xe9, 0xcf, 0xee, 0xcd, 0xfd, 0xf9, 0x7d, - 0xc5, 0x17, 0x3d, 0x82, 0x56, 0x66, 0x1b, 0x53, 0x5d, 0x6d, 0xa6, 0xa8, 0x48, 0xb3, 0x36, 0xdb, - 0x8b, 0x8a, 0x53, 0xb5, 0xed, 0x4d, 0x0f, 0xa0, 0x23, 0x4a, 0xd7, 0xb1, 0xf2, 0xb5, 0xa7, 0x6c, - 0x78, 0x47, 0xa5, 0xf8, 0x3e, 0xd4, 0x70, 0x4a, 0x95, 0x3a, 0xd4, 0x8f, 0x3b, 0xc6, 0x15, 0x52, - 0x17, 0x03, 0x89, 0x17, 0x02, 0xd8, 0xda, 0x14, 0x40, 0xff, 0x27, 0xe0, 0xbd, 0xbc, 0x21, 0x91, - 0x18, 0xa7, 0x73, 0x9a, 0x54, 0x44, 0xd9, 0x60, 0xfe, 0x23, 0x68, 0x4e, 0x56, 0x99, 0x20, 0x4b, - 0xf4, 0xb1, 0x3c, 0x29, 0xe5, 0x89, 0x30, 0x09, 0x70, 0x7b, 0xed, 0xb9, 0x3c, 0x11, 0xa7, 0x44, - 0x70, 0x1a, 0xda, 0xf3, 0x9a, 0xe2, 0xf9, 0x7f, 0x74, 0xa0, 0x53, 0x32, 0xca, 0xbb, 0xaf, 0x09, - 0x46, 0xe5, 0x0e, 0x6b, 0x41, 0xb9, 0x10, 0x7d, 0x1b, 0x51, 0x01, 0x2c, 0x32, 0x5a, 0x63, 0x76, - 0xcf, 0xfa, 0x82, 0x7a, 0x7d, 0xcf, 0x07, 0x45, 0x9e, 0x54, 0x2f, 0xd6, 0x06, 0xec, 0xfd, 0x08, - 0x9a, 0xda, 0x95, 0xa8, 0x05, 0xf5, 0x21, 0xbb, 0x48, 0xbc, 0x2d, 0xd4, 0x04, 0xf7, 0x45, 0xea, - 0x39, 0xa8, 0x03, 0xdb, 0x2f, 0x92, 0xf3, 0x44, 0x82, 0x6e, 0xef, 0x21, 0xec, 0x9a, 0xda, 0x58, - 0xf3, 0xe5, 0x9d, 0xd4, 0xdb, 0x92, 0x4f, 0x4f, 0x70, 0x7c, 0xe6, 0x39, 0xa8, 0x0d, 0x0d, 0x75, - 0xb9, 0xf5, 0xdc, 0xde, 0x23, 0xe8, 0x94, 0xfe, 0x62, 0x40, 0x7b, 0x00, 0x01, 0xcb, 0x93, 0x28, - 0x60, 0x33, 0x2a, 0xc7, 0x00, 0x34, 0x47, 0xe3, 0x27, 0x38, 0x5b, 0x78, 0x8e, 0xb4, 0xbd, 0x94, - 0x37, 0x37, 0x6d, 0x73, 0x7b, 0x3f, 0x83, 0x96, 0xbd, 0x8c, 0xaa, 0x6f, 0x4f, 0xa7, 0x63, 0x3d, - 0xcb, 0x17, 0x3c, 0x0d, 0xf5, 0x2c, 0xc3, 0x7c, 0x36, 0x63, 0x9e, 0x8b, 0xf6, 0xa1, 0x33, 0x49, - 0x39, 0x4d, 0xe6, 0x83, 0x98, 0xe5, 0x91, 0x57, 0xeb, 0xfd, 0x06, 0x9a, 0xfa, 0x22, 0x21, 0x4d, - 0xcf, 0x73, 0xa2, 0xce, 0x43, 0x34, 0x99, 0x7b, 0x5b, 0x68, 0x07, 0x5a, 0x9f, 0x33, 0xbe, 0x1c, - 0x62, 0x81, 0x3d, 0x47, 0xbe, 0xfd, 0x6a, 0xf2, 0xec, 0xe9, 0x31, 0x8b, 0x56, 0x9e, 0x2b, 0x97, - 0xf3, 0x44, 0x5d, 0x87, 0xbc, 0x9a, 0x7c, 0x1e, 0xa8, 0xdb, 0x8e, 0x57, 0x47, 0xbb, 0xf2, 0x52, - 0x23, 0x16, 0x4a, 0xa6, 0xbc, 0x46, 0xef, 0x2e, 0xb4, 0xec, 0x45, 0x42, 0xed, 0x28, 0x8f, 0x49, - 0x40, 0xe6, 0xe4, 0x32, 0xf5, 0xb6, 0x7a, 0x2f, 0xa0, 0x36, 0x38, 0x1d, 0x2b, 0x17, 0x9c, 0x8e, - 0x1f, 0x3f, 0xf7, 0xb6, 0xcc, 0xe3, 0xc9, 0xd4, 0x38, 0xe6, 0x74, 0x7c, 0xf2, 0xd8, 0x73, 0xcd, - 0xe3, 0x17, 0x53, 0xaf, 0x66, 0x1f, 0x1f, 0x7b, 0x75, 0xf3, 0x38, 0x4a, 0xbc, 0x86, 0x5c, 0xd9, - 0xe0, 0x74, 0xac, 0x14, 0xd7, 0x6b, 0xf6, 0x1e, 0xc0, 0xfe, 0x46, 0x31, 0x49, 0x4f, 0x0c, 0x58, - 0xba, 0xd2, 0x33, 0x4c, 0xd2, 0x98, 0x0a, 0xcf, 0xe9, 0x3d, 0x82, 0x76, 0x21, 0xd2, 0xc8, 0x83, - 0x1d, 0xf5, 0x62, 0xa4, 0x5d, 0x6f, 0x5e, 0x21, 0x47, 0x71, 0xac, 0x37, 0xaf, 0xdf, 0x92, 0x95, - 0xe7, 0x1e, 0xdf, 0xf9, 0xe6, 0x5f, 0x07, 0x5b, 0x5f, 0x5f, 0x1d, 0x38, 0xdf, 0x5c, 0x1d, 0x38, - 0xff, 0xbc, 0x3a, 0x70, 0xfe, 0xfa, 0xef, 0x83, 0xad, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x63, - 0x02, 0xa5, 0x11, 0xef, 0x12, 0x00, 0x00, +func init() { proto.RegisterFile("metapb.proto", fileDescriptor_metapb_484856c546ff2519) } + +var fileDescriptor_metapb_484856c546ff2519 = []byte{ + // 1959 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xcd, 0x6f, 0xdb, 0xc8, + 0x15, 0x37, 0xa9, 0x0f, 0x4b, 0x4f, 0xfe, 0x60, 0x26, 0xd9, 0xae, 0x10, 0xb4, 0x4e, 0xc0, 0x6d, + 0x53, 0x43, 0x5b, 0x64, 0x0b, 0x61, 0x17, 0x45, 0xba, 0x45, 0x51, 0x5b, 0xce, 0x6e, 0x5c, 0xd8, + 0x89, 0x42, 0x2b, 0x1b, 0xa0, 0xe8, 0x65, 0x4c, 0x8e, 0x25, 0xae, 0x29, 0x0e, 0x3b, 0x1c, 0xc6, + 0x16, 0xd0, 0x63, 0x7b, 0x29, 0x0a, 0xf4, 0xd2, 0x43, 0x7b, 0xed, 0x5f, 0xb3, 0x87, 0x1e, 0xf6, + 0xd4, 0x63, 0xd0, 0xba, 0xe8, 0xff, 0x51, 0xbc, 0xf9, 0xa0, 0x48, 0xd9, 0x49, 0x9b, 0x9c, 0x44, + 0xfe, 0xde, 0x6f, 0x38, 0x6f, 0xde, 0xf7, 0x08, 0x36, 0xe6, 0x4c, 0xd2, 0xec, 0xf4, 0x61, 0x26, + 0xb8, 0xe4, 0xa4, 0xad, 0xdf, 0xee, 0xde, 0x99, 0xf2, 0x29, 0x57, 0xd0, 0x27, 0xf8, 0xa4, 0xa5, + 0xfe, 0x1e, 0xb4, 0xc6, 0x82, 0x5f, 0x2e, 0x48, 0x1f, 0x9a, 0x34, 0x8a, 0x44, 0xdf, 0xb9, 0xef, + 0xec, 0x76, 0xf7, 0x9b, 0xdf, 0xbc, 0xbe, 0xb7, 0x16, 0x28, 0x84, 0xec, 0xc0, 0x3a, 0xfe, 0x06, + 0xe3, 0x51, 0xdf, 0xad, 0x08, 0x2d, 0xe8, 0xff, 0x16, 0xd6, 0x47, 0x49, 0x91, 0x4b, 0x26, 0xc8, + 0x5d, 0x70, 0xe3, 0x48, 0x7d, 0xa2, 0xb9, 0x0f, 0xc8, 0xba, 0x7a, 0x7d, 0xcf, 0x3d, 0x3c, 0x08, + 0xdc, 0x38, 0xc2, 0x0d, 0x52, 0x3a, 0x67, 0xb5, 0x6f, 0x28, 0x84, 0x7c, 0x0e, 0xbd, 0x84, 0xd3, + 0x68, 0x9f, 0x26, 0x34, 0x0d, 0x59, 0xbf, 0x71, 0xdf, 0xd9, 0xdd, 0x1a, 0xde, 0x7e, 0x68, 0x4e, + 0x71, 0xb4, 0x14, 0x99, 0x55, 0x55, 0xb6, 0xff, 0x47, 0x07, 0xe0, 0x09, 0xa3, 0x72, 0x36, 0x9a, + 0xb1, 0xf0, 0x1c, 0x77, 0xc9, 0xa8, 0x9c, 0xd5, 0x8f, 0x81, 0x08, 0x4a, 0x4e, 0x79, 0xb4, 0xa8, + 0xef, 0x8f, 0x08, 0x19, 0xc0, 0x66, 0x88, 0x8b, 0x0f, 0x53, 0xc9, 0xc4, 0x2b, 0x9a, 0x28, 0x0d, + 0x1a, 0x86, 0x52, 0x17, 0xa1, 0x31, 0x64, 0x3c, 0x67, 0xbc, 0x90, 0xfd, 0x66, 0x85, 0x65, 0x41, + 0xff, 0x77, 0x2e, 0x6c, 0x8d, 0x62, 0x11, 0x16, 0xb1, 0xdc, 0x17, 0x8c, 0x9e, 0x33, 0x41, 0x76, + 0x61, 0x23, 0x4c, 0x78, 0xce, 0x26, 0x66, 0x9d, 0x53, 0x59, 0x57, 0x93, 0x90, 0x87, 0xb0, 0x3d, + 0xa3, 0xc9, 0xd9, 0x44, 0xd0, 0xb3, 0xb3, 0x38, 0x0c, 0xa8, 0xd4, 0xd6, 0x6a, 0x19, 0xf2, 0xaa, + 0x10, 0xf9, 0x82, 0x4a, 0xa6, 0x4e, 0x3e, 0x66, 0x22, 0xe6, 0x51, 0x4d, 0xf5, 0x55, 0x21, 0xf9, + 0x14, 0xc8, 0x19, 0x8d, 0x93, 0x42, 0x30, 0x5c, 0x3e, 0xe1, 0x23, 0xdc, 0x5c, 0x9d, 0xc3, 0x6e, + 0x71, 0x83, 0x9c, 0x0c, 0xe1, 0x56, 0x5e, 0x84, 0x21, 0x63, 0x91, 0x46, 0x9f, 0x65, 0x2c, 0xed, + 0xb7, 0x2a, 0x8b, 0xae, 0x8b, 0xfd, 0xbf, 0xb9, 0xd0, 0x3e, 0x61, 0xe2, 0xd5, 0xff, 0x8e, 0x09, + 0x15, 0x74, 0xee, 0xb5, 0xa0, 0x1b, 0x42, 0x47, 0x05, 0x68, 0xc8, 0x13, 0x13, 0x10, 0x9e, 0x0d, + 0x88, 0xb1, 0xc1, 0x0d, 0xbf, 0xe4, 0x91, 0xef, 0x42, 0x7b, 0x4e, 0x2f, 0x9f, 0x8f, 0x4f, 0x6a, + 0xae, 0x31, 0x18, 0x19, 0x02, 0xcc, 0xca, 0x38, 0x51, 0xfa, 0xf7, 0x86, 0xc4, 0x7e, 0x73, 0x19, + 0x41, 0x41, 0x85, 0x45, 0x7e, 0x0e, 0x5b, 0x61, 0xcd, 0x99, 0xfd, 0xb6, 0x5a, 0xf7, 0x1d, 0xbb, + 0xae, 0xee, 0xea, 0x60, 0x85, 0x8d, 0x1a, 0x5d, 0xb0, 0x78, 0x3a, 0x93, 0xfd, 0xf5, 0xaa, 0x46, + 0x1a, 0xf3, 0x8f, 0xa0, 0xb9, 0x1f, 0xa7, 0x11, 0xf1, 0xa1, 0x1b, 0xea, 0x04, 0x3a, 0x3c, 0x30, + 0x86, 0xd2, 0xc4, 0x25, 0x4c, 0xee, 0x43, 0x27, 0x57, 0xf6, 0x3c, 0x3c, 0x50, 0xd6, 0xb2, 0x94, + 0x12, 0xf5, 0xf7, 0xa0, 0x3b, 0xa6, 0xb1, 0xf8, 0x8a, 0x26, 0x05, 0x2b, 0x93, 0xcd, 0xb9, 0x96, + 0x6c, 0x77, 0xa1, 0xf5, 0x0a, 0x29, 0x35, 0x9b, 0x6b, 0xc8, 0x3f, 0x86, 0xed, 0xc3, 0xf1, 0x5e, + 0x18, 0xb2, 0x3c, 0x1f, 0xf1, 0x54, 0x0a, 0x65, 0xd3, 0xee, 0xc5, 0x2c, 0x96, 0x2c, 0x89, 0x73, + 0x8c, 0xdc, 0xc6, 0x6e, 0x37, 0x58, 0x02, 0x28, 0x3d, 0x4d, 0x68, 0x78, 0xae, 0xa4, 0xae, 0x96, + 0x96, 0x80, 0xff, 0x67, 0x4c, 0xcd, 0xc9, 0x64, 0x1c, 0xb0, 0xbc, 0x48, 0x24, 0x21, 0x26, 0x01, + 0x51, 0xa7, 0x0d, 0x93, 0x7a, 0x1f, 0xc3, 0xfa, 0x8c, 0xd1, 0x88, 0x89, 0x5c, 0x2d, 0xef, 0x0d, + 0x6f, 0x95, 0x5e, 0xb6, 0x67, 0x09, 0x2c, 0x03, 0xc9, 0x21, 0xe7, 0xe7, 0x31, 0xcb, 0xfb, 0x8d, + 0x37, 0x92, 0x0d, 0x03, 0x2d, 0x10, 0xf2, 0xa8, 0x1e, 0xdd, 0x0a, 0xf1, 0x39, 0x1a, 0x4a, 0xd0, + 0x39, 0xc3, 0x8a, 0xf5, 0x66, 0x43, 0xfd, 0x08, 0xda, 0x39, 0x2f, 0x44, 0xa8, 0x2d, 0xb5, 0x35, + 0xdc, 0xb2, 0x9b, 0x9d, 0x28, 0xd4, 0xfa, 0x52, 0x73, 0xd0, 0xac, 0x71, 0x1a, 0xb1, 0x4b, 0x15, + 0xac, 0x76, 0x3f, 0x0d, 0xf9, 0x5f, 0xc3, 0xd6, 0x57, 0x34, 0x89, 0x23, 0x2a, 0x63, 0x9e, 0x06, + 0x45, 0x82, 0x29, 0xd5, 0x11, 0x45, 0xc2, 0x26, 0x8b, 0x4c, 0xef, 0x5c, 0x89, 0xee, 0xc0, 0xe0, + 0xd6, 0xbf, 0x96, 0x47, 0xbe, 0x0f, 0xc0, 0x2e, 0x33, 0xc1, 0xf2, 0x3c, 0xe6, 0x69, 0xcd, 0x7b, + 0x15, 0xdc, 0xff, 0xab, 0x03, 0xb0, 0xdc, 0x8c, 0x7c, 0x06, 0xdd, 0xcc, 0x9e, 0x55, 0xed, 0x54, + 0x33, 0x9a, 0x11, 0xd8, 0x68, 0x2b, 0x99, 0x18, 0x6d, 0x82, 0xfd, 0xa6, 0x88, 0x05, 0x8b, 0xd4, + 0x4e, 0x9d, 0x52, 0x1b, 0x83, 0x92, 0x21, 0xb4, 0x50, 0x33, 0xeb, 0x89, 0x32, 0x21, 0xea, 0x07, + 0xb5, 0x76, 0x50, 0x54, 0x3f, 0x86, 0xcd, 0x80, 0x49, 0xb1, 0x38, 0x91, 0x58, 0x98, 0xa6, 0x0b, + 0xdc, 0x26, 0xb6, 0x35, 0xd7, 0xa9, 0xd8, 0xad, 0x44, 0x91, 0x31, 0xa7, 0x97, 0x58, 0x1f, 0xf3, + 0x5a, 0x29, 0x2c, 0x51, 0x72, 0x07, 0x5a, 0xe8, 0x55, 0xad, 0x48, 0x2b, 0xd0, 0x2f, 0xfe, 0x3f, + 0x9a, 0xb0, 0x71, 0x10, 0xe7, 0x19, 0x95, 0xe1, 0xec, 0x29, 0x8f, 0xd8, 0xff, 0x95, 0x63, 0x43, + 0x80, 0x42, 0x24, 0x01, 0xbb, 0x10, 0xb1, 0xb4, 0xf9, 0x41, 0x4c, 0xc5, 0x82, 0x17, 0xc1, 0x91, + 0x91, 0x04, 0x15, 0x16, 0x2a, 0x48, 0xa5, 0x14, 0x4f, 0x31, 0x86, 0x1a, 0x15, 0x9f, 0x94, 0x28, + 0xf9, 0x14, 0x7a, 0xaf, 0x4a, 0xa3, 0xe4, 0xfd, 0xa6, 0xb2, 0x17, 0xb9, 0xc1, 0x5e, 0x55, 0x1a, + 0xf9, 0x08, 0x5a, 0x21, 0x0d, 0x67, 0xcc, 0x14, 0xaa, 0xcd, 0xb2, 0xe0, 0x20, 0x18, 0x68, 0x19, + 0xf9, 0x19, 0x6c, 0x44, 0xec, 0x8c, 0x16, 0x89, 0x54, 0xc1, 0x6f, 0x8a, 0xd3, 0xb2, 0xa8, 0x95, + 0xb9, 0xa7, 0x94, 0x72, 0x82, 0x1a, 0x1b, 0x03, 0xaa, 0xc8, 0xd9, 0x81, 0x86, 0x54, 0x81, 0xb2, + 0x6e, 0xae, 0xe0, 0xc8, 0x3a, 0x45, 0x2b, 0x1e, 0xaa, 0xe8, 0xee, 0x54, 0x7c, 0x50, 0xc1, 0xc9, + 0xe7, 0xb0, 0x29, 0xaa, 0xae, 0xed, 0x77, 0x95, 0x2a, 0x1f, 0x94, 0x51, 0x5d, 0x15, 0x06, 0x75, + 0x2e, 0x36, 0x48, 0x65, 0x4c, 0xdb, 0x20, 0xa1, 0xda, 0x20, 0xab, 0x12, 0xf2, 0x00, 0x7a, 0x82, + 0xd1, 0xc8, 0x12, 0x7b, 0x15, 0x62, 0x55, 0x80, 0xf9, 0x35, 0xe3, 0xb9, 0x54, 0xf9, 0xb5, 0x51, + 0xcf, 0xaf, 0x27, 0x06, 0xb7, 0x7e, 0xb2, 0x3c, 0x3c, 0x68, 0x88, 0x91, 0x30, 0x47, 0x46, 0x7f, + 0xb3, 0x9a, 0x5f, 0x4b, 0xdc, 0xff, 0x93, 0x03, 0x2d, 0xe5, 0x03, 0xf2, 0x31, 0x34, 0xcf, 0xd9, + 0x22, 0x57, 0x45, 0xf1, 0x2d, 0x59, 0xa5, 0x48, 0x18, 0x26, 0x11, 0xa3, 0x51, 0x12, 0xa7, 0xac, + 0x5e, 0xbe, 0x2d, 0x4a, 0x7e, 0x02, 0x10, 0xf2, 0x34, 0x8a, 0x75, 0x94, 0xac, 0xd4, 0xb7, 0x91, + 0x95, 0x94, 0x1a, 0x95, 0x54, 0xff, 0x17, 0xb0, 0x15, 0xb0, 0x34, 0x62, 0x62, 0xc2, 0xe6, 0x59, + 0xa2, 0xc7, 0x82, 0x75, 0x7e, 0xfa, 0x35, 0x0b, 0xa5, 0x55, 0xee, 0xce, 0xd2, 0x0d, 0x48, 0x7c, + 0xa6, 0x84, 0x81, 0x25, 0xf9, 0xaf, 0x60, 0xa3, 0x2a, 0x78, 0x4b, 0x4d, 0xdc, 0x85, 0x16, 0xc6, + 0xb5, 0x2d, 0xd6, 0xa4, 0xfe, 0xdd, 0x3d, 0x29, 0x45, 0xa0, 0x09, 0x98, 0x6f, 0x67, 0x09, 0x95, + 0x7b, 0x8a, 0xdd, 0xa8, 0xc4, 0xd6, 0x12, 0xf6, 0x8f, 0x00, 0x96, 0x0b, 0xdf, 0xb2, 0xab, 0xaa, + 0x7c, 0x52, 0xd0, 0x50, 0x3e, 0xbe, 0xcc, 0x56, 0x2b, 0x9f, 0xc5, 0xfd, 0xff, 0xb4, 0xa1, 0xb1, + 0x37, 0x3e, 0x7c, 0xcf, 0x19, 0x54, 0xe7, 0xfe, 0x98, 0x4a, 0xc9, 0x44, 0x6a, 0x32, 0xb9, 0x9a, + 0xfb, 0x46, 0x12, 0x54, 0x58, 0x6a, 0xde, 0x60, 0x72, 0xc6, 0x23, 0xd5, 0x64, 0xba, 0xe5, 0xbc, + 0xa1, 0x30, 0x94, 0x46, 0x7c, 0x4e, 0x63, 0x3d, 0x2b, 0x95, 0x52, 0x8d, 0xa9, 0xee, 0x22, 0xa9, + 0x2c, 0x72, 0x95, 0xb4, 0xd5, 0xee, 0xa2, 0xd0, 0xb2, 0xbb, 0xa8, 0x37, 0xf2, 0x2b, 0xd8, 0x8e, + 0xb3, 0x5a, 0x63, 0x56, 0xf9, 0xda, 0x1b, 0x7e, 0x68, 0x97, 0xad, 0xf4, 0xed, 0xfd, 0x0f, 0x31, + 0xe1, 0xaf, 0x5e, 0xdf, 0x5b, 0x6d, 0xe8, 0xc1, 0xea, 0x87, 0xae, 0x15, 0x91, 0xce, 0x3b, 0x15, + 0x91, 0x01, 0xb4, 0x52, 0x55, 0x7e, 0xbb, 0xf5, 0x48, 0xab, 0x16, 0xdf, 0x40, 0x53, 0xb0, 0x54, + 0x67, 0x4c, 0xcc, 0xf3, 0x3e, 0xa8, 0x49, 0x41, 0xbf, 0xa0, 0x77, 0x69, 0x21, 0x67, 0x5f, 0xc4, + 0x09, 0xf6, 0xa8, 0x5e, 0xd5, 0xbb, 0x4b, 0x1c, 0x27, 0x31, 0x51, 0x8b, 0x72, 0x95, 0xd7, 0x95, + 0xc6, 0x53, 0xcf, 0x81, 0x60, 0x85, 0xbd, 0x52, 0xec, 0x36, 0xdf, 0x50, 0xec, 0x3e, 0x83, 0xee, + 0x1c, 0xb5, 0xc6, 0xde, 0xd5, 0xdf, 0x52, 0x8e, 0x29, 0x73, 0xf0, 0xd8, 0x0a, 0x6c, 0x20, 0x97, + 0x4c, 0xcc, 0xee, 0x8c, 0xe7, 0x2a, 0x1f, 0xfb, 0xdb, 0xf7, 0x9d, 0xdd, 0xcd, 0x72, 0x34, 0x35, + 0x28, 0xf9, 0x01, 0x34, 0x25, 0x9d, 0xe6, 0x7d, 0xef, 0x4d, 0x73, 0x8b, 0x12, 0x93, 0x03, 0xf0, + 0x2e, 0xd8, 0xe9, 0x09, 0x0f, 0xcf, 0x99, 0x7c, 0x96, 0xe9, 0x52, 0x70, 0x4b, 0x9d, 0xb3, 0x6f, + 0x97, 0xbc, 0x5c, 0x91, 0x07, 0xd7, 0x56, 0x54, 0xe6, 0x60, 0x72, 0xc3, 0x1c, 0x7c, 0x7d, 0xa6, + 0xbd, 0xfd, 0x2e, 0x33, 0xad, 0xff, 0x7b, 0x07, 0xba, 0x65, 0x3d, 0x7a, 0xdf, 0x01, 0xe3, 0x23, + 0x68, 0x84, 0xf3, 0xcc, 0x4c, 0x56, 0xbd, 0x72, 0xe7, 0xe3, 0xb1, 0xa1, 0xa2, 0x14, 0xcf, 0xc1, + 0x2e, 0x33, 0x16, 0xca, 0x5a, 0x67, 0x35, 0x98, 0xff, 0x77, 0x17, 0xd6, 0x03, 0x5e, 0xc8, 0x38, + 0x9d, 0xbe, 0x35, 0xe7, 0x6b, 0x9d, 0xdf, 0xbd, 0xb9, 0xf3, 0xbf, 0x6f, 0xf1, 0x25, 0x8f, 0xa0, + 0x93, 0xdb, 0x96, 0xd7, 0x54, 0x87, 0x29, 0x33, 0xd2, 0xe8, 0x66, 0xbb, 0x5c, 0x39, 0xaf, 0xdb, + 0xae, 0xf7, 0x00, 0x7a, 0xb2, 0x72, 0xd1, 0xab, 0x5e, 0xa8, 0xaa, 0x82, 0x77, 0xac, 0x14, 0xdf, + 0x83, 0x06, 0xcd, 0x62, 0x55, 0x1d, 0x9a, 0xfb, 0x3d, 0x63, 0x0a, 0xac, 0x8b, 0x01, 0xe2, 0x65, + 0x01, 0xec, 0xac, 0x16, 0x40, 0xff, 0xc7, 0xe0, 0xbd, 0xbc, 0x21, 0x90, 0xb8, 0x88, 0xa7, 0x71, + 0x5a, 0x2b, 0xca, 0x06, 0xf3, 0x1f, 0x41, 0xfb, 0x64, 0x81, 0x8d, 0x91, 0x7c, 0x82, 0x33, 0x58, + 0x91, 0x4a, 0x13, 0x00, 0xb7, 0x97, 0x96, 0x2b, 0x52, 0x79, 0xcc, 0xa4, 0x88, 0x43, 0x3b, 0x09, + 0x2a, 0x9e, 0xff, 0x07, 0x07, 0x7a, 0x15, 0x21, 0xde, 0xaa, 0x8d, 0x33, 0x6a, 0xb7, 0x63, 0x0b, + 0xa2, 0x22, 0xfa, 0x9e, 0xa3, 0x1c, 0x58, 0x46, 0xb4, 0xc6, 0xec, 0x99, 0xf5, 0xd5, 0xf7, 0xfa, + 0x99, 0x77, 0xca, 0x38, 0xa9, 0x5f, 0xd9, 0x0d, 0x38, 0xf8, 0x21, 0xb4, 0xb5, 0x29, 0x49, 0x07, + 0x9a, 0x07, 0xfc, 0x22, 0xf5, 0xd6, 0x48, 0x1b, 0xdc, 0x17, 0x99, 0xe7, 0x90, 0x1e, 0xac, 0xbf, + 0x48, 0xcf, 0x53, 0x04, 0xdd, 0xc1, 0x43, 0xd8, 0x34, 0xb9, 0xb1, 0xe4, 0xe3, 0x6d, 0xd7, 0x5b, + 0xc3, 0xa7, 0x27, 0x34, 0x39, 0xf3, 0x1c, 0xd2, 0x85, 0x96, 0xba, 0x36, 0x7b, 0xee, 0xe0, 0x11, + 0xf4, 0x2a, 0x7f, 0x5e, 0x90, 0x2d, 0x80, 0x80, 0x17, 0x69, 0x14, 0xf0, 0xd3, 0x18, 0xd7, 0x00, + 0xb4, 0x0f, 0xc7, 0x4f, 0x68, 0x3e, 0xf3, 0x1c, 0x94, 0xbd, 0xc4, 0x3b, 0xa1, 0x96, 0xb9, 0x83, + 0x9f, 0x42, 0xc7, 0x5e, 0x73, 0xd5, 0xb7, 0x27, 0x93, 0xb1, 0xde, 0xe5, 0x4b, 0x91, 0x85, 0x7a, + 0x97, 0x83, 0xe2, 0xf4, 0x94, 0x7b, 0x2e, 0xd9, 0x86, 0xde, 0x49, 0x26, 0xe2, 0x74, 0x3a, 0x4a, + 0x78, 0x11, 0x79, 0x8d, 0xc1, 0xaf, 0xa1, 0xad, 0xaf, 0x28, 0x28, 0x7a, 0x5e, 0x30, 0x35, 0x69, + 0xc5, 0xe9, 0xd4, 0x5b, 0x23, 0x1b, 0xd0, 0xf9, 0x82, 0x8b, 0xf9, 0x01, 0x95, 0xd4, 0x73, 0xf0, + 0xed, 0x97, 0x27, 0xcf, 0x9e, 0xee, 0xf3, 0x68, 0xe1, 0xb9, 0xa8, 0xce, 0x13, 0x75, 0xd1, 0xf2, + 0x1a, 0xf8, 0x3c, 0x52, 0xf7, 0x28, 0xaf, 0x49, 0x36, 0xf1, 0xba, 0x24, 0x67, 0xaa, 0x4c, 0x79, + 0xad, 0xc1, 0x5d, 0xe8, 0xd8, 0x2b, 0x8a, 0x3a, 0x51, 0x91, 0xb0, 0x80, 0x4d, 0xd9, 0x65, 0xe6, + 0xad, 0x0d, 0x5e, 0x40, 0x63, 0x74, 0x3c, 0x56, 0x26, 0x38, 0x1e, 0x3f, 0x7e, 0xee, 0xad, 0x99, + 0xc7, 0xa3, 0x89, 0x31, 0xcc, 0xf1, 0xf8, 0xe8, 0xb1, 0xe7, 0x9a, 0xc7, 0x2f, 0x27, 0x5e, 0xc3, + 0x3e, 0x3e, 0xf6, 0x9a, 0xe6, 0xf1, 0x30, 0xf5, 0x5a, 0xa8, 0xd9, 0xe8, 0x78, 0xac, 0x2a, 0xae, + 0xd7, 0x1e, 0x3c, 0x80, 0xed, 0x95, 0x64, 0x42, 0x4b, 0x8c, 0x78, 0xb6, 0xd0, 0x3b, 0x9c, 0x64, + 0x49, 0x2c, 0x3d, 0x67, 0xf0, 0x08, 0xba, 0x65, 0x91, 0x26, 0x1e, 0x6c, 0xa8, 0x17, 0x53, 0xda, + 0xf5, 0xe1, 0x15, 0xb2, 0x97, 0x24, 0xfa, 0xf0, 0xfa, 0x2d, 0x5d, 0x78, 0xee, 0x60, 0x0f, 0x3a, + 0x76, 0x30, 0xc4, 0x53, 0xe1, 0xf3, 0x33, 0x15, 0xe5, 0xde, 0x1a, 0xf9, 0x00, 0x6e, 0xe1, 0xbb, + 0xfe, 0x3b, 0x63, 0x2f, 0x8a, 0xf0, 0xaa, 0xa5, 0x5d, 0x86, 0xf0, 0xa8, 0xc8, 0x25, 0x9f, 0x7b, + 0xee, 0xfe, 0x9d, 0x6f, 0xff, 0xb5, 0xb3, 0xf6, 0xcd, 0xd5, 0x8e, 0xf3, 0xed, 0xd5, 0x8e, 0xf3, + 0xcf, 0xab, 0x1d, 0xe7, 0x2f, 0xff, 0xde, 0x59, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xca, + 0x87, 0x90, 0x2f, 0x8c, 0x13, 0x00, 0x00, } diff --git a/pkg/pb/metapb/metapb.proto b/pkg/pb/metapb/metapb.proto index d3ae72b2..27bd2f73 100644 --- a/pkg/pb/metapb/metapb.proto +++ b/pkg/pb/metapb/metapb.proto @@ -71,6 +71,12 @@ enum MatchRule { MatchAny = 2; } +enum HostType { + HostOrigin = 0; + HostServerAddress = 1; + HostCustom = 2; +} + // Proxy is a meta data of the gateway proxy message Proxy { optional string addr = 1 [(gogoproto.nullable) = false]; @@ -178,6 +184,8 @@ message DispatchNode { optional RetryStrategy retryStrategy = 9; optional int64 writeTimeout = 10[(gogoproto.nullable) = false]; optional int64 readTimeout = 11[(gogoproto.nullable) = false]; + optional HostType hostType = 12[(gogoproto.nullable) = false]; + optional string custemHost = 13[(gogoproto.nullable) = false]; } // Cache is used for cache api result diff --git a/pkg/pb/rpcpb/rpcpb.pb.go b/pkg/pb/rpcpb/rpcpb.pb.go index 9ae499c4..31b3b045 100644 --- a/pkg/pb/rpcpb/rpcpb.pb.go +++ b/pkg/pb/rpcpb/rpcpb.pb.go @@ -44,7 +44,7 @@ func (m *RpcHeader) Reset() { *m = RpcHeader{} } func (m *RpcHeader) String() string { return proto.CompactTextString(m) } func (*RpcHeader) ProtoMessage() {} func (*RpcHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{0} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{0} } func (m *RpcHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -92,7 +92,7 @@ func (m *PutClusterReq) Reset() { *m = PutClusterReq{} } func (m *PutClusterReq) String() string { return proto.CompactTextString(m) } func (*PutClusterReq) ProtoMessage() {} func (*PutClusterReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{1} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{1} } func (m *PutClusterReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -147,7 +147,7 @@ func (m *PutClusterRsp) Reset() { *m = PutClusterRsp{} } func (m *PutClusterRsp) String() string { return proto.CompactTextString(m) } func (*PutClusterRsp) ProtoMessage() {} func (*PutClusterRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{2} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{2} } func (m *PutClusterRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -202,7 +202,7 @@ func (m *RemoveClusterReq) Reset() { *m = RemoveClusterReq{} } func (m *RemoveClusterReq) String() string { return proto.CompactTextString(m) } func (*RemoveClusterReq) ProtoMessage() {} func (*RemoveClusterReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{3} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{3} } func (m *RemoveClusterReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -256,7 +256,7 @@ func (m *RemoveClusterRsp) Reset() { *m = RemoveClusterRsp{} } func (m *RemoveClusterRsp) String() string { return proto.CompactTextString(m) } func (*RemoveClusterRsp) ProtoMessage() {} func (*RemoveClusterRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{4} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{4} } func (m *RemoveClusterRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +304,7 @@ func (m *GetClusterReq) Reset() { *m = GetClusterReq{} } func (m *GetClusterReq) String() string { return proto.CompactTextString(m) } func (*GetClusterReq) ProtoMessage() {} func (*GetClusterReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{5} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{5} } func (m *GetClusterReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -359,7 +359,7 @@ func (m *GetClusterRsp) Reset() { *m = GetClusterRsp{} } func (m *GetClusterRsp) String() string { return proto.CompactTextString(m) } func (*GetClusterRsp) ProtoMessage() {} func (*GetClusterRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{6} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{6} } func (m *GetClusterRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -413,7 +413,7 @@ func (m *GetClusterListReq) Reset() { *m = GetClusterListReq{} } func (m *GetClusterListReq) String() string { return proto.CompactTextString(m) } func (*GetClusterListReq) ProtoMessage() {} func (*GetClusterListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{7} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{7} } func (m *GetClusterListReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -461,7 +461,7 @@ func (m *PutServerReq) Reset() { *m = PutServerReq{} } func (m *PutServerReq) String() string { return proto.CompactTextString(m) } func (*PutServerReq) ProtoMessage() {} func (*PutServerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{8} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{8} } func (m *PutServerReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -516,7 +516,7 @@ func (m *PutServerRsp) Reset() { *m = PutServerRsp{} } func (m *PutServerRsp) String() string { return proto.CompactTextString(m) } func (*PutServerRsp) ProtoMessage() {} func (*PutServerRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{9} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{9} } func (m *PutServerRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -571,7 +571,7 @@ func (m *RemoveServerReq) Reset() { *m = RemoveServerReq{} } func (m *RemoveServerReq) String() string { return proto.CompactTextString(m) } func (*RemoveServerReq) ProtoMessage() {} func (*RemoveServerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{10} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{10} } func (m *RemoveServerReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -625,7 +625,7 @@ func (m *RemoveServerRsp) Reset() { *m = RemoveServerRsp{} } func (m *RemoveServerRsp) String() string { return proto.CompactTextString(m) } func (*RemoveServerRsp) ProtoMessage() {} func (*RemoveServerRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{11} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{11} } func (m *RemoveServerRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -673,7 +673,7 @@ func (m *GetServerReq) Reset() { *m = GetServerReq{} } func (m *GetServerReq) String() string { return proto.CompactTextString(m) } func (*GetServerReq) ProtoMessage() {} func (*GetServerReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{12} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{12} } func (m *GetServerReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -728,7 +728,7 @@ func (m *GetServerRsp) Reset() { *m = GetServerRsp{} } func (m *GetServerRsp) String() string { return proto.CompactTextString(m) } func (*GetServerRsp) ProtoMessage() {} func (*GetServerRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{13} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{13} } func (m *GetServerRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -782,7 +782,7 @@ func (m *GetServerListReq) Reset() { *m = GetServerListReq{} } func (m *GetServerListReq) String() string { return proto.CompactTextString(m) } func (*GetServerListReq) ProtoMessage() {} func (*GetServerListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{14} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{14} } func (m *GetServerListReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -830,7 +830,7 @@ func (m *PutAPIReq) Reset() { *m = PutAPIReq{} } func (m *PutAPIReq) String() string { return proto.CompactTextString(m) } func (*PutAPIReq) ProtoMessage() {} func (*PutAPIReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{15} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{15} } func (m *PutAPIReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -885,7 +885,7 @@ func (m *PutAPIRsp) Reset() { *m = PutAPIRsp{} } func (m *PutAPIRsp) String() string { return proto.CompactTextString(m) } func (*PutAPIRsp) ProtoMessage() {} func (*PutAPIRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{16} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{16} } func (m *PutAPIRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -940,7 +940,7 @@ func (m *RemoveAPIReq) Reset() { *m = RemoveAPIReq{} } func (m *RemoveAPIReq) String() string { return proto.CompactTextString(m) } func (*RemoveAPIReq) ProtoMessage() {} func (*RemoveAPIReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{17} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{17} } func (m *RemoveAPIReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -994,7 +994,7 @@ func (m *RemoveAPIRsp) Reset() { *m = RemoveAPIRsp{} } func (m *RemoveAPIRsp) String() string { return proto.CompactTextString(m) } func (*RemoveAPIRsp) ProtoMessage() {} func (*RemoveAPIRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{18} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{18} } func (m *RemoveAPIRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +1042,7 @@ func (m *GetAPIReq) Reset() { *m = GetAPIReq{} } func (m *GetAPIReq) String() string { return proto.CompactTextString(m) } func (*GetAPIReq) ProtoMessage() {} func (*GetAPIReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{19} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{19} } func (m *GetAPIReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1097,7 +1097,7 @@ func (m *GetAPIRsp) Reset() { *m = GetAPIRsp{} } func (m *GetAPIRsp) String() string { return proto.CompactTextString(m) } func (*GetAPIRsp) ProtoMessage() {} func (*GetAPIRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{20} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{20} } func (m *GetAPIRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1151,7 +1151,7 @@ func (m *GetAPIListReq) Reset() { *m = GetAPIListReq{} } func (m *GetAPIListReq) String() string { return proto.CompactTextString(m) } func (*GetAPIListReq) ProtoMessage() {} func (*GetAPIListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{21} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{21} } func (m *GetAPIListReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1199,7 +1199,7 @@ func (m *PutRoutingReq) Reset() { *m = PutRoutingReq{} } func (m *PutRoutingReq) String() string { return proto.CompactTextString(m) } func (*PutRoutingReq) ProtoMessage() {} func (*PutRoutingReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{22} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{22} } func (m *PutRoutingReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1254,7 +1254,7 @@ func (m *PutRoutingRsp) Reset() { *m = PutRoutingRsp{} } func (m *PutRoutingRsp) String() string { return proto.CompactTextString(m) } func (*PutRoutingRsp) ProtoMessage() {} func (*PutRoutingRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{23} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{23} } func (m *PutRoutingRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1309,7 +1309,7 @@ func (m *RemoveRoutingReq) Reset() { *m = RemoveRoutingReq{} } func (m *RemoveRoutingReq) String() string { return proto.CompactTextString(m) } func (*RemoveRoutingReq) ProtoMessage() {} func (*RemoveRoutingReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{24} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{24} } func (m *RemoveRoutingReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1363,7 +1363,7 @@ func (m *RemoveRoutingRsp) Reset() { *m = RemoveRoutingRsp{} } func (m *RemoveRoutingRsp) String() string { return proto.CompactTextString(m) } func (*RemoveRoutingRsp) ProtoMessage() {} func (*RemoveRoutingRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{25} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{25} } func (m *RemoveRoutingRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1411,7 +1411,7 @@ func (m *GetRoutingReq) Reset() { *m = GetRoutingReq{} } func (m *GetRoutingReq) String() string { return proto.CompactTextString(m) } func (*GetRoutingReq) ProtoMessage() {} func (*GetRoutingReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{26} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{26} } func (m *GetRoutingReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1466,7 +1466,7 @@ func (m *GetRoutingRsp) Reset() { *m = GetRoutingRsp{} } func (m *GetRoutingRsp) String() string { return proto.CompactTextString(m) } func (*GetRoutingRsp) ProtoMessage() {} func (*GetRoutingRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{27} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{27} } func (m *GetRoutingRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1520,7 +1520,7 @@ func (m *GetRoutingListReq) Reset() { *m = GetRoutingListReq{} } func (m *GetRoutingListReq) String() string { return proto.CompactTextString(m) } func (*GetRoutingListReq) ProtoMessage() {} func (*GetRoutingListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{28} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{28} } func (m *GetRoutingListReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1569,7 +1569,7 @@ func (m *AddBindReq) Reset() { *m = AddBindReq{} } func (m *AddBindReq) String() string { return proto.CompactTextString(m) } func (*AddBindReq) ProtoMessage() {} func (*AddBindReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{29} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{29} } func (m *AddBindReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1630,7 +1630,7 @@ func (m *AddBindRsp) Reset() { *m = AddBindRsp{} } func (m *AddBindRsp) String() string { return proto.CompactTextString(m) } func (*AddBindRsp) ProtoMessage() {} func (*AddBindRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{30} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{30} } func (m *AddBindRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1679,7 +1679,7 @@ func (m *RemoveBindReq) Reset() { *m = RemoveBindReq{} } func (m *RemoveBindReq) String() string { return proto.CompactTextString(m) } func (*RemoveBindReq) ProtoMessage() {} func (*RemoveBindReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{31} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{31} } func (m *RemoveBindReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1740,7 +1740,7 @@ func (m *RemoveBindRsp) Reset() { *m = RemoveBindRsp{} } func (m *RemoveBindRsp) String() string { return proto.CompactTextString(m) } func (*RemoveBindRsp) ProtoMessage() {} func (*RemoveBindRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{32} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{32} } func (m *RemoveBindRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1788,7 @@ func (m *RemoveClusterBindReq) Reset() { *m = RemoveClusterBindReq{} } func (m *RemoveClusterBindReq) String() string { return proto.CompactTextString(m) } func (*RemoveClusterBindReq) ProtoMessage() {} func (*RemoveClusterBindReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{33} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{33} } func (m *RemoveClusterBindReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1842,7 +1842,7 @@ func (m *RemoveClusterBindRsp) Reset() { *m = RemoveClusterBindRsp{} } func (m *RemoveClusterBindRsp) String() string { return proto.CompactTextString(m) } func (*RemoveClusterBindRsp) ProtoMessage() {} func (*RemoveClusterBindRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{34} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{34} } func (m *RemoveClusterBindRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1890,7 +1890,7 @@ func (m *GetBindServersReq) Reset() { *m = GetBindServersReq{} } func (m *GetBindServersReq) String() string { return proto.CompactTextString(m) } func (*GetBindServersReq) ProtoMessage() {} func (*GetBindServersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{35} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{35} } func (m *GetBindServersReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1945,7 +1945,7 @@ func (m *GetBindServersRsp) Reset() { *m = GetBindServersRsp{} } func (m *GetBindServersRsp) String() string { return proto.CompactTextString(m) } func (*GetBindServersRsp) ProtoMessage() {} func (*GetBindServersRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{36} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{36} } func (m *GetBindServersRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1999,7 +1999,7 @@ func (m *CleanReq) Reset() { *m = CleanReq{} } func (m *CleanReq) String() string { return proto.CompactTextString(m) } func (*CleanReq) ProtoMessage() {} func (*CleanReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{37} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{37} } func (m *CleanReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2046,7 +2046,7 @@ func (m *CleanRsp) Reset() { *m = CleanRsp{} } func (m *CleanRsp) String() string { return proto.CompactTextString(m) } func (*CleanRsp) ProtoMessage() {} func (*CleanRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{38} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{38} } func (m *CleanRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2094,7 +2094,7 @@ func (m *SetIDReq) Reset() { *m = SetIDReq{} } func (m *SetIDReq) String() string { return proto.CompactTextString(m) } func (*SetIDReq) ProtoMessage() {} func (*SetIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{39} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{39} } func (m *SetIDReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2148,7 +2148,7 @@ func (m *SetIDRsp) Reset() { *m = SetIDRsp{} } func (m *SetIDRsp) String() string { return proto.CompactTextString(m) } func (*SetIDRsp) ProtoMessage() {} func (*SetIDRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{40} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{40} } func (m *SetIDRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2205,7 +2205,7 @@ func (m *BatchReq) Reset() { *m = BatchReq{} } func (m *BatchReq) String() string { return proto.CompactTextString(m) } func (*BatchReq) ProtoMessage() {} func (*BatchReq) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{41} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{41} } func (m *BatchReq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2332,7 +2332,7 @@ func (m *BatchRsp) Reset() { *m = BatchRsp{} } func (m *BatchRsp) String() string { return proto.CompactTextString(m) } func (*BatchRsp) ProtoMessage() {} func (*BatchRsp) Descriptor() ([]byte, []int) { - return fileDescriptor_rpcpb_f7f5893866fd3533, []int{42} + return fileDescriptor_rpcpb_921be21dfc61ae52, []int{42} } func (m *BatchRsp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10695,9 +10695,9 @@ var ( ErrIntOverflowRpcpb = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("rpcpb.proto", fileDescriptor_rpcpb_f7f5893866fd3533) } +func init() { proto.RegisterFile("rpcpb.proto", fileDescriptor_rpcpb_921be21dfc61ae52) } -var fileDescriptor_rpcpb_f7f5893866fd3533 = []byte{ +var fileDescriptor_rpcpb_921be21dfc61ae52 = []byte{ // 1166 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5b, 0x6b, 0x1b, 0x47, 0x14, 0xde, 0x95, 0x64, 0x4b, 0x3a, 0xf2, 0x75, 0x62, 0xda, 0x65, 0x5a, 0x94, 0xb0, 0x50, 0x28, diff --git a/pkg/proxy/dispatcher.go b/pkg/proxy/dispatcher.go index cbbb5b0c..245e9506 100644 --- a/pkg/proxy/dispatcher.go +++ b/pkg/proxy/dispatcher.go @@ -64,6 +64,20 @@ type dispathNode struct { code int } +func (dn *dispathNode) setHost(forwardReq *fasthttp.Request) { + switch dn.node.meta.HostType { + case metapb.HostOrigin: + forwardReq.SetHostBytes(dn.ctx.Request.Host()) + break + case metapb.HostServerAddress: + forwardReq.SetHost(dn.dest.meta.Addr) + break + case metapb.HostCustom: + forwardReq.SetHost(dn.node.meta.CustemHost) + break + } +} + func (dn *dispathNode) reset() { *dn = emptyDispathNode } diff --git a/pkg/proxy/proxy.go b/pkg/proxy/proxy.go index 520cb8d2..169f7114 100644 --- a/pkg/proxy/proxy.go +++ b/pkg/proxy/proxy.go @@ -531,7 +531,7 @@ func (p *Proxy) doProxy(dn *dispathNode, adjustH func(*proxyContext)) { times) if !dn.api.isWebSocket() { - forwardReq.SetHost(svr.meta.Addr) + dn.setHost(forwardReq) res, err = p.client.Do(forwardReq, svr.meta.Addr, dn.httpOption()) } else { res, err = p.onWebsocket(c, svr.meta.Addr)