github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/app/router/config.pb.go (about)

     1  // Code generated by protoc-gen-go. DO NOT EDIT.
     2  // versions:
     3  // 	protoc-gen-go v1.27.1
     4  // 	protoc        v3.12.4
     5  // source: app/router/config.proto
     6  
     7  package router
     8  
     9  import (
    10  	any "github.com/golang/protobuf/ptypes/any"
    11  	routercommon "github.com/v2fly/v2ray-core/v5/app/router/routercommon"
    12  	net "github.com/v2fly/v2ray-core/v5/common/net"
    13  	_ "github.com/v2fly/v2ray-core/v5/common/protoext"
    14  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    15  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    16  	reflect "reflect"
    17  	sync "sync"
    18  )
    19  
    20  const (
    21  	// Verify that this generated code is sufficiently up-to-date.
    22  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    23  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    24  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    25  )
    26  
    27  type DomainStrategy int32
    28  
    29  const (
    30  	// Use domain as is.
    31  	DomainStrategy_AsIs DomainStrategy = 0
    32  	// Always resolve IP for domains.
    33  	DomainStrategy_UseIp DomainStrategy = 1
    34  	// Resolve to IP if the domain doesn't match any rules.
    35  	DomainStrategy_IpIfNonMatch DomainStrategy = 2
    36  	// Resolve to IP if any rule requires IP matching.
    37  	DomainStrategy_IpOnDemand DomainStrategy = 3
    38  )
    39  
    40  // Enum value maps for DomainStrategy.
    41  var (
    42  	DomainStrategy_name = map[int32]string{
    43  		0: "AsIs",
    44  		1: "UseIp",
    45  		2: "IpIfNonMatch",
    46  		3: "IpOnDemand",
    47  	}
    48  	DomainStrategy_value = map[string]int32{
    49  		"AsIs":         0,
    50  		"UseIp":        1,
    51  		"IpIfNonMatch": 2,
    52  		"IpOnDemand":   3,
    53  	}
    54  )
    55  
    56  func (x DomainStrategy) Enum() *DomainStrategy {
    57  	p := new(DomainStrategy)
    58  	*p = x
    59  	return p
    60  }
    61  
    62  func (x DomainStrategy) String() string {
    63  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    64  }
    65  
    66  func (DomainStrategy) Descriptor() protoreflect.EnumDescriptor {
    67  	return file_app_router_config_proto_enumTypes[0].Descriptor()
    68  }
    69  
    70  func (DomainStrategy) Type() protoreflect.EnumType {
    71  	return &file_app_router_config_proto_enumTypes[0]
    72  }
    73  
    74  func (x DomainStrategy) Number() protoreflect.EnumNumber {
    75  	return protoreflect.EnumNumber(x)
    76  }
    77  
    78  // Deprecated: Use DomainStrategy.Descriptor instead.
    79  func (DomainStrategy) EnumDescriptor() ([]byte, []int) {
    80  	return file_app_router_config_proto_rawDescGZIP(), []int{0}
    81  }
    82  
    83  type RoutingRule struct {
    84  	state         protoimpl.MessageState
    85  	sizeCache     protoimpl.SizeCache
    86  	unknownFields protoimpl.UnknownFields
    87  
    88  	// Types that are assignable to TargetTag:
    89  	//	*RoutingRule_Tag
    90  	//	*RoutingRule_BalancingTag
    91  	TargetTag isRoutingRule_TargetTag `protobuf_oneof:"target_tag"`
    92  	// List of domains for target domain matching.
    93  	Domain []*routercommon.Domain `protobuf:"bytes,2,rep,name=domain,proto3" json:"domain,omitempty"`
    94  	// List of CIDRs for target IP address matching.
    95  	// Deprecated. Use geoip below.
    96  	//
    97  	// Deprecated: Do not use.
    98  	Cidr []*routercommon.CIDR `protobuf:"bytes,3,rep,name=cidr,proto3" json:"cidr,omitempty"`
    99  	// List of GeoIPs for target IP address matching. If this entry exists, the
   100  	// cidr above will have no effect. GeoIP fields with the same country code are
   101  	// supposed to contain exactly same content. They will be merged during
   102  	// runtime. For customized GeoIPs, please leave country code empty.
   103  	Geoip []*routercommon.GeoIP `protobuf:"bytes,10,rep,name=geoip,proto3" json:"geoip,omitempty"`
   104  	// A range of port [from, to]. If the destination port is in this range, this
   105  	// rule takes effect. Deprecated. Use port_list.
   106  	//
   107  	// Deprecated: Do not use.
   108  	PortRange *net.PortRange `protobuf:"bytes,4,opt,name=port_range,json=portRange,proto3" json:"port_range,omitempty"`
   109  	// List of ports.
   110  	PortList *net.PortList `protobuf:"bytes,14,opt,name=port_list,json=portList,proto3" json:"port_list,omitempty"`
   111  	// List of networks. Deprecated. Use networks.
   112  	//
   113  	// Deprecated: Do not use.
   114  	NetworkList *net.NetworkList `protobuf:"bytes,5,opt,name=network_list,json=networkList,proto3" json:"network_list,omitempty"`
   115  	// List of networks for matching.
   116  	Networks []net.Network `protobuf:"varint,13,rep,packed,name=networks,proto3,enum=v2ray.core.common.net.Network" json:"networks,omitempty"`
   117  	// List of CIDRs for source IP address matching.
   118  	//
   119  	// Deprecated: Do not use.
   120  	SourceCidr []*routercommon.CIDR `protobuf:"bytes,6,rep,name=source_cidr,json=sourceCidr,proto3" json:"source_cidr,omitempty"`
   121  	// List of GeoIPs for source IP address matching. If this entry exists, the
   122  	// source_cidr above will have no effect.
   123  	SourceGeoip []*routercommon.GeoIP `protobuf:"bytes,11,rep,name=source_geoip,json=sourceGeoip,proto3" json:"source_geoip,omitempty"`
   124  	// List of ports for source port matching.
   125  	SourcePortList *net.PortList `protobuf:"bytes,16,opt,name=source_port_list,json=sourcePortList,proto3" json:"source_port_list,omitempty"`
   126  	UserEmail      []string      `protobuf:"bytes,7,rep,name=user_email,json=userEmail,proto3" json:"user_email,omitempty"`
   127  	InboundTag     []string      `protobuf:"bytes,8,rep,name=inbound_tag,json=inboundTag,proto3" json:"inbound_tag,omitempty"`
   128  	Protocol       []string      `protobuf:"bytes,9,rep,name=protocol,proto3" json:"protocol,omitempty"`
   129  	Attributes     string        `protobuf:"bytes,15,opt,name=attributes,proto3" json:"attributes,omitempty"`
   130  	DomainMatcher  string        `protobuf:"bytes,17,opt,name=domain_matcher,json=domainMatcher,proto3" json:"domain_matcher,omitempty"`
   131  	// geo_domain instruct simplified config loader to load geo domain rule and fill in domain field.
   132  	GeoDomain []*routercommon.GeoSite `protobuf:"bytes,68001,rep,name=geo_domain,json=geoDomain,proto3" json:"geo_domain,omitempty"`
   133  }
   134  
   135  func (x *RoutingRule) Reset() {
   136  	*x = RoutingRule{}
   137  	if protoimpl.UnsafeEnabled {
   138  		mi := &file_app_router_config_proto_msgTypes[0]
   139  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   140  		ms.StoreMessageInfo(mi)
   141  	}
   142  }
   143  
   144  func (x *RoutingRule) String() string {
   145  	return protoimpl.X.MessageStringOf(x)
   146  }
   147  
   148  func (*RoutingRule) ProtoMessage() {}
   149  
   150  func (x *RoutingRule) ProtoReflect() protoreflect.Message {
   151  	mi := &file_app_router_config_proto_msgTypes[0]
   152  	if protoimpl.UnsafeEnabled && x != nil {
   153  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   154  		if ms.LoadMessageInfo() == nil {
   155  			ms.StoreMessageInfo(mi)
   156  		}
   157  		return ms
   158  	}
   159  	return mi.MessageOf(x)
   160  }
   161  
   162  // Deprecated: Use RoutingRule.ProtoReflect.Descriptor instead.
   163  func (*RoutingRule) Descriptor() ([]byte, []int) {
   164  	return file_app_router_config_proto_rawDescGZIP(), []int{0}
   165  }
   166  
   167  func (m *RoutingRule) GetTargetTag() isRoutingRule_TargetTag {
   168  	if m != nil {
   169  		return m.TargetTag
   170  	}
   171  	return nil
   172  }
   173  
   174  func (x *RoutingRule) GetTag() string {
   175  	if x, ok := x.GetTargetTag().(*RoutingRule_Tag); ok {
   176  		return x.Tag
   177  	}
   178  	return ""
   179  }
   180  
   181  func (x *RoutingRule) GetBalancingTag() string {
   182  	if x, ok := x.GetTargetTag().(*RoutingRule_BalancingTag); ok {
   183  		return x.BalancingTag
   184  	}
   185  	return ""
   186  }
   187  
   188  func (x *RoutingRule) GetDomain() []*routercommon.Domain {
   189  	if x != nil {
   190  		return x.Domain
   191  	}
   192  	return nil
   193  }
   194  
   195  // Deprecated: Do not use.
   196  func (x *RoutingRule) GetCidr() []*routercommon.CIDR {
   197  	if x != nil {
   198  		return x.Cidr
   199  	}
   200  	return nil
   201  }
   202  
   203  func (x *RoutingRule) GetGeoip() []*routercommon.GeoIP {
   204  	if x != nil {
   205  		return x.Geoip
   206  	}
   207  	return nil
   208  }
   209  
   210  // Deprecated: Do not use.
   211  func (x *RoutingRule) GetPortRange() *net.PortRange {
   212  	if x != nil {
   213  		return x.PortRange
   214  	}
   215  	return nil
   216  }
   217  
   218  func (x *RoutingRule) GetPortList() *net.PortList {
   219  	if x != nil {
   220  		return x.PortList
   221  	}
   222  	return nil
   223  }
   224  
   225  // Deprecated: Do not use.
   226  func (x *RoutingRule) GetNetworkList() *net.NetworkList {
   227  	if x != nil {
   228  		return x.NetworkList
   229  	}
   230  	return nil
   231  }
   232  
   233  func (x *RoutingRule) GetNetworks() []net.Network {
   234  	if x != nil {
   235  		return x.Networks
   236  	}
   237  	return nil
   238  }
   239  
   240  // Deprecated: Do not use.
   241  func (x *RoutingRule) GetSourceCidr() []*routercommon.CIDR {
   242  	if x != nil {
   243  		return x.SourceCidr
   244  	}
   245  	return nil
   246  }
   247  
   248  func (x *RoutingRule) GetSourceGeoip() []*routercommon.GeoIP {
   249  	if x != nil {
   250  		return x.SourceGeoip
   251  	}
   252  	return nil
   253  }
   254  
   255  func (x *RoutingRule) GetSourcePortList() *net.PortList {
   256  	if x != nil {
   257  		return x.SourcePortList
   258  	}
   259  	return nil
   260  }
   261  
   262  func (x *RoutingRule) GetUserEmail() []string {
   263  	if x != nil {
   264  		return x.UserEmail
   265  	}
   266  	return nil
   267  }
   268  
   269  func (x *RoutingRule) GetInboundTag() []string {
   270  	if x != nil {
   271  		return x.InboundTag
   272  	}
   273  	return nil
   274  }
   275  
   276  func (x *RoutingRule) GetProtocol() []string {
   277  	if x != nil {
   278  		return x.Protocol
   279  	}
   280  	return nil
   281  }
   282  
   283  func (x *RoutingRule) GetAttributes() string {
   284  	if x != nil {
   285  		return x.Attributes
   286  	}
   287  	return ""
   288  }
   289  
   290  func (x *RoutingRule) GetDomainMatcher() string {
   291  	if x != nil {
   292  		return x.DomainMatcher
   293  	}
   294  	return ""
   295  }
   296  
   297  func (x *RoutingRule) GetGeoDomain() []*routercommon.GeoSite {
   298  	if x != nil {
   299  		return x.GeoDomain
   300  	}
   301  	return nil
   302  }
   303  
   304  type isRoutingRule_TargetTag interface {
   305  	isRoutingRule_TargetTag()
   306  }
   307  
   308  type RoutingRule_Tag struct {
   309  	// Tag of outbound that this rule is pointing to.
   310  	Tag string `protobuf:"bytes,1,opt,name=tag,proto3,oneof"`
   311  }
   312  
   313  type RoutingRule_BalancingTag struct {
   314  	// Tag of routing balancer.
   315  	BalancingTag string `protobuf:"bytes,12,opt,name=balancing_tag,json=balancingTag,proto3,oneof"`
   316  }
   317  
   318  func (*RoutingRule_Tag) isRoutingRule_TargetTag() {}
   319  
   320  func (*RoutingRule_BalancingTag) isRoutingRule_TargetTag() {}
   321  
   322  type BalancingRule struct {
   323  	state         protoimpl.MessageState
   324  	sizeCache     protoimpl.SizeCache
   325  	unknownFields protoimpl.UnknownFields
   326  
   327  	Tag              string   `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
   328  	OutboundSelector []string `protobuf:"bytes,2,rep,name=outbound_selector,json=outboundSelector,proto3" json:"outbound_selector,omitempty"`
   329  	Strategy         string   `protobuf:"bytes,3,opt,name=strategy,proto3" json:"strategy,omitempty"`
   330  	StrategySettings *any.Any `protobuf:"bytes,4,opt,name=strategy_settings,json=strategySettings,proto3" json:"strategy_settings,omitempty"`
   331  	FallbackTag      string   `protobuf:"bytes,5,opt,name=fallback_tag,json=fallbackTag,proto3" json:"fallback_tag,omitempty"`
   332  }
   333  
   334  func (x *BalancingRule) Reset() {
   335  	*x = BalancingRule{}
   336  	if protoimpl.UnsafeEnabled {
   337  		mi := &file_app_router_config_proto_msgTypes[1]
   338  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   339  		ms.StoreMessageInfo(mi)
   340  	}
   341  }
   342  
   343  func (x *BalancingRule) String() string {
   344  	return protoimpl.X.MessageStringOf(x)
   345  }
   346  
   347  func (*BalancingRule) ProtoMessage() {}
   348  
   349  func (x *BalancingRule) ProtoReflect() protoreflect.Message {
   350  	mi := &file_app_router_config_proto_msgTypes[1]
   351  	if protoimpl.UnsafeEnabled && x != nil {
   352  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   353  		if ms.LoadMessageInfo() == nil {
   354  			ms.StoreMessageInfo(mi)
   355  		}
   356  		return ms
   357  	}
   358  	return mi.MessageOf(x)
   359  }
   360  
   361  // Deprecated: Use BalancingRule.ProtoReflect.Descriptor instead.
   362  func (*BalancingRule) Descriptor() ([]byte, []int) {
   363  	return file_app_router_config_proto_rawDescGZIP(), []int{1}
   364  }
   365  
   366  func (x *BalancingRule) GetTag() string {
   367  	if x != nil {
   368  		return x.Tag
   369  	}
   370  	return ""
   371  }
   372  
   373  func (x *BalancingRule) GetOutboundSelector() []string {
   374  	if x != nil {
   375  		return x.OutboundSelector
   376  	}
   377  	return nil
   378  }
   379  
   380  func (x *BalancingRule) GetStrategy() string {
   381  	if x != nil {
   382  		return x.Strategy
   383  	}
   384  	return ""
   385  }
   386  
   387  func (x *BalancingRule) GetStrategySettings() *any.Any {
   388  	if x != nil {
   389  		return x.StrategySettings
   390  	}
   391  	return nil
   392  }
   393  
   394  func (x *BalancingRule) GetFallbackTag() string {
   395  	if x != nil {
   396  		return x.FallbackTag
   397  	}
   398  	return ""
   399  }
   400  
   401  type StrategyWeight struct {
   402  	state         protoimpl.MessageState
   403  	sizeCache     protoimpl.SizeCache
   404  	unknownFields protoimpl.UnknownFields
   405  
   406  	Regexp bool    `protobuf:"varint,1,opt,name=regexp,proto3" json:"regexp,omitempty"`
   407  	Match  string  `protobuf:"bytes,2,opt,name=match,proto3" json:"match,omitempty"`
   408  	Value  float32 `protobuf:"fixed32,3,opt,name=value,proto3" json:"value,omitempty"`
   409  }
   410  
   411  func (x *StrategyWeight) Reset() {
   412  	*x = StrategyWeight{}
   413  	if protoimpl.UnsafeEnabled {
   414  		mi := &file_app_router_config_proto_msgTypes[2]
   415  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   416  		ms.StoreMessageInfo(mi)
   417  	}
   418  }
   419  
   420  func (x *StrategyWeight) String() string {
   421  	return protoimpl.X.MessageStringOf(x)
   422  }
   423  
   424  func (*StrategyWeight) ProtoMessage() {}
   425  
   426  func (x *StrategyWeight) ProtoReflect() protoreflect.Message {
   427  	mi := &file_app_router_config_proto_msgTypes[2]
   428  	if protoimpl.UnsafeEnabled && x != nil {
   429  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   430  		if ms.LoadMessageInfo() == nil {
   431  			ms.StoreMessageInfo(mi)
   432  		}
   433  		return ms
   434  	}
   435  	return mi.MessageOf(x)
   436  }
   437  
   438  // Deprecated: Use StrategyWeight.ProtoReflect.Descriptor instead.
   439  func (*StrategyWeight) Descriptor() ([]byte, []int) {
   440  	return file_app_router_config_proto_rawDescGZIP(), []int{2}
   441  }
   442  
   443  func (x *StrategyWeight) GetRegexp() bool {
   444  	if x != nil {
   445  		return x.Regexp
   446  	}
   447  	return false
   448  }
   449  
   450  func (x *StrategyWeight) GetMatch() string {
   451  	if x != nil {
   452  		return x.Match
   453  	}
   454  	return ""
   455  }
   456  
   457  func (x *StrategyWeight) GetValue() float32 {
   458  	if x != nil {
   459  		return x.Value
   460  	}
   461  	return 0
   462  }
   463  
   464  type StrategyRandomConfig struct {
   465  	state         protoimpl.MessageState
   466  	sizeCache     protoimpl.SizeCache
   467  	unknownFields protoimpl.UnknownFields
   468  
   469  	ObserverTag string `protobuf:"bytes,7,opt,name=observer_tag,json=observerTag,proto3" json:"observer_tag,omitempty"`
   470  	AliveOnly   bool   `protobuf:"varint,8,opt,name=alive_only,json=aliveOnly,proto3" json:"alive_only,omitempty"`
   471  }
   472  
   473  func (x *StrategyRandomConfig) Reset() {
   474  	*x = StrategyRandomConfig{}
   475  	if protoimpl.UnsafeEnabled {
   476  		mi := &file_app_router_config_proto_msgTypes[3]
   477  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   478  		ms.StoreMessageInfo(mi)
   479  	}
   480  }
   481  
   482  func (x *StrategyRandomConfig) String() string {
   483  	return protoimpl.X.MessageStringOf(x)
   484  }
   485  
   486  func (*StrategyRandomConfig) ProtoMessage() {}
   487  
   488  func (x *StrategyRandomConfig) ProtoReflect() protoreflect.Message {
   489  	mi := &file_app_router_config_proto_msgTypes[3]
   490  	if protoimpl.UnsafeEnabled && x != nil {
   491  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   492  		if ms.LoadMessageInfo() == nil {
   493  			ms.StoreMessageInfo(mi)
   494  		}
   495  		return ms
   496  	}
   497  	return mi.MessageOf(x)
   498  }
   499  
   500  // Deprecated: Use StrategyRandomConfig.ProtoReflect.Descriptor instead.
   501  func (*StrategyRandomConfig) Descriptor() ([]byte, []int) {
   502  	return file_app_router_config_proto_rawDescGZIP(), []int{3}
   503  }
   504  
   505  func (x *StrategyRandomConfig) GetObserverTag() string {
   506  	if x != nil {
   507  		return x.ObserverTag
   508  	}
   509  	return ""
   510  }
   511  
   512  func (x *StrategyRandomConfig) GetAliveOnly() bool {
   513  	if x != nil {
   514  		return x.AliveOnly
   515  	}
   516  	return false
   517  }
   518  
   519  type StrategyLeastPingConfig struct {
   520  	state         protoimpl.MessageState
   521  	sizeCache     protoimpl.SizeCache
   522  	unknownFields protoimpl.UnknownFields
   523  
   524  	ObserverTag string `protobuf:"bytes,7,opt,name=observer_tag,json=observerTag,proto3" json:"observer_tag,omitempty"`
   525  }
   526  
   527  func (x *StrategyLeastPingConfig) Reset() {
   528  	*x = StrategyLeastPingConfig{}
   529  	if protoimpl.UnsafeEnabled {
   530  		mi := &file_app_router_config_proto_msgTypes[4]
   531  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   532  		ms.StoreMessageInfo(mi)
   533  	}
   534  }
   535  
   536  func (x *StrategyLeastPingConfig) String() string {
   537  	return protoimpl.X.MessageStringOf(x)
   538  }
   539  
   540  func (*StrategyLeastPingConfig) ProtoMessage() {}
   541  
   542  func (x *StrategyLeastPingConfig) ProtoReflect() protoreflect.Message {
   543  	mi := &file_app_router_config_proto_msgTypes[4]
   544  	if protoimpl.UnsafeEnabled && x != nil {
   545  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   546  		if ms.LoadMessageInfo() == nil {
   547  			ms.StoreMessageInfo(mi)
   548  		}
   549  		return ms
   550  	}
   551  	return mi.MessageOf(x)
   552  }
   553  
   554  // Deprecated: Use StrategyLeastPingConfig.ProtoReflect.Descriptor instead.
   555  func (*StrategyLeastPingConfig) Descriptor() ([]byte, []int) {
   556  	return file_app_router_config_proto_rawDescGZIP(), []int{4}
   557  }
   558  
   559  func (x *StrategyLeastPingConfig) GetObserverTag() string {
   560  	if x != nil {
   561  		return x.ObserverTag
   562  	}
   563  	return ""
   564  }
   565  
   566  type StrategyLeastLoadConfig struct {
   567  	state         protoimpl.MessageState
   568  	sizeCache     protoimpl.SizeCache
   569  	unknownFields protoimpl.UnknownFields
   570  
   571  	// weight settings
   572  	Costs []*StrategyWeight `protobuf:"bytes,2,rep,name=costs,proto3" json:"costs,omitempty"`
   573  	// RTT baselines for selecting, int64 values of time.Duration
   574  	Baselines []int64 `protobuf:"varint,3,rep,packed,name=baselines,proto3" json:"baselines,omitempty"`
   575  	// expected nodes count to select
   576  	Expected int32 `protobuf:"varint,4,opt,name=expected,proto3" json:"expected,omitempty"`
   577  	// max acceptable rtt, filter away high delay nodes. defalut 0
   578  	MaxRTT int64 `protobuf:"varint,5,opt,name=maxRTT,proto3" json:"maxRTT,omitempty"`
   579  	// acceptable failure rate
   580  	Tolerance   float32 `protobuf:"fixed32,6,opt,name=tolerance,proto3" json:"tolerance,omitempty"`
   581  	ObserverTag string  `protobuf:"bytes,7,opt,name=observer_tag,json=observerTag,proto3" json:"observer_tag,omitempty"`
   582  }
   583  
   584  func (x *StrategyLeastLoadConfig) Reset() {
   585  	*x = StrategyLeastLoadConfig{}
   586  	if protoimpl.UnsafeEnabled {
   587  		mi := &file_app_router_config_proto_msgTypes[5]
   588  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   589  		ms.StoreMessageInfo(mi)
   590  	}
   591  }
   592  
   593  func (x *StrategyLeastLoadConfig) String() string {
   594  	return protoimpl.X.MessageStringOf(x)
   595  }
   596  
   597  func (*StrategyLeastLoadConfig) ProtoMessage() {}
   598  
   599  func (x *StrategyLeastLoadConfig) ProtoReflect() protoreflect.Message {
   600  	mi := &file_app_router_config_proto_msgTypes[5]
   601  	if protoimpl.UnsafeEnabled && x != nil {
   602  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   603  		if ms.LoadMessageInfo() == nil {
   604  			ms.StoreMessageInfo(mi)
   605  		}
   606  		return ms
   607  	}
   608  	return mi.MessageOf(x)
   609  }
   610  
   611  // Deprecated: Use StrategyLeastLoadConfig.ProtoReflect.Descriptor instead.
   612  func (*StrategyLeastLoadConfig) Descriptor() ([]byte, []int) {
   613  	return file_app_router_config_proto_rawDescGZIP(), []int{5}
   614  }
   615  
   616  func (x *StrategyLeastLoadConfig) GetCosts() []*StrategyWeight {
   617  	if x != nil {
   618  		return x.Costs
   619  	}
   620  	return nil
   621  }
   622  
   623  func (x *StrategyLeastLoadConfig) GetBaselines() []int64 {
   624  	if x != nil {
   625  		return x.Baselines
   626  	}
   627  	return nil
   628  }
   629  
   630  func (x *StrategyLeastLoadConfig) GetExpected() int32 {
   631  	if x != nil {
   632  		return x.Expected
   633  	}
   634  	return 0
   635  }
   636  
   637  func (x *StrategyLeastLoadConfig) GetMaxRTT() int64 {
   638  	if x != nil {
   639  		return x.MaxRTT
   640  	}
   641  	return 0
   642  }
   643  
   644  func (x *StrategyLeastLoadConfig) GetTolerance() float32 {
   645  	if x != nil {
   646  		return x.Tolerance
   647  	}
   648  	return 0
   649  }
   650  
   651  func (x *StrategyLeastLoadConfig) GetObserverTag() string {
   652  	if x != nil {
   653  		return x.ObserverTag
   654  	}
   655  	return ""
   656  }
   657  
   658  type Config struct {
   659  	state         protoimpl.MessageState
   660  	sizeCache     protoimpl.SizeCache
   661  	unknownFields protoimpl.UnknownFields
   662  
   663  	DomainStrategy DomainStrategy   `protobuf:"varint,1,opt,name=domain_strategy,json=domainStrategy,proto3,enum=v2ray.core.app.router.DomainStrategy" json:"domain_strategy,omitempty"`
   664  	Rule           []*RoutingRule   `protobuf:"bytes,2,rep,name=rule,proto3" json:"rule,omitempty"`
   665  	BalancingRule  []*BalancingRule `protobuf:"bytes,3,rep,name=balancing_rule,json=balancingRule,proto3" json:"balancing_rule,omitempty"`
   666  }
   667  
   668  func (x *Config) Reset() {
   669  	*x = Config{}
   670  	if protoimpl.UnsafeEnabled {
   671  		mi := &file_app_router_config_proto_msgTypes[6]
   672  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   673  		ms.StoreMessageInfo(mi)
   674  	}
   675  }
   676  
   677  func (x *Config) String() string {
   678  	return protoimpl.X.MessageStringOf(x)
   679  }
   680  
   681  func (*Config) ProtoMessage() {}
   682  
   683  func (x *Config) ProtoReflect() protoreflect.Message {
   684  	mi := &file_app_router_config_proto_msgTypes[6]
   685  	if protoimpl.UnsafeEnabled && x != nil {
   686  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   687  		if ms.LoadMessageInfo() == nil {
   688  			ms.StoreMessageInfo(mi)
   689  		}
   690  		return ms
   691  	}
   692  	return mi.MessageOf(x)
   693  }
   694  
   695  // Deprecated: Use Config.ProtoReflect.Descriptor instead.
   696  func (*Config) Descriptor() ([]byte, []int) {
   697  	return file_app_router_config_proto_rawDescGZIP(), []int{6}
   698  }
   699  
   700  func (x *Config) GetDomainStrategy() DomainStrategy {
   701  	if x != nil {
   702  		return x.DomainStrategy
   703  	}
   704  	return DomainStrategy_AsIs
   705  }
   706  
   707  func (x *Config) GetRule() []*RoutingRule {
   708  	if x != nil {
   709  		return x.Rule
   710  	}
   711  	return nil
   712  }
   713  
   714  func (x *Config) GetBalancingRule() []*BalancingRule {
   715  	if x != nil {
   716  		return x.BalancingRule
   717  	}
   718  	return nil
   719  }
   720  
   721  type SimplifiedRoutingRule struct {
   722  	state         protoimpl.MessageState
   723  	sizeCache     protoimpl.SizeCache
   724  	unknownFields protoimpl.UnknownFields
   725  
   726  	// Types that are assignable to TargetTag:
   727  	//	*SimplifiedRoutingRule_Tag
   728  	//	*SimplifiedRoutingRule_BalancingTag
   729  	TargetTag isSimplifiedRoutingRule_TargetTag `protobuf_oneof:"target_tag"`
   730  	// List of domains for target domain matching.
   731  	Domain []*routercommon.Domain `protobuf:"bytes,2,rep,name=domain,proto3" json:"domain,omitempty"`
   732  	// List of GeoIPs for target IP address matching. If this entry exists, the
   733  	// cidr above will have no effect. GeoIP fields with the same country code are
   734  	// supposed to contain exactly same content. They will be merged during
   735  	// runtime. For customized GeoIPs, please leave country code empty.
   736  	Geoip []*routercommon.GeoIP `protobuf:"bytes,10,rep,name=geoip,proto3" json:"geoip,omitempty"`
   737  	// List of ports.
   738  	PortList string `protobuf:"bytes,14,opt,name=port_list,json=portList,proto3" json:"port_list,omitempty"`
   739  	// List of networks for matching.
   740  	Networks *net.NetworkList `protobuf:"bytes,13,opt,name=networks,proto3" json:"networks,omitempty"`
   741  	// List of GeoIPs for source IP address matching. If this entry exists, the
   742  	// source_cidr above will have no effect.
   743  	SourceGeoip []*routercommon.GeoIP `protobuf:"bytes,11,rep,name=source_geoip,json=sourceGeoip,proto3" json:"source_geoip,omitempty"`
   744  	// List of ports for source port matching.
   745  	SourcePortList string   `protobuf:"bytes,16,opt,name=source_port_list,json=sourcePortList,proto3" json:"source_port_list,omitempty"`
   746  	UserEmail      []string `protobuf:"bytes,7,rep,name=user_email,json=userEmail,proto3" json:"user_email,omitempty"`
   747  	InboundTag     []string `protobuf:"bytes,8,rep,name=inbound_tag,json=inboundTag,proto3" json:"inbound_tag,omitempty"`
   748  	Protocol       []string `protobuf:"bytes,9,rep,name=protocol,proto3" json:"protocol,omitempty"`
   749  	Attributes     string   `protobuf:"bytes,15,opt,name=attributes,proto3" json:"attributes,omitempty"`
   750  	DomainMatcher  string   `protobuf:"bytes,17,opt,name=domain_matcher,json=domainMatcher,proto3" json:"domain_matcher,omitempty"`
   751  	// geo_domain instruct simplified config loader to load geo domain rule and fill in domain field.
   752  	GeoDomain []*routercommon.GeoSite `protobuf:"bytes,68001,rep,name=geo_domain,json=geoDomain,proto3" json:"geo_domain,omitempty"`
   753  }
   754  
   755  func (x *SimplifiedRoutingRule) Reset() {
   756  	*x = SimplifiedRoutingRule{}
   757  	if protoimpl.UnsafeEnabled {
   758  		mi := &file_app_router_config_proto_msgTypes[7]
   759  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   760  		ms.StoreMessageInfo(mi)
   761  	}
   762  }
   763  
   764  func (x *SimplifiedRoutingRule) String() string {
   765  	return protoimpl.X.MessageStringOf(x)
   766  }
   767  
   768  func (*SimplifiedRoutingRule) ProtoMessage() {}
   769  
   770  func (x *SimplifiedRoutingRule) ProtoReflect() protoreflect.Message {
   771  	mi := &file_app_router_config_proto_msgTypes[7]
   772  	if protoimpl.UnsafeEnabled && x != nil {
   773  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   774  		if ms.LoadMessageInfo() == nil {
   775  			ms.StoreMessageInfo(mi)
   776  		}
   777  		return ms
   778  	}
   779  	return mi.MessageOf(x)
   780  }
   781  
   782  // Deprecated: Use SimplifiedRoutingRule.ProtoReflect.Descriptor instead.
   783  func (*SimplifiedRoutingRule) Descriptor() ([]byte, []int) {
   784  	return file_app_router_config_proto_rawDescGZIP(), []int{7}
   785  }
   786  
   787  func (m *SimplifiedRoutingRule) GetTargetTag() isSimplifiedRoutingRule_TargetTag {
   788  	if m != nil {
   789  		return m.TargetTag
   790  	}
   791  	return nil
   792  }
   793  
   794  func (x *SimplifiedRoutingRule) GetTag() string {
   795  	if x, ok := x.GetTargetTag().(*SimplifiedRoutingRule_Tag); ok {
   796  		return x.Tag
   797  	}
   798  	return ""
   799  }
   800  
   801  func (x *SimplifiedRoutingRule) GetBalancingTag() string {
   802  	if x, ok := x.GetTargetTag().(*SimplifiedRoutingRule_BalancingTag); ok {
   803  		return x.BalancingTag
   804  	}
   805  	return ""
   806  }
   807  
   808  func (x *SimplifiedRoutingRule) GetDomain() []*routercommon.Domain {
   809  	if x != nil {
   810  		return x.Domain
   811  	}
   812  	return nil
   813  }
   814  
   815  func (x *SimplifiedRoutingRule) GetGeoip() []*routercommon.GeoIP {
   816  	if x != nil {
   817  		return x.Geoip
   818  	}
   819  	return nil
   820  }
   821  
   822  func (x *SimplifiedRoutingRule) GetPortList() string {
   823  	if x != nil {
   824  		return x.PortList
   825  	}
   826  	return ""
   827  }
   828  
   829  func (x *SimplifiedRoutingRule) GetNetworks() *net.NetworkList {
   830  	if x != nil {
   831  		return x.Networks
   832  	}
   833  	return nil
   834  }
   835  
   836  func (x *SimplifiedRoutingRule) GetSourceGeoip() []*routercommon.GeoIP {
   837  	if x != nil {
   838  		return x.SourceGeoip
   839  	}
   840  	return nil
   841  }
   842  
   843  func (x *SimplifiedRoutingRule) GetSourcePortList() string {
   844  	if x != nil {
   845  		return x.SourcePortList
   846  	}
   847  	return ""
   848  }
   849  
   850  func (x *SimplifiedRoutingRule) GetUserEmail() []string {
   851  	if x != nil {
   852  		return x.UserEmail
   853  	}
   854  	return nil
   855  }
   856  
   857  func (x *SimplifiedRoutingRule) GetInboundTag() []string {
   858  	if x != nil {
   859  		return x.InboundTag
   860  	}
   861  	return nil
   862  }
   863  
   864  func (x *SimplifiedRoutingRule) GetProtocol() []string {
   865  	if x != nil {
   866  		return x.Protocol
   867  	}
   868  	return nil
   869  }
   870  
   871  func (x *SimplifiedRoutingRule) GetAttributes() string {
   872  	if x != nil {
   873  		return x.Attributes
   874  	}
   875  	return ""
   876  }
   877  
   878  func (x *SimplifiedRoutingRule) GetDomainMatcher() string {
   879  	if x != nil {
   880  		return x.DomainMatcher
   881  	}
   882  	return ""
   883  }
   884  
   885  func (x *SimplifiedRoutingRule) GetGeoDomain() []*routercommon.GeoSite {
   886  	if x != nil {
   887  		return x.GeoDomain
   888  	}
   889  	return nil
   890  }
   891  
   892  type isSimplifiedRoutingRule_TargetTag interface {
   893  	isSimplifiedRoutingRule_TargetTag()
   894  }
   895  
   896  type SimplifiedRoutingRule_Tag struct {
   897  	// Tag of outbound that this rule is pointing to.
   898  	Tag string `protobuf:"bytes,1,opt,name=tag,proto3,oneof"`
   899  }
   900  
   901  type SimplifiedRoutingRule_BalancingTag struct {
   902  	// Tag of routing balancer.
   903  	BalancingTag string `protobuf:"bytes,12,opt,name=balancing_tag,json=balancingTag,proto3,oneof"`
   904  }
   905  
   906  func (*SimplifiedRoutingRule_Tag) isSimplifiedRoutingRule_TargetTag() {}
   907  
   908  func (*SimplifiedRoutingRule_BalancingTag) isSimplifiedRoutingRule_TargetTag() {}
   909  
   910  type SimplifiedConfig struct {
   911  	state         protoimpl.MessageState
   912  	sizeCache     protoimpl.SizeCache
   913  	unknownFields protoimpl.UnknownFields
   914  
   915  	DomainStrategy DomainStrategy           `protobuf:"varint,1,opt,name=domain_strategy,json=domainStrategy,proto3,enum=v2ray.core.app.router.DomainStrategy" json:"domain_strategy,omitempty"`
   916  	Rule           []*SimplifiedRoutingRule `protobuf:"bytes,2,rep,name=rule,proto3" json:"rule,omitempty"`
   917  	BalancingRule  []*BalancingRule         `protobuf:"bytes,3,rep,name=balancing_rule,json=balancingRule,proto3" json:"balancing_rule,omitempty"`
   918  }
   919  
   920  func (x *SimplifiedConfig) Reset() {
   921  	*x = SimplifiedConfig{}
   922  	if protoimpl.UnsafeEnabled {
   923  		mi := &file_app_router_config_proto_msgTypes[8]
   924  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   925  		ms.StoreMessageInfo(mi)
   926  	}
   927  }
   928  
   929  func (x *SimplifiedConfig) String() string {
   930  	return protoimpl.X.MessageStringOf(x)
   931  }
   932  
   933  func (*SimplifiedConfig) ProtoMessage() {}
   934  
   935  func (x *SimplifiedConfig) ProtoReflect() protoreflect.Message {
   936  	mi := &file_app_router_config_proto_msgTypes[8]
   937  	if protoimpl.UnsafeEnabled && x != nil {
   938  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   939  		if ms.LoadMessageInfo() == nil {
   940  			ms.StoreMessageInfo(mi)
   941  		}
   942  		return ms
   943  	}
   944  	return mi.MessageOf(x)
   945  }
   946  
   947  // Deprecated: Use SimplifiedConfig.ProtoReflect.Descriptor instead.
   948  func (*SimplifiedConfig) Descriptor() ([]byte, []int) {
   949  	return file_app_router_config_proto_rawDescGZIP(), []int{8}
   950  }
   951  
   952  func (x *SimplifiedConfig) GetDomainStrategy() DomainStrategy {
   953  	if x != nil {
   954  		return x.DomainStrategy
   955  	}
   956  	return DomainStrategy_AsIs
   957  }
   958  
   959  func (x *SimplifiedConfig) GetRule() []*SimplifiedRoutingRule {
   960  	if x != nil {
   961  		return x.Rule
   962  	}
   963  	return nil
   964  }
   965  
   966  func (x *SimplifiedConfig) GetBalancingRule() []*BalancingRule {
   967  	if x != nil {
   968  		return x.BalancingRule
   969  	}
   970  	return nil
   971  }
   972  
   973  var File_app_router_config_proto protoreflect.FileDescriptor
   974  
   975  var file_app_router_config_proto_rawDesc = []byte{
   976  	0x0a, 0x17, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6e,
   977  	0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x76, 0x32, 0x72, 0x61, 0x79,
   978  	0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72,
   979  	0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
   980  	0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6f, 0x6d,
   981  	0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f,
   982  	0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x6e,
   983  	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x63, 0x6f,
   984  	0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x65, 0x78, 0x74, 0x2f, 0x65, 0x78,
   985  	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24,
   986  	0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65,
   987  	0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70,
   988  	0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x08, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
   989  	0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
   990  	0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x25, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61,
   991  	0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48,
   992  	0x00, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12,
   993  	0x42, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
   994  	0x2a, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70,
   995  	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f,
   996  	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d,
   997  	0x61, 0x69, 0x6e, 0x12, 0x40, 0x0a, 0x04, 0x63, 0x69, 0x64, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28,
   998  	0x0b, 0x32, 0x28, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61,
   999  	0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72,
  1000  	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x49, 0x44, 0x52, 0x42, 0x02, 0x18, 0x01, 0x52,
  1001  	0x04, 0x63, 0x69, 0x64, 0x72, 0x12, 0x3f, 0x0a, 0x05, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x18, 0x0a,
  1002  	0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72,
  1003  	0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75,
  1004  	0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6f, 0x49, 0x50, 0x52,
  1005  	0x05, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x72,
  1006  	0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x32, 0x72,
  1007  	0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e,
  1008  	0x65, 0x74, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x02, 0x18, 0x01,
  1009  	0x52, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x70,
  1010  	0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
  1011  	0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
  1012  	0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52,
  1013  	0x08, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0c, 0x6e, 0x65, 0x74,
  1014  	0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
  1015  	0x22, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d,
  1016  	0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c,
  1017  	0x69, 0x73, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
  1018  	0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73,
  1019  	0x18, 0x0d, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63,
  1020  	0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x4e,
  1021  	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73,
  1022  	0x12, 0x4d, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x69, 0x64, 0x72, 0x18,
  1023  	0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f,
  1024  	0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f,
  1025  	0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x49, 0x44, 0x52, 0x42,
  1026  	0x02, 0x18, 0x01, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x69, 0x64, 0x72, 0x12,
  1027  	0x4c, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x18,
  1028  	0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f,
  1029  	0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f,
  1030  	0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6f, 0x49, 0x50,
  1031  	0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x49, 0x0a,
  1032  	0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x69, 0x73,
  1033  	0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e,
  1034  	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e,
  1035  	0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
  1036  	0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72,
  1037  	0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73,
  1038  	0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x62, 0x6f, 0x75,
  1039  	0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e,
  1040  	0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74,
  1041  	0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74,
  1042  	0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
  1043  	0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
  1044  	0x75, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6d,
  1045  	0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f,
  1046  	0x6d, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0a, 0x67,
  1047  	0x65, 0x6f, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0xa1, 0x93, 0x04, 0x20, 0x03, 0x28,
  1048  	0x0b, 0x32, 0x2b, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61,
  1049  	0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72,
  1050  	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6f, 0x53, 0x69, 0x74, 0x65, 0x52, 0x09,
  1051  	0x67, 0x65, 0x6f, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x61, 0x72,
  1052  	0x67, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x22, 0xd0, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x6c, 0x61,
  1053  	0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67,
  1054  	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x2b, 0x0a, 0x11, 0x6f,
  1055  	0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
  1056  	0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64,
  1057  	0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61,
  1058  	0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61,
  1059  	0x74, 0x65, 0x67, 0x79, 0x12, 0x41, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79,
  1060  	0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
  1061  	0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
  1062  	0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x53,
  1063  	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x6c, 0x6c, 0x62,
  1064  	0x61, 0x63, 0x6b, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66,
  1065  	0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x61, 0x67, 0x22, 0x54, 0x0a, 0x0e, 0x53, 0x74,
  1066  	0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06,
  1067  	0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65,
  1068  	0x67, 0x65, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20,
  1069  	0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
  1070  	0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
  1071  	0x22, 0x74, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x61, 0x6e, 0x64,
  1072  	0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x62, 0x73, 0x65,
  1073  	0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
  1074  	0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x61,
  1075  	0x6c, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
  1076  	0x09, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x3a, 0x1a, 0x82, 0xb5, 0x18, 0x0a,
  1077  	0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x82, 0xb5, 0x18, 0x08, 0x12, 0x06,
  1078  	0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x22, 0x5b, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65,
  1079  	0x67, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69,
  1080  	0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x61,
  1081  	0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65,
  1082  	0x72, 0x54, 0x61, 0x67, 0x3a, 0x1d, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61,
  1083  	0x6e, 0x63, 0x65, 0x72, 0x82, 0xb5, 0x18, 0x0b, 0x12, 0x09, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x70,
  1084  	0x69, 0x6e, 0x67, 0x22, 0x88, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79,
  1085  	0x4c, 0x65, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
  1086  	0x3b, 0x0a, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25,
  1087  	0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e,
  1088  	0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x57,
  1089  	0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09,
  1090  	0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52,
  1091  	0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78,
  1092  	0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x78,
  1093  	0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54,
  1094  	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, 0x12, 0x1c,
  1095  	0x0a, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
  1096  	0x02, 0x52, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c,
  1097  	0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01,
  1098  	0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x61, 0x67, 0x3a,
  1099  	0x1d, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x82,
  1100  	0xb5, 0x18, 0x0b, 0x12, 0x09, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xdd,
  1101  	0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4e, 0x0a, 0x0f, 0x64, 0x6f, 0x6d,
  1102  	0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01,
  1103  	0x28, 0x0e, 0x32, 0x25, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e,
  1104  	0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69,
  1105  	0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69,
  1106  	0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x75, 0x6c,
  1107  	0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e,
  1108  	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e,
  1109  	0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c,
  1110  	0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x72,
  1111  	0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x32, 0x72, 0x61,
  1112  	0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
  1113  	0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52,
  1114  	0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x22, 0xab,
  1115  	0x05, 0x0a, 0x15, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x6f, 0x75,
  1116  	0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18,
  1117  	0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x25, 0x0a, 0x0d,
  1118  	0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x0c, 0x20,
  1119  	0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67,
  1120  	0x54, 0x61, 0x67, 0x12, 0x42, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20,
  1121  	0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65,
  1122  	0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75, 0x74,
  1123  	0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52,
  1124  	0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x05, 0x67, 0x65, 0x6f, 0x69, 0x70,
  1125  	0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63,
  1126  	0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72,
  1127  	0x6f, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6f, 0x49,
  1128  	0x50, 0x52, 0x05, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74,
  1129  	0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72,
  1130  	0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
  1131  	0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e,
  1132  	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e,
  1133  	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x08, 0x6e, 0x65, 0x74,
  1134  	0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x4c, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
  1135  	0x67, 0x65, 0x6f, 0x69, 0x70, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x32,
  1136  	0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75,
  1137  	0x74, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
  1138  	0x2e, 0x47, 0x65, 0x6f, 0x49, 0x50, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x65,
  1139  	0x6f, 0x69, 0x70, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f,
  1140  	0x72, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73,
  1141  	0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x0a,
  1142  	0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x03, 0x28,
  1143  	0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b,
  1144  	0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28,
  1145  	0x09, 0x52, 0x0a, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a,
  1146  	0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52,
  1147  	0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74,
  1148  	0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61,
  1149  	0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x6f, 0x6d,
  1150  	0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28,
  1151  	0x09, 0x52, 0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72,
  1152  	0x12, 0x4c, 0x0a, 0x0a, 0x67, 0x65, 0x6f, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0xa1,
  1153  	0x93, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63,
  1154  	0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x72,
  1155  	0x6f, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6f, 0x53,
  1156  	0x69, 0x74, 0x65, 0x52, 0x09, 0x67, 0x65, 0x6f, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0c,
  1157  	0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x22, 0x8c, 0x02, 0x0a,
  1158  	0x10, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69,
  1159  	0x67, 0x12, 0x4e, 0x0a, 0x0f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61,
  1160  	0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x76, 0x32, 0x72,
  1161  	0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74,
  1162  	0x65, 0x72, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67,
  1163  	0x79, 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67,
  1164  	0x79, 0x12, 0x40, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
  1165  	0x2c, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70,
  1166  	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69,
  1167  	0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72,
  1168  	0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67,
  1169  	0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x32,
  1170  	0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75,
  1171  	0x74, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
  1172  	0x65, 0x52, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
  1173  	0x3a, 0x19, 0x82, 0xb5, 0x18, 0x09, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82,
  1174  	0xb5, 0x18, 0x08, 0x12, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2a, 0x47, 0x0a, 0x0e, 0x44,
  1175  	0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, 0x0a,
  1176  	0x04, 0x41, 0x73, 0x49, 0x73, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x49, 0x70,
  1177  	0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x70, 0x49, 0x66, 0x4e, 0x6f, 0x6e, 0x4d, 0x61, 0x74,
  1178  	0x63, 0x68, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x70, 0x4f, 0x6e, 0x44, 0x65, 0x6d, 0x61,
  1179  	0x6e, 0x64, 0x10, 0x03, 0x42, 0x60, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61,
  1180  	0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
  1181  	0x72, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
  1182  	0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65,
  1183  	0x2f, 0x76, 0x35, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0xaa, 0x02,
  1184  	0x15, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x2e,
  1185  	0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  1186  }
  1187  
  1188  var (
  1189  	file_app_router_config_proto_rawDescOnce sync.Once
  1190  	file_app_router_config_proto_rawDescData = file_app_router_config_proto_rawDesc
  1191  )
  1192  
  1193  func file_app_router_config_proto_rawDescGZIP() []byte {
  1194  	file_app_router_config_proto_rawDescOnce.Do(func() {
  1195  		file_app_router_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_app_router_config_proto_rawDescData)
  1196  	})
  1197  	return file_app_router_config_proto_rawDescData
  1198  }
  1199  
  1200  var file_app_router_config_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
  1201  var file_app_router_config_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
  1202  var file_app_router_config_proto_goTypes = []interface{}{
  1203  	(DomainStrategy)(0),             // 0: v2ray.core.app.router.DomainStrategy
  1204  	(*RoutingRule)(nil),             // 1: v2ray.core.app.router.RoutingRule
  1205  	(*BalancingRule)(nil),           // 2: v2ray.core.app.router.BalancingRule
  1206  	(*StrategyWeight)(nil),          // 3: v2ray.core.app.router.StrategyWeight
  1207  	(*StrategyRandomConfig)(nil),    // 4: v2ray.core.app.router.StrategyRandomConfig
  1208  	(*StrategyLeastPingConfig)(nil), // 5: v2ray.core.app.router.StrategyLeastPingConfig
  1209  	(*StrategyLeastLoadConfig)(nil), // 6: v2ray.core.app.router.StrategyLeastLoadConfig
  1210  	(*Config)(nil),                  // 7: v2ray.core.app.router.Config
  1211  	(*SimplifiedRoutingRule)(nil),   // 8: v2ray.core.app.router.SimplifiedRoutingRule
  1212  	(*SimplifiedConfig)(nil),        // 9: v2ray.core.app.router.SimplifiedConfig
  1213  	(*routercommon.Domain)(nil),     // 10: v2ray.core.app.router.routercommon.Domain
  1214  	(*routercommon.CIDR)(nil),       // 11: v2ray.core.app.router.routercommon.CIDR
  1215  	(*routercommon.GeoIP)(nil),      // 12: v2ray.core.app.router.routercommon.GeoIP
  1216  	(*net.PortRange)(nil),           // 13: v2ray.core.common.net.PortRange
  1217  	(*net.PortList)(nil),            // 14: v2ray.core.common.net.PortList
  1218  	(*net.NetworkList)(nil),         // 15: v2ray.core.common.net.NetworkList
  1219  	(net.Network)(0),                // 16: v2ray.core.common.net.Network
  1220  	(*routercommon.GeoSite)(nil),    // 17: v2ray.core.app.router.routercommon.GeoSite
  1221  	(*any.Any)(nil),                 // 18: google.protobuf.Any
  1222  }
  1223  var file_app_router_config_proto_depIdxs = []int32{
  1224  	10, // 0: v2ray.core.app.router.RoutingRule.domain:type_name -> v2ray.core.app.router.routercommon.Domain
  1225  	11, // 1: v2ray.core.app.router.RoutingRule.cidr:type_name -> v2ray.core.app.router.routercommon.CIDR
  1226  	12, // 2: v2ray.core.app.router.RoutingRule.geoip:type_name -> v2ray.core.app.router.routercommon.GeoIP
  1227  	13, // 3: v2ray.core.app.router.RoutingRule.port_range:type_name -> v2ray.core.common.net.PortRange
  1228  	14, // 4: v2ray.core.app.router.RoutingRule.port_list:type_name -> v2ray.core.common.net.PortList
  1229  	15, // 5: v2ray.core.app.router.RoutingRule.network_list:type_name -> v2ray.core.common.net.NetworkList
  1230  	16, // 6: v2ray.core.app.router.RoutingRule.networks:type_name -> v2ray.core.common.net.Network
  1231  	11, // 7: v2ray.core.app.router.RoutingRule.source_cidr:type_name -> v2ray.core.app.router.routercommon.CIDR
  1232  	12, // 8: v2ray.core.app.router.RoutingRule.source_geoip:type_name -> v2ray.core.app.router.routercommon.GeoIP
  1233  	14, // 9: v2ray.core.app.router.RoutingRule.source_port_list:type_name -> v2ray.core.common.net.PortList
  1234  	17, // 10: v2ray.core.app.router.RoutingRule.geo_domain:type_name -> v2ray.core.app.router.routercommon.GeoSite
  1235  	18, // 11: v2ray.core.app.router.BalancingRule.strategy_settings:type_name -> google.protobuf.Any
  1236  	3,  // 12: v2ray.core.app.router.StrategyLeastLoadConfig.costs:type_name -> v2ray.core.app.router.StrategyWeight
  1237  	0,  // 13: v2ray.core.app.router.Config.domain_strategy:type_name -> v2ray.core.app.router.DomainStrategy
  1238  	1,  // 14: v2ray.core.app.router.Config.rule:type_name -> v2ray.core.app.router.RoutingRule
  1239  	2,  // 15: v2ray.core.app.router.Config.balancing_rule:type_name -> v2ray.core.app.router.BalancingRule
  1240  	10, // 16: v2ray.core.app.router.SimplifiedRoutingRule.domain:type_name -> v2ray.core.app.router.routercommon.Domain
  1241  	12, // 17: v2ray.core.app.router.SimplifiedRoutingRule.geoip:type_name -> v2ray.core.app.router.routercommon.GeoIP
  1242  	15, // 18: v2ray.core.app.router.SimplifiedRoutingRule.networks:type_name -> v2ray.core.common.net.NetworkList
  1243  	12, // 19: v2ray.core.app.router.SimplifiedRoutingRule.source_geoip:type_name -> v2ray.core.app.router.routercommon.GeoIP
  1244  	17, // 20: v2ray.core.app.router.SimplifiedRoutingRule.geo_domain:type_name -> v2ray.core.app.router.routercommon.GeoSite
  1245  	0,  // 21: v2ray.core.app.router.SimplifiedConfig.domain_strategy:type_name -> v2ray.core.app.router.DomainStrategy
  1246  	8,  // 22: v2ray.core.app.router.SimplifiedConfig.rule:type_name -> v2ray.core.app.router.SimplifiedRoutingRule
  1247  	2,  // 23: v2ray.core.app.router.SimplifiedConfig.balancing_rule:type_name -> v2ray.core.app.router.BalancingRule
  1248  	24, // [24:24] is the sub-list for method output_type
  1249  	24, // [24:24] is the sub-list for method input_type
  1250  	24, // [24:24] is the sub-list for extension type_name
  1251  	24, // [24:24] is the sub-list for extension extendee
  1252  	0,  // [0:24] is the sub-list for field type_name
  1253  }
  1254  
  1255  func init() { file_app_router_config_proto_init() }
  1256  func file_app_router_config_proto_init() {
  1257  	if File_app_router_config_proto != nil {
  1258  		return
  1259  	}
  1260  	if !protoimpl.UnsafeEnabled {
  1261  		file_app_router_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  1262  			switch v := v.(*RoutingRule); i {
  1263  			case 0:
  1264  				return &v.state
  1265  			case 1:
  1266  				return &v.sizeCache
  1267  			case 2:
  1268  				return &v.unknownFields
  1269  			default:
  1270  				return nil
  1271  			}
  1272  		}
  1273  		file_app_router_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  1274  			switch v := v.(*BalancingRule); i {
  1275  			case 0:
  1276  				return &v.state
  1277  			case 1:
  1278  				return &v.sizeCache
  1279  			case 2:
  1280  				return &v.unknownFields
  1281  			default:
  1282  				return nil
  1283  			}
  1284  		}
  1285  		file_app_router_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  1286  			switch v := v.(*StrategyWeight); i {
  1287  			case 0:
  1288  				return &v.state
  1289  			case 1:
  1290  				return &v.sizeCache
  1291  			case 2:
  1292  				return &v.unknownFields
  1293  			default:
  1294  				return nil
  1295  			}
  1296  		}
  1297  		file_app_router_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  1298  			switch v := v.(*StrategyRandomConfig); i {
  1299  			case 0:
  1300  				return &v.state
  1301  			case 1:
  1302  				return &v.sizeCache
  1303  			case 2:
  1304  				return &v.unknownFields
  1305  			default:
  1306  				return nil
  1307  			}
  1308  		}
  1309  		file_app_router_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  1310  			switch v := v.(*StrategyLeastPingConfig); i {
  1311  			case 0:
  1312  				return &v.state
  1313  			case 1:
  1314  				return &v.sizeCache
  1315  			case 2:
  1316  				return &v.unknownFields
  1317  			default:
  1318  				return nil
  1319  			}
  1320  		}
  1321  		file_app_router_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  1322  			switch v := v.(*StrategyLeastLoadConfig); i {
  1323  			case 0:
  1324  				return &v.state
  1325  			case 1:
  1326  				return &v.sizeCache
  1327  			case 2:
  1328  				return &v.unknownFields
  1329  			default:
  1330  				return nil
  1331  			}
  1332  		}
  1333  		file_app_router_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  1334  			switch v := v.(*Config); i {
  1335  			case 0:
  1336  				return &v.state
  1337  			case 1:
  1338  				return &v.sizeCache
  1339  			case 2:
  1340  				return &v.unknownFields
  1341  			default:
  1342  				return nil
  1343  			}
  1344  		}
  1345  		file_app_router_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  1346  			switch v := v.(*SimplifiedRoutingRule); i {
  1347  			case 0:
  1348  				return &v.state
  1349  			case 1:
  1350  				return &v.sizeCache
  1351  			case 2:
  1352  				return &v.unknownFields
  1353  			default:
  1354  				return nil
  1355  			}
  1356  		}
  1357  		file_app_router_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  1358  			switch v := v.(*SimplifiedConfig); i {
  1359  			case 0:
  1360  				return &v.state
  1361  			case 1:
  1362  				return &v.sizeCache
  1363  			case 2:
  1364  				return &v.unknownFields
  1365  			default:
  1366  				return nil
  1367  			}
  1368  		}
  1369  	}
  1370  	file_app_router_config_proto_msgTypes[0].OneofWrappers = []interface{}{
  1371  		(*RoutingRule_Tag)(nil),
  1372  		(*RoutingRule_BalancingTag)(nil),
  1373  	}
  1374  	file_app_router_config_proto_msgTypes[7].OneofWrappers = []interface{}{
  1375  		(*SimplifiedRoutingRule_Tag)(nil),
  1376  		(*SimplifiedRoutingRule_BalancingTag)(nil),
  1377  	}
  1378  	type x struct{}
  1379  	out := protoimpl.TypeBuilder{
  1380  		File: protoimpl.DescBuilder{
  1381  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  1382  			RawDescriptor: file_app_router_config_proto_rawDesc,
  1383  			NumEnums:      1,
  1384  			NumMessages:   9,
  1385  			NumExtensions: 0,
  1386  			NumServices:   0,
  1387  		},
  1388  		GoTypes:           file_app_router_config_proto_goTypes,
  1389  		DependencyIndexes: file_app_router_config_proto_depIdxs,
  1390  		EnumInfos:         file_app_router_config_proto_enumTypes,
  1391  		MessageInfos:      file_app_router_config_proto_msgTypes,
  1392  	}.Build()
  1393  	File_app_router_config_proto = out.File
  1394  	file_app_router_config_proto_rawDesc = nil
  1395  	file_app_router_config_proto_goTypes = nil
  1396  	file_app_router_config_proto_depIdxs = nil
  1397  }