// Code generated by protoc-gen-go. DO NOT EDIT.
// source: device/config.proto

package device

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	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

// Next tag: 8
type Config_FormFactor int32

const (
	Config_FORM_FACTOR_UNSPECIFIED Config_FormFactor = 0
	Config_FORM_FACTOR_CLAMSHELL   Config_FormFactor = 1
	Config_FORM_FACTOR_CONVERTIBLE Config_FormFactor = 2
	Config_FORM_FACTOR_DETACHABLE  Config_FormFactor = 3
	Config_FORM_FACTOR_CHROMEBASE  Config_FormFactor = 4
	Config_FORM_FACTOR_CHROMEBOX   Config_FormFactor = 5
	Config_FORM_FACTOR_CHROMEBIT   Config_FormFactor = 6
	Config_FORM_FACTOR_CHROMESLATE Config_FormFactor = 7
)

var Config_FormFactor_name = map[int32]string{
	0: "FORM_FACTOR_UNSPECIFIED",
	1: "FORM_FACTOR_CLAMSHELL",
	2: "FORM_FACTOR_CONVERTIBLE",
	3: "FORM_FACTOR_DETACHABLE",
	4: "FORM_FACTOR_CHROMEBASE",
	5: "FORM_FACTOR_CHROMEBOX",
	6: "FORM_FACTOR_CHROMEBIT",
	7: "FORM_FACTOR_CHROMESLATE",
}

var Config_FormFactor_value = map[string]int32{
	"FORM_FACTOR_UNSPECIFIED": 0,
	"FORM_FACTOR_CLAMSHELL":   1,
	"FORM_FACTOR_CONVERTIBLE": 2,
	"FORM_FACTOR_DETACHABLE":  3,
	"FORM_FACTOR_CHROMEBASE":  4,
	"FORM_FACTOR_CHROMEBOX":   5,
	"FORM_FACTOR_CHROMEBIT":   6,
	"FORM_FACTOR_CHROMESLATE": 7,
}

func (x Config_FormFactor) String() string {
	return proto.EnumName(Config_FormFactor_name, int32(x))
}

func (Config_FormFactor) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 0}
}

// Next Tag: 3
type Config_Graphics int32

const (
	Config_GRAPHICS_UNSPECIFIED Config_Graphics = 0
	Config_GRAPHICS_GL          Config_Graphics = 1
	Config_GRAPHICS_GLE         Config_Graphics = 2
)

var Config_Graphics_name = map[int32]string{
	0: "GRAPHICS_UNSPECIFIED",
	1: "GRAPHICS_GL",
	2: "GRAPHICS_GLE",
}

var Config_Graphics_value = map[string]int32{
	"GRAPHICS_UNSPECIFIED": 0,
	"GRAPHICS_GL":          1,
	"GRAPHICS_GLE":         2,
}

func (x Config_Graphics) String() string {
	return proto.EnumName(Config_Graphics_name, int32(x))
}

func (Config_Graphics) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 1}
}

// Next Tag: 12
type Config_HardwareFeature int32

const (
	Config_HARDWARE_FEATURE_UNSPECIFIED Config_HardwareFeature = 0
	Config_HARDWARE_FEATURE_BLUETOOTH   Config_HardwareFeature = 1
	Config_HARDWARE_FEATURE_FLASHROM    Config_HardwareFeature = 2
	// Indicate if the device support audio hotwording, an audio listening module
	// included with Google Chrome and Chromium to support Google Assistant.
	// https://chromeos.google.com/partner/dlm/docs/latest-requirements/chromebook.html#audio-hotwording-always-on-listening
	Config_HARDWARE_FEATURE_HOTWORDING       Config_HardwareFeature = 3
	Config_HARDWARE_FEATURE_INTERNAL_DISPLAY Config_HardwareFeature = 4
	// Indicate if the device has support for lucid sleep (a connected lower power state,
	// in which the device should still has some network communications)
	// https://chromeos.google.com/partner/dlm/docs/p-hardware-specs/lucidsleep.html
	Config_HARDWARE_FEATURE_LUCID_SLEEP Config_HardwareFeature = 5
	Config_HARDWARE_FEATURE_WEBCAM      Config_HardwareFeature = 6
	Config_HARDWARE_FEATURE_STYLUS      Config_HardwareFeature = 7
	Config_HARDWARE_FEATURE_TOUCHPAD    Config_HardwareFeature = 8
	Config_HARDWARE_FEATURE_TOUCHSCREEN Config_HardwareFeature = 9
	// Indicate if the device has detachable keyboard.
	// https://chromeos.google.com/partner/dlm/docs/latest-requirements/detachable.html#keyboard-external
	Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD Config_HardwareFeature = 10
	// Indicate if the device has fingerprint sensor.
	Config_HARDWARE_FEATURE_FINGERPRINT Config_HardwareFeature = 11
)

var Config_HardwareFeature_name = map[int32]string{
	0:  "HARDWARE_FEATURE_UNSPECIFIED",
	1:  "HARDWARE_FEATURE_BLUETOOTH",
	2:  "HARDWARE_FEATURE_FLASHROM",
	3:  "HARDWARE_FEATURE_HOTWORDING",
	4:  "HARDWARE_FEATURE_INTERNAL_DISPLAY",
	5:  "HARDWARE_FEATURE_LUCID_SLEEP",
	6:  "HARDWARE_FEATURE_WEBCAM",
	7:  "HARDWARE_FEATURE_STYLUS",
	8:  "HARDWARE_FEATURE_TOUCHPAD",
	9:  "HARDWARE_FEATURE_TOUCHSCREEN",
	10: "HARDWARE_FEATURE_DETACHABLE_KEYBOARD",
	11: "HARDWARE_FEATURE_FINGERPRINT",
}

var Config_HardwareFeature_value = map[string]int32{
	"HARDWARE_FEATURE_UNSPECIFIED":         0,
	"HARDWARE_FEATURE_BLUETOOTH":           1,
	"HARDWARE_FEATURE_FLASHROM":            2,
	"HARDWARE_FEATURE_HOTWORDING":          3,
	"HARDWARE_FEATURE_INTERNAL_DISPLAY":    4,
	"HARDWARE_FEATURE_LUCID_SLEEP":         5,
	"HARDWARE_FEATURE_WEBCAM":              6,
	"HARDWARE_FEATURE_STYLUS":              7,
	"HARDWARE_FEATURE_TOUCHPAD":            8,
	"HARDWARE_FEATURE_TOUCHSCREEN":         9,
	"HARDWARE_FEATURE_DETACHABLE_KEYBOARD": 10,
	"HARDWARE_FEATURE_FINGERPRINT":         11,
}

func (x Config_HardwareFeature) String() string {
	return proto.EnumName(Config_HardwareFeature_name, int32(x))
}

func (Config_HardwareFeature) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 2}
}

// Indicate the device's power supply.
// Next Tag: 3
type Config_PowerSupply int32

const (
	Config_POWER_SUPPLY_UNSPECIFIED Config_PowerSupply = 0
	Config_POWER_SUPPLY_BATTERY     Config_PowerSupply = 1
	Config_POWER_SUPPLY_AC_ONLY     Config_PowerSupply = 2
)

var Config_PowerSupply_name = map[int32]string{
	0: "POWER_SUPPLY_UNSPECIFIED",
	1: "POWER_SUPPLY_BATTERY",
	2: "POWER_SUPPLY_AC_ONLY",
}

var Config_PowerSupply_value = map[string]int32{
	"POWER_SUPPLY_UNSPECIFIED": 0,
	"POWER_SUPPLY_BATTERY":     1,
	"POWER_SUPPLY_AC_ONLY":     2,
}

func (x Config_PowerSupply) String() string {
	return proto.EnumName(Config_PowerSupply_name, int32(x))
}

func (Config_PowerSupply) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 3}
}

// Next Tag: 6
type Config_Storage int32

const (
	Config_STORAGE_UNSPECIFIED Config_Storage = 0
	Config_STORAGE_SSD         Config_Storage = 1
	Config_STORAGE_HDD         Config_Storage = 2
	Config_STORAGE_MMC         Config_Storage = 3
	Config_STORAGE_NVME        Config_Storage = 4
	Config_STORAGE_UFS         Config_Storage = 5
)

var Config_Storage_name = map[int32]string{
	0: "STORAGE_UNSPECIFIED",
	1: "STORAGE_SSD",
	2: "STORAGE_HDD",
	3: "STORAGE_MMC",
	4: "STORAGE_NVME",
	5: "STORAGE_UFS",
}

var Config_Storage_value = map[string]int32{
	"STORAGE_UNSPECIFIED": 0,
	"STORAGE_SSD":         1,
	"STORAGE_HDD":         2,
	"STORAGE_MMC":         3,
	"STORAGE_NVME":        4,
	"STORAGE_UFS":         5,
}

func (x Config_Storage) String() string {
	return proto.EnumName(Config_Storage_name, int32(x))
}

func (Config_Storage) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 4}
}

// Next tag: 13
type Config_VideoAcceleration int32

const (
	Config_VIDEO_UNSPECIFIED            Config_VideoAcceleration = 0
	Config_VIDEO_ACCELERATION_H264      Config_VideoAcceleration = 1
	Config_VIDEO_ACCELERATION_ENC_H264  Config_VideoAcceleration = 2
	Config_VIDEO_ACCELERATION_VP8       Config_VideoAcceleration = 3
	Config_VIDEO_ACCELERATION_ENC_VP8   Config_VideoAcceleration = 4
	Config_VIDEO_ACCELERATION_VP9       Config_VideoAcceleration = 5
	Config_VIDEO_ACCELERATION_ENC_VP9   Config_VideoAcceleration = 6
	Config_VIDEO_ACCELERATION_VP9_2     Config_VideoAcceleration = 7
	Config_VIDEO_ACCELERATION_ENC_VP9_2 Config_VideoAcceleration = 8
	Config_VIDEO_ACCELERATION_H265      Config_VideoAcceleration = 9
	Config_VIDEO_ACCELERATION_ENC_H265  Config_VideoAcceleration = 10
	Config_VIDEO_ACCELERATION_MJPG      Config_VideoAcceleration = 11
	Config_VIDEO_ACCELERATION_ENC_MJPG  Config_VideoAcceleration = 12
)

var Config_VideoAcceleration_name = map[int32]string{
	0:  "VIDEO_UNSPECIFIED",
	1:  "VIDEO_ACCELERATION_H264",
	2:  "VIDEO_ACCELERATION_ENC_H264",
	3:  "VIDEO_ACCELERATION_VP8",
	4:  "VIDEO_ACCELERATION_ENC_VP8",
	5:  "VIDEO_ACCELERATION_VP9",
	6:  "VIDEO_ACCELERATION_ENC_VP9",
	7:  "VIDEO_ACCELERATION_VP9_2",
	8:  "VIDEO_ACCELERATION_ENC_VP9_2",
	9:  "VIDEO_ACCELERATION_H265",
	10: "VIDEO_ACCELERATION_ENC_H265",
	11: "VIDEO_ACCELERATION_MJPG",
	12: "VIDEO_ACCELERATION_ENC_MJPG",
}

var Config_VideoAcceleration_value = map[string]int32{
	"VIDEO_UNSPECIFIED":            0,
	"VIDEO_ACCELERATION_H264":      1,
	"VIDEO_ACCELERATION_ENC_H264":  2,
	"VIDEO_ACCELERATION_VP8":       3,
	"VIDEO_ACCELERATION_ENC_VP8":   4,
	"VIDEO_ACCELERATION_VP9":       5,
	"VIDEO_ACCELERATION_ENC_VP9":   6,
	"VIDEO_ACCELERATION_VP9_2":     7,
	"VIDEO_ACCELERATION_ENC_VP9_2": 8,
	"VIDEO_ACCELERATION_H265":      9,
	"VIDEO_ACCELERATION_ENC_H265":  10,
	"VIDEO_ACCELERATION_MJPG":      11,
	"VIDEO_ACCELERATION_ENC_MJPG":  12,
}

func (x Config_VideoAcceleration) String() string {
	return proto.EnumName(Config_VideoAcceleration_name, int32(x))
}

func (Config_VideoAcceleration) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 5}
}

// Next Tag: 35
type Config_SOC int32

const (
	Config_SOC_UNSPECIFIED Config_SOC = 0
	// Aka AML-Y
	Config_SOC_AMBERLAKE_Y   Config_SOC = 1
	Config_SOC_APOLLO_LAKE   Config_SOC = 2
	Config_SOC_BAY_TRAIL     Config_SOC = 3
	Config_SOC_BRASWELL      Config_SOC = 4
	Config_SOC_BROADWELL     Config_SOC = 5
	Config_SOC_CANNON_LAKE_Y Config_SOC = 6
	Config_SOC_COMET_LAKE_U  Config_SOC = 7
	Config_SOC_EXYNOS_5250   Config_SOC = 8
	Config_SOC_EXYNOS_5420   Config_SOC = 9
	// Aka GLK
	Config_SOC_GEMINI_LAKE Config_SOC = 10
	Config_SOC_HASWELL     Config_SOC = 11
	Config_SOC_ICE_LAKE_Y  Config_SOC = 12
	Config_SOC_IVY_BRIDGE  Config_SOC = 13
	Config_SOC_KABYLAKE_U  Config_SOC = 14
	// KabyLake U refresh
	Config_SOC_KABYLAKE_U_R   Config_SOC = 15
	Config_SOC_KABYLAKE_Y     Config_SOC = 16
	Config_SOC_MT8173         Config_SOC = 17
	Config_SOC_MT8176         Config_SOC = 18
	Config_SOC_MT8183         Config_SOC = 19
	Config_SOC_PICASSO        Config_SOC = 20
	Config_SOC_PINE_TRAIL     Config_SOC = 21
	Config_SOC_RK3288         Config_SOC = 22
	Config_SOC_RK3399         Config_SOC = 23
	Config_SOC_SANDY_BRIDGE   Config_SOC = 24
	Config_SOC_SDM845         Config_SOC = 25
	Config_SOC_SKYLAKE_U      Config_SOC = 26
	Config_SOC_SKYLAKE_Y      Config_SOC = 27
	Config_SOC_STONEY_RIDGE   Config_SOC = 28
	Config_SOC_TEGRA_K1       Config_SOC = 29
	Config_SOC_WHISKEY_LAKE_U Config_SOC = 30
	Config_SOC_SC7180         Config_SOC = 31
	Config_SOC_JASPER_LAKE    Config_SOC = 32
	Config_SOC_TIGER_LAKE     Config_SOC = 33
	Config_SOC_MT8192         Config_SOC = 34
)

var Config_SOC_name = map[int32]string{
	0:  "SOC_UNSPECIFIED",
	1:  "SOC_AMBERLAKE_Y",
	2:  "SOC_APOLLO_LAKE",
	3:  "SOC_BAY_TRAIL",
	4:  "SOC_BRASWELL",
	5:  "SOC_BROADWELL",
	6:  "SOC_CANNON_LAKE_Y",
	7:  "SOC_COMET_LAKE_U",
	8:  "SOC_EXYNOS_5250",
	9:  "SOC_EXYNOS_5420",
	10: "SOC_GEMINI_LAKE",
	11: "SOC_HASWELL",
	12: "SOC_ICE_LAKE_Y",
	13: "SOC_IVY_BRIDGE",
	14: "SOC_KABYLAKE_U",
	15: "SOC_KABYLAKE_U_R",
	16: "SOC_KABYLAKE_Y",
	17: "SOC_MT8173",
	18: "SOC_MT8176",
	19: "SOC_MT8183",
	20: "SOC_PICASSO",
	21: "SOC_PINE_TRAIL",
	22: "SOC_RK3288",
	23: "SOC_RK3399",
	24: "SOC_SANDY_BRIDGE",
	25: "SOC_SDM845",
	26: "SOC_SKYLAKE_U",
	27: "SOC_SKYLAKE_Y",
	28: "SOC_STONEY_RIDGE",
	29: "SOC_TEGRA_K1",
	30: "SOC_WHISKEY_LAKE_U",
	31: "SOC_SC7180",
	32: "SOC_JASPER_LAKE",
	33: "SOC_TIGER_LAKE",
	34: "SOC_MT8192",
}

var Config_SOC_value = map[string]int32{
	"SOC_UNSPECIFIED":    0,
	"SOC_AMBERLAKE_Y":    1,
	"SOC_APOLLO_LAKE":    2,
	"SOC_BAY_TRAIL":      3,
	"SOC_BRASWELL":       4,
	"SOC_BROADWELL":      5,
	"SOC_CANNON_LAKE_Y":  6,
	"SOC_COMET_LAKE_U":   7,
	"SOC_EXYNOS_5250":    8,
	"SOC_EXYNOS_5420":    9,
	"SOC_GEMINI_LAKE":    10,
	"SOC_HASWELL":        11,
	"SOC_ICE_LAKE_Y":     12,
	"SOC_IVY_BRIDGE":     13,
	"SOC_KABYLAKE_U":     14,
	"SOC_KABYLAKE_U_R":   15,
	"SOC_KABYLAKE_Y":     16,
	"SOC_MT8173":         17,
	"SOC_MT8176":         18,
	"SOC_MT8183":         19,
	"SOC_PICASSO":        20,
	"SOC_PINE_TRAIL":     21,
	"SOC_RK3288":         22,
	"SOC_RK3399":         23,
	"SOC_SANDY_BRIDGE":   24,
	"SOC_SDM845":         25,
	"SOC_SKYLAKE_U":      26,
	"SOC_SKYLAKE_Y":      27,
	"SOC_STONEY_RIDGE":   28,
	"SOC_TEGRA_K1":       29,
	"SOC_WHISKEY_LAKE_U": 30,
	"SOC_SC7180":         31,
	"SOC_JASPER_LAKE":    32,
	"SOC_TIGER_LAKE":     33,
	"SOC_MT8192":         34,
}

func (x Config_SOC) String() string {
	return proto.EnumName(Config_SOC_name, int32(x))
}

func (Config_SOC) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 6}
}

// Next Tag: 6
type Config_ODM int32

const (
	Config_ODM_UNSPECIFIED Config_ODM = 0
	Config_ODM_QUANTA      Config_ODM = 1
	Config_ODM_BITLAND     Config_ODM = 2
	Config_ODM_SAMSUNG     Config_ODM = 3
	Config_ODM_PEGATRON    Config_ODM = 4
	Config_ODM_COMPAL      Config_ODM = 5
)

var Config_ODM_name = map[int32]string{
	0: "ODM_UNSPECIFIED",
	1: "ODM_QUANTA",
	2: "ODM_BITLAND",
	3: "ODM_SAMSUNG",
	4: "ODM_PEGATRON",
	5: "ODM_COMPAL",
}

var Config_ODM_value = map[string]int32{
	"ODM_UNSPECIFIED": 0,
	"ODM_QUANTA":      1,
	"ODM_BITLAND":     2,
	"ODM_SAMSUNG":     3,
	"ODM_PEGATRON":    4,
	"ODM_COMPAL":      5,
}

func (x Config_ODM) String() string {
	return proto.EnumName(Config_ODM_name, int32(x))
}

func (Config_ODM) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 7}
}

type Config_OEM int32

const (
	Config_OEM_UNSPECIFIED Config_OEM = 0
	Config_OEM_ACER        Config_OEM = 1
	Config_OEM_DELL        Config_OEM = 2
	Config_OEM_SAMSUNG     Config_OEM = 3
	Config_OEM_HP          Config_OEM = 4
	Config_OEM_LENOVO      Config_OEM = 5
	Config_OEM_ASUS        Config_OEM = 6
	Config_OEM_NEC         Config_OEM = 7
)

var Config_OEM_name = map[int32]string{
	0: "OEM_UNSPECIFIED",
	1: "OEM_ACER",
	2: "OEM_DELL",
	3: "OEM_SAMSUNG",
	4: "OEM_HP",
	5: "OEM_LENOVO",
	6: "OEM_ASUS",
	7: "OEM_NEC",
}

var Config_OEM_value = map[string]int32{
	"OEM_UNSPECIFIED": 0,
	"OEM_ACER":        1,
	"OEM_DELL":        2,
	"OEM_SAMSUNG":     3,
	"OEM_HP":          4,
	"OEM_LENOVO":      5,
	"OEM_ASUS":        6,
	"OEM_NEC":         7,
}

func (x Config_OEM) String() string {
	return proto.EnumName(Config_OEM_name, int32(x))
}

func (Config_OEM) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 8}
}

type Config_Architecture int32

const (
	Config_ARCHITECTURE_UNDEFINED Config_Architecture = 0
	Config_X86                    Config_Architecture = 1
	Config_X86_64                 Config_Architecture = 2
	Config_ARM                    Config_Architecture = 3
	Config_ARM64                  Config_Architecture = 4
)

var Config_Architecture_name = map[int32]string{
	0: "ARCHITECTURE_UNDEFINED",
	1: "X86",
	2: "X86_64",
	3: "ARM",
	4: "ARM64",
}

var Config_Architecture_value = map[string]int32{
	"ARCHITECTURE_UNDEFINED": 0,
	"X86":                    1,
	"X86_64":                 2,
	"ARM":                    3,
	"ARM64":                  4,
}

func (x Config_Architecture) String() string {
	return proto.EnumName(Config_Architecture_name, int32(x))
}

func (Config_Architecture) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 9}
}

// Indicate the type of EC present on a device.
// Next tag: 3
type Config_EC int32

const (
	Config_EC_UNSPECIFIED Config_EC = 0
	Config_EC_CHROME      Config_EC = 1
	Config_EC_WILCO       Config_EC = 2
)

var Config_EC_name = map[int32]string{
	0: "EC_UNSPECIFIED",
	1: "EC_CHROME",
	2: "EC_WILCO",
}

var Config_EC_value = map[string]int32{
	"EC_UNSPECIFIED": 0,
	"EC_CHROME":      1,
	"EC_WILCO":       2,
}

func (x Config_EC) String() string {
	return proto.EnumName(Config_EC_name, int32(x))
}

func (Config_EC) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8272a55f8dc33811, []int{0, 10}
}

// Next tag: 22
type Config struct {
	// Required. Unique ID of the device config.
	Id         *ConfigId         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	FormFactor Config_FormFactor `protobuf:"varint,3,opt,name=form_factor,json=formFactor,proto3,enum=device.Config_FormFactor" json:"form_factor,omitempty"`
	// e.g: "haswell", "tegra",...
	GpuFamily string          `protobuf:"bytes,4,opt,name=gpu_family,json=gpuFamily,proto3" json:"gpu_family,omitempty"`
	Graphics  Config_Graphics `protobuf:"varint,5,opt,name=graphics,proto3,enum=device.Config_Graphics" json:"graphics,omitempty"`
	// If a hardware feature isn't specified, one can assume that it doesn't
	// exist on the device.
	HardwareFeatures []Config_HardwareFeature `protobuf:"varint,6,rep,packed,name=hardware_features,json=hardwareFeatures,proto3,enum=device.Config_HardwareFeature" json:"hardware_features,omitempty"`
	Power            Config_PowerSupply       `protobuf:"varint,8,opt,name=power,proto3,enum=device.Config_PowerSupply" json:"power,omitempty"`
	// Indicate the device's storage type.
	Storage                   Config_Storage             `protobuf:"varint,9,opt,name=storage,proto3,enum=device.Config_Storage" json:"storage,omitempty"`
	VideoAccelerationSupports []Config_VideoAcceleration `protobuf:"varint,10,rep,packed,name=video_acceleration_supports,json=videoAccelerationSupports,proto3,enum=device.Config_VideoAcceleration" json:"video_acceleration_supports,omitempty"`
	Soc                       Config_SOC                 `protobuf:"varint,11,opt,name=soc,proto3,enum=device.Config_SOC" json:"soc,omitempty"`
	// Full email address for TAMs responsible for device
	Tam []string `protobuf:"bytes,12,rep,name=tam,proto3" json:"tam,omitempty"`
	// Full email address for Google EEs responsible for device
	Ee []string `protobuf:"bytes,13,rep,name=ee,proto3" json:"ee,omitempty"`
	// ODM for device
	Odm Config_ODM `protobuf:"varint,14,opt,name=odm,proto3,enum=device.Config_ODM" json:"odm,omitempty"`
	// Group email address for this device's odm contact in buganizer (@google.com)
	OdmEmailGroup string `protobuf:"bytes,15,opt,name=odm_email_group,json=odmEmailGroup,proto3" json:"odm_email_group,omitempty"`
	// OEM for device
	Oem Config_OEM `protobuf:"varint,16,opt,name=oem,proto3,enum=device.Config_OEM" json:"oem,omitempty"`
	// Group email address for this device's oem contact in buganizer (@google.com)
	OemEmailGroup string `protobuf:"bytes,17,opt,name=oem_email_group,json=oemEmailGroup,proto3" json:"oem_email_group,omitempty"`
	// Group email address for this device's SoC contact in buganizer (@google.com)
	SocEmailGroup string `protobuf:"bytes,18,opt,name=soc_email_group,json=socEmailGroup,proto3" json:"soc_email_group,omitempty"`
	// A bit field used by firmware to make decisions. The definition of this
	// firmware configuration field is per firmware build. This does not have
	// 1st-class definitions for values in the top-level configuration proto since
	// each firmware build target can appropriate the bits within this 32-bit
	// field differently. Each firmware build can vary significantly in the
	// configuration space that needs customization.
	FirmwareConfiguration uint32              `protobuf:"varint,19,opt,name=firmware_configuration,json=firmwareConfiguration,proto3" json:"firmware_configuration,omitempty"`
	Cpu                   Config_Architecture `protobuf:"varint,20,opt,name=cpu,proto3,enum=device.Config_Architecture" json:"cpu,omitempty"`
	// If an EC is not specified, one can assume the device has no EC.
	Ec                   Config_EC `protobuf:"varint,21,opt,name=ec,proto3,enum=device.Config_EC" json:"ec,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

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

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

var xxx_messageInfo_Config proto.InternalMessageInfo

func (m *Config) GetId() *ConfigId {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Config) GetFormFactor() Config_FormFactor {
	if m != nil {
		return m.FormFactor
	}
	return Config_FORM_FACTOR_UNSPECIFIED
}

func (m *Config) GetGpuFamily() string {
	if m != nil {
		return m.GpuFamily
	}
	return ""
}

func (m *Config) GetGraphics() Config_Graphics {
	if m != nil {
		return m.Graphics
	}
	return Config_GRAPHICS_UNSPECIFIED
}

func (m *Config) GetHardwareFeatures() []Config_HardwareFeature {
	if m != nil {
		return m.HardwareFeatures
	}
	return nil
}

func (m *Config) GetPower() Config_PowerSupply {
	if m != nil {
		return m.Power
	}
	return Config_POWER_SUPPLY_UNSPECIFIED
}

func (m *Config) GetStorage() Config_Storage {
	if m != nil {
		return m.Storage
	}
	return Config_STORAGE_UNSPECIFIED
}

func (m *Config) GetVideoAccelerationSupports() []Config_VideoAcceleration {
	if m != nil {
		return m.VideoAccelerationSupports
	}
	return nil
}

func (m *Config) GetSoc() Config_SOC {
	if m != nil {
		return m.Soc
	}
	return Config_SOC_UNSPECIFIED
}

func (m *Config) GetTam() []string {
	if m != nil {
		return m.Tam
	}
	return nil
}

func (m *Config) GetEe() []string {
	if m != nil {
		return m.Ee
	}
	return nil
}

func (m *Config) GetOdm() Config_ODM {
	if m != nil {
		return m.Odm
	}
	return Config_ODM_UNSPECIFIED
}

func (m *Config) GetOdmEmailGroup() string {
	if m != nil {
		return m.OdmEmailGroup
	}
	return ""
}

func (m *Config) GetOem() Config_OEM {
	if m != nil {
		return m.Oem
	}
	return Config_OEM_UNSPECIFIED
}

func (m *Config) GetOemEmailGroup() string {
	if m != nil {
		return m.OemEmailGroup
	}
	return ""
}

func (m *Config) GetSocEmailGroup() string {
	if m != nil {
		return m.SocEmailGroup
	}
	return ""
}

func (m *Config) GetFirmwareConfiguration() uint32 {
	if m != nil {
		return m.FirmwareConfiguration
	}
	return 0
}

func (m *Config) GetCpu() Config_Architecture {
	if m != nil {
		return m.Cpu
	}
	return Config_ARCHITECTURE_UNDEFINED
}

func (m *Config) GetEc() Config_EC {
	if m != nil {
		return m.Ec
	}
	return Config_EC_UNSPECIFIED
}

// Message contains all ChromeOS device configs.
type AllConfigs struct {
	Configs              []*Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

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

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

var xxx_messageInfo_AllConfigs proto.InternalMessageInfo

func (m *AllConfigs) GetConfigs() []*Config {
	if m != nil {
		return m.Configs
	}
	return nil
}

func init() {
	proto.RegisterEnum("device.Config_FormFactor", Config_FormFactor_name, Config_FormFactor_value)
	proto.RegisterEnum("device.Config_Graphics", Config_Graphics_name, Config_Graphics_value)
	proto.RegisterEnum("device.Config_HardwareFeature", Config_HardwareFeature_name, Config_HardwareFeature_value)
	proto.RegisterEnum("device.Config_PowerSupply", Config_PowerSupply_name, Config_PowerSupply_value)
	proto.RegisterEnum("device.Config_Storage", Config_Storage_name, Config_Storage_value)
	proto.RegisterEnum("device.Config_VideoAcceleration", Config_VideoAcceleration_name, Config_VideoAcceleration_value)
	proto.RegisterEnum("device.Config_SOC", Config_SOC_name, Config_SOC_value)
	proto.RegisterEnum("device.Config_ODM", Config_ODM_name, Config_ODM_value)
	proto.RegisterEnum("device.Config_OEM", Config_OEM_name, Config_OEM_value)
	proto.RegisterEnum("device.Config_Architecture", Config_Architecture_name, Config_Architecture_value)
	proto.RegisterEnum("device.Config_EC", Config_EC_name, Config_EC_value)
	proto.RegisterType((*Config)(nil), "device.Config")
	proto.RegisterType((*AllConfigs)(nil), "device.AllConfigs")
}

func init() { proto.RegisterFile("device/config.proto", fileDescriptor_8272a55f8dc33811) }

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