// Code generated by protoc-gen-go. DO NOT EDIT.
// source: code.justin.tv/video/usherapi/rpc/usher/cluster.proto

package usher // import "code.justin.tv/video/usherapi/rpc/usher"

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import timestamp "github.com/golang/protobuf/ptypes/timestamp"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package

// The cluster service provides cluster state information from usher. A Cluster
// represents a PoP on our network, or an external CDN which can serve video.
// The clusters service provides operational data like total available bandwidth,
// current bandwidth, throttles, etc.
type ClusterListRequest struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ClusterListRequest) Reset()         { *m = ClusterListRequest{} }
func (m *ClusterListRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterListRequest) ProtoMessage()    {}
func (*ClusterListRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{0}
}
func (m *ClusterListRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterListRequest.Unmarshal(m, b)
}
func (m *ClusterListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterListRequest.Marshal(b, m, deterministic)
}
func (dst *ClusterListRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterListRequest.Merge(dst, src)
}
func (m *ClusterListRequest) XXX_Size() int {
	return xxx_messageInfo_ClusterListRequest.Size(m)
}
func (m *ClusterListRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterListRequest.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterListRequest proto.InternalMessageInfo

type ListOf_Cluster struct {
	Clusters             []*Cluster `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *ListOf_Cluster) Reset()         { *m = ListOf_Cluster{} }
func (m *ListOf_Cluster) String() string { return proto.CompactTextString(m) }
func (*ListOf_Cluster) ProtoMessage()    {}
func (*ListOf_Cluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{1}
}
func (m *ListOf_Cluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListOf_Cluster.Unmarshal(m, b)
}
func (m *ListOf_Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListOf_Cluster.Marshal(b, m, deterministic)
}
func (dst *ListOf_Cluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListOf_Cluster.Merge(dst, src)
}
func (m *ListOf_Cluster) XXX_Size() int {
	return xxx_messageInfo_ListOf_Cluster.Size(m)
}
func (m *ListOf_Cluster) XXX_DiscardUnknown() {
	xxx_messageInfo_ListOf_Cluster.DiscardUnknown(m)
}

var xxx_messageInfo_ListOf_Cluster proto.InternalMessageInfo

func (m *ListOf_Cluster) GetClusters() []*Cluster {
	if m != nil {
		return m.Clusters
	}
	return nil
}

type Cluster struct {
	// id is the UsherDB ID of this cluster
	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	// name is the cluster, aka POP
	//
	//   Example:
	//     "sfo01"
	//     "cdg01"
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// enabled indicates this cluster should receive traffic
	Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"`
	// cdn indicates this cluster represents an external CDN and not a Twitch PoP
	Cdn bool `protobuf:"varint,4,opt,name=cdn,proto3" json:"cdn,omitempty"`
	// local indicates that this cluster is a twitch cluster and should have its
	// stats aggregated from the nodes which belong to it
	Local bool `protobuf:"varint,5,opt,name=local,proto3" json:"local,omitempty"`
	// super is a legacy field which no longer holds meaning, but has some queries
	// which depend on it. do not use this field for new work.
	Super bool `protobuf:"varint,6,opt,name=super,proto3" json:"super,omitempty"` // Deprecated: Do not use.
	// zone indicates the region this cluster is in
	//
	//   Example:
	//     "europe"
	//     "usa"
	Zone string `protobuf:"bytes,7,opt,name=zone,proto3" json:"zone,omitempty"`
	// threshold indicates the minimum number of viewers a channel should have to
	// become available for viewing at this pop.
	Threshold int32 `protobuf:"varint,8,opt,name=threshold,proto3" json:"threshold,omitempty"`
	// rep_version indicates the version of the replication system this cluster is
	// running on. as of 7/18/18 it is nearly always 4
	RepVersion int32 `protobuf:"varint,9,opt,name=rep_version,proto3" json:"rep_version,omitempty"`
	// flowsd_host is no longer used and should not be used for any new work. it
	// has been included here due to pre-existing dependencies
	FlowsdHost string `protobuf:"bytes,10,opt,name=flowsd_host,proto3" json:"flowsd_host,omitempty"` // Deprecated: Do not use.
	// update_time is time this entry was last updated
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,20,opt,name=update_time,json=updated_on_rfc3339,proto3" json:"update_time,omitempty"`
	// link_info_update_time_seconds should not be used and link_info_update_time
	// should be used instead
	LinkInfoUpdateTimeSeconds int64 `protobuf:"varint,21,opt,name=link_info_update_time_seconds,json=link_info_updated_on,proto3" json:"link_info_update_time_seconds,omitempty"`
	// link_info_update_time is the last time the network interface data for this
	// cluster was aggregated and updated
	LinkInfoUpdateTime *timestamp.Timestamp `protobuf:"bytes,22,opt,name=link_info_update_time,json=link_info_update_time_rfc3339,proto3" json:"link_info_update_time,omitempty"`
	// max_disabled specifies the maximum number of nodes that may be disabled
	// concurrently in this cluster
	MaxDisabled int64 `protobuf:"varint,30,opt,name=max_disabled,proto3" json:"max_disabled,omitempty"`
	// max_pr_disabled specifies the maximum number of pr nodes that may be
	// disabled concurrently in this cluster
	MaxPrDisabled int64 `protobuf:"varint,31,opt,name=max_pr_disabled,proto3" json:"max_pr_disabled,omitempty"`
	// max_ingest_disabled specifies the maximum number of ingest nodes that may
	// be disabled concurrently in this cluster
	MaxIngestDisabled int64 `protobuf:"varint,32,opt,name=max_ingest_disabled,proto3" json:"max_ingest_disabled,omitempty"`
	// max_edge_disabled specifies the maximum  number of edge nodes that may be
	// disabled concurrently in this cluster
	MaxEdgeDisabled int64 `protobuf:"varint,33,opt,name=max_edge_disabled,proto3" json:"max_edge_disabled,omitempty"`
	// mbps_max is the maximum outbound bandwidth in megabits/s for this cluster.
	// once this value is reached, no more viewers will be assigned
	MbpsMax float64 `protobuf:"fixed64,40,opt,name=mbps_max,proto3" json:"mbps_max,omitempty"`
	// mbps_out is the current outbound bandwidth in megabits/s for this cluster
	MbpsOut float64 `protobuf:"fixed64,41,opt,name=mbps_out,proto3" json:"mbps_out,omitempty"`
	// max_transit_load represents the maximum ratio of mbps_out/mbps_max at which
	// no more transit traffic will be assigned to this cluster. only peering
	// traffic will be allowed after that point
	MaxTransitLoad float64 `protobuf:"fixed64,50,opt,name=max_transit_load,proto3" json:"max_transit_load,omitempty"`
	// offnet indicates this cluster is an offnet cluster, meaning servers we own
	// or manage running in an external dataceter we do not own or manage
	Offnet bool `protobuf:"varint,74,opt,name=offnet,proto3" json:"offnet,omitempty"`
	// identifying_asn is the ASN tag to look for when determining which routes
	// from routesd belong to this cluster.
	IdentifyingAsn       int32    `protobuf:"varint,75,opt,name=identifying_asn,proto3" json:"identifying_asn,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster) Reset()         { *m = Cluster{} }
func (m *Cluster) String() string { return proto.CompactTextString(m) }
func (*Cluster) ProtoMessage()    {}
func (*Cluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{2}
}
func (m *Cluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster.Unmarshal(m, b)
}
func (m *Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster.Marshal(b, m, deterministic)
}
func (dst *Cluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster.Merge(dst, src)
}
func (m *Cluster) XXX_Size() int {
	return xxx_messageInfo_Cluster.Size(m)
}
func (m *Cluster) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster proto.InternalMessageInfo

func (m *Cluster) GetId() int64 {
	if m != nil {
		return m.Id
	}
	return 0
}

func (m *Cluster) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Cluster) GetEnabled() bool {
	if m != nil {
		return m.Enabled
	}
	return false
}

func (m *Cluster) GetCdn() bool {
	if m != nil {
		return m.Cdn
	}
	return false
}

func (m *Cluster) GetLocal() bool {
	if m != nil {
		return m.Local
	}
	return false
}

// Deprecated: Do not use.
func (m *Cluster) GetSuper() bool {
	if m != nil {
		return m.Super
	}
	return false
}

func (m *Cluster) GetZone() string {
	if m != nil {
		return m.Zone
	}
	return ""
}

func (m *Cluster) GetThreshold() int32 {
	if m != nil {
		return m.Threshold
	}
	return 0
}

func (m *Cluster) GetRepVersion() int32 {
	if m != nil {
		return m.RepVersion
	}
	return 0
}

// Deprecated: Do not use.
func (m *Cluster) GetFlowsdHost() string {
	if m != nil {
		return m.FlowsdHost
	}
	return ""
}

func (m *Cluster) GetUpdateTime() *timestamp.Timestamp {
	if m != nil {
		return m.UpdateTime
	}
	return nil
}

func (m *Cluster) GetLinkInfoUpdateTimeSeconds() int64 {
	if m != nil {
		return m.LinkInfoUpdateTimeSeconds
	}
	return 0
}

func (m *Cluster) GetLinkInfoUpdateTime() *timestamp.Timestamp {
	if m != nil {
		return m.LinkInfoUpdateTime
	}
	return nil
}

func (m *Cluster) GetMaxDisabled() int64 {
	if m != nil {
		return m.MaxDisabled
	}
	return 0
}

func (m *Cluster) GetMaxPrDisabled() int64 {
	if m != nil {
		return m.MaxPrDisabled
	}
	return 0
}

func (m *Cluster) GetMaxIngestDisabled() int64 {
	if m != nil {
		return m.MaxIngestDisabled
	}
	return 0
}

func (m *Cluster) GetMaxEdgeDisabled() int64 {
	if m != nil {
		return m.MaxEdgeDisabled
	}
	return 0
}

func (m *Cluster) GetMbpsMax() float64 {
	if m != nil {
		return m.MbpsMax
	}
	return 0
}

func (m *Cluster) GetMbpsOut() float64 {
	if m != nil {
		return m.MbpsOut
	}
	return 0
}

func (m *Cluster) GetMaxTransitLoad() float64 {
	if m != nil {
		return m.MaxTransitLoad
	}
	return 0
}

func (m *Cluster) GetOffnet() bool {
	if m != nil {
		return m.Offnet
	}
	return false
}

func (m *Cluster) GetIdentifyingAsn() int32 {
	if m != nil {
		return m.IdentifyingAsn
	}
	return 0
}

type ListOf_Threshold struct {
	Thresholds           []*Threshold `protobuf:"bytes,1,rep,name=thresholds,proto3" json:"thresholds,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *ListOf_Threshold) Reset()         { *m = ListOf_Threshold{} }
func (m *ListOf_Threshold) String() string { return proto.CompactTextString(m) }
func (*ListOf_Threshold) ProtoMessage()    {}
func (*ListOf_Threshold) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{3}
}
func (m *ListOf_Threshold) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListOf_Threshold.Unmarshal(m, b)
}
func (m *ListOf_Threshold) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListOf_Threshold.Marshal(b, m, deterministic)
}
func (dst *ListOf_Threshold) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListOf_Threshold.Merge(dst, src)
}
func (m *ListOf_Threshold) XXX_Size() int {
	return xxx_messageInfo_ListOf_Threshold.Size(m)
}
func (m *ListOf_Threshold) XXX_DiscardUnknown() {
	xxx_messageInfo_ListOf_Threshold.DiscardUnknown(m)
}

var xxx_messageInfo_ListOf_Threshold proto.InternalMessageInfo

func (m *ListOf_Threshold) GetThresholds() []*Threshold {
	if m != nil {
		return m.Thresholds
	}
	return nil
}

// Threshold defines the minimum number of viewers a channel needs before it is replicated
// to the named cluster/POP.
//
// created_on and updated_on have been skipped because they are not currently being used and
// I suspect they are not well defined. Looking at the Usher code, it looks like it blindly returns
// whatever the database internally stores as the "insert" and "update" times for the item. The
// type of these values could change if the database depended on changes. We should wait until Usher
// has a well defined type for these values (e.g. unix epoch seconds, RFC3339, etc).
type Threshold struct {
	// origin is the name of the replication tree origin where this threshold is defined.
	// Currently it is always "sjc02", but once disaster recovery/resilience has been implemented
	// and duplicated sjc02, there may be multiple possible origins.
	Origin string `protobuf:"bytes,1,opt,name=origin,proto3" json:"origin,omitempty"`
	// name is the cluster, aka POP, which will be used if the stream exceeds the threshold
	//
	// Example:
	//   "sfo01"
	//   "cdg01"
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// threshold indicates the minimum number of viewers a channel should have to
	// become available for viewing at this pop.
	Threshold            int64    `protobuf:"varint,3,opt,name=threshold,proto3" json:"threshold,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Threshold) Reset()         { *m = Threshold{} }
func (m *Threshold) String() string { return proto.CompactTextString(m) }
func (*Threshold) ProtoMessage()    {}
func (*Threshold) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{4}
}
func (m *Threshold) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Threshold.Unmarshal(m, b)
}
func (m *Threshold) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Threshold.Marshal(b, m, deterministic)
}
func (dst *Threshold) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Threshold.Merge(dst, src)
}
func (m *Threshold) XXX_Size() int {
	return xxx_messageInfo_Threshold.Size(m)
}
func (m *Threshold) XXX_DiscardUnknown() {
	xxx_messageInfo_Threshold.DiscardUnknown(m)
}

var xxx_messageInfo_Threshold proto.InternalMessageInfo

func (m *Threshold) GetOrigin() string {
	if m != nil {
		return m.Origin
	}
	return ""
}

func (m *Threshold) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Threshold) GetThreshold() int64 {
	if m != nil {
		return m.Threshold
	}
	return 0
}

type ClusterThresholdsRequest struct {
	// origin is the replication tree origin to get the cluster/POP threshold definitions from i.e "sjc02"
	Origin               string   `protobuf:"bytes,1,opt,name=origin,proto3" json:"origin,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ClusterThresholdsRequest) Reset()         { *m = ClusterThresholdsRequest{} }
func (m *ClusterThresholdsRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterThresholdsRequest) ProtoMessage()    {}
func (*ClusterThresholdsRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_cluster_6eacd2c557b3008f, []int{5}
}
func (m *ClusterThresholdsRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterThresholdsRequest.Unmarshal(m, b)
}
func (m *ClusterThresholdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterThresholdsRequest.Marshal(b, m, deterministic)
}
func (dst *ClusterThresholdsRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterThresholdsRequest.Merge(dst, src)
}
func (m *ClusterThresholdsRequest) XXX_Size() int {
	return xxx_messageInfo_ClusterThresholdsRequest.Size(m)
}
func (m *ClusterThresholdsRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterThresholdsRequest.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterThresholdsRequest proto.InternalMessageInfo

func (m *ClusterThresholdsRequest) GetOrigin() string {
	if m != nil {
		return m.Origin
	}
	return ""
}

func init() {
	proto.RegisterType((*ClusterListRequest)(nil), "twitch.video.usher.ClusterListRequest")
	proto.RegisterType((*ListOf_Cluster)(nil), "twitch.video.usher.ListOf_Cluster")
	proto.RegisterType((*Cluster)(nil), "twitch.video.usher.Cluster")
	proto.RegisterType((*ListOf_Threshold)(nil), "twitch.video.usher.ListOf_Threshold")
	proto.RegisterType((*Threshold)(nil), "twitch.video.usher.Threshold")
	proto.RegisterType((*ClusterThresholdsRequest)(nil), "twitch.video.usher.ClusterThresholdsRequest")
}

func init() {
	proto.RegisterFile("code.justin.tv/video/usherapi/rpc/usher/cluster.proto", fileDescriptor_cluster_6eacd2c557b3008f)
}

var fileDescriptor_cluster_6eacd2c557b3008f = []byte{
	// 617 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x6f, 0xd3, 0x30,
	0x10, 0x56, 0xda, 0xb5, 0x6b, 0xaf, 0x68, 0x0c, 0xd3, 0x4d, 0xd6, 0x60, 0x2c, 0x44, 0x48, 0x64,
	0x08, 0xa5, 0xa8, 0x15, 0x42, 0x08, 0xf1, 0xb2, 0x3d, 0xf1, 0x43, 0x42, 0x44, 0x43, 0x42, 0xbc,
	0x58, 0x69, 0xec, 0xb4, 0x86, 0xd4, 0x0e, 0xb6, 0xb3, 0x0d, 0xfe, 0x2d, 0xfe, 0x41, 0x64, 0x27,
	0x4d, 0xbb, 0xad, 0x13, 0xbc, 0xf9, 0xfb, 0xee, 0xf3, 0x77, 0x27, 0xdf, 0x9d, 0xe1, 0x65, 0x2a,
	0x29, 0x8b, 0xbe, 0x97, 0xda, 0x70, 0x11, 0x99, 0xf3, 0xd1, 0x39, 0xa7, 0x4c, 0x8e, 0x4a, 0x3d,
	0x67, 0x2a, 0x29, 0xf8, 0x48, 0x15, 0x69, 0x05, 0x46, 0x69, 0x5e, 0x6a, 0xc3, 0x54, 0x54, 0x28,
	0x69, 0x24, 0x42, 0xe6, 0x82, 0x9b, 0x74, 0x1e, 0x39, 0x79, 0xe4, 0x14, 0x07, 0x47, 0x33, 0x29,
	0x67, 0x39, 0x1b, 0x39, 0xc5, 0xb4, 0xcc, 0x46, 0x86, 0x2f, 0x98, 0x36, 0xc9, 0xa2, 0xa8, 0x2e,
	0x05, 0x43, 0x40, 0xa7, 0x95, 0xcb, 0x47, 0xae, 0x4d, 0xcc, 0x7e, 0x96, 0x4c, 0x9b, 0xe0, 0x1d,
	0xec, 0x58, 0xf8, 0x29, 0x23, 0x75, 0x10, 0xbd, 0x82, 0x5e, 0x9d, 0x4d, 0x63, 0xcf, 0x6f, 0x87,
	0x83, 0xf1, 0x83, 0xe8, 0x66, 0xbe, 0xa8, 0x96, 0xc7, 0x8d, 0x38, 0xf8, 0xd3, 0x85, 0xed, 0xa5,
	0xc9, 0x0e, 0xb4, 0x38, 0xc5, 0x9e, 0xef, 0x85, 0xed, 0xb8, 0xc5, 0x29, 0x42, 0xb0, 0x25, 0x92,
	0x05, 0xc3, 0x2d, 0xdf, 0x0b, 0xfb, 0xb1, 0x3b, 0x23, 0x0c, 0xdb, 0x4c, 0x24, 0xd3, 0x9c, 0x51,
	0xdc, 0xf6, 0xbd, 0xb0, 0x17, 0x2f, 0x21, 0xda, 0x85, 0x76, 0x4a, 0x05, 0xde, 0x72, 0xac, 0x3d,
	0xa2, 0x21, 0x74, 0x72, 0x99, 0x26, 0x39, 0xee, 0x38, 0xae, 0x02, 0x08, 0x43, 0x47, 0x97, 0x05,
	0x53, 0xb8, 0x6b, 0xd9, 0x93, 0x16, 0xf6, 0xe2, 0x8a, 0xb0, 0xf9, 0x7e, 0x4b, 0xc1, 0xf0, 0x76,
	0x95, 0xcf, 0x9e, 0xd1, 0x43, 0xe8, 0x9b, 0xb9, 0x62, 0x7a, 0x2e, 0x73, 0x8a, 0x7b, 0xbe, 0x17,
	0x76, 0xe2, 0x15, 0x81, 0x7c, 0x18, 0x28, 0x56, 0x90, 0x73, 0xa6, 0x34, 0x97, 0x02, 0xf7, 0x5d,
	0x7c, 0x9d, 0x42, 0x4f, 0x60, 0x90, 0xe5, 0xf2, 0x42, 0x53, 0x32, 0x97, 0xda, 0x60, 0xb0, 0xd6,
	0x2e, 0xe7, 0x3a, 0x8d, 0x4e, 0x61, 0x50, 0x16, 0x34, 0x31, 0x8c, 0xd8, 0x06, 0xe0, 0xa1, 0xef,
	0x85, 0x83, 0xf1, 0x41, 0x54, 0x75, 0x27, 0x5a, 0x76, 0x27, 0x3a, 0x5b, 0x76, 0x27, 0x46, 0x95,
	0x9c, 0x12, 0x29, 0x88, 0xca, 0xd2, 0xc9, 0x64, 0xf2, 0x1a, 0xbd, 0x81, 0xc3, 0x9c, 0x8b, 0x1f,
	0x84, 0x8b, 0x4c, 0x92, 0x35, 0x3b, 0xa2, 0x59, 0x2a, 0x05, 0xd5, 0x78, 0xcf, 0xbd, 0xec, 0xf0,
	0xba, 0xc8, 0x9a, 0xa0, 0xaf, 0xb0, 0xb7, 0xf1, 0x32, 0xde, 0xff, 0x67, 0x2d, 0xb7, 0x64, 0x5d,
	0x96, 0x15, 0xc0, 0x9d, 0x45, 0x72, 0x49, 0x28, 0xd7, 0x55, 0xdb, 0x1e, 0xb9, 0x2a, 0xae, 0x70,
	0x28, 0x84, 0xbb, 0x16, 0x17, 0x6a, 0x25, 0x3b, 0x72, 0xb2, 0xeb, 0x34, 0x7a, 0x01, 0xf7, 0x2d,
	0xc5, 0xc5, 0x8c, 0x69, 0xb3, 0x52, 0xfb, 0x4e, 0xbd, 0x29, 0x84, 0x9e, 0xc3, 0x3d, 0x4b, 0x33,
	0x3a, 0x63, 0x2b, 0xfd, 0x63, 0xa7, 0xbf, 0x19, 0x40, 0x07, 0xd0, 0x5b, 0x4c, 0x0b, 0x4d, 0x16,
	0xc9, 0x25, 0x0e, 0x7d, 0x2f, 0xf4, 0xe2, 0x06, 0x37, 0x31, 0x59, 0x1a, 0x7c, 0xbc, 0x16, 0x93,
	0xa5, 0x41, 0xcf, 0x60, 0xd7, 0x9a, 0x19, 0x95, 0x08, 0xcd, 0x0d, 0xc9, 0x65, 0x42, 0xf1, 0xd8,
	0x69, 0x6e, 0xf0, 0x68, 0x1f, 0xba, 0x32, 0xcb, 0x04, 0x33, 0xf8, 0xbd, 0x1b, 0xcc, 0x1a, 0xd9,
	0x57, 0xe0, 0x94, 0x09, 0xc3, 0xb3, 0x5f, 0x5c, 0xcc, 0x48, 0xa2, 0x05, 0xfe, 0xe0, 0x26, 0xea,
	0x3a, 0x1d, 0x7c, 0x86, 0xdd, 0x7a, 0x01, 0xcf, 0x9a, 0x59, 0x7c, 0x0b, 0xd0, 0x0c, 0xe6, 0x72,
	0x09, 0x0f, 0x37, 0x2d, 0x61, 0x73, 0x25, 0x5e, 0xbb, 0x10, 0x7c, 0x81, 0xfe, 0xca, 0xcb, 0x56,
	0xa8, 0xf8, 0x8c, 0x0b, 0xb7, 0x8d, 0xfd, 0xb8, 0x46, 0x1b, 0x37, 0xf2, 0xca, 0x86, 0xb4, 0xdd,
	0xbb, 0xae, 0x88, 0x60, 0x0c, 0xb8, 0x5e, 0xef, 0xc6, 0x5d, 0xd7, 0xdf, 0xc8, 0x6d, 0x59, 0x4e,
	0x8e, 0xbf, 0x3d, 0xfd, 0xcf, 0x2f, 0x6e, 0xda, 0x75, 0xf3, 0x38, 0xf9, 0x1b, 0x00, 0x00, 0xff,
	0xff, 0x56, 0x20, 0x25, 0x04, 0x14, 0x05, 0x00, 0x00,
}
