// Code generated by protoc-gen-go. DO NOT EDIT.
// source: testplans/generate_test_plan.proto

package testplans

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	_struct "github.com/golang/protobuf/ptypes/struct"
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	math "math"
)

// 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.ProtoPackageIsVersion3 // please upgrade the proto package

type GenerateTestPlanRequest struct {
	// Serialized buildbucket Build protos that are part of this orchestrator run.
	// See https://chromium.googlesource.com/infra/luci/luci-go/+/master/buildbucket/proto/build.proto
	BuildbucketProtos []*ProtoBytes `protobuf:"bytes,5,rep,name=buildbucket_protos,json=buildbucketProtos,proto3" json:"buildbucket_protos,omitempty"`
	// The manifest-internal snapshot commit hash that's being used for the current build.
	// Note that manifest_commit will be soon replaced with gitiles_commit below.
	ManifestCommit string `protobuf:"bytes,7,opt,name=manifest_commit,json=manifestCommit,proto3" json:"manifest_commit,omitempty"`
	// Serialized buildbucket GitilesCommit, representing the manifest or
	// manifest-internal commit to which the build is synced.
	GitilesCommit *ProtoBytes `protobuf:"bytes,9,opt,name=gitiles_commit,json=gitilesCommit,proto3" json:"gitiles_commit,omitempty"`
	// Serialized buildbucket GerritChanges, or none if this is a postsubmit run
	// or similar. Explicit proto import is avoided here to prevent a dependency
	// on the luci-go repo.
	// See https://chromium.googlesource.com/infra/luci/luci-go/+/master/buildbucket/proto/common.proto
	GerritChanges        []*ProtoBytes `protobuf:"bytes,8,rep,name=gerrit_changes,json=gerritChanges,proto3" json:"gerrit_changes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *GenerateTestPlanRequest) Reset()         { *m = GenerateTestPlanRequest{} }
func (m *GenerateTestPlanRequest) String() string { return proto.CompactTextString(m) }
func (*GenerateTestPlanRequest) ProtoMessage()    {}
func (*GenerateTestPlanRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{0}
}

func (m *GenerateTestPlanRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GenerateTestPlanRequest.Unmarshal(m, b)
}
func (m *GenerateTestPlanRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GenerateTestPlanRequest.Marshal(b, m, deterministic)
}
func (m *GenerateTestPlanRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GenerateTestPlanRequest.Merge(m, src)
}
func (m *GenerateTestPlanRequest) XXX_Size() int {
	return xxx_messageInfo_GenerateTestPlanRequest.Size(m)
}
func (m *GenerateTestPlanRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_GenerateTestPlanRequest.DiscardUnknown(m)
}

var xxx_messageInfo_GenerateTestPlanRequest proto.InternalMessageInfo

func (m *GenerateTestPlanRequest) GetBuildbucketProtos() []*ProtoBytes {
	if m != nil {
		return m.BuildbucketProtos
	}
	return nil
}

func (m *GenerateTestPlanRequest) GetManifestCommit() string {
	if m != nil {
		return m.ManifestCommit
	}
	return ""
}

func (m *GenerateTestPlanRequest) GetGitilesCommit() *ProtoBytes {
	if m != nil {
		return m.GitilesCommit
	}
	return nil
}

func (m *GenerateTestPlanRequest) GetGerritChanges() []*ProtoBytes {
	if m != nil {
		return m.GerritChanges
	}
	return nil
}

// The final test plan.
type GenerateTestPlanResponse struct {
	HwTestUnits           []*HwTestUnit     `protobuf:"bytes,3,rep,name=hw_test_units,json=hwTestUnits,proto3" json:"hw_test_units,omitempty"`
	VmTestUnits           []*VmTestUnit     `protobuf:"bytes,6,rep,name=vm_test_units,json=vmTestUnits,proto3" json:"vm_test_units,omitempty"`
	DirectTastVmTestUnits []*TastVmTestUnit `protobuf:"bytes,7,rep,name=direct_tast_vm_test_units,json=directTastVmTestUnits,proto3" json:"direct_tast_vm_test_units,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}          `json:"-"`
	XXX_unrecognized      []byte            `json:"-"`
	XXX_sizecache         int32             `json:"-"`
}

func (m *GenerateTestPlanResponse) Reset()         { *m = GenerateTestPlanResponse{} }
func (m *GenerateTestPlanResponse) String() string { return proto.CompactTextString(m) }
func (*GenerateTestPlanResponse) ProtoMessage()    {}
func (*GenerateTestPlanResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{1}
}

func (m *GenerateTestPlanResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GenerateTestPlanResponse.Unmarshal(m, b)
}
func (m *GenerateTestPlanResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GenerateTestPlanResponse.Marshal(b, m, deterministic)
}
func (m *GenerateTestPlanResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GenerateTestPlanResponse.Merge(m, src)
}
func (m *GenerateTestPlanResponse) XXX_Size() int {
	return xxx_messageInfo_GenerateTestPlanResponse.Size(m)
}
func (m *GenerateTestPlanResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_GenerateTestPlanResponse.DiscardUnknown(m)
}

var xxx_messageInfo_GenerateTestPlanResponse proto.InternalMessageInfo

func (m *GenerateTestPlanResponse) GetHwTestUnits() []*HwTestUnit {
	if m != nil {
		return m.HwTestUnits
	}
	return nil
}

func (m *GenerateTestPlanResponse) GetVmTestUnits() []*VmTestUnit {
	if m != nil {
		return m.VmTestUnits
	}
	return nil
}

func (m *GenerateTestPlanResponse) GetDirectTastVmTestUnits() []*TastVmTestUnit {
	if m != nil {
		return m.DirectTastVmTestUnits
	}
	return nil
}

// The files that should be tested in a test plan.
type BuildPayload struct {
	// The GS bucket in which artifacts for the build are stored, e.g.
	// gs://chromeos-image-archive
	ArtifactsGsBucket string `protobuf:"bytes,1,opt,name=artifacts_gs_bucket,json=artifactsGsBucket,proto3" json:"artifacts_gs_bucket,omitempty"`
	// The path in the bucket in which artifacts for the build are stored, e.g.
	// eve-paladin/R73-11588.0.0-rc4
	ArtifactsGsPath string `protobuf:"bytes,2,opt,name=artifacts_gs_path,json=artifactsGsPath,proto3" json:"artifacts_gs_path,omitempty"`
	// Artifact type to files available for that type. e.g.
	// "AUTOTEST_FILES": [ "control_files.tar" ]
	FilesByArtifact      *_struct.Struct `protobuf:"bytes,3,opt,name=files_by_artifact,json=filesByArtifact,proto3" json:"files_by_artifact,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *BuildPayload) Reset()         { *m = BuildPayload{} }
func (m *BuildPayload) String() string { return proto.CompactTextString(m) }
func (*BuildPayload) ProtoMessage()    {}
func (*BuildPayload) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{2}
}

func (m *BuildPayload) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BuildPayload.Unmarshal(m, b)
}
func (m *BuildPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BuildPayload.Marshal(b, m, deterministic)
}
func (m *BuildPayload) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BuildPayload.Merge(m, src)
}
func (m *BuildPayload) XXX_Size() int {
	return xxx_messageInfo_BuildPayload.Size(m)
}
func (m *BuildPayload) XXX_DiscardUnknown() {
	xxx_messageInfo_BuildPayload.DiscardUnknown(m)
}

var xxx_messageInfo_BuildPayload proto.InternalMessageInfo

func (m *BuildPayload) GetArtifactsGsBucket() string {
	if m != nil {
		return m.ArtifactsGsBucket
	}
	return ""
}

func (m *BuildPayload) GetArtifactsGsPath() string {
	if m != nil {
		return m.ArtifactsGsPath
	}
	return ""
}

func (m *BuildPayload) GetFilesByArtifact() *_struct.Struct {
	if m != nil {
		return m.FilesByArtifact
	}
	return nil
}

// The parts of a TestUnit that are common among all test types.
type TestUnitCommon struct {
	// The build target for this test unit.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// A builder name for this test unit, e.g. eve-arcvm-cq.
	BuilderName string `protobuf:"bytes,4,opt,name=builder_name,json=builderName,proto3" json:"builder_name,omitempty"`
	// The build files provided to run this test unit.
	BuildPayload         *BuildPayload `protobuf:"bytes,3,opt,name=build_payload,json=buildPayload,proto3" json:"build_payload,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *TestUnitCommon) Reset()         { *m = TestUnitCommon{} }
func (m *TestUnitCommon) String() string { return proto.CompactTextString(m) }
func (*TestUnitCommon) ProtoMessage()    {}
func (*TestUnitCommon) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{3}
}

func (m *TestUnitCommon) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TestUnitCommon.Unmarshal(m, b)
}
func (m *TestUnitCommon) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TestUnitCommon.Marshal(b, m, deterministic)
}
func (m *TestUnitCommon) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TestUnitCommon.Merge(m, src)
}
func (m *TestUnitCommon) XXX_Size() int {
	return xxx_messageInfo_TestUnitCommon.Size(m)
}
func (m *TestUnitCommon) XXX_DiscardUnknown() {
	xxx_messageInfo_TestUnitCommon.DiscardUnknown(m)
}

var xxx_messageInfo_TestUnitCommon proto.InternalMessageInfo

func (m *TestUnitCommon) GetBuildTarget() *chromiumos.BuildTarget {
	if m != nil {
		return m.BuildTarget
	}
	return nil
}

func (m *TestUnitCommon) GetBuilderName() string {
	if m != nil {
		return m.BuilderName
	}
	return ""
}

func (m *TestUnitCommon) GetBuildPayload() *BuildPayload {
	if m != nil {
		return m.BuildPayload
	}
	return nil
}

type HwTestUnit struct {
	Common               *TestUnitCommon `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"`
	HwTestCfg            *HwTestCfg      `protobuf:"bytes,2,opt,name=hw_test_cfg,json=hwTestCfg,proto3" json:"hw_test_cfg,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *HwTestUnit) Reset()         { *m = HwTestUnit{} }
func (m *HwTestUnit) String() string { return proto.CompactTextString(m) }
func (*HwTestUnit) ProtoMessage()    {}
func (*HwTestUnit) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{4}
}

func (m *HwTestUnit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HwTestUnit.Unmarshal(m, b)
}
func (m *HwTestUnit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HwTestUnit.Marshal(b, m, deterministic)
}
func (m *HwTestUnit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HwTestUnit.Merge(m, src)
}
func (m *HwTestUnit) XXX_Size() int {
	return xxx_messageInfo_HwTestUnit.Size(m)
}
func (m *HwTestUnit) XXX_DiscardUnknown() {
	xxx_messageInfo_HwTestUnit.DiscardUnknown(m)
}

var xxx_messageInfo_HwTestUnit proto.InternalMessageInfo

func (m *HwTestUnit) GetCommon() *TestUnitCommon {
	if m != nil {
		return m.Common
	}
	return nil
}

func (m *HwTestUnit) GetHwTestCfg() *HwTestCfg {
	if m != nil {
		return m.HwTestCfg
	}
	return nil
}

type TastVmTestUnit struct {
	Common               *TestUnitCommon `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"`
	TastVmTestCfg        *TastVmTestCfg  `protobuf:"bytes,2,opt,name=tast_vm_test_cfg,json=tastVmTestCfg,proto3" json:"tast_vm_test_cfg,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *TastVmTestUnit) Reset()         { *m = TastVmTestUnit{} }
func (m *TastVmTestUnit) String() string { return proto.CompactTextString(m) }
func (*TastVmTestUnit) ProtoMessage()    {}
func (*TastVmTestUnit) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{5}
}

func (m *TastVmTestUnit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TastVmTestUnit.Unmarshal(m, b)
}
func (m *TastVmTestUnit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TastVmTestUnit.Marshal(b, m, deterministic)
}
func (m *TastVmTestUnit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TastVmTestUnit.Merge(m, src)
}
func (m *TastVmTestUnit) XXX_Size() int {
	return xxx_messageInfo_TastVmTestUnit.Size(m)
}
func (m *TastVmTestUnit) XXX_DiscardUnknown() {
	xxx_messageInfo_TastVmTestUnit.DiscardUnknown(m)
}

var xxx_messageInfo_TastVmTestUnit proto.InternalMessageInfo

func (m *TastVmTestUnit) GetCommon() *TestUnitCommon {
	if m != nil {
		return m.Common
	}
	return nil
}

func (m *TastVmTestUnit) GetTastVmTestCfg() *TastVmTestCfg {
	if m != nil {
		return m.TastVmTestCfg
	}
	return nil
}

type VmTestUnit struct {
	Common               *TestUnitCommon `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"`
	VmTestCfg            *VmTestCfg      `protobuf:"bytes,2,opt,name=vm_test_cfg,json=vmTestCfg,proto3" json:"vm_test_cfg,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *VmTestUnit) Reset()         { *m = VmTestUnit{} }
func (m *VmTestUnit) String() string { return proto.CompactTextString(m) }
func (*VmTestUnit) ProtoMessage()    {}
func (*VmTestUnit) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8083f85c67203f6, []int{6}
}

func (m *VmTestUnit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_VmTestUnit.Unmarshal(m, b)
}
func (m *VmTestUnit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_VmTestUnit.Marshal(b, m, deterministic)
}
func (m *VmTestUnit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_VmTestUnit.Merge(m, src)
}
func (m *VmTestUnit) XXX_Size() int {
	return xxx_messageInfo_VmTestUnit.Size(m)
}
func (m *VmTestUnit) XXX_DiscardUnknown() {
	xxx_messageInfo_VmTestUnit.DiscardUnknown(m)
}

var xxx_messageInfo_VmTestUnit proto.InternalMessageInfo

func (m *VmTestUnit) GetCommon() *TestUnitCommon {
	if m != nil {
		return m.Common
	}
	return nil
}

func (m *VmTestUnit) GetVmTestCfg() *VmTestCfg {
	if m != nil {
		return m.VmTestCfg
	}
	return nil
}

func init() {
	proto.RegisterType((*GenerateTestPlanRequest)(nil), "testplans.GenerateTestPlanRequest")
	proto.RegisterType((*GenerateTestPlanResponse)(nil), "testplans.GenerateTestPlanResponse")
	proto.RegisterType((*BuildPayload)(nil), "testplans.BuildPayload")
	proto.RegisterType((*TestUnitCommon)(nil), "testplans.TestUnitCommon")
	proto.RegisterType((*HwTestUnit)(nil), "testplans.HwTestUnit")
	proto.RegisterType((*TastVmTestUnit)(nil), "testplans.TastVmTestUnit")
	proto.RegisterType((*VmTestUnit)(nil), "testplans.VmTestUnit")
}

func init() { proto.RegisterFile("testplans/generate_test_plan.proto", fileDescriptor_e8083f85c67203f6) }

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