// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 // protoc v3.20.3 // source: inbound.proto package inbound import ( duration "github.com/golang/protobuf/ptypes/duration" grpc_route "github.com/linkerd/linkerd2-proxy-api/go/grpc_route" http_route "github.com/linkerd/linkerd2-proxy-api/go/http_route" meta "github.com/linkerd/linkerd2-proxy-api/go/meta" net "github.com/linkerd/linkerd2-proxy-api/go/net" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type PortSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Identifies a proxy workload (e.g., pod name). Workload string `protobuf:"bytes,1,opt,name=workload,proto3" json:"workload,omitempty"` // An inbound port on _workload_. Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` } func (x *PortSpec) Reset() { *x = PortSpec{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PortSpec) String() string { return protoimpl.X.MessageStringOf(x) } func (*PortSpec) ProtoMessage() {} func (x *PortSpec) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PortSpec.ProtoReflect.Descriptor instead. func (*PortSpec) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{0} } func (x *PortSpec) GetWorkload() string { if x != nil { return x.Workload } return "" } func (x *PortSpec) GetPort() uint32 { if x != nil { return x.Port } return 0 } type Server struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // If set, indicates how the proxy should proxy connections on the specified // port. Protocol *ProxyProtocol `protobuf:"bytes,1,opt,name=protocol,proto3" json:"protocol,omitempty"` // Indicates the IP addresses on which the proxy may receive connections. // Connections targetting other IP addresses will be dropped. ServerIps []*net.IPAddress `protobuf:"bytes,2,rep,name=server_ips,json=serverIps,proto3" json:"server_ips,omitempty"` // Configures a proxy to allow connections from the specified clients. // // If unset, no connections are permitted. Authorizations []*Authz `protobuf:"bytes,3,rep,name=authorizations,proto3" json:"authorizations,omitempty"` // Descriptive labels to be added to metrics, etc. // // A control plane SHOULD return the same keys in all policies. That is, we do // NOT want to return arbitrary pod labels in this field. Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Server) Reset() { *x = Server{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Server) String() string { return protoimpl.X.MessageStringOf(x) } func (*Server) ProtoMessage() {} func (x *Server) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Server.ProtoReflect.Descriptor instead. func (*Server) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{1} } func (x *Server) GetProtocol() *ProxyProtocol { if x != nil { return x.Protocol } return nil } func (x *Server) GetServerIps() []*net.IPAddress { if x != nil { return x.ServerIps } return nil } func (x *Server) GetAuthorizations() []*Authz { if x != nil { return x.Authorizations } return nil } func (x *Server) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } type ProxyProtocol struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Kind: // // *ProxyProtocol_Detect_ // *ProxyProtocol_Opaque_ // *ProxyProtocol_Tls_ // *ProxyProtocol_Http1_ // *ProxyProtocol_Http2_ // *ProxyProtocol_Grpc_ Kind isProxyProtocol_Kind `protobuf_oneof:"kind"` } func (x *ProxyProtocol) Reset() { *x = ProxyProtocol{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol) ProtoMessage() {} func (x *ProxyProtocol) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol.ProtoReflect.Descriptor instead. func (*ProxyProtocol) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2} } func (m *ProxyProtocol) GetKind() isProxyProtocol_Kind { if m != nil { return m.Kind } return nil } func (x *ProxyProtocol) GetDetect() *ProxyProtocol_Detect { if x, ok := x.GetKind().(*ProxyProtocol_Detect_); ok { return x.Detect } return nil } func (x *ProxyProtocol) GetOpaque() *ProxyProtocol_Opaque { if x, ok := x.GetKind().(*ProxyProtocol_Opaque_); ok { return x.Opaque } return nil } func (x *ProxyProtocol) GetTls() *ProxyProtocol_Tls { if x, ok := x.GetKind().(*ProxyProtocol_Tls_); ok { return x.Tls } return nil } func (x *ProxyProtocol) GetHttp1() *ProxyProtocol_Http1 { if x, ok := x.GetKind().(*ProxyProtocol_Http1_); ok { return x.Http1 } return nil } func (x *ProxyProtocol) GetHttp2() *ProxyProtocol_Http2 { if x, ok := x.GetKind().(*ProxyProtocol_Http2_); ok { return x.Http2 } return nil } func (x *ProxyProtocol) GetGrpc() *ProxyProtocol_Grpc { if x, ok := x.GetKind().(*ProxyProtocol_Grpc_); ok { return x.Grpc } return nil } type isProxyProtocol_Kind interface { isProxyProtocol_Kind() } type ProxyProtocol_Detect_ struct { Detect *ProxyProtocol_Detect `protobuf:"bytes,1,opt,name=detect,proto3,oneof"` } type ProxyProtocol_Opaque_ struct { Opaque *ProxyProtocol_Opaque `protobuf:"bytes,2,opt,name=opaque,proto3,oneof"` } type ProxyProtocol_Tls_ struct { Tls *ProxyProtocol_Tls `protobuf:"bytes,3,opt,name=tls,proto3,oneof"` } type ProxyProtocol_Http1_ struct { Http1 *ProxyProtocol_Http1 `protobuf:"bytes,4,opt,name=http1,proto3,oneof"` } type ProxyProtocol_Http2_ struct { Http2 *ProxyProtocol_Http2 `protobuf:"bytes,5,opt,name=http2,proto3,oneof"` } type ProxyProtocol_Grpc_ struct { Grpc *ProxyProtocol_Grpc `protobuf:"bytes,6,opt,name=grpc,proto3,oneof"` } func (*ProxyProtocol_Detect_) isProxyProtocol_Kind() {} func (*ProxyProtocol_Opaque_) isProxyProtocol_Kind() {} func (*ProxyProtocol_Tls_) isProxyProtocol_Kind() {} func (*ProxyProtocol_Http1_) isProxyProtocol_Kind() {} func (*ProxyProtocol_Http2_) isProxyProtocol_Kind() {} func (*ProxyProtocol_Grpc_) isProxyProtocol_Kind() {} type Authz struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Limits this authorization to client addresses in the provided networks. // // Must have at least one network, otherwise the authorization must be // ignored. An authorization matches all clients by including an explicit // match on, i.e., `[0.0.0.0/0, 0::/0]“. Networks []*Network `protobuf:"bytes,1,rep,name=networks,proto3" json:"networks,omitempty"` // Must be set. Authentication *Authn `protobuf:"bytes,2,opt,name=authentication,proto3" json:"authentication,omitempty"` // Descriptive labels to be added to metrics, etc. // // A control plane SHOULD return the same keys in all authorizations. That is, // we do NOT want to return arbitrary pod labels in this field. // // `labels` should be considered deprecated. `metadata` is preferred. However, // controllers should continue to set `labels` for compatibility with older // proxies. Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // If set, describes an Authorization configuration. Replaces the free-from // `labels` field. Metadata *meta.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *Authz) Reset() { *x = Authz{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Authz) String() string { return protoimpl.X.MessageStringOf(x) } func (*Authz) ProtoMessage() {} func (x *Authz) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Authz.ProtoReflect.Descriptor instead. func (*Authz) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{3} } func (x *Authz) GetNetworks() []*Network { if x != nil { return x.Networks } return nil } func (x *Authz) GetAuthentication() *Authn { if x != nil { return x.Authentication } return nil } func (x *Authz) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } func (x *Authz) GetMetadata() *meta.Metadata { if x != nil { return x.Metadata } return nil } // Describes a network of authorized clients. type Network struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Net *net.IPNetwork `protobuf:"bytes,1,opt,name=net,proto3" json:"net,omitempty"` Except []*net.IPNetwork `protobuf:"bytes,2,rep,name=except,proto3" json:"except,omitempty"` } func (x *Network) Reset() { *x = Network{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Network) String() string { return protoimpl.X.MessageStringOf(x) } func (*Network) ProtoMessage() {} func (x *Network) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Network.ProtoReflect.Descriptor instead. func (*Network) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{4} } func (x *Network) GetNet() *net.IPNetwork { if x != nil { return x.Net } return nil } func (x *Network) GetExcept() []*net.IPNetwork { if x != nil { return x.Except } return nil } type Authn struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Permit: // // *Authn_Unauthenticated // *Authn_MeshTLS Permit isAuthn_Permit `protobuf_oneof:"permit"` } func (x *Authn) Reset() { *x = Authn{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Authn) String() string { return protoimpl.X.MessageStringOf(x) } func (*Authn) ProtoMessage() {} func (x *Authn) ProtoReflect() protoreflect.Message { mi := &file_inbound_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 Authn.ProtoReflect.Descriptor instead. func (*Authn) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{5} } func (m *Authn) GetPermit() isAuthn_Permit { if m != nil { return m.Permit } return nil } func (x *Authn) GetUnauthenticated() *Authn_PermitUnauthenticated { if x, ok := x.GetPermit().(*Authn_Unauthenticated); ok { return x.Unauthenticated } return nil } func (x *Authn) GetMeshTLS() *Authn_PermitMeshTLS { if x, ok := x.GetPermit().(*Authn_MeshTLS); ok { return x.MeshTLS } return nil } type isAuthn_Permit interface { isAuthn_Permit() } type Authn_Unauthenticated struct { Unauthenticated *Authn_PermitUnauthenticated `protobuf:"bytes,1,opt,name=unauthenticated,proto3,oneof"` } type Authn_MeshTLS struct { // If set, requires that the connection is transported over mesh TLS. MeshTLS *Authn_PermitMeshTLS `protobuf:"bytes,2,opt,name=meshTLS,proto3,oneof"` } func (*Authn_Unauthenticated) isAuthn_Permit() {} func (*Authn_MeshTLS) isAuthn_Permit() {} type Identity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (x *Identity) Reset() { *x = Identity{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Identity) String() string { return protoimpl.X.MessageStringOf(x) } func (*Identity) ProtoMessage() {} func (x *Identity) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Identity.ProtoReflect.Descriptor instead. func (*Identity) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{6} } func (x *Identity) GetName() string { if x != nil { return x.Name } return "" } // Encodes a DNS-like name suffix as sequence of parts. // // An empty list is equivalent to `.` (matching all names); the list `["foo", // "bar"]` is equivalent to "foo.bar." (matching `*.foo.bar`), etc. type IdentitySuffix struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Parts []string `protobuf:"bytes,1,rep,name=parts,proto3" json:"parts,omitempty"` } func (x *IdentitySuffix) Reset() { *x = IdentitySuffix{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *IdentitySuffix) String() string { return protoimpl.X.MessageStringOf(x) } func (*IdentitySuffix) ProtoMessage() {} func (x *IdentitySuffix) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use IdentitySuffix.ProtoReflect.Descriptor instead. func (*IdentitySuffix) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{7} } func (x *IdentitySuffix) GetParts() []string { if x != nil { return x.Parts } return nil } // Inbound-specific HTTP route configuration (based on the // [Gateway API](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1alpha2.HTTPRoute)). type HttpRoute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Metadata *meta.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` // If empty, the host value is ignored. Hosts []*http_route.HostMatch `protobuf:"bytes,2,rep,name=hosts,proto3" json:"hosts,omitempty"` // Extends the list of authorizations on the `Server` with authorizations // specific to this route. Authorizations []*Authz `protobuf:"bytes,3,rep,name=authorizations,proto3" json:"authorizations,omitempty"` // Must have at least one rule. Rules []*HttpRoute_Rule `protobuf:"bytes,4,rep,name=rules,proto3" json:"rules,omitempty"` } func (x *HttpRoute) Reset() { *x = HttpRoute{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HttpRoute) String() string { return protoimpl.X.MessageStringOf(x) } func (*HttpRoute) ProtoMessage() {} func (x *HttpRoute) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HttpRoute.ProtoReflect.Descriptor instead. func (*HttpRoute) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{8} } func (x *HttpRoute) GetMetadata() *meta.Metadata { if x != nil { return x.Metadata } return nil } func (x *HttpRoute) GetHosts() []*http_route.HostMatch { if x != nil { return x.Hosts } return nil } func (x *HttpRoute) GetAuthorizations() []*Authz { if x != nil { return x.Authorizations } return nil } func (x *HttpRoute) GetRules() []*HttpRoute_Rule { if x != nil { return x.Rules } return nil } // Inbound-specific gRPC route configuration. type GrpcRoute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Metadata *meta.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` // If empty, the host value is ignored. Hosts []*http_route.HostMatch `protobuf:"bytes,2,rep,name=hosts,proto3" json:"hosts,omitempty"` // The server MUST return at least one authorization, otherwise all requests // to this route will fail with an unauthorized response. Authorizations []*Authz `protobuf:"bytes,3,rep,name=authorizations,proto3" json:"authorizations,omitempty"` // Must have at least one rule. Rules []*GrpcRoute_Rule `protobuf:"bytes,4,rep,name=rules,proto3" json:"rules,omitempty"` } func (x *GrpcRoute) Reset() { *x = GrpcRoute{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GrpcRoute) String() string { return protoimpl.X.MessageStringOf(x) } func (*GrpcRoute) ProtoMessage() {} func (x *GrpcRoute) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GrpcRoute.ProtoReflect.Descriptor instead. func (*GrpcRoute) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{9} } func (x *GrpcRoute) GetMetadata() *meta.Metadata { if x != nil { return x.Metadata } return nil } func (x *GrpcRoute) GetHosts() []*http_route.HostMatch { if x != nil { return x.Hosts } return nil } func (x *GrpcRoute) GetAuthorizations() []*Authz { if x != nil { return x.Authorizations } return nil } func (x *GrpcRoute) GetRules() []*GrpcRoute_Rule { if x != nil { return x.Rules } return nil } type ProxyProtocol_Detect struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Timeout *duration.Duration `protobuf:"bytes,1,opt,name=timeout,proto3" json:"timeout,omitempty"` // If the protocol detected as HTTP, a list of HTTP routes that should be // matched. HttpRoutes []*HttpRoute `protobuf:"bytes,3,rep,name=http_routes,json=httpRoutes,proto3" json:"http_routes,omitempty"` } func (x *ProxyProtocol_Detect) Reset() { *x = ProxyProtocol_Detect{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Detect) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Detect) ProtoMessage() {} func (x *ProxyProtocol_Detect) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Detect.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Detect) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 0} } func (x *ProxyProtocol_Detect) GetTimeout() *duration.Duration { if x != nil { return x.Timeout } return nil } func (x *ProxyProtocol_Detect) GetHttpRoutes() []*HttpRoute { if x != nil { return x.HttpRoutes } return nil } type ProxyProtocol_Http1 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` } func (x *ProxyProtocol_Http1) Reset() { *x = ProxyProtocol_Http1{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Http1) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Http1) ProtoMessage() {} func (x *ProxyProtocol_Http1) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Http1.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Http1) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 1} } func (x *ProxyProtocol_Http1) GetRoutes() []*HttpRoute { if x != nil { return x.Routes } return nil } type ProxyProtocol_Http2 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` } func (x *ProxyProtocol_Http2) Reset() { *x = ProxyProtocol_Http2{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Http2) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Http2) ProtoMessage() {} func (x *ProxyProtocol_Http2) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Http2.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Http2) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 2} } func (x *ProxyProtocol_Http2) GetRoutes() []*HttpRoute { if x != nil { return x.Routes } return nil } type ProxyProtocol_Grpc struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Routes []*GrpcRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` } func (x *ProxyProtocol_Grpc) Reset() { *x = ProxyProtocol_Grpc{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Grpc) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Grpc) ProtoMessage() {} func (x *ProxyProtocol_Grpc) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Grpc.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Grpc) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 3} } func (x *ProxyProtocol_Grpc) GetRoutes() []*GrpcRoute { if x != nil { return x.Routes } return nil } type ProxyProtocol_Opaque struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ProxyProtocol_Opaque) Reset() { *x = ProxyProtocol_Opaque{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Opaque) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Opaque) ProtoMessage() {} func (x *ProxyProtocol_Opaque) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Opaque.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Opaque) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 4} } type ProxyProtocol_Tls struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ProxyProtocol_Tls) Reset() { *x = ProxyProtocol_Tls{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProxyProtocol_Tls) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProxyProtocol_Tls) ProtoMessage() {} func (x *ProxyProtocol_Tls) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProxyProtocol_Tls.ProtoReflect.Descriptor instead. func (*ProxyProtocol_Tls) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{2, 5} } type Authn_PermitUnauthenticated struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *Authn_PermitUnauthenticated) Reset() { *x = Authn_PermitUnauthenticated{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Authn_PermitUnauthenticated) String() string { return protoimpl.X.MessageStringOf(x) } func (*Authn_PermitUnauthenticated) ProtoMessage() {} func (x *Authn_PermitUnauthenticated) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Authn_PermitUnauthenticated.ProtoReflect.Descriptor instead. func (*Authn_PermitUnauthenticated) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{5, 0} } type Authn_PermitMeshTLS struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Clients: // // *Authn_PermitMeshTLS_Unauthenticated // *Authn_PermitMeshTLS_Identities Clients isAuthn_PermitMeshTLS_Clients `protobuf_oneof:"clients"` } func (x *Authn_PermitMeshTLS) Reset() { *x = Authn_PermitMeshTLS{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Authn_PermitMeshTLS) String() string { return protoimpl.X.MessageStringOf(x) } func (*Authn_PermitMeshTLS) ProtoMessage() {} func (x *Authn_PermitMeshTLS) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Authn_PermitMeshTLS.ProtoReflect.Descriptor instead. func (*Authn_PermitMeshTLS) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{5, 1} } func (m *Authn_PermitMeshTLS) GetClients() isAuthn_PermitMeshTLS_Clients { if m != nil { return m.Clients } return nil } func (x *Authn_PermitMeshTLS) GetUnauthenticated() *Authn_PermitUnauthenticated { if x, ok := x.GetClients().(*Authn_PermitMeshTLS_Unauthenticated); ok { return x.Unauthenticated } return nil } func (x *Authn_PermitMeshTLS) GetIdentities() *Authn_PermitMeshTLS_PermitClientIdentities { if x, ok := x.GetClients().(*Authn_PermitMeshTLS_Identities); ok { return x.Identities } return nil } type isAuthn_PermitMeshTLS_Clients interface { isAuthn_PermitMeshTLS_Clients() } type Authn_PermitMeshTLS_Unauthenticated struct { // Indicates that client identities are not required. Unauthenticated *Authn_PermitUnauthenticated `protobuf:"bytes,1,opt,name=unauthenticated,proto3,oneof"` } type Authn_PermitMeshTLS_Identities struct { // Indicates that mutually-authenticated connections are permitted from // clients with matching identities. Identities *Authn_PermitMeshTLS_PermitClientIdentities `protobuf:"bytes,2,opt,name=identities,proto3,oneof"` } func (*Authn_PermitMeshTLS_Unauthenticated) isAuthn_PermitMeshTLS_Clients() {} func (*Authn_PermitMeshTLS_Identities) isAuthn_PermitMeshTLS_Clients() {} type Authn_PermitMeshTLS_PermitClientIdentities struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A list of literal identities. Identities []*Identity `protobuf:"bytes,1,rep,name=identities,proto3" json:"identities,omitempty"` // A list of identity suffixes. // // If this contains an empty suffix, all identities are matched. Suffixes []*IdentitySuffix `protobuf:"bytes,2,rep,name=suffixes,proto3" json:"suffixes,omitempty"` } func (x *Authn_PermitMeshTLS_PermitClientIdentities) Reset() { *x = Authn_PermitMeshTLS_PermitClientIdentities{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Authn_PermitMeshTLS_PermitClientIdentities) String() string { return protoimpl.X.MessageStringOf(x) } func (*Authn_PermitMeshTLS_PermitClientIdentities) ProtoMessage() {} func (x *Authn_PermitMeshTLS_PermitClientIdentities) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Authn_PermitMeshTLS_PermitClientIdentities.ProtoReflect.Descriptor instead. func (*Authn_PermitMeshTLS_PermitClientIdentities) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{5, 1, 0} } func (x *Authn_PermitMeshTLS_PermitClientIdentities) GetIdentities() []*Identity { if x != nil { return x.Identities } return nil } func (x *Authn_PermitMeshTLS_PermitClientIdentities) GetSuffixes() []*IdentitySuffix { if x != nil { return x.Suffixes } return nil } type HttpRoute_Rule struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Matches []*http_route.HttpRouteMatch `protobuf:"bytes,1,rep,name=matches,proto3" json:"matches,omitempty"` Filters []*HttpRoute_Filter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` } func (x *HttpRoute_Rule) Reset() { *x = HttpRoute_Rule{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HttpRoute_Rule) String() string { return protoimpl.X.MessageStringOf(x) } func (*HttpRoute_Rule) ProtoMessage() {} func (x *HttpRoute_Rule) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HttpRoute_Rule.ProtoReflect.Descriptor instead. func (*HttpRoute_Rule) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{8, 0} } func (x *HttpRoute_Rule) GetMatches() []*http_route.HttpRouteMatch { if x != nil { return x.Matches } return nil } func (x *HttpRoute_Rule) GetFilters() []*HttpRoute_Filter { if x != nil { return x.Filters } return nil } type HttpRoute_Filter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Kind: // // *HttpRoute_Filter_FailureInjector // *HttpRoute_Filter_RequestHeaderModifier // *HttpRoute_Filter_Redirect Kind isHttpRoute_Filter_Kind `protobuf_oneof:"kind"` } func (x *HttpRoute_Filter) Reset() { *x = HttpRoute_Filter{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HttpRoute_Filter) String() string { return protoimpl.X.MessageStringOf(x) } func (*HttpRoute_Filter) ProtoMessage() {} func (x *HttpRoute_Filter) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HttpRoute_Filter.ProtoReflect.Descriptor instead. func (*HttpRoute_Filter) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{8, 1} } func (m *HttpRoute_Filter) GetKind() isHttpRoute_Filter_Kind { if m != nil { return m.Kind } return nil } func (x *HttpRoute_Filter) GetFailureInjector() *http_route.HttpFailureInjector { if x, ok := x.GetKind().(*HttpRoute_Filter_FailureInjector); ok { return x.FailureInjector } return nil } func (x *HttpRoute_Filter) GetRequestHeaderModifier() *http_route.RequestHeaderModifier { if x, ok := x.GetKind().(*HttpRoute_Filter_RequestHeaderModifier); ok { return x.RequestHeaderModifier } return nil } func (x *HttpRoute_Filter) GetRedirect() *http_route.RequestRedirect { if x, ok := x.GetKind().(*HttpRoute_Filter_Redirect); ok { return x.Redirect } return nil } type isHttpRoute_Filter_Kind interface { isHttpRoute_Filter_Kind() } type HttpRoute_Filter_FailureInjector struct { FailureInjector *http_route.HttpFailureInjector `protobuf:"bytes,1,opt,name=failure_injector,json=failureInjector,proto3,oneof"` } type HttpRoute_Filter_RequestHeaderModifier struct { RequestHeaderModifier *http_route.RequestHeaderModifier `protobuf:"bytes,2,opt,name=request_header_modifier,json=requestHeaderModifier,proto3,oneof"` } type HttpRoute_Filter_Redirect struct { Redirect *http_route.RequestRedirect `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"` } func (*HttpRoute_Filter_FailureInjector) isHttpRoute_Filter_Kind() {} func (*HttpRoute_Filter_RequestHeaderModifier) isHttpRoute_Filter_Kind() {} func (*HttpRoute_Filter_Redirect) isHttpRoute_Filter_Kind() {} type GrpcRoute_Rule struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Matches []*grpc_route.GrpcRouteMatch `protobuf:"bytes,1,rep,name=matches,proto3" json:"matches,omitempty"` Filters []*GrpcRoute_Filter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` } func (x *GrpcRoute_Rule) Reset() { *x = GrpcRoute_Rule{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GrpcRoute_Rule) String() string { return protoimpl.X.MessageStringOf(x) } func (*GrpcRoute_Rule) ProtoMessage() {} func (x *GrpcRoute_Rule) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GrpcRoute_Rule.ProtoReflect.Descriptor instead. func (*GrpcRoute_Rule) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{9, 0} } func (x *GrpcRoute_Rule) GetMatches() []*grpc_route.GrpcRouteMatch { if x != nil { return x.Matches } return nil } func (x *GrpcRoute_Rule) GetFilters() []*GrpcRoute_Filter { if x != nil { return x.Filters } return nil } type GrpcRoute_Filter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Kind: // // *GrpcRoute_Filter_FailureInjector // *GrpcRoute_Filter_RequestHeaderModifier Kind isGrpcRoute_Filter_Kind `protobuf_oneof:"kind"` } func (x *GrpcRoute_Filter) Reset() { *x = GrpcRoute_Filter{} if protoimpl.UnsafeEnabled { mi := &file_inbound_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GrpcRoute_Filter) String() string { return protoimpl.X.MessageStringOf(x) } func (*GrpcRoute_Filter) ProtoMessage() {} func (x *GrpcRoute_Filter) ProtoReflect() protoreflect.Message { mi := &file_inbound_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GrpcRoute_Filter.ProtoReflect.Descriptor instead. func (*GrpcRoute_Filter) Descriptor() ([]byte, []int) { return file_inbound_proto_rawDescGZIP(), []int{9, 1} } func (m *GrpcRoute_Filter) GetKind() isGrpcRoute_Filter_Kind { if m != nil { return m.Kind } return nil } func (x *GrpcRoute_Filter) GetFailureInjector() *grpc_route.GrpcFailureInjector { if x, ok := x.GetKind().(*GrpcRoute_Filter_FailureInjector); ok { return x.FailureInjector } return nil } func (x *GrpcRoute_Filter) GetRequestHeaderModifier() *http_route.RequestHeaderModifier { if x, ok := x.GetKind().(*GrpcRoute_Filter_RequestHeaderModifier); ok { return x.RequestHeaderModifier } return nil } type isGrpcRoute_Filter_Kind interface { isGrpcRoute_Filter_Kind() } type GrpcRoute_Filter_FailureInjector struct { FailureInjector *grpc_route.GrpcFailureInjector `protobuf:"bytes,1,opt,name=failure_injector,json=failureInjector,proto3,oneof"` } type GrpcRoute_Filter_RequestHeaderModifier struct { RequestHeaderModifier *http_route.RequestHeaderModifier `protobuf:"bytes,2,opt,name=request_header_modifier,json=requestHeaderModifier,proto3,oneof"` } func (*GrpcRoute_Filter_FailureInjector) isGrpcRoute_Filter_Kind() {} func (*GrpcRoute_Filter_RequestHeaderModifier) isGrpcRoute_Filter_Kind() {} var File_inbound_proto protoreflect.FileDescriptor var file_inbound_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0xd7, 0x02, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x06, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x48, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x68, 0x74, 0x74, 0x70, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x31, 0x48, 0x00, 0x52, 0x05, 0x68, 0x74, 0x74, 0x70, 0x31, 0x12, 0x45, 0x0a, 0x05, 0x68, 0x74, 0x74, 0x70, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x32, 0x48, 0x00, 0x52, 0x05, 0x68, 0x74, 0x74, 0x70, 0x32, 0x12, 0x42, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x1a, 0x89, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x4a, 0x0a, 0x05, 0x48, 0x74, 0x74, 0x70, 0x31, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x4a, 0x0a, 0x05, 0x48, 0x74, 0x74, 0x70, 0x32, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x49, 0x0a, 0x04, 0x47, 0x72, 0x70, 0x63, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x08, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0x05, 0x0a, 0x03, 0x54, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, 0x3d, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x75, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x31, 0x0a, 0x03, 0x6e, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x03, 0x6e, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x06, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x22, 0xe5, 0x04, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x1a, 0x17, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x8a, 0x03, 0x0a, 0x0d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0xa2, 0x01, 0x0a, 0x16, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x52, 0x08, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x22, 0x1e, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0xd1, 0x05, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xa9, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x85, 0x05, 0x0a, 0x09, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xdd, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, 0xc1, 0x01, 0x0a, 0x15, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x09, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x00, 0x30, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_inbound_proto_rawDescOnce sync.Once file_inbound_proto_rawDescData = file_inbound_proto_rawDesc ) func file_inbound_proto_rawDescGZIP() []byte { file_inbound_proto_rawDescOnce.Do(func() { file_inbound_proto_rawDescData = protoimpl.X.CompressGZIP(file_inbound_proto_rawDescData) }) return file_inbound_proto_rawDescData } var file_inbound_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_inbound_proto_goTypes = []any{ (*PortSpec)(nil), // 0: io.linkerd.proxy.inbound.PortSpec (*Server)(nil), // 1: io.linkerd.proxy.inbound.Server (*ProxyProtocol)(nil), // 2: io.linkerd.proxy.inbound.ProxyProtocol (*Authz)(nil), // 3: io.linkerd.proxy.inbound.Authz (*Network)(nil), // 4: io.linkerd.proxy.inbound.Network (*Authn)(nil), // 5: io.linkerd.proxy.inbound.Authn (*Identity)(nil), // 6: io.linkerd.proxy.inbound.Identity (*IdentitySuffix)(nil), // 7: io.linkerd.proxy.inbound.IdentitySuffix (*HttpRoute)(nil), // 8: io.linkerd.proxy.inbound.HttpRoute (*GrpcRoute)(nil), // 9: io.linkerd.proxy.inbound.GrpcRoute nil, // 10: io.linkerd.proxy.inbound.Server.LabelsEntry (*ProxyProtocol_Detect)(nil), // 11: io.linkerd.proxy.inbound.ProxyProtocol.Detect (*ProxyProtocol_Http1)(nil), // 12: io.linkerd.proxy.inbound.ProxyProtocol.Http1 (*ProxyProtocol_Http2)(nil), // 13: io.linkerd.proxy.inbound.ProxyProtocol.Http2 (*ProxyProtocol_Grpc)(nil), // 14: io.linkerd.proxy.inbound.ProxyProtocol.Grpc (*ProxyProtocol_Opaque)(nil), // 15: io.linkerd.proxy.inbound.ProxyProtocol.Opaque (*ProxyProtocol_Tls)(nil), // 16: io.linkerd.proxy.inbound.ProxyProtocol.Tls nil, // 17: io.linkerd.proxy.inbound.Authz.LabelsEntry (*Authn_PermitUnauthenticated)(nil), // 18: io.linkerd.proxy.inbound.Authn.PermitUnauthenticated (*Authn_PermitMeshTLS)(nil), // 19: io.linkerd.proxy.inbound.Authn.PermitMeshTLS (*Authn_PermitMeshTLS_PermitClientIdentities)(nil), // 20: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities (*HttpRoute_Rule)(nil), // 21: io.linkerd.proxy.inbound.HttpRoute.Rule (*HttpRoute_Filter)(nil), // 22: io.linkerd.proxy.inbound.HttpRoute.Filter (*GrpcRoute_Rule)(nil), // 23: io.linkerd.proxy.inbound.GrpcRoute.Rule (*GrpcRoute_Filter)(nil), // 24: io.linkerd.proxy.inbound.GrpcRoute.Filter (*net.IPAddress)(nil), // 25: io.linkerd.proxy.net.IPAddress (*meta.Metadata)(nil), // 26: io.linkerd.proxy.meta.Metadata (*net.IPNetwork)(nil), // 27: io.linkerd.proxy.net.IPNetwork (*http_route.HostMatch)(nil), // 28: io.linkerd.proxy.http_route.HostMatch (*duration.Duration)(nil), // 29: google.protobuf.Duration (*http_route.HttpRouteMatch)(nil), // 30: io.linkerd.proxy.http_route.HttpRouteMatch (*http_route.HttpFailureInjector)(nil), // 31: io.linkerd.proxy.http_route.HttpFailureInjector (*http_route.RequestHeaderModifier)(nil), // 32: io.linkerd.proxy.http_route.RequestHeaderModifier (*http_route.RequestRedirect)(nil), // 33: io.linkerd.proxy.http_route.RequestRedirect (*grpc_route.GrpcRouteMatch)(nil), // 34: io.linkerd.proxy.grpc_route.GrpcRouteMatch (*grpc_route.GrpcFailureInjector)(nil), // 35: io.linkerd.proxy.grpc_route.GrpcFailureInjector } var file_inbound_proto_depIdxs = []int32{ 2, // 0: io.linkerd.proxy.inbound.Server.protocol:type_name -> io.linkerd.proxy.inbound.ProxyProtocol 25, // 1: io.linkerd.proxy.inbound.Server.server_ips:type_name -> io.linkerd.proxy.net.IPAddress 3, // 2: io.linkerd.proxy.inbound.Server.authorizations:type_name -> io.linkerd.proxy.inbound.Authz 10, // 3: io.linkerd.proxy.inbound.Server.labels:type_name -> io.linkerd.proxy.inbound.Server.LabelsEntry 11, // 4: io.linkerd.proxy.inbound.ProxyProtocol.detect:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Detect 15, // 5: io.linkerd.proxy.inbound.ProxyProtocol.opaque:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Opaque 16, // 6: io.linkerd.proxy.inbound.ProxyProtocol.tls:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Tls 12, // 7: io.linkerd.proxy.inbound.ProxyProtocol.http1:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http1 13, // 8: io.linkerd.proxy.inbound.ProxyProtocol.http2:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http2 14, // 9: io.linkerd.proxy.inbound.ProxyProtocol.grpc:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Grpc 4, // 10: io.linkerd.proxy.inbound.Authz.networks:type_name -> io.linkerd.proxy.inbound.Network 5, // 11: io.linkerd.proxy.inbound.Authz.authentication:type_name -> io.linkerd.proxy.inbound.Authn 17, // 12: io.linkerd.proxy.inbound.Authz.labels:type_name -> io.linkerd.proxy.inbound.Authz.LabelsEntry 26, // 13: io.linkerd.proxy.inbound.Authz.metadata:type_name -> io.linkerd.proxy.meta.Metadata 27, // 14: io.linkerd.proxy.inbound.Network.net:type_name -> io.linkerd.proxy.net.IPNetwork 27, // 15: io.linkerd.proxy.inbound.Network.except:type_name -> io.linkerd.proxy.net.IPNetwork 18, // 16: io.linkerd.proxy.inbound.Authn.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated 19, // 17: io.linkerd.proxy.inbound.Authn.meshTLS:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS 26, // 18: io.linkerd.proxy.inbound.HttpRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata 28, // 19: io.linkerd.proxy.inbound.HttpRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch 3, // 20: io.linkerd.proxy.inbound.HttpRoute.authorizations:type_name -> io.linkerd.proxy.inbound.Authz 21, // 21: io.linkerd.proxy.inbound.HttpRoute.rules:type_name -> io.linkerd.proxy.inbound.HttpRoute.Rule 26, // 22: io.linkerd.proxy.inbound.GrpcRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata 28, // 23: io.linkerd.proxy.inbound.GrpcRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch 3, // 24: io.linkerd.proxy.inbound.GrpcRoute.authorizations:type_name -> io.linkerd.proxy.inbound.Authz 23, // 25: io.linkerd.proxy.inbound.GrpcRoute.rules:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Rule 29, // 26: io.linkerd.proxy.inbound.ProxyProtocol.Detect.timeout:type_name -> google.protobuf.Duration 8, // 27: io.linkerd.proxy.inbound.ProxyProtocol.Detect.http_routes:type_name -> io.linkerd.proxy.inbound.HttpRoute 8, // 28: io.linkerd.proxy.inbound.ProxyProtocol.Http1.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute 8, // 29: io.linkerd.proxy.inbound.ProxyProtocol.Http2.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute 9, // 30: io.linkerd.proxy.inbound.ProxyProtocol.Grpc.routes:type_name -> io.linkerd.proxy.inbound.GrpcRoute 18, // 31: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated 20, // 32: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.identities:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities 6, // 33: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.identities:type_name -> io.linkerd.proxy.inbound.Identity 7, // 34: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.suffixes:type_name -> io.linkerd.proxy.inbound.IdentitySuffix 30, // 35: io.linkerd.proxy.inbound.HttpRoute.Rule.matches:type_name -> io.linkerd.proxy.http_route.HttpRouteMatch 22, // 36: io.linkerd.proxy.inbound.HttpRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.HttpRoute.Filter 31, // 37: io.linkerd.proxy.inbound.HttpRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.http_route.HttpFailureInjector 32, // 38: io.linkerd.proxy.inbound.HttpRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier 33, // 39: io.linkerd.proxy.inbound.HttpRoute.Filter.redirect:type_name -> io.linkerd.proxy.http_route.RequestRedirect 34, // 40: io.linkerd.proxy.inbound.GrpcRoute.Rule.matches:type_name -> io.linkerd.proxy.grpc_route.GrpcRouteMatch 24, // 41: io.linkerd.proxy.inbound.GrpcRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Filter 35, // 42: io.linkerd.proxy.inbound.GrpcRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.grpc_route.GrpcFailureInjector 32, // 43: io.linkerd.proxy.inbound.GrpcRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier 0, // 44: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:input_type -> io.linkerd.proxy.inbound.PortSpec 0, // 45: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:input_type -> io.linkerd.proxy.inbound.PortSpec 1, // 46: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:output_type -> io.linkerd.proxy.inbound.Server 1, // 47: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:output_type -> io.linkerd.proxy.inbound.Server 46, // [46:48] is the sub-list for method output_type 44, // [44:46] is the sub-list for method input_type 44, // [44:44] is the sub-list for extension type_name 44, // [44:44] is the sub-list for extension extendee 0, // [0:44] is the sub-list for field type_name } func init() { file_inbound_proto_init() } func file_inbound_proto_init() { if File_inbound_proto != nil { return } if !protoimpl.UnsafeEnabled { file_inbound_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PortSpec); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Server); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*Authz); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Network); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Authn); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*Identity); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*IdentitySuffix); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*HttpRoute); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GrpcRoute); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Detect); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Http1); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Http2); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Grpc); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Opaque); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Tls); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitUnauthenticated); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitMeshTLS); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitMeshTLS_PermitClientIdentities); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*HttpRoute_Rule); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*HttpRoute_Filter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*GrpcRoute_Rule); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_inbound_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*GrpcRoute_Filter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_inbound_proto_msgTypes[2].OneofWrappers = []any{ (*ProxyProtocol_Detect_)(nil), (*ProxyProtocol_Opaque_)(nil), (*ProxyProtocol_Tls_)(nil), (*ProxyProtocol_Http1_)(nil), (*ProxyProtocol_Http2_)(nil), (*ProxyProtocol_Grpc_)(nil), } file_inbound_proto_msgTypes[5].OneofWrappers = []any{ (*Authn_Unauthenticated)(nil), (*Authn_MeshTLS)(nil), } file_inbound_proto_msgTypes[19].OneofWrappers = []any{ (*Authn_PermitMeshTLS_Unauthenticated)(nil), (*Authn_PermitMeshTLS_Identities)(nil), } file_inbound_proto_msgTypes[22].OneofWrappers = []any{ (*HttpRoute_Filter_FailureInjector)(nil), (*HttpRoute_Filter_RequestHeaderModifier)(nil), (*HttpRoute_Filter_Redirect)(nil), } file_inbound_proto_msgTypes[24].OneofWrappers = []any{ (*GrpcRoute_Filter_FailureInjector)(nil), (*GrpcRoute_Filter_RequestHeaderModifier)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_inbound_proto_rawDesc, NumEnums: 0, NumMessages: 25, NumExtensions: 0, NumServices: 1, }, GoTypes: file_inbound_proto_goTypes, DependencyIndexes: file_inbound_proto_depIdxs, MessageInfos: file_inbound_proto_msgTypes, }.Build() File_inbound_proto = out.File file_inbound_proto_rawDesc = nil file_inbound_proto_goTypes = nil file_inbound_proto_depIdxs = nil }