diff --git a/go/dmi/hw_management_service.pb.go b/go/dmi/hw_management_service.pb.go
index 783cbac..efe6f32 100644
--- a/go/dmi/hw_management_service.pb.go
+++ b/go/dmi/hw_management_service.pb.go
@@ -488,6 +488,126 @@
 	return fileDescriptor_eae902e73066286d, []int{28, 0}
 }
 
+type DisableHWComponentResponse_Reason int32
+
+const (
+	DisableHWComponentResponse_UNDEFINED_REASON    DisableHWComponentResponse_Reason = 0
+	DisableHWComponentResponse_UNKNOWN_DEVICE      DisableHWComponentResponse_Reason = 1
+	DisableHWComponentResponse_UNKNOWN_COMPONENT   DisableHWComponentResponse_Reason = 2
+	DisableHWComponentResponse_INTERNAL_ERROR      DisableHWComponentResponse_Reason = 3
+	DisableHWComponentResponse_DEVICE_UNREACHABLE  DisableHWComponentResponse_Reason = 4
+	DisableHWComponentResponse_DISABLE_UNSUPPORTED DisableHWComponentResponse_Reason = 5
+	DisableHWComponentResponse_INVALID_PARAMS      DisableHWComponentResponse_Reason = 6
+)
+
+var DisableHWComponentResponse_Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "UNKNOWN_COMPONENT",
+	3: "INTERNAL_ERROR",
+	4: "DEVICE_UNREACHABLE",
+	5: "DISABLE_UNSUPPORTED",
+	6: "INVALID_PARAMS",
+}
+
+var DisableHWComponentResponse_Reason_value = map[string]int32{
+	"UNDEFINED_REASON":    0,
+	"UNKNOWN_DEVICE":      1,
+	"UNKNOWN_COMPONENT":   2,
+	"INTERNAL_ERROR":      3,
+	"DEVICE_UNREACHABLE":  4,
+	"DISABLE_UNSUPPORTED": 5,
+	"INVALID_PARAMS":      6,
+}
+
+func (x DisableHWComponentResponse_Reason) String() string {
+	return proto.EnumName(DisableHWComponentResponse_Reason_name, int32(x))
+}
+
+func (DisableHWComponentResponse_Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{30, 0}
+}
+
+type ResetHWComponentResponse_Reason int32
+
+const (
+	ResetHWComponentResponse_UNDEFINED_REASON   ResetHWComponentResponse_Reason = 0
+	ResetHWComponentResponse_UNKNOWN_DEVICE     ResetHWComponentResponse_Reason = 1
+	ResetHWComponentResponse_UNKNOWN_COMPONENT  ResetHWComponentResponse_Reason = 2
+	ResetHWComponentResponse_INTERNAL_ERROR     ResetHWComponentResponse_Reason = 3
+	ResetHWComponentResponse_DEVICE_UNREACHABLE ResetHWComponentResponse_Reason = 4
+	ResetHWComponentResponse_RESET_UNSUPPORTED  ResetHWComponentResponse_Reason = 5
+	ResetHWComponentResponse_INVALID_PARAMS     ResetHWComponentResponse_Reason = 6
+)
+
+var ResetHWComponentResponse_Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "UNKNOWN_COMPONENT",
+	3: "INTERNAL_ERROR",
+	4: "DEVICE_UNREACHABLE",
+	5: "RESET_UNSUPPORTED",
+	6: "INVALID_PARAMS",
+}
+
+var ResetHWComponentResponse_Reason_value = map[string]int32{
+	"UNDEFINED_REASON":   0,
+	"UNKNOWN_DEVICE":     1,
+	"UNKNOWN_COMPONENT":  2,
+	"INTERNAL_ERROR":     3,
+	"DEVICE_UNREACHABLE": 4,
+	"RESET_UNSUPPORTED":  5,
+	"INVALID_PARAMS":     6,
+}
+
+func (x ResetHWComponentResponse_Reason) String() string {
+	return proto.EnumName(ResetHWComponentResponse_Reason_name, int32(x))
+}
+
+func (ResetHWComponentResponse_Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{32, 0}
+}
+
+type EnableHWComponentResponse_Reason int32
+
+const (
+	EnableHWComponentResponse_UNDEFINED_REASON   EnableHWComponentResponse_Reason = 0
+	EnableHWComponentResponse_UNKNOWN_DEVICE     EnableHWComponentResponse_Reason = 1
+	EnableHWComponentResponse_UNKNOWN_COMPONENT  EnableHWComponentResponse_Reason = 2
+	EnableHWComponentResponse_INTERNAL_ERROR     EnableHWComponentResponse_Reason = 3
+	EnableHWComponentResponse_DEVICE_UNREACHABLE EnableHWComponentResponse_Reason = 4
+	EnableHWComponentResponse_ENABLE_UNSUPPORTED EnableHWComponentResponse_Reason = 5
+	EnableHWComponentResponse_INVALID_PARAMS     EnableHWComponentResponse_Reason = 6
+)
+
+var EnableHWComponentResponse_Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "UNKNOWN_COMPONENT",
+	3: "INTERNAL_ERROR",
+	4: "DEVICE_UNREACHABLE",
+	5: "ENABLE_UNSUPPORTED",
+	6: "INVALID_PARAMS",
+}
+
+var EnableHWComponentResponse_Reason_value = map[string]int32{
+	"UNDEFINED_REASON":   0,
+	"UNKNOWN_DEVICE":     1,
+	"UNKNOWN_COMPONENT":  2,
+	"INTERNAL_ERROR":     3,
+	"DEVICE_UNREACHABLE": 4,
+	"ENABLE_UNSUPPORTED": 5,
+	"INVALID_PARAMS":     6,
+}
+
+func (x EnableHWComponentResponse_Reason) String() string {
+	return proto.EnumName(EnableHWComponentResponse_Reason_name, int32(x))
+}
+
+func (EnableHWComponentResponse_Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{34, 0}
+}
+
 type PhysicalInventoryRequest struct {
 	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -2006,6 +2126,363 @@
 	return ""
 }
 
+// Request to disable a hardware component on a device.
+// At least one of component_name or component_uuid must be provided, along with device_uuid.
+type DisableHWComponentRequest struct {
+	// UUID of the device containing the component to disable (required)
+	DeviceUuid *Uuid `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	// UUID of the component to disable (optional, but either this or component_name must be set)
+	ComponentUuid *Uuid `protobuf:"bytes,2,opt,name=component_uuid,json=componentUuid,proto3" json:"component_uuid,omitempty"`
+	// Name of the component to disable (optional, but either this or component_uuid must be set)
+	ComponentName        string   `protobuf:"bytes,3,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisableHWComponentRequest) Reset()         { *m = DisableHWComponentRequest{} }
+func (m *DisableHWComponentRequest) String() string { return proto.CompactTextString(m) }
+func (*DisableHWComponentRequest) ProtoMessage()    {}
+func (*DisableHWComponentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{29}
+}
+
+func (m *DisableHWComponentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisableHWComponentRequest.Unmarshal(m, b)
+}
+func (m *DisableHWComponentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisableHWComponentRequest.Marshal(b, m, deterministic)
+}
+func (m *DisableHWComponentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisableHWComponentRequest.Merge(m, src)
+}
+func (m *DisableHWComponentRequest) XXX_Size() int {
+	return xxx_messageInfo_DisableHWComponentRequest.Size(m)
+}
+func (m *DisableHWComponentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisableHWComponentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisableHWComponentRequest proto.InternalMessageInfo
+
+func (m *DisableHWComponentRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *DisableHWComponentRequest) GetComponentUuid() *Uuid {
+	if m != nil {
+		return m.ComponentUuid
+	}
+	return nil
+}
+
+func (m *DisableHWComponentRequest) GetComponentName() string {
+	if m != nil {
+		return m.ComponentName
+	}
+	return ""
+}
+
+// Response for DisableHWComponent RPC.
+type DisableHWComponentResponse struct {
+	// Indicates whether the operation was successful or not.
+	Status Status `protobuf:"varint,1,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	// Reason for failure, if any
+	Reason DisableHWComponentResponse_Reason `protobuf:"varint,2,opt,name=reason,proto3,enum=dmi.DisableHWComponentResponse_Reason" json:"reason,omitempty"`
+	// Human-readable details for logging or display
+	ReasonDetail         string   `protobuf:"bytes,3,opt,name=reason_detail,json=reasonDetail,proto3" json:"reason_detail,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisableHWComponentResponse) Reset()         { *m = DisableHWComponentResponse{} }
+func (m *DisableHWComponentResponse) String() string { return proto.CompactTextString(m) }
+func (*DisableHWComponentResponse) ProtoMessage()    {}
+func (*DisableHWComponentResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{30}
+}
+
+func (m *DisableHWComponentResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisableHWComponentResponse.Unmarshal(m, b)
+}
+func (m *DisableHWComponentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisableHWComponentResponse.Marshal(b, m, deterministic)
+}
+func (m *DisableHWComponentResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisableHWComponentResponse.Merge(m, src)
+}
+func (m *DisableHWComponentResponse) XXX_Size() int {
+	return xxx_messageInfo_DisableHWComponentResponse.Size(m)
+}
+func (m *DisableHWComponentResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisableHWComponentResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisableHWComponentResponse proto.InternalMessageInfo
+
+func (m *DisableHWComponentResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *DisableHWComponentResponse) GetReason() DisableHWComponentResponse_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return DisableHWComponentResponse_UNDEFINED_REASON
+}
+
+func (m *DisableHWComponentResponse) GetReasonDetail() string {
+	if m != nil {
+		return m.ReasonDetail
+	}
+	return ""
+}
+
+// Request to reset a hardware component on a device.
+// At least one of component_name or component_uuid must be provided, along with device_uuid.
+type ResetHWComponentRequest struct {
+	// UUID of the device containing the component to reset (required)
+	DeviceUuid *Uuid `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	// UUID of the component to reset (optional, but either this or component_name must be set)
+	ComponentUuid *Uuid `protobuf:"bytes,2,opt,name=component_uuid,json=componentUuid,proto3" json:"component_uuid,omitempty"`
+	// Name of the component to reset (optional, but either this or component_uuid must be set)
+	ComponentName        string   `protobuf:"bytes,3,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResetHWComponentRequest) Reset()         { *m = ResetHWComponentRequest{} }
+func (m *ResetHWComponentRequest) String() string { return proto.CompactTextString(m) }
+func (*ResetHWComponentRequest) ProtoMessage()    {}
+func (*ResetHWComponentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{31}
+}
+
+func (m *ResetHWComponentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResetHWComponentRequest.Unmarshal(m, b)
+}
+func (m *ResetHWComponentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResetHWComponentRequest.Marshal(b, m, deterministic)
+}
+func (m *ResetHWComponentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResetHWComponentRequest.Merge(m, src)
+}
+func (m *ResetHWComponentRequest) XXX_Size() int {
+	return xxx_messageInfo_ResetHWComponentRequest.Size(m)
+}
+func (m *ResetHWComponentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResetHWComponentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResetHWComponentRequest proto.InternalMessageInfo
+
+func (m *ResetHWComponentRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *ResetHWComponentRequest) GetComponentUuid() *Uuid {
+	if m != nil {
+		return m.ComponentUuid
+	}
+	return nil
+}
+
+func (m *ResetHWComponentRequest) GetComponentName() string {
+	if m != nil {
+		return m.ComponentName
+	}
+	return ""
+}
+
+// Response for ResetHWComponent RPC.
+type ResetHWComponentResponse struct {
+	// Indicates whether the operation was successful or not.
+	Status Status `protobuf:"varint,1,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	// Reason for failure, if any
+	Reason ResetHWComponentResponse_Reason `protobuf:"varint,2,opt,name=reason,proto3,enum=dmi.ResetHWComponentResponse_Reason" json:"reason,omitempty"`
+	// Human-readable details for logging or display
+	ReasonDetail         string   `protobuf:"bytes,3,opt,name=reason_detail,json=reasonDetail,proto3" json:"reason_detail,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResetHWComponentResponse) Reset()         { *m = ResetHWComponentResponse{} }
+func (m *ResetHWComponentResponse) String() string { return proto.CompactTextString(m) }
+func (*ResetHWComponentResponse) ProtoMessage()    {}
+func (*ResetHWComponentResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{32}
+}
+
+func (m *ResetHWComponentResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResetHWComponentResponse.Unmarshal(m, b)
+}
+func (m *ResetHWComponentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResetHWComponentResponse.Marshal(b, m, deterministic)
+}
+func (m *ResetHWComponentResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResetHWComponentResponse.Merge(m, src)
+}
+func (m *ResetHWComponentResponse) XXX_Size() int {
+	return xxx_messageInfo_ResetHWComponentResponse.Size(m)
+}
+func (m *ResetHWComponentResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResetHWComponentResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResetHWComponentResponse proto.InternalMessageInfo
+
+func (m *ResetHWComponentResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *ResetHWComponentResponse) GetReason() ResetHWComponentResponse_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return ResetHWComponentResponse_UNDEFINED_REASON
+}
+
+func (m *ResetHWComponentResponse) GetReasonDetail() string {
+	if m != nil {
+		return m.ReasonDetail
+	}
+	return ""
+}
+
+// Request to enable a hardware component on a device.
+// At least one of component_name or component_uuid must be provided, along with device_uuid.
+type EnableHWComponentRequest struct {
+	// UUID of the device containing the component to enable (required)
+	DeviceUuid *Uuid `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	// UUID of the component to enable (optional, but either this or component_name must be set)
+	ComponentUuid *Uuid `protobuf:"bytes,2,opt,name=component_uuid,json=componentUuid,proto3" json:"component_uuid,omitempty"`
+	// Name of the component to enable (optional, but either this or component_uuid must be set)
+	ComponentName        string   `protobuf:"bytes,3,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnableHWComponentRequest) Reset()         { *m = EnableHWComponentRequest{} }
+func (m *EnableHWComponentRequest) String() string { return proto.CompactTextString(m) }
+func (*EnableHWComponentRequest) ProtoMessage()    {}
+func (*EnableHWComponentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{33}
+}
+
+func (m *EnableHWComponentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnableHWComponentRequest.Unmarshal(m, b)
+}
+func (m *EnableHWComponentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnableHWComponentRequest.Marshal(b, m, deterministic)
+}
+func (m *EnableHWComponentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnableHWComponentRequest.Merge(m, src)
+}
+func (m *EnableHWComponentRequest) XXX_Size() int {
+	return xxx_messageInfo_EnableHWComponentRequest.Size(m)
+}
+func (m *EnableHWComponentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnableHWComponentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnableHWComponentRequest proto.InternalMessageInfo
+
+func (m *EnableHWComponentRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *EnableHWComponentRequest) GetComponentUuid() *Uuid {
+	if m != nil {
+		return m.ComponentUuid
+	}
+	return nil
+}
+
+func (m *EnableHWComponentRequest) GetComponentName() string {
+	if m != nil {
+		return m.ComponentName
+	}
+	return ""
+}
+
+// Response for EnableHWComponent RPC.
+type EnableHWComponentResponse struct {
+	// Indicates whether the operation was successful or not.
+	Status Status `protobuf:"varint,1,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	// Reason for failure, if any
+	Reason EnableHWComponentResponse_Reason `protobuf:"varint,2,opt,name=reason,proto3,enum=dmi.EnableHWComponentResponse_Reason" json:"reason,omitempty"`
+	// Human-readable details for logging or display
+	ReasonDetail         string   `protobuf:"bytes,3,opt,name=reason_detail,json=reasonDetail,proto3" json:"reason_detail,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnableHWComponentResponse) Reset()         { *m = EnableHWComponentResponse{} }
+func (m *EnableHWComponentResponse) String() string { return proto.CompactTextString(m) }
+func (*EnableHWComponentResponse) ProtoMessage()    {}
+func (*EnableHWComponentResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{34}
+}
+
+func (m *EnableHWComponentResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnableHWComponentResponse.Unmarshal(m, b)
+}
+func (m *EnableHWComponentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnableHWComponentResponse.Marshal(b, m, deterministic)
+}
+func (m *EnableHWComponentResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnableHWComponentResponse.Merge(m, src)
+}
+func (m *EnableHWComponentResponse) XXX_Size() int {
+	return xxx_messageInfo_EnableHWComponentResponse.Size(m)
+}
+func (m *EnableHWComponentResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnableHWComponentResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnableHWComponentResponse proto.InternalMessageInfo
+
+func (m *EnableHWComponentResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *EnableHWComponentResponse) GetReason() EnableHWComponentResponse_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return EnableHWComponentResponse_UNDEFINED_REASON
+}
+
+func (m *EnableHWComponentResponse) GetReasonDetail() string {
+	if m != nil {
+		return m.ReasonDetail
+	}
+	return ""
+}
+
 func init() {
 	proto.RegisterEnum("dmi.PhysicalInventoryResponse_Reason", PhysicalInventoryResponse_Reason_name, PhysicalInventoryResponse_Reason_value)
 	proto.RegisterEnum("dmi.HWComponentInfoGetResponse_Reason", HWComponentInfoGetResponse_Reason_name, HWComponentInfoGetResponse_Reason_value)
@@ -2021,6 +2498,9 @@
 	proto.RegisterEnum("dmi.SetDmLogLevelResponse_Reason", SetDmLogLevelResponse_Reason_name, SetDmLogLevelResponse_Reason_value)
 	proto.RegisterEnum("dmi.GetDmLogLevelResponse_Reason", GetDmLogLevelResponse_Reason_name, GetDmLogLevelResponse_Reason_value)
 	proto.RegisterEnum("dmi.RebootDeviceResponse_Reason", RebootDeviceResponse_Reason_name, RebootDeviceResponse_Reason_value)
+	proto.RegisterEnum("dmi.DisableHWComponentResponse_Reason", DisableHWComponentResponse_Reason_name, DisableHWComponentResponse_Reason_value)
+	proto.RegisterEnum("dmi.ResetHWComponentResponse_Reason", ResetHWComponentResponse_Reason_name, ResetHWComponentResponse_Reason_value)
+	proto.RegisterEnum("dmi.EnableHWComponentResponse_Reason", EnableHWComponentResponse_Reason_name, EnableHWComponentResponse_Reason_value)
 	proto.RegisterType((*PhysicalInventoryRequest)(nil), "dmi.PhysicalInventoryRequest")
 	proto.RegisterType((*PhysicalInventoryResponse)(nil), "dmi.PhysicalInventoryResponse")
 	proto.RegisterType((*HWComponentInfoGetRequest)(nil), "dmi.HWComponentInfoGetRequest")
@@ -2050,120 +2530,137 @@
 	proto.RegisterType((*Heartbeat)(nil), "dmi.Heartbeat")
 	proto.RegisterType((*RebootDeviceRequest)(nil), "dmi.RebootDeviceRequest")
 	proto.RegisterType((*RebootDeviceResponse)(nil), "dmi.RebootDeviceResponse")
+	proto.RegisterType((*DisableHWComponentRequest)(nil), "dmi.DisableHWComponentRequest")
+	proto.RegisterType((*DisableHWComponentResponse)(nil), "dmi.DisableHWComponentResponse")
+	proto.RegisterType((*ResetHWComponentRequest)(nil), "dmi.ResetHWComponentRequest")
+	proto.RegisterType((*ResetHWComponentResponse)(nil), "dmi.ResetHWComponentResponse")
+	proto.RegisterType((*EnableHWComponentRequest)(nil), "dmi.EnableHWComponentRequest")
+	proto.RegisterType((*EnableHWComponentResponse)(nil), "dmi.EnableHWComponentResponse")
 }
 
 func init() { proto.RegisterFile("dmi/hw_management_service.proto", fileDescriptor_eae902e73066286d) }
 
 var fileDescriptor_eae902e73066286d = []byte{
-	// 1726 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0xe3, 0xc6,
-	0x15, 0x2f, 0x29, 0xdb, 0x1b, 0x3d, 0xef, 0x7a, 0xe5, 0xf1, 0xda, 0x91, 0xb8, 0x88, 0xed, 0xe5,
-	0x22, 0xcd, 0xa6, 0x4d, 0x24, 0x43, 0x7b, 0x68, 0xb6, 0xe9, 0x17, 0x2d, 0xd1, 0x14, 0x13, 0x89,
-	0x14, 0x86, 0xd2, 0x1a, 0x5b, 0x14, 0x25, 0x68, 0x69, 0x2c, 0x13, 0x15, 0x49, 0x55, 0xa4, 0x1c,
-	0xf8, 0xcf, 0xe8, 0xa1, 0x87, 0x1e, 0x5a, 0xf4, 0x5f, 0xe8, 0x35, 0x28, 0x7a, 0xed, 0xa1, 0xd7,
-	0x1e, 0x0b, 0x14, 0x3d, 0xf5, 0xdc, 0x02, 0xbd, 0x17, 0xe4, 0x90, 0xfa, 0xa0, 0x48, 0x7d, 0x79,
-	0x83, 0xec, 0x4d, 0x9c, 0x79, 0xf3, 0xe3, 0xf0, 0xfd, 0xde, 0xfc, 0xe6, 0xbd, 0x27, 0x38, 0xe9,
-	0x5a, 0x66, 0xe9, 0xe6, 0x2b, 0xdd, 0x32, 0x6c, 0xa3, 0x47, 0x2c, 0x62, 0x7b, 0xba, 0x4b, 0x86,
-	0xb7, 0x66, 0x87, 0x14, 0x07, 0x43, 0xc7, 0x73, 0x50, 0xa6, 0x6b, 0x99, 0xdc, 0xbe, 0x6f, 0xd5,
-	0x71, 0x2c, 0xcb, 0xb1, 0x5d, 0x3a, 0xce, 0x3d, 0xa4, 0x0b, 0xc3, 0xa7, 0xa7, 0x3d, 0xc7, 0xe9,
-	0xf5, 0x49, 0x29, 0x78, 0xba, 0x1a, 0x5d, 0x97, 0x88, 0x35, 0xf0, 0xee, 0xe8, 0x24, 0x7f, 0x01,
-	0xf9, 0xe6, 0xcd, 0x9d, 0x6b, 0x76, 0x8c, 0xbe, 0x6c, 0xdf, 0x12, 0xdb, 0x73, 0x86, 0x77, 0x98,
-	0xfc, 0x7a, 0x44, 0x5c, 0x0f, 0x7d, 0x0f, 0x76, 0xbb, 0xc4, 0x7f, 0x9d, 0x3e, 0x1a, 0x99, 0xdd,
-	0x3c, 0x73, 0xca, 0xbc, 0xd8, 0x2d, 0x67, 0x8b, 0x5d, 0xcb, 0x2c, 0xb6, 0x47, 0x66, 0x17, 0x03,
-	0x9d, 0xf5, 0x7f, 0xf3, 0x7f, 0x62, 0xa1, 0x90, 0x00, 0xe4, 0x0e, 0x1c, 0xdb, 0x25, 0xe8, 0x39,
-	0xec, 0xb8, 0x9e, 0xe1, 0x8d, 0xdc, 0x00, 0x64, 0xaf, 0xbc, 0x1b, 0x80, 0x68, 0xc1, 0x10, 0x0e,
-	0xa7, 0xd0, 0x8f, 0x61, 0x67, 0x48, 0x0c, 0xd7, 0xb1, 0xf3, 0x6c, 0x60, 0xf4, 0x61, 0x60, 0x94,
-	0x0a, 0x5a, 0xc4, 0x81, 0x31, 0x0e, 0x17, 0xa1, 0xef, 0x43, 0xd6, 0x8c, 0x6c, 0xf2, 0x99, 0x60,
-	0xaf, 0x8f, 0x02, 0x84, 0x9a, 0x31, 0xec, 0x7e, 0x65, 0x0c, 0x09, 0x9e, 0xcc, 0xa3, 0xe7, 0xf0,
-	0x88, 0x2e, 0xd3, 0xbb, 0xc4, 0x33, 0xcc, 0x7e, 0x7e, 0xeb, 0x94, 0x79, 0x91, 0xc5, 0x0f, 0xe9,
-	0x60, 0x35, 0x18, 0xe3, 0x7f, 0x09, 0x3b, 0xf4, 0x1d, 0xe8, 0x09, 0xe4, 0xda, 0x4a, 0x55, 0xbc,
-	0x90, 0x15, 0xb1, 0xaa, 0x63, 0x51, 0xd0, 0x54, 0x25, 0xf7, 0x1d, 0x84, 0x60, 0xaf, 0xad, 0x7c,
-	0xa9, 0xa8, 0x97, 0x8a, 0x5e, 0x15, 0x5f, 0xcb, 0x15, 0x31, 0xc7, 0xf8, 0x63, 0xb2, 0xd2, 0x12,
-	0xb1, 0x22, 0xd4, 0x75, 0x11, 0x63, 0x15, 0xe7, 0x58, 0x74, 0x04, 0x88, 0xce, 0xeb, 0x6d, 0x05,
-	0x8b, 0x42, 0xa5, 0x26, 0x9c, 0xd7, 0xc5, 0x5c, 0x86, 0xff, 0x23, 0x03, 0x85, 0xda, 0x65, 0xc5,
-	0xb1, 0x06, 0x8e, 0x4d, 0x6c, 0x4f, 0xb6, 0xaf, 0x1d, 0x89, 0x78, 0x1b, 0x78, 0x1f, 0x9d, 0xc1,
-	0x5e, 0x27, 0x82, 0xa1, 0xe6, 0x6c, 0xdc, 0xfc, 0xd1, 0xd8, 0x20, 0x58, 0xf1, 0xe1, 0xf4, 0x0a,
-	0xdb, 0xb0, 0x48, 0xe0, 0xb2, 0xec, 0x94, 0x99, 0x62, 0x58, 0x84, 0xff, 0x1b, 0x0b, 0x5c, 0xd2,
-	0x16, 0xd7, 0xe1, 0xf5, 0x27, 0x31, 0x5e, 0xbf, 0x4b, 0x59, 0x49, 0x45, 0x8d, 0x13, 0xfb, 0x09,
-	0x64, 0xc7, 0x9b, 0x0a, 0x89, 0xdd, 0x0b, 0x20, 0xc6, 0x00, 0x78, 0x62, 0xb0, 0x1a, 0xb3, 0xa3,
-	0x0d, 0x98, 0x3d, 0x84, 0xfd, 0x68, 0xac, 0xa2, 0x36, 0x9a, 0xaa, 0x22, 0x2a, 0xad, 0x1c, 0x9b,
-	0x40, 0x78, 0x26, 0x85, 0xf0, 0x2d, 0xfe, 0xef, 0xf3, 0x84, 0x6b, 0xef, 0x16, 0xe1, 0xa8, 0x0c,
-	0x0f, 0x3a, 0x37, 0x86, 0xdd, 0x23, 0x6e, 0xe0, 0xb8, 0xdd, 0x72, 0x3e, 0x40, 0x6c, 0x38, 0x5d,
-	0xf3, 0xda, 0x34, 0xae, 0xfa, 0x64, 0xe2, 0xf4, 0xc8, 0x90, 0xff, 0xeb, 0x7c, 0x90, 0x68, 0xdf,
-	0x48, 0x90, 0x68, 0xe9, 0x41, 0x32, 0x47, 0x7b, 0x26, 0x81, 0xf6, 0x3f, 0x30, 0x6f, 0x99, 0xf7,
-	0xd7, 0x42, 0x5d, 0xae, 0xea, 0x4d, 0x01, 0x0b, 0x0d, 0x2d, 0x97, 0x49, 0x88, 0x85, 0xad, 0x94,
-	0x58, 0xd8, 0x46, 0x07, 0xf0, 0x58, 0x13, 0x5b, 0x7a, 0x5b, 0xd1, 0xda, 0xcd, 0xa6, 0x8a, 0x5b,
-	0x62, 0x35, 0xb7, 0xc3, 0xff, 0x26, 0x03, 0x4f, 0x35, 0xcf, 0x18, 0x7a, 0x0d, 0x5f, 0xf2, 0x4d,
-	0xbb, 0x57, 0x0d, 0x28, 0x5f, 0xcf, 0x95, 0x3f, 0x8d, 0xb9, 0xf2, 0xa3, 0xc8, 0x28, 0x0d, 0x36,
-	0xee, 0xcb, 0x58, 0x20, 0x66, 0x16, 0x05, 0xe2, 0x4a, 0xc7, 0xed, 0xeb, 0x65, 0x7e, 0xe7, 0xe0,
-	0x28, 0x74, 0x92, 0x50, 0xc7, 0xa2, 0x50, 0x7d, 0xa3, 0x37, 0x04, 0x45, 0x90, 0xc4, 0x6a, 0x8e,
-	0x41, 0xcf, 0xe0, 0x03, 0xb5, 0x29, 0x62, 0xa1, 0x25, 0xab, 0xca, 0x78, 0x5a, 0x56, 0xf4, 0x26,
-	0x56, 0x25, 0x2c, 0x6a, 0xda, 0x1a, 0x5c, 0x70, 0x70, 0x24, 0xb4, 0x5b, 0x35, 0x51, 0x69, 0xc9,
-	0x15, 0x8a, 0x77, 0x21, 0xc8, 0xf5, 0x36, 0xf6, 0xf9, 0x78, 0x1f, 0x0e, 0x64, 0xc5, 0x27, 0x58,
-	0x68, 0xc9, 0xe7, 0x75, 0x31, 0xe2, 0x7f, 0x87, 0x2f, 0x41, 0x41, 0xf3, 0x9c, 0x41, 0xdc, 0x75,
-	0xf4, 0xcc, 0x22, 0xd8, 0x0a, 0xce, 0x12, 0x13, 0x7c, 0x75, 0xf0, 0x9b, 0xff, 0x2f, 0x03, 0x5c,
-	0xd2, 0x8a, 0xfb, 0x1f, 0x87, 0x74, 0xd4, 0x8d, 0x8e, 0xc3, 0x17, 0x1b, 0x9c, 0x86, 0xe4, 0x70,
-	0x66, 0x79, 0x0b, 0xf6, 0x83, 0x9d, 0x91, 0x2e, 0xdd, 0x98, 0x7f, 0x5c, 0xd1, 0x27, 0xb0, 0x65,
-	0xda, 0xd7, 0x4e, 0x28, 0x65, 0xe9, 0x4a, 0x12, 0x58, 0xc5, 0xc3, 0x8e, 0x5d, 0x94, 0x6e, 0xfc,
-	0x93, 0x81, 0xa3, 0x99, 0xf7, 0xb9, 0xeb, 0xf9, 0xf7, 0x87, 0x31, 0xff, 0xf2, 0x74, 0x6f, 0x89,
-	0x88, 0x71, 0xdf, 0x9e, 0xc1, 0x03, 0xba, 0x13, 0x37, 0x9f, 0x39, 0xcd, 0xbc, 0xd8, 0x2d, 0x1f,
-	0xcd, 0x2f, 0xf6, 0x3f, 0x1f, 0x47, 0x66, 0x7c, 0x79, 0xb9, 0xa3, 0x63, 0xb1, 0xca, 0xf0, 0xbf,
-	0x67, 0xa0, 0xa0, 0x11, 0xaf, 0xee, 0xf4, 0x7c, 0xb6, 0x45, 0xbb, 0x3b, 0x70, 0x4c, 0x7b, 0xa3,
-	0xbb, 0xe2, 0x63, 0xc8, 0xf5, 0x29, 0x8a, 0x4e, 0x42, 0x98, 0xe0, 0xab, 0xb3, 0xf8, 0x71, 0x7f,
-	0x16, 0x7d, 0xda, 0x34, 0x48, 0x0f, 0x3b, 0x4e, 0x14, 0x39, 0x91, 0x69, 0x33, 0x1c, 0xe6, 0xff,
-	0xc5, 0x06, 0xfb, 0xc3, 0xc4, 0x72, 0x3c, 0x32, 0xd9, 0xde, 0xfd, 0x13, 0xbe, 0x54, 0xd0, 0x8d,
-	0x62, 0xfc, 0x6b, 0xe6, 0x2d, 0x25, 0x71, 0x1c, 0x1c, 0xd5, 0x55, 0x49, 0x92, 0x15, 0x49, 0x17,
-	0x95, 0x6a, 0x53, 0x95, 0x95, 0xd6, 0xf8, 0xbe, 0x7f, 0x0e, 0x27, 0x73, 0x73, 0x4d, 0xac, 0xb6,
-	0xd4, 0x8a, 0x3a, 0x11, 0x9f, 0x02, 0x1c, 0x36, 0x34, 0xe9, 0xbc, 0xad, 0xc5, 0xd7, 0x6f, 0xa7,
-	0x1c, 0xaa, 0x1d, 0xfe, 0x1f, 0x2c, 0x70, 0x52, 0x42, 0x0c, 0xdc, 0x5f, 0x49, 0xd2, 0x51, 0xe3,
-	0x5e, 0x4e, 0x8a, 0x9e, 0xcc, 0xea, 0xd1, 0xb3, 0x95, 0x18, 0x3d, 0xf3, 0xdc, 0x6d, 0x7f, 0x0b,
-	0xf9, 0x77, 0x05, 0xf2, 0x1a, 0xf1, 0x1a, 0x6e, 0xef, 0x7c, 0xe4, 0xc6, 0x0f, 0xd8, 0x47, 0xf0,
-	0xd8, 0x72, 0x7b, 0x57, 0x23, 0x77, 0xf2, 0xd5, 0x54, 0xe3, 0xf7, 0xe8, 0x70, 0x64, 0xcf, 0xff,
-	0x8e, 0x85, 0x82, 0x34, 0x8f, 0x72, 0xff, 0x73, 0x90, 0x0a, 0x1a, 0x67, 0x28, 0x61, 0xab, 0x99,
-	0xa4, 0xad, 0xae, 0x76, 0x57, 0x7f, 0xb1, 0xbe, 0x56, 0xa5, 0x5e, 0x0a, 0x6f, 0x20, 0x27, 0xda,
-	0x9e, 0xe9, 0x99, 0xc4, 0xad, 0x3b, 0xbd, 0x3a, 0xb9, 0x25, 0x7d, 0xf4, 0x31, 0xbc, 0xd7, 0x0f,
-	0x7f, 0x87, 0x3e, 0xa1, 0x55, 0x5a, 0x64, 0x80, 0xc7, 0xd3, 0x88, 0x83, 0xf7, 0x48, 0xb8, 0x3c,
-	0xcf, 0x9e, 0x66, 0x5e, 0x64, 0xf1, 0xf8, 0x99, 0x1f, 0x01, 0xa2, 0xea, 0x48, 0x17, 0x6d, 0x20,
-	0x8b, 0x2f, 0x21, 0xdb, 0xf7, 0xeb, 0xe2, 0x5b, 0xd2, 0xa7, 0xf0, 0xbb, 0xe5, 0xc3, 0xc0, 0x32,
-	0xbe, 0x65, 0x3c, 0xb1, 0xe3, 0xff, 0xcc, 0xc2, 0xc1, 0xcc, 0x7b, 0x43, 0x9e, 0xd7, 0x79, 0xf1,
-	0x24, 0x26, 0xd8, 0xf4, 0x98, 0xf8, 0xc1, 0x38, 0x26, 0x32, 0x81, 0xd1, 0x49, 0xa4, 0x8d, 0xf1,
-	0x57, 0x2f, 0x55, 0xc5, 0x24, 0x92, 0x6f, 0xdf, 0xde, 0xc9, 0x8a, 0xec, 0xea, 0xaa, 0x2f, 0x7e,
-	0x2d, 0xb9, 0xf5, 0x66, 0x41, 0x01, 0xf4, 0x0b, 0x40, 0xd2, 0xfd, 0x58, 0x5b, 0x14, 0x13, 0xff,
-	0x61, 0xe1, 0x40, 0xba, 0x27, 0x39, 0x34, 0x2a, 0xea, 0x2b, 0x46, 0x05, 0xb5, 0x9b, 0x62, 0x34,
-	0xb3, 0x0a, 0xa3, 0x5b, 0x53, 0x8c, 0x4a, 0x1b, 0x30, 0xba, 0xfd, 0x0e, 0x31, 0x5a, 0x1b, 0xdf,
-	0x50, 0x7e, 0x4a, 0x17, 0x39, 0x69, 0x93, 0x0e, 0xd2, 0xe7, 0xf0, 0x44, 0x23, 0x5e, 0xd5, 0x8a,
-	0x47, 0xc7, 0x73, 0xd8, 0xee, 0xa7, 0xab, 0x05, 0x9d, 0xe3, 0xff, 0xcd, 0xc0, 0x61, 0x6c, 0xf5,
-	0x3a, 0x0a, 0xfc, 0x2a, 0xa6, 0xc0, 0xcf, 0xa2, 0xd3, 0x36, 0x0f, 0xb8, 0x51, 0x16, 0x22, 0x6f,
-	0x20, 0xaa, 0x53, 0x75, 0xa7, 0xcf, 0x44, 0x5d, 0x7c, 0x2d, 0xd6, 0x73, 0x2c, 0x7f, 0x04, 0x4f,
-	0xa4, 0x04, 0x37, 0xf1, 0xff, 0x63, 0xe0, 0x50, 0x4a, 0xf1, 0xc0, 0x72, 0x07, 0xae, 0x26, 0x4a,
-	0xaf, 0x62, 0xa2, 0xf4, 0x2c, 0x0a, 0xe1, 0x0d, 0xdc, 0x94, 0x24, 0x4b, 0x9b, 0xe4, 0xc9, 0x3f,
-	0x82, 0x6c, 0x8d, 0x18, 0x43, 0xef, 0x8a, 0x18, 0x1e, 0x2a, 0xc1, 0xc1, 0x4d, 0xf4, 0xa0, 0xbb,
-	0x66, 0xcf, 0x36, 0xbc, 0xd1, 0x90, 0x56, 0x67, 0x0f, 0x30, 0x1a, 0x4f, 0x69, 0xd1, 0x0c, 0x2f,
-	0xc0, 0x01, 0x26, 0x57, 0x8e, 0xe3, 0xcd, 0x96, 0x75, 0xeb, 0xc4, 0xed, 0x6f, 0x59, 0x78, 0x32,
-	0x8b, 0x31, 0x17, 0x79, 0x0b, 0x54, 0xe1, 0xb3, 0x98, 0x2a, 0x9c, 0x06, 0x46, 0x49, 0x78, 0x1b,
-	0xc9, 0xc2, 0xdd, 0x37, 0x9b, 0x42, 0xf9, 0x49, 0x6d, 0x38, 0x2e, 0x2b, 0xfa, 0x25, 0x56, 0x15,
-	0x49, 0xd7, 0x5a, 0x42, 0x4b, 0xcc, 0x6d, 0x95, 0xff, 0x02, 0x50, 0x50, 0x0c, 0xcf, 0xbc, 0x25,
-	0xb5, 0xcb, 0xc6, 0xb8, 0x83, 0xad, 0xd1, 0x06, 0x36, 0xd2, 0xe0, 0x20, 0xa1, 0x23, 0x81, 0x52,
-	0x6b, 0x44, 0xee, 0x74, 0x59, 0x17, 0xe3, 0x8c, 0x41, 0x6d, 0x40, 0xf3, 0x25, 0x32, 0x3a, 0x4e,
-	0xad, 0x9d, 0x03, 0xb2, 0xb9, 0x93, 0x25, 0xb5, 0x35, 0xaa, 0xc1, 0xbe, 0x9f, 0x8c, 0xcd, 0x14,
-	0x87, 0xe8, 0xa8, 0x48, 0xdb, 0xea, 0xc5, 0xa8, 0xad, 0x5e, 0x14, 0xad, 0x81, 0x77, 0xc7, 0x3d,
-	0x5d, 0x50, 0x49, 0xa2, 0xcb, 0xe0, 0xf0, 0xce, 0xb5, 0xb4, 0xd1, 0x07, 0x69, 0xad, 0x6e, 0xba,
-	0xc3, 0xe3, 0xc5, 0x9d, 0xf0, 0x33, 0x06, 0x5d, 0x06, 0x17, 0x6b, 0xac, 0x5d, 0x16, 0x7e, 0x79,
-	0x6a, 0x8b, 0x39, 0xfc, 0xf2, 0xf4, 0x4e, 0x6c, 0xe8, 0xd2, 0x15, 0x81, 0xb5, 0x25, 0xc0, 0xd3,
-	0x3d, 0xc1, 0x56, 0x94, 0xbe, 0xcd, 0x14, 0x10, 0xc7, 0x53, 0x49, 0x4e, 0x42, 0xd5, 0xcb, 0x1d,
-	0x2f, 0x2e, 0x10, 0xd1, 0x45, 0x94, 0x5e, 0xcc, 0xa0, 0x3e, 0x9e, 0xf9, 0x17, 0x40, 0xae, 0x72,
-	0x27, 0x4b, 0x4a, 0x20, 0x84, 0x61, 0x7f, 0xae, 0x30, 0x08, 0x39, 0x4a, 0x2b, 0x18, 0x96, 0xee,
-	0xed, 0x4b, 0x1a, 0x44, 0xb3, 0x98, 0x69, 0x41, 0x74, 0xbc, 0xb8, 0x02, 0x40, 0xcd, 0x28, 0xd1,
-	0x99, 0xb9, 0x75, 0xd1, 0xcc, 0x87, 0x25, 0xdc, 0xc7, 0x5c, 0x3e, 0x2d, 0xe7, 0x40, 0x3f, 0x83,
-	0xdd, 0xa9, 0xe4, 0x12, 0xbd, 0x3f, 0x9f, 0x6e, 0x4e, 0x23, 0x68, 0xc9, 0x08, 0xd2, 0x1c, 0x82,
-	0x94, 0x86, 0x90, 0xb4, 0x87, 0xcf, 0x60, 0x6f, 0x2c, 0xe5, 0x95, 0x1b, 0xd2, 0xf9, 0x55, 0xaa,
-	0x7f, 0x68, 0xff, 0x7f, 0xa2, 0xfb, 0x15, 0x78, 0x38, 0x2d, 0x99, 0xa1, 0x8c, 0x24, 0x28, 0x3b,
-	0x57, 0x48, 0xd5, 0x57, 0x74, 0x01, 0x8f, 0x66, 0x6e, 0x7c, 0x54, 0x48, 0xca, 0x02, 0x28, 0x0c,
-	0x97, 0x9e, 0x20, 0xf8, 0x38, 0x52, 0x02, 0x8e, 0x94, 0x8e, 0x93, 0x78, 0x83, 0x9e, 0x7f, 0xfe,
-	0xf3, 0x57, 0x3d, 0xd3, 0xbb, 0x19, 0x5d, 0x15, 0x3b, 0x8e, 0x55, 0x72, 0x06, 0xc4, 0xee, 0x38,
-	0xc3, 0x6e, 0x89, 0x5e, 0x3d, 0x9f, 0x4e, 0xfe, 0x14, 0xfc, 0xd4, 0xb4, 0x3d, 0x32, 0xbc, 0x36,
-	0x3a, 0xa4, 0x74, 0xfb, 0xb2, 0xd4, 0x73, 0x4a, 0x5d, 0xcb, 0xbc, 0xda, 0x09, 0x3c, 0xf6, 0xf2,
-	0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x0a, 0x35, 0x98, 0x44, 0x1c, 0x00, 0x00,
+	// 1901 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6f, 0xdb, 0xd8,
+	0x11, 0x2f, 0x29, 0xdb, 0x59, 0x8d, 0x13, 0x47, 0x7e, 0x8e, 0x15, 0x49, 0x69, 0x62, 0x87, 0xe9,
+	0x76, 0xb3, 0xed, 0xae, 0x15, 0x38, 0x87, 0x6e, 0xba, 0xdb, 0x0f, 0x59, 0xa2, 0x69, 0xee, 0xca,
+	0x94, 0xf0, 0x28, 0xc5, 0x48, 0x51, 0x94, 0xa0, 0xa5, 0x67, 0x99, 0xa8, 0x48, 0xba, 0x22, 0xe5,
+	0x85, 0xff, 0x8c, 0x1e, 0x7a, 0xe8, 0xa1, 0xdb, 0xb4, 0xff, 0x41, 0xaf, 0x41, 0xaf, 0x45, 0x0b,
+	0xf4, 0xda, 0x63, 0x81, 0xa2, 0xa7, 0x9e, 0x5b, 0xa0, 0xf7, 0x05, 0xf9, 0x48, 0x7d, 0x90, 0x7c,
+	0xfa, 0xa0, 0xb3, 0x88, 0x6f, 0xd6, 0x7b, 0xf3, 0x7e, 0x1c, 0xce, 0x6f, 0x66, 0x38, 0x33, 0xcf,
+	0xb0, 0xd3, 0x35, 0x8d, 0xf2, 0xf9, 0x97, 0x9a, 0xa9, 0x5b, 0x7a, 0x8f, 0x98, 0xc4, 0x72, 0x35,
+	0x87, 0x0c, 0x2e, 0x8d, 0x0e, 0xd9, 0xbb, 0x18, 0xd8, 0xae, 0x8d, 0x32, 0x5d, 0xd3, 0x28, 0x6d,
+	0x7a, 0x52, 0x1d, 0xdb, 0x34, 0x6d, 0xcb, 0xa1, 0xeb, 0xa5, 0xdb, 0xf4, 0x60, 0xf0, 0xeb, 0x41,
+	0xcf, 0xb6, 0x7b, 0x7d, 0x52, 0xf6, 0x7f, 0x9d, 0x0e, 0xcf, 0xca, 0xc4, 0xbc, 0x70, 0xaf, 0xe8,
+	0xa6, 0x70, 0x08, 0x85, 0xe6, 0xf9, 0x95, 0x63, 0x74, 0xf4, 0xbe, 0x6c, 0x5d, 0x12, 0xcb, 0xb5,
+	0x07, 0x57, 0x98, 0xfc, 0x6a, 0x48, 0x1c, 0x17, 0x7d, 0x0f, 0xd6, 0xbb, 0xc4, 0x7b, 0x9c, 0x36,
+	0x1c, 0x1a, 0xdd, 0x02, 0xb7, 0xcb, 0x3d, 0x5d, 0xdf, 0xcf, 0xee, 0x75, 0x4d, 0x63, 0xaf, 0x3d,
+	0x34, 0xba, 0x18, 0xe8, 0xae, 0xf7, 0xb7, 0xf0, 0x27, 0x1e, 0x8a, 0x09, 0x40, 0xce, 0x85, 0x6d,
+	0x39, 0x04, 0x3d, 0x81, 0x35, 0xc7, 0xd5, 0xdd, 0xa1, 0xe3, 0x83, 0x6c, 0xec, 0xaf, 0xfb, 0x20,
+	0xaa, 0xbf, 0x84, 0x83, 0x2d, 0xf4, 0x23, 0x58, 0x1b, 0x10, 0xdd, 0xb1, 0xad, 0x02, 0xef, 0x0b,
+	0xbd, 0xef, 0x0b, 0x31, 0x41, 0xf7, 0xb0, 0x2f, 0x8c, 0x83, 0x43, 0xe8, 0xfb, 0x90, 0x35, 0x42,
+	0x99, 0x42, 0xc6, 0xd7, 0xf5, 0x8e, 0x8f, 0x70, 0xa4, 0x0f, 0xba, 0x5f, 0xea, 0x03, 0x82, 0xc7,
+	0xfb, 0xe8, 0x09, 0xdc, 0xa1, 0xc7, 0xb4, 0x2e, 0x71, 0x75, 0xa3, 0x5f, 0x58, 0xd9, 0xe5, 0x9e,
+	0x66, 0xf1, 0x6d, 0xba, 0x58, 0xf3, 0xd7, 0x84, 0x5f, 0xc0, 0x1a, 0x7d, 0x06, 0xba, 0x07, 0xb9,
+	0xb6, 0x52, 0x13, 0x0f, 0x65, 0x45, 0xac, 0x69, 0x58, 0xac, 0xa8, 0x0d, 0x25, 0xf7, 0x2d, 0x84,
+	0x60, 0xa3, 0xad, 0x7c, 0xa1, 0x34, 0x4e, 0x14, 0xad, 0x26, 0xbe, 0x94, 0xab, 0x62, 0x8e, 0xf3,
+	0xd6, 0x64, 0xa5, 0x25, 0x62, 0xa5, 0x52, 0xd7, 0x44, 0x8c, 0x1b, 0x38, 0xc7, 0xa3, 0x3c, 0x20,
+	0xba, 0xaf, 0xb5, 0x15, 0x2c, 0x56, 0xaa, 0x47, 0x95, 0x83, 0xba, 0x98, 0xcb, 0x08, 0xaf, 0x39,
+	0x28, 0x1e, 0x9d, 0x54, 0x6d, 0xf3, 0xc2, 0xb6, 0x88, 0xe5, 0xca, 0xd6, 0x99, 0x2d, 0x11, 0x37,
+	0x85, 0xf5, 0xd1, 0x33, 0xd8, 0xe8, 0x84, 0x30, 0x54, 0x9c, 0x8f, 0x8a, 0xdf, 0x19, 0x09, 0xf8,
+	0x27, 0xde, 0x9f, 0x3c, 0x61, 0xe9, 0x26, 0xf1, 0x4d, 0x96, 0x9d, 0x10, 0x53, 0x74, 0x93, 0x08,
+	0x7f, 0xe7, 0xa1, 0x94, 0xa4, 0xe2, 0x32, 0xbc, 0xfe, 0x38, 0xc2, 0xeb, 0x77, 0x29, 0x2b, 0x4c,
+	0xd4, 0x28, 0xb1, 0x1f, 0x41, 0x76, 0xa4, 0x54, 0x40, 0xec, 0x86, 0x0f, 0x31, 0x02, 0xc0, 0x63,
+	0x81, 0xc5, 0x98, 0x1d, 0xa6, 0x60, 0x76, 0x1b, 0x36, 0xc3, 0xb5, 0x6a, 0xe3, 0xb8, 0xd9, 0x50,
+	0x44, 0xa5, 0x95, 0xe3, 0x13, 0x08, 0xcf, 0x30, 0x08, 0x5f, 0x11, 0xfe, 0x11, 0x27, 0x5c, 0xbd,
+	0x59, 0x84, 0xa3, 0x7d, 0xb8, 0xd5, 0x39, 0xd7, 0xad, 0x1e, 0x71, 0x7c, 0xc3, 0xad, 0xef, 0x17,
+	0x7c, 0xc4, 0x63, 0xbb, 0x6b, 0x9c, 0x19, 0xfa, 0x69, 0x9f, 0x8c, 0x8d, 0x1e, 0x0a, 0x0a, 0x7f,
+	0x8d, 0x3b, 0x89, 0xfa, 0x8d, 0x38, 0x89, 0xca, 0x76, 0x92, 0x18, 0xed, 0x99, 0x04, 0xda, 0xbf,
+	0xe2, 0xde, 0x32, 0xef, 0x2f, 0x2b, 0x75, 0xb9, 0xa6, 0x35, 0x2b, 0xb8, 0x72, 0xac, 0xe6, 0x32,
+	0x09, 0xbe, 0xb0, 0xc2, 0xf0, 0x85, 0x55, 0xb4, 0x05, 0x77, 0x55, 0xb1, 0xa5, 0xb5, 0x15, 0xb5,
+	0xdd, 0x6c, 0x36, 0x70, 0x4b, 0xac, 0xe5, 0xd6, 0x84, 0x5f, 0x67, 0xe0, 0x81, 0xea, 0xea, 0x03,
+	0xf7, 0xd8, 0x4b, 0xf9, 0x86, 0xd5, 0xab, 0xf9, 0x94, 0x2f, 0x67, 0xca, 0x9f, 0x44, 0x4c, 0xf9,
+	0x41, 0x28, 0xc4, 0x82, 0x8d, 0xda, 0x32, 0xe2, 0x88, 0x99, 0x59, 0x8e, 0xb8, 0x50, 0xb8, 0xbd,
+	0x99, 0x67, 0xf7, 0x12, 0xe4, 0x03, 0x23, 0x55, 0xea, 0x58, 0xac, 0xd4, 0x5e, 0x69, 0xc7, 0x15,
+	0xa5, 0x22, 0x89, 0xb5, 0x1c, 0x87, 0x1e, 0xc3, 0xc3, 0x46, 0x53, 0xc4, 0x95, 0x96, 0xdc, 0x50,
+	0x46, 0xdb, 0xb2, 0xa2, 0x35, 0x71, 0x43, 0xc2, 0xa2, 0xaa, 0x2e, 0xc1, 0x45, 0x09, 0xf2, 0x95,
+	0x76, 0xeb, 0x48, 0x54, 0x5a, 0x72, 0x95, 0xe2, 0x1d, 0x56, 0xe4, 0x7a, 0x1b, 0x7b, 0x7c, 0xdc,
+	0x87, 0x2d, 0x59, 0xf1, 0x08, 0xae, 0xb4, 0xe4, 0x83, 0xba, 0x18, 0xf2, 0xbf, 0x26, 0x94, 0xa1,
+	0xa8, 0xba, 0xf6, 0x45, 0xd4, 0x74, 0x34, 0x66, 0x11, 0xac, 0xf8, 0xb1, 0xc4, 0xf9, 0x6f, 0xed,
+	0xff, 0x2d, 0xfc, 0x8f, 0x83, 0x52, 0xd2, 0x89, 0xeb, 0x87, 0x03, 0x1b, 0x35, 0x55, 0x38, 0x7c,
+	0x9e, 0x22, 0x1a, 0x92, 0xdd, 0x99, 0x17, 0x4c, 0xd8, 0xf4, 0x35, 0x23, 0x5d, 0xaa, 0x98, 0x17,
+	0xae, 0xe8, 0x23, 0x58, 0x31, 0xac, 0x33, 0x3b, 0x48, 0x65, 0xec, 0x4c, 0xe2, 0x4b, 0x45, 0xdd,
+	0x8e, 0x9f, 0x55, 0x6e, 0xfc, 0x8b, 0x83, 0xfc, 0xd4, 0xf3, 0x9c, 0xe5, 0xec, 0xfb, 0xc3, 0x88,
+	0x7d, 0x05, 0xaa, 0x5b, 0x22, 0x62, 0xd4, 0xb6, 0xcf, 0xe0, 0x16, 0xd5, 0xc4, 0x29, 0x64, 0x76,
+	0x33, 0x4f, 0xd7, 0xf7, 0xf3, 0xf1, 0xc3, 0xde, 0xeb, 0xe3, 0x50, 0x4c, 0xd8, 0x9f, 0x6f, 0xe8,
+	0x88, 0xaf, 0x72, 0xc2, 0xef, 0x38, 0x28, 0xaa, 0xc4, 0xad, 0xdb, 0x3d, 0x8f, 0x6d, 0xd1, 0xea,
+	0x5e, 0xd8, 0x86, 0x95, 0xea, 0x5b, 0xf1, 0x21, 0xe4, 0xfa, 0x14, 0x45, 0x23, 0x01, 0x8c, 0xff,
+	0xd6, 0x59, 0x7c, 0xb7, 0x3f, 0x8d, 0x3e, 0x29, 0xea, 0x97, 0x87, 0x1d, 0x3b, 0xf4, 0x9c, 0x50,
+	0xb4, 0x19, 0x2c, 0x0b, 0xff, 0xe6, 0x7d, 0xfd, 0x30, 0x31, 0x6d, 0x97, 0x8c, 0xd5, 0xbb, 0x7e,
+	0xc1, 0xc7, 0x04, 0x4d, 0xe5, 0xe3, 0x6f, 0xb8, 0xb7, 0x54, 0xc4, 0x95, 0x20, 0x5f, 0x6f, 0x48,
+	0x92, 0xac, 0x48, 0x9a, 0xa8, 0xd4, 0x9a, 0x0d, 0x59, 0x69, 0x8d, 0xbe, 0xf7, 0x4f, 0x60, 0x27,
+	0xb6, 0xd7, 0xc4, 0x8d, 0x56, 0xa3, 0xda, 0x18, 0x27, 0x9f, 0x22, 0x6c, 0x1f, 0xab, 0xd2, 0x41,
+	0x5b, 0x8d, 0x9e, 0x5f, 0x65, 0x04, 0xd5, 0x9a, 0xf0, 0x4f, 0x1e, 0x4a, 0x52, 0x82, 0x0f, 0x5c,
+	0x3f, 0x93, 0xb0, 0x51, 0xa3, 0x56, 0x4e, 0xf2, 0x9e, 0xcc, 0xe2, 0xde, 0xb3, 0x92, 0xe8, 0x3d,
+	0x71, 0xee, 0x56, 0xdf, 0x41, 0xfd, 0x5d, 0x85, 0x82, 0x4a, 0xdc, 0x63, 0xa7, 0x77, 0x30, 0x74,
+	0xa2, 0x01, 0xf6, 0x01, 0xdc, 0x35, 0x9d, 0xde, 0xe9, 0xd0, 0x19, 0xbf, 0x35, 0xcd, 0xf1, 0x1b,
+	0x74, 0x39, 0x94, 0x17, 0x7e, 0xcb, 0x43, 0x51, 0x8a, 0xa3, 0x5c, 0x3f, 0x0e, 0x98, 0xa0, 0x51,
+	0x86, 0x12, 0x54, 0xcd, 0x24, 0xa9, 0xba, 0xd8, 0xb7, 0xfa, 0xf3, 0xe5, 0x73, 0x15, 0xf3, 0xa3,
+	0xf0, 0x0a, 0x72, 0xa2, 0xe5, 0x1a, 0xae, 0x41, 0x9c, 0xba, 0xdd, 0xab, 0x93, 0x4b, 0xd2, 0x47,
+	0x1f, 0xc2, 0x7b, 0xfd, 0xe0, 0xef, 0xc0, 0x26, 0xb4, 0x4b, 0x0b, 0x05, 0xf0, 0x68, 0x1b, 0x95,
+	0xe0, 0x3d, 0x12, 0x1c, 0x2f, 0xf0, 0xbb, 0x99, 0xa7, 0x59, 0x3c, 0xfa, 0x2d, 0x0c, 0x01, 0xd1,
+	0xec, 0x48, 0x0f, 0xa5, 0x48, 0x8b, 0xcf, 0x21, 0xdb, 0xf7, 0xfa, 0xe2, 0x4b, 0xd2, 0xa7, 0xf0,
+	0xeb, 0xfb, 0xdb, 0xbe, 0x64, 0x54, 0x65, 0x3c, 0x96, 0x13, 0xfe, 0xcc, 0xc3, 0xd6, 0xd4, 0x73,
+	0x03, 0x9e, 0x97, 0x79, 0xf0, 0xd8, 0x27, 0x78, 0xb6, 0x4f, 0xfc, 0x60, 0xe4, 0x13, 0x19, 0x5f,
+	0x68, 0x27, 0xcc, 0x8d, 0xd1, 0x47, 0xcf, 0xcd, 0x8a, 0x49, 0x24, 0x5f, 0xbe, 0xbd, 0xc8, 0x0a,
+	0xe5, 0xea, 0x0d, 0x2f, 0xf9, 0xb5, 0xe4, 0xd6, 0xab, 0x19, 0x0d, 0xd0, 0xcf, 0x01, 0x49, 0xd7,
+	0x63, 0x6d, 0x96, 0x4f, 0xfc, 0x97, 0x87, 0x2d, 0xe9, 0x9a, 0xe4, 0x50, 0xaf, 0xa8, 0x2f, 0xe8,
+	0x15, 0x54, 0x6e, 0x82, 0xd1, 0xcc, 0x22, 0x8c, 0xae, 0x4c, 0x30, 0x2a, 0xa5, 0x60, 0x74, 0xf5,
+	0x06, 0x31, 0x7a, 0x34, 0xfa, 0x42, 0x79, 0x25, 0x5d, 0x68, 0xa4, 0x34, 0x13, 0xa4, 0x4f, 0xe1,
+	0x9e, 0x4a, 0xdc, 0x9a, 0x19, 0xf5, 0x8e, 0x27, 0xb0, 0xda, 0x67, 0x67, 0x0b, 0xba, 0x27, 0xfc,
+	0x87, 0x83, 0xed, 0xc8, 0xe9, 0x65, 0x32, 0xf0, 0x8b, 0x48, 0x06, 0x7e, 0x1c, 0x46, 0x5b, 0x1c,
+	0x30, 0x55, 0x15, 0x22, 0xa7, 0x48, 0xaa, 0x13, 0x7d, 0xa7, 0xc7, 0x44, 0x5d, 0x7c, 0x29, 0xd6,
+	0x73, 0xbc, 0x90, 0x87, 0x7b, 0x52, 0x82, 0x99, 0x84, 0xff, 0x73, 0xb0, 0x2d, 0x31, 0x2c, 0x30,
+	0xdf, 0x80, 0x8b, 0x25, 0xa5, 0x17, 0x91, 0xa4, 0xf4, 0x38, 0x74, 0xe1, 0x14, 0x66, 0x4a, 0x4a,
+	0x4b, 0x69, 0xea, 0xe4, 0xcf, 0x20, 0x7b, 0x44, 0xf4, 0x81, 0x7b, 0x4a, 0x74, 0x17, 0x95, 0x61,
+	0xeb, 0x3c, 0xfc, 0xa1, 0x39, 0x46, 0xcf, 0xd2, 0xdd, 0xe1, 0x80, 0x76, 0x67, 0xb7, 0x30, 0x1a,
+	0x6d, 0xa9, 0xe1, 0x8e, 0x50, 0x81, 0x2d, 0x4c, 0x4e, 0x6d, 0xdb, 0x9d, 0x6e, 0xeb, 0x96, 0xf1,
+	0xdb, 0xdf, 0xf0, 0x70, 0x6f, 0x1a, 0x23, 0xe6, 0x79, 0x33, 0xb2, 0xc2, 0x27, 0x91, 0xac, 0xb0,
+	0xeb, 0x0b, 0x25, 0xe1, 0xa5, 0x4a, 0x0b, 0x57, 0xdf, 0x6c, 0x09, 0xe5, 0x15, 0xb5, 0xc1, 0xba,
+	0xac, 0x68, 0x27, 0xb8, 0xa1, 0x48, 0x9a, 0xda, 0xaa, 0xb4, 0xbc, 0xcc, 0xf0, 0x9a, 0x83, 0x62,
+	0xcd, 0x70, 0xbc, 0xb4, 0x30, 0x31, 0xc6, 0xb9, 0x71, 0xd3, 0xcd, 0x24, 0x15, 0xaf, 0x5f, 0x5f,
+	0xb3, 0x51, 0x53, 0xe5, 0x8f, 0x3f, 0x72, 0xef, 0x64, 0x60, 0x89, 0xee, 0xc3, 0x56, 0x4d, 0x56,
+	0xbd, 0x1f, 0x53, 0x83, 0xaa, 0xd5, 0x84, 0x89, 0xcb, 0x9a, 0xf0, 0x15, 0x07, 0xf7, 0x31, 0x71,
+	0x88, 0x7b, 0x53, 0xe9, 0xfe, 0x0b, 0x0f, 0x85, 0xb8, 0x82, 0xcb, 0x90, 0xfd, 0x59, 0x84, 0xec,
+	0xef, 0x04, 0xd1, 0x9a, 0x8c, 0x99, 0x8a, 0xea, 0xd7, 0xef, 0x88, 0xea, 0x6d, 0xd8, 0xc4, 0x62,
+	0x74, 0x22, 0x99, 0x4c, 0xf4, 0xef, 0x39, 0x28, 0x88, 0xd6, 0x4d, 0x0e, 0xec, 0xbf, 0xf1, 0x50,
+	0x4c, 0xd0, 0xf0, 0xfa, 0x4d, 0x19, 0x13, 0x34, 0x15, 0xd7, 0x7f, 0x78, 0x47, 0x5c, 0xe7, 0x01,
+	0x89, 0xca, 0x62, 0x51, 0xbd, 0xff, 0xe6, 0x36, 0x14, 0x15, 0xdd, 0x35, 0x2e, 0xc9, 0xd1, 0xc9,
+	0xf1, 0xe8, 0x22, 0x52, 0xa5, 0xf7, 0x90, 0x48, 0x85, 0xad, 0x84, 0xc1, 0x32, 0x62, 0x8e, 0xfa,
+	0x4a, 0xbb, 0xf3, 0x86, 0xd1, 0xcf, 0x38, 0xd4, 0x06, 0x14, 0x9f, 0x74, 0xa2, 0x47, 0xcc, 0x11,
+	0xa8, 0xef, 0x78, 0xa5, 0x9d, 0x39, 0x23, 0x52, 0x74, 0x04, 0x9b, 0x5e, 0x4f, 0x3d, 0x35, 0xe3,
+	0x43, 0xf9, 0x3d, 0x7a, 0x3b, 0xba, 0x17, 0xde, 0x8e, 0xee, 0x89, 0xe6, 0x85, 0x7b, 0x55, 0x7a,
+	0x30, 0x63, 0x20, 0x88, 0x4e, 0xfc, 0x1a, 0x2c, 0x76, 0x33, 0x89, 0x1e, 0xb2, 0x6e, 0x2c, 0xa9,
+	0x86, 0x8f, 0x66, 0x5f, 0x68, 0x3e, 0xe3, 0xd0, 0x89, 0xdf, 0x1f, 0x45, 0x6e, 0x3d, 0x82, 0x37,
+	0x67, 0xde, 0x14, 0x06, 0x6f, 0xce, 0xbe, 0x50, 0x0b, 0x4c, 0xba, 0x20, 0xb0, 0x3a, 0x07, 0x78,
+	0xf2, 0x6a, 0xa7, 0x15, 0x76, 0xe1, 0x53, 0x73, 0xa0, 0x47, 0x13, 0xbd, 0x6a, 0xc2, 0xf0, 0xb2,
+	0xf4, 0x68, 0xf6, 0x9c, 0x0f, 0x1d, 0x86, 0x5d, 0xe2, 0x14, 0xea, 0xdd, 0xa9, 0xcb, 0x5c, 0xb9,
+	0x56, 0xda, 0x99, 0x33, 0xc9, 0x42, 0x18, 0x36, 0x63, 0xf3, 0x9d, 0x80, 0x23, 0xd6, 0xdc, 0x67,
+	0xae, 0x6e, 0x5f, 0x50, 0x27, 0x9a, 0xc6, 0x64, 0x39, 0xd1, 0xa3, 0xd9, 0x83, 0x1c, 0xd4, 0x0c,
+	0xfb, 0xd5, 0xa9, 0xe6, 0x09, 0x4d, 0xbd, 0x58, 0x42, 0x5b, 0x55, 0x2a, 0xb0, 0x5a, 0x47, 0xf4,
+	0x53, 0x58, 0x9f, 0x98, 0x11, 0xa0, 0xfb, 0xf1, 0xa9, 0xc1, 0x24, 0x82, 0x9a, 0x8c, 0x20, 0xc5,
+	0x10, 0x24, 0x16, 0x42, 0x92, 0x0e, 0x9f, 0xc0, 0xc6, 0xa8, 0x22, 0xaf, 0x9e, 0x93, 0xce, 0x2f,
+	0x99, 0xf6, 0xa1, 0xd7, 0xb8, 0xe3, 0xf2, 0xbd, 0x0a, 0xb7, 0x27, 0x2b, 0xdf, 0x20, 0x8d, 0x24,
+	0x14, 0xe8, 0xa5, 0x22, 0xb3, 0x4c, 0x46, 0x87, 0x70, 0x67, 0xaa, 0x71, 0x43, 0xc5, 0xa4, 0x66,
+	0x8e, 0xc2, 0x94, 0xd8, 0x7d, 0x9e, 0x87, 0x23, 0x25, 0xe0, 0x48, 0x6c, 0x9c, 0xe4, 0xf6, 0xab,
+	0x0d, 0x28, 0x5e, 0x0d, 0x06, 0x31, 0xc2, 0xac, 0x8f, 0x03, 0xe7, 0x9e, 0x51, 0x9c, 0x36, 0x20,
+	0x17, 0xad, 0x3b, 0xd0, 0xb7, 0x19, 0xe5, 0x08, 0x85, 0x7c, 0x38, 0xb3, 0x58, 0xf1, 0xa2, 0x25,
+	0xf6, 0x75, 0x0b, 0xa2, 0x85, 0xf5, 0xb1, 0x0f, 0x1c, 0x9c, 0xf9, 0x51, 0x3c, 0xf8, 0xf4, 0x67,
+	0x2f, 0x7a, 0x86, 0x7b, 0x3e, 0x3c, 0xdd, 0xeb, 0xd8, 0x66, 0xd9, 0xbe, 0x20, 0x56, 0xc7, 0x1e,
+	0x74, 0xcb, 0xb4, 0x04, 0xf8, 0x78, 0xfc, 0x7f, 0x2d, 0x1f, 0x1b, 0x96, 0x4b, 0x06, 0x67, 0x7a,
+	0x87, 0x94, 0x2f, 0x9f, 0x97, 0x7b, 0x76, 0xb9, 0x6b, 0x1a, 0xa7, 0x6b, 0xbe, 0xb7, 0x3c, 0xff,
+	0x3a, 0x00, 0x00, 0xff, 0xff, 0xac, 0x7c, 0x97, 0xc0, 0x07, 0x23, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2227,6 +2724,12 @@
 	SetDmLogLevel(ctx context.Context, in *SetDmLogLevelRequest, opts ...grpc.CallOption) (*SetDmLogLevelResponse, error)
 	// Gets the log level at which the Device Manager is running
 	GetDmLogLevel(ctx context.Context, in *GetDmLogLevelRequest, opts ...grpc.CallOption) (*GetDmLogLevelResponse, error)
+	// Disables a hardware component on a device.
+	DisableHWComponent(ctx context.Context, in *DisableHWComponentRequest, opts ...grpc.CallOption) (*DisableHWComponentResponse, error)
+	// Resets a hardware component on a device.
+	ResetHWComponent(ctx context.Context, in *ResetHWComponentRequest, opts ...grpc.CallOption) (*ResetHWComponentResponse, error)
+	// Enables a hardware component on a device.
+	EnableHWComponent(ctx context.Context, in *EnableHWComponentRequest, opts ...grpc.CallOption) (*EnableHWComponentResponse, error)
 }
 
 type nativeHWManagementServiceClient struct {
@@ -2459,6 +2962,33 @@
 	return out, nil
 }
 
+func (c *nativeHWManagementServiceClient) DisableHWComponent(ctx context.Context, in *DisableHWComponentRequest, opts ...grpc.CallOption) (*DisableHWComponentResponse, error) {
+	out := new(DisableHWComponentResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/DisableHWComponent", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nativeHWManagementServiceClient) ResetHWComponent(ctx context.Context, in *ResetHWComponentRequest, opts ...grpc.CallOption) (*ResetHWComponentResponse, error) {
+	out := new(ResetHWComponentResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/ResetHWComponent", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nativeHWManagementServiceClient) EnableHWComponent(ctx context.Context, in *EnableHWComponentRequest, opts ...grpc.CallOption) (*EnableHWComponentResponse, error) {
+	out := new(EnableHWComponentResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/EnableHWComponent", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // NativeHWManagementServiceServer is the server API for NativeHWManagementService service.
 type NativeHWManagementServiceServer interface {
 	// Initializes context for a device and sets up required states
@@ -2510,6 +3040,12 @@
 	SetDmLogLevel(context.Context, *SetDmLogLevelRequest) (*SetDmLogLevelResponse, error)
 	// Gets the log level at which the Device Manager is running
 	GetDmLogLevel(context.Context, *GetDmLogLevelRequest) (*GetDmLogLevelResponse, error)
+	// Disables a hardware component on a device.
+	DisableHWComponent(context.Context, *DisableHWComponentRequest) (*DisableHWComponentResponse, error)
+	// Resets a hardware component on a device.
+	ResetHWComponent(context.Context, *ResetHWComponentRequest) (*ResetHWComponentResponse, error)
+	// Enables a hardware component on a device.
+	EnableHWComponent(context.Context, *EnableHWComponentRequest) (*EnableHWComponentResponse, error)
 }
 
 // UnimplementedNativeHWManagementServiceServer can be embedded to have forward compatible implementations.
@@ -2567,6 +3103,15 @@
 func (*UnimplementedNativeHWManagementServiceServer) GetDmLogLevel(ctx context.Context, req *GetDmLogLevelRequest) (*GetDmLogLevelResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetDmLogLevel not implemented")
 }
+func (*UnimplementedNativeHWManagementServiceServer) DisableHWComponent(ctx context.Context, req *DisableHWComponentRequest) (*DisableHWComponentResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DisableHWComponent not implemented")
+}
+func (*UnimplementedNativeHWManagementServiceServer) ResetHWComponent(ctx context.Context, req *ResetHWComponentRequest) (*ResetHWComponentResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ResetHWComponent not implemented")
+}
+func (*UnimplementedNativeHWManagementServiceServer) EnableHWComponent(ctx context.Context, req *EnableHWComponentRequest) (*EnableHWComponentResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method EnableHWComponent not implemented")
+}
 
 func RegisterNativeHWManagementServiceServer(s *grpc.Server, srv NativeHWManagementServiceServer) {
 	s.RegisterService(&_NativeHWManagementService_serviceDesc, srv)
@@ -2887,6 +3432,60 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _NativeHWManagementService_DisableHWComponent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DisableHWComponentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).DisableHWComponent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/DisableHWComponent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).DisableHWComponent(ctx, req.(*DisableHWComponentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NativeHWManagementService_ResetHWComponent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ResetHWComponentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).ResetHWComponent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/ResetHWComponent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).ResetHWComponent(ctx, req.(*ResetHWComponentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NativeHWManagementService_EnableHWComponent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(EnableHWComponentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).EnableHWComponent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/EnableHWComponent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).EnableHWComponent(ctx, req.(*EnableHWComponentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _NativeHWManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeHWManagementService",
 	HandlerType: (*NativeHWManagementServiceServer)(nil),
@@ -2947,6 +3546,18 @@
 			MethodName: "GetDmLogLevel",
 			Handler:    _NativeHWManagementService_GetDmLogLevel_Handler,
 		},
+		{
+			MethodName: "DisableHWComponent",
+			Handler:    _NativeHWManagementService_DisableHWComponent_Handler,
+		},
+		{
+			MethodName: "ResetHWComponent",
+			Handler:    _NativeHWManagementService_ResetHWComponent_Handler,
+		},
+		{
+			MethodName: "EnableHWComponent",
+			Handler:    _NativeHWManagementService_EnableHWComponent_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
