drivers: support recoverable errors in the plugin RPC layer

This commit is contained in:
Nick Ethier
2018-11-08 23:37:50 -05:00
parent 98b295d617
commit c2d94dc86a
4 changed files with 316 additions and 227 deletions

View File

@@ -10,10 +10,12 @@ import (
"github.com/golang/protobuf/ptypes"
hclog "github.com/hashicorp/go-hclog"
cstructs "github.com/hashicorp/nomad/client/structs"
"github.com/hashicorp/nomad/nomad/structs"
"github.com/hashicorp/nomad/plugins/base"
"github.com/hashicorp/nomad/plugins/drivers/proto"
"github.com/hashicorp/nomad/plugins/shared"
"github.com/hashicorp/nomad/plugins/shared/hclspec"
"google.golang.org/grpc/status"
)
var _ DriverPlugin = &driverPluginClient{}
@@ -134,6 +136,12 @@ func (d *driverPluginClient) StartTask(c *TaskConfig) (*TaskHandle, *cstructs.Dr
resp, err := d.client.StartTask(d.doneCtx, req)
if err != nil {
st := status.Convert(err)
if len(st.Details()) > 0 {
if rec, ok := st.Details()[0].(*proto.RecoverableError); ok {
return nil, nil, structs.NewRecoverableError(err, rec.Recoverable)
}
}
return nil, nil, err
}

View File

@@ -49,7 +49,7 @@ func (x TaskState) String() string {
return proto.EnumName(TaskState_name, int32(x))
}
func (TaskState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{0}
return fileDescriptor_driver_d88956a7e53d129e, []int{0}
}
type FingerprintResponse_HealthState int32
@@ -75,7 +75,7 @@ func (x FingerprintResponse_HealthState) String() string {
return proto.EnumName(FingerprintResponse_HealthState_name, int32(x))
}
func (FingerprintResponse_HealthState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{5, 0}
return fileDescriptor_driver_d88956a7e53d129e, []int{6, 0}
}
type StartTaskResponse_Result int32
@@ -101,7 +101,7 @@ func (x StartTaskResponse_Result) String() string {
return proto.EnumName(StartTaskResponse_Result_name, int32(x))
}
func (StartTaskResponse_Result) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{9, 0}
return fileDescriptor_driver_d88956a7e53d129e, []int{10, 0}
}
type DriverCapabilities_FSIsolation int32
@@ -127,7 +127,7 @@ func (x DriverCapabilities_FSIsolation) String() string {
return proto.EnumName(DriverCapabilities_FSIsolation_name, int32(x))
}
func (DriverCapabilities_FSIsolation) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{25, 0}
return fileDescriptor_driver_d88956a7e53d129e, []int{26, 0}
}
type CPUUsage_Fields int32
@@ -162,7 +162,7 @@ func (x CPUUsage_Fields) String() string {
return proto.EnumName(CPUUsage_Fields_name, int32(x))
}
func (CPUUsage_Fields) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{41, 0}
return fileDescriptor_driver_d88956a7e53d129e, []int{42, 0}
}
type MemoryUsage_Fields int32
@@ -194,7 +194,47 @@ func (x MemoryUsage_Fields) String() string {
return proto.EnumName(MemoryUsage_Fields_name, int32(x))
}
func (MemoryUsage_Fields) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{42, 0}
return fileDescriptor_driver_d88956a7e53d129e, []int{43, 0}
}
// RecoverableError is used with a grpc Status to indicate if the error is one
// which is recoverable and can be reattempted by the client.
type RecoverableError struct {
Recoverable bool `protobuf:"varint,1,opt,name=recoverable,proto3" json:"recoverable,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RecoverableError) Reset() { *m = RecoverableError{} }
func (m *RecoverableError) String() string { return proto.CompactTextString(m) }
func (*RecoverableError) ProtoMessage() {}
func (*RecoverableError) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_d88956a7e53d129e, []int{0}
}
func (m *RecoverableError) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RecoverableError.Unmarshal(m, b)
}
func (m *RecoverableError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RecoverableError.Marshal(b, m, deterministic)
}
func (dst *RecoverableError) XXX_Merge(src proto.Message) {
xxx_messageInfo_RecoverableError.Merge(dst, src)
}
func (m *RecoverableError) XXX_Size() int {
return xxx_messageInfo_RecoverableError.Size(m)
}
func (m *RecoverableError) XXX_DiscardUnknown() {
xxx_messageInfo_RecoverableError.DiscardUnknown(m)
}
var xxx_messageInfo_RecoverableError proto.InternalMessageInfo
func (m *RecoverableError) GetRecoverable() bool {
if m != nil {
return m.Recoverable
}
return false
}
type TaskConfigSchemaRequest struct {
@@ -207,7 +247,7 @@ func (m *TaskConfigSchemaRequest) Reset() { *m = TaskConfigSchemaRequest
func (m *TaskConfigSchemaRequest) String() string { return proto.CompactTextString(m) }
func (*TaskConfigSchemaRequest) ProtoMessage() {}
func (*TaskConfigSchemaRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{0}
return fileDescriptor_driver_d88956a7e53d129e, []int{1}
}
func (m *TaskConfigSchemaRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfigSchemaRequest.Unmarshal(m, b)
@@ -239,7 +279,7 @@ func (m *TaskConfigSchemaResponse) Reset() { *m = TaskConfigSchemaRespon
func (m *TaskConfigSchemaResponse) String() string { return proto.CompactTextString(m) }
func (*TaskConfigSchemaResponse) ProtoMessage() {}
func (*TaskConfigSchemaResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{1}
return fileDescriptor_driver_d88956a7e53d129e, []int{2}
}
func (m *TaskConfigSchemaResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfigSchemaResponse.Unmarshal(m, b)
@@ -276,7 +316,7 @@ func (m *CapabilitiesRequest) Reset() { *m = CapabilitiesRequest{} }
func (m *CapabilitiesRequest) String() string { return proto.CompactTextString(m) }
func (*CapabilitiesRequest) ProtoMessage() {}
func (*CapabilitiesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{2}
return fileDescriptor_driver_d88956a7e53d129e, []int{3}
}
func (m *CapabilitiesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CapabilitiesRequest.Unmarshal(m, b)
@@ -311,7 +351,7 @@ func (m *CapabilitiesResponse) Reset() { *m = CapabilitiesResponse{} }
func (m *CapabilitiesResponse) String() string { return proto.CompactTextString(m) }
func (*CapabilitiesResponse) ProtoMessage() {}
func (*CapabilitiesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{3}
return fileDescriptor_driver_d88956a7e53d129e, []int{4}
}
func (m *CapabilitiesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CapabilitiesResponse.Unmarshal(m, b)
@@ -348,7 +388,7 @@ func (m *FingerprintRequest) Reset() { *m = FingerprintRequest{} }
func (m *FingerprintRequest) String() string { return proto.CompactTextString(m) }
func (*FingerprintRequest) ProtoMessage() {}
func (*FingerprintRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{4}
return fileDescriptor_driver_d88956a7e53d129e, []int{5}
}
func (m *FingerprintRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FingerprintRequest.Unmarshal(m, b)
@@ -391,7 +431,7 @@ func (m *FingerprintResponse) Reset() { *m = FingerprintResponse{} }
func (m *FingerprintResponse) String() string { return proto.CompactTextString(m) }
func (*FingerprintResponse) ProtoMessage() {}
func (*FingerprintResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{5}
return fileDescriptor_driver_d88956a7e53d129e, []int{6}
}
func (m *FingerprintResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FingerprintResponse.Unmarshal(m, b)
@@ -446,7 +486,7 @@ func (m *RecoverTaskRequest) Reset() { *m = RecoverTaskRequest{} }
func (m *RecoverTaskRequest) String() string { return proto.CompactTextString(m) }
func (*RecoverTaskRequest) ProtoMessage() {}
func (*RecoverTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{6}
return fileDescriptor_driver_d88956a7e53d129e, []int{7}
}
func (m *RecoverTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RecoverTaskRequest.Unmarshal(m, b)
@@ -490,7 +530,7 @@ func (m *RecoverTaskResponse) Reset() { *m = RecoverTaskResponse{} }
func (m *RecoverTaskResponse) String() string { return proto.CompactTextString(m) }
func (*RecoverTaskResponse) ProtoMessage() {}
func (*RecoverTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{7}
return fileDescriptor_driver_d88956a7e53d129e, []int{8}
}
func (m *RecoverTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RecoverTaskResponse.Unmarshal(m, b)
@@ -522,7 +562,7 @@ func (m *StartTaskRequest) Reset() { *m = StartTaskRequest{} }
func (m *StartTaskRequest) String() string { return proto.CompactTextString(m) }
func (*StartTaskRequest) ProtoMessage() {}
func (*StartTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{8}
return fileDescriptor_driver_d88956a7e53d129e, []int{9}
}
func (m *StartTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StartTaskRequest.Unmarshal(m, b)
@@ -576,7 +616,7 @@ func (m *StartTaskResponse) Reset() { *m = StartTaskResponse{} }
func (m *StartTaskResponse) String() string { return proto.CompactTextString(m) }
func (*StartTaskResponse) ProtoMessage() {}
func (*StartTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{9}
return fileDescriptor_driver_d88956a7e53d129e, []int{10}
}
func (m *StartTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StartTaskResponse.Unmarshal(m, b)
@@ -636,7 +676,7 @@ func (m *WaitTaskRequest) Reset() { *m = WaitTaskRequest{} }
func (m *WaitTaskRequest) String() string { return proto.CompactTextString(m) }
func (*WaitTaskRequest) ProtoMessage() {}
func (*WaitTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{10}
return fileDescriptor_driver_d88956a7e53d129e, []int{11}
}
func (m *WaitTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WaitTaskRequest.Unmarshal(m, b)
@@ -677,7 +717,7 @@ func (m *WaitTaskResponse) Reset() { *m = WaitTaskResponse{} }
func (m *WaitTaskResponse) String() string { return proto.CompactTextString(m) }
func (*WaitTaskResponse) ProtoMessage() {}
func (*WaitTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{11}
return fileDescriptor_driver_d88956a7e53d129e, []int{12}
}
func (m *WaitTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WaitTaskResponse.Unmarshal(m, b)
@@ -729,7 +769,7 @@ func (m *StopTaskRequest) Reset() { *m = StopTaskRequest{} }
func (m *StopTaskRequest) String() string { return proto.CompactTextString(m) }
func (*StopTaskRequest) ProtoMessage() {}
func (*StopTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{12}
return fileDescriptor_driver_d88956a7e53d129e, []int{13}
}
func (m *StopTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopTaskRequest.Unmarshal(m, b)
@@ -780,7 +820,7 @@ func (m *StopTaskResponse) Reset() { *m = StopTaskResponse{} }
func (m *StopTaskResponse) String() string { return proto.CompactTextString(m) }
func (*StopTaskResponse) ProtoMessage() {}
func (*StopTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{13}
return fileDescriptor_driver_d88956a7e53d129e, []int{14}
}
func (m *StopTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopTaskResponse.Unmarshal(m, b)
@@ -814,7 +854,7 @@ func (m *DestroyTaskRequest) Reset() { *m = DestroyTaskRequest{} }
func (m *DestroyTaskRequest) String() string { return proto.CompactTextString(m) }
func (*DestroyTaskRequest) ProtoMessage() {}
func (*DestroyTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{14}
return fileDescriptor_driver_d88956a7e53d129e, []int{15}
}
func (m *DestroyTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DestroyTaskRequest.Unmarshal(m, b)
@@ -858,7 +898,7 @@ func (m *DestroyTaskResponse) Reset() { *m = DestroyTaskResponse{} }
func (m *DestroyTaskResponse) String() string { return proto.CompactTextString(m) }
func (*DestroyTaskResponse) ProtoMessage() {}
func (*DestroyTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{15}
return fileDescriptor_driver_d88956a7e53d129e, []int{16}
}
func (m *DestroyTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DestroyTaskResponse.Unmarshal(m, b)
@@ -890,7 +930,7 @@ func (m *InspectTaskRequest) Reset() { *m = InspectTaskRequest{} }
func (m *InspectTaskRequest) String() string { return proto.CompactTextString(m) }
func (*InspectTaskRequest) ProtoMessage() {}
func (*InspectTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{16}
return fileDescriptor_driver_d88956a7e53d129e, []int{17}
}
func (m *InspectTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InspectTaskRequest.Unmarshal(m, b)
@@ -933,7 +973,7 @@ func (m *InspectTaskResponse) Reset() { *m = InspectTaskResponse{} }
func (m *InspectTaskResponse) String() string { return proto.CompactTextString(m) }
func (*InspectTaskResponse) ProtoMessage() {}
func (*InspectTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{17}
return fileDescriptor_driver_d88956a7e53d129e, []int{18}
}
func (m *InspectTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InspectTaskResponse.Unmarshal(m, b)
@@ -986,7 +1026,7 @@ func (m *TaskStatsRequest) Reset() { *m = TaskStatsRequest{} }
func (m *TaskStatsRequest) String() string { return proto.CompactTextString(m) }
func (*TaskStatsRequest) ProtoMessage() {}
func (*TaskStatsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{18}
return fileDescriptor_driver_d88956a7e53d129e, []int{19}
}
func (m *TaskStatsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatsRequest.Unmarshal(m, b)
@@ -1025,7 +1065,7 @@ func (m *TaskStatsResponse) Reset() { *m = TaskStatsResponse{} }
func (m *TaskStatsResponse) String() string { return proto.CompactTextString(m) }
func (*TaskStatsResponse) ProtoMessage() {}
func (*TaskStatsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{19}
return fileDescriptor_driver_d88956a7e53d129e, []int{20}
}
func (m *TaskStatsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatsResponse.Unmarshal(m, b)
@@ -1062,7 +1102,7 @@ func (m *TaskEventsRequest) Reset() { *m = TaskEventsRequest{} }
func (m *TaskEventsRequest) String() string { return proto.CompactTextString(m) }
func (*TaskEventsRequest) ProtoMessage() {}
func (*TaskEventsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{20}
return fileDescriptor_driver_d88956a7e53d129e, []int{21}
}
func (m *TaskEventsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskEventsRequest.Unmarshal(m, b)
@@ -1096,7 +1136,7 @@ func (m *SignalTaskRequest) Reset() { *m = SignalTaskRequest{} }
func (m *SignalTaskRequest) String() string { return proto.CompactTextString(m) }
func (*SignalTaskRequest) ProtoMessage() {}
func (*SignalTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{21}
return fileDescriptor_driver_d88956a7e53d129e, []int{22}
}
func (m *SignalTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignalTaskRequest.Unmarshal(m, b)
@@ -1140,7 +1180,7 @@ func (m *SignalTaskResponse) Reset() { *m = SignalTaskResponse{} }
func (m *SignalTaskResponse) String() string { return proto.CompactTextString(m) }
func (*SignalTaskResponse) ProtoMessage() {}
func (*SignalTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{22}
return fileDescriptor_driver_d88956a7e53d129e, []int{23}
}
func (m *SignalTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignalTaskResponse.Unmarshal(m, b)
@@ -1177,7 +1217,7 @@ func (m *ExecTaskRequest) Reset() { *m = ExecTaskRequest{} }
func (m *ExecTaskRequest) String() string { return proto.CompactTextString(m) }
func (*ExecTaskRequest) ProtoMessage() {}
func (*ExecTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{23}
return fileDescriptor_driver_d88956a7e53d129e, []int{24}
}
func (m *ExecTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecTaskRequest.Unmarshal(m, b)
@@ -1234,7 +1274,7 @@ func (m *ExecTaskResponse) Reset() { *m = ExecTaskResponse{} }
func (m *ExecTaskResponse) String() string { return proto.CompactTextString(m) }
func (*ExecTaskResponse) ProtoMessage() {}
func (*ExecTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{24}
return fileDescriptor_driver_d88956a7e53d129e, []int{25}
}
func (m *ExecTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecTaskResponse.Unmarshal(m, b)
@@ -1293,7 +1333,7 @@ func (m *DriverCapabilities) Reset() { *m = DriverCapabilities{} }
func (m *DriverCapabilities) String() string { return proto.CompactTextString(m) }
func (*DriverCapabilities) ProtoMessage() {}
func (*DriverCapabilities) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{25}
return fileDescriptor_driver_d88956a7e53d129e, []int{26}
}
func (m *DriverCapabilities) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DriverCapabilities.Unmarshal(m, b)
@@ -1358,7 +1398,11 @@ type TaskConfig struct {
// StdoutPath is the path to the file to open and write task stdout to
StdoutPath string `protobuf:"bytes,10,opt,name=stdout_path,json=stdoutPath,proto3" json:"stdout_path,omitempty"`
// StderrPath is the path to the file to open and write task stderr to
StderrPath string `protobuf:"bytes,11,opt,name=stderr_path,json=stderrPath,proto3" json:"stderr_path,omitempty"`
StderrPath string `protobuf:"bytes,11,opt,name=stderr_path,json=stderrPath,proto3" json:"stderr_path,omitempty"`
// TaskGroupName is the name of the task group which this task is a member of
TaskGroupName string `protobuf:"bytes,12,opt,name=task_group_name,json=taskGroupName,proto3" json:"task_group_name,omitempty"`
// JobName is the name of the job of which this task is part of
JobName string `protobuf:"bytes,13,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1368,7 +1412,7 @@ func (m *TaskConfig) Reset() { *m = TaskConfig{} }
func (m *TaskConfig) String() string { return proto.CompactTextString(m) }
func (*TaskConfig) ProtoMessage() {}
func (*TaskConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{26}
return fileDescriptor_driver_d88956a7e53d129e, []int{27}
}
func (m *TaskConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfig.Unmarshal(m, b)
@@ -1465,6 +1509,20 @@ func (m *TaskConfig) GetStderrPath() string {
return ""
}
func (m *TaskConfig) GetTaskGroupName() string {
if m != nil {
return m.TaskGroupName
}
return ""
}
func (m *TaskConfig) GetJobName() string {
if m != nil {
return m.JobName
}
return ""
}
type Resources struct {
// RawResources are the resources set for the task
RawResources *RawResources `protobuf:"bytes,1,opt,name=raw_resources,json=rawResources,proto3" json:"raw_resources,omitempty"`
@@ -1479,7 +1537,7 @@ func (m *Resources) Reset() { *m = Resources{} }
func (m *Resources) String() string { return proto.CompactTextString(m) }
func (*Resources) ProtoMessage() {}
func (*Resources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{27}
return fileDescriptor_driver_d88956a7e53d129e, []int{28}
}
func (m *Resources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Resources.Unmarshal(m, b)
@@ -1528,7 +1586,7 @@ func (m *RawResources) Reset() { *m = RawResources{} }
func (m *RawResources) String() string { return proto.CompactTextString(m) }
func (*RawResources) ProtoMessage() {}
func (*RawResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{28}
return fileDescriptor_driver_d88956a7e53d129e, []int{29}
}
func (m *RawResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RawResources.Unmarshal(m, b)
@@ -1599,7 +1657,7 @@ func (m *NetworkResource) Reset() { *m = NetworkResource{} }
func (m *NetworkResource) String() string { return proto.CompactTextString(m) }
func (*NetworkResource) ProtoMessage() {}
func (*NetworkResource) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{29}
return fileDescriptor_driver_d88956a7e53d129e, []int{30}
}
func (m *NetworkResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkResource.Unmarshal(m, b)
@@ -1673,7 +1731,7 @@ func (m *NetworkPort) Reset() { *m = NetworkPort{} }
func (m *NetworkPort) String() string { return proto.CompactTextString(m) }
func (*NetworkPort) ProtoMessage() {}
func (*NetworkPort) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{30}
return fileDescriptor_driver_d88956a7e53d129e, []int{31}
}
func (m *NetworkPort) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkPort.Unmarshal(m, b)
@@ -1731,7 +1789,7 @@ func (m *LinuxResources) Reset() { *m = LinuxResources{} }
func (m *LinuxResources) String() string { return proto.CompactTextString(m) }
func (*LinuxResources) ProtoMessage() {}
func (*LinuxResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{31}
return fileDescriptor_driver_d88956a7e53d129e, []int{32}
}
func (m *LinuxResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LinuxResources.Unmarshal(m, b)
@@ -1816,7 +1874,7 @@ func (m *Mount) Reset() { *m = Mount{} }
func (m *Mount) String() string { return proto.CompactTextString(m) }
func (*Mount) ProtoMessage() {}
func (*Mount) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{32}
return fileDescriptor_driver_d88956a7e53d129e, []int{33}
}
func (m *Mount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Mount.Unmarshal(m, b)
@@ -1879,7 +1937,7 @@ func (m *Device) Reset() { *m = Device{} }
func (m *Device) String() string { return proto.CompactTextString(m) }
func (*Device) ProtoMessage() {}
func (*Device) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{33}
return fileDescriptor_driver_d88956a7e53d129e, []int{34}
}
func (m *Device) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Device.Unmarshal(m, b)
@@ -1937,7 +1995,7 @@ func (m *TaskHandle) Reset() { *m = TaskHandle{} }
func (m *TaskHandle) String() string { return proto.CompactTextString(m) }
func (*TaskHandle) ProtoMessage() {}
func (*TaskHandle) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{34}
return fileDescriptor_driver_d88956a7e53d129e, []int{35}
}
func (m *TaskHandle) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskHandle.Unmarshal(m, b)
@@ -1997,7 +2055,7 @@ func (m *NetworkOverride) Reset() { *m = NetworkOverride{} }
func (m *NetworkOverride) String() string { return proto.CompactTextString(m) }
func (*NetworkOverride) ProtoMessage() {}
func (*NetworkOverride) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{35}
return fileDescriptor_driver_d88956a7e53d129e, []int{36}
}
func (m *NetworkOverride) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkOverride.Unmarshal(m, b)
@@ -2055,7 +2113,7 @@ func (m *ExitResult) Reset() { *m = ExitResult{} }
func (m *ExitResult) String() string { return proto.CompactTextString(m) }
func (*ExitResult) ProtoMessage() {}
func (*ExitResult) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{36}
return fileDescriptor_driver_d88956a7e53d129e, []int{37}
}
func (m *ExitResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExitResult.Unmarshal(m, b)
@@ -2118,7 +2176,7 @@ func (m *TaskStatus) Reset() { *m = TaskStatus{} }
func (m *TaskStatus) String() string { return proto.CompactTextString(m) }
func (*TaskStatus) ProtoMessage() {}
func (*TaskStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{37}
return fileDescriptor_driver_d88956a7e53d129e, []int{38}
}
func (m *TaskStatus) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatus.Unmarshal(m, b)
@@ -2193,7 +2251,7 @@ func (m *TaskDriverStatus) Reset() { *m = TaskDriverStatus{} }
func (m *TaskDriverStatus) String() string { return proto.CompactTextString(m) }
func (*TaskDriverStatus) ProtoMessage() {}
func (*TaskDriverStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{38}
return fileDescriptor_driver_d88956a7e53d129e, []int{39}
}
func (m *TaskDriverStatus) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskDriverStatus.Unmarshal(m, b)
@@ -2238,7 +2296,7 @@ func (m *TaskStats) Reset() { *m = TaskStats{} }
func (m *TaskStats) String() string { return proto.CompactTextString(m) }
func (*TaskStats) ProtoMessage() {}
func (*TaskStats) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{39}
return fileDescriptor_driver_d88956a7e53d129e, []int{40}
}
func (m *TaskStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStats.Unmarshal(m, b)
@@ -2300,7 +2358,7 @@ func (m *TaskResourceUsage) Reset() { *m = TaskResourceUsage{} }
func (m *TaskResourceUsage) String() string { return proto.CompactTextString(m) }
func (*TaskResourceUsage) ProtoMessage() {}
func (*TaskResourceUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{40}
return fileDescriptor_driver_d88956a7e53d129e, []int{41}
}
func (m *TaskResourceUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskResourceUsage.Unmarshal(m, b)
@@ -2352,7 +2410,7 @@ func (m *CPUUsage) Reset() { *m = CPUUsage{} }
func (m *CPUUsage) String() string { return proto.CompactTextString(m) }
func (*CPUUsage) ProtoMessage() {}
func (*CPUUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{41}
return fileDescriptor_driver_d88956a7e53d129e, []int{42}
}
func (m *CPUUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CPUUsage.Unmarshal(m, b)
@@ -2438,7 +2496,7 @@ func (m *MemoryUsage) Reset() { *m = MemoryUsage{} }
func (m *MemoryUsage) String() string { return proto.CompactTextString(m) }
func (*MemoryUsage) ProtoMessage() {}
func (*MemoryUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{42}
return fileDescriptor_driver_d88956a7e53d129e, []int{43}
}
func (m *MemoryUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MemoryUsage.Unmarshal(m, b)
@@ -2518,7 +2576,7 @@ func (m *DriverTaskEvent) Reset() { *m = DriverTaskEvent{} }
func (m *DriverTaskEvent) String() string { return proto.CompactTextString(m) }
func (*DriverTaskEvent) ProtoMessage() {}
func (*DriverTaskEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7208c577f32e2535, []int{43}
return fileDescriptor_driver_d88956a7e53d129e, []int{44}
}
func (m *DriverTaskEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DriverTaskEvent.Unmarshal(m, b)
@@ -2567,6 +2625,7 @@ func (m *DriverTaskEvent) GetAnnotations() map[string]string {
}
func init() {
proto.RegisterType((*RecoverableError)(nil), "hashicorp.nomad.plugins.drivers.proto.RecoverableError")
proto.RegisterType((*TaskConfigSchemaRequest)(nil), "hashicorp.nomad.plugins.drivers.proto.TaskConfigSchemaRequest")
proto.RegisterType((*TaskConfigSchemaResponse)(nil), "hashicorp.nomad.plugins.drivers.proto.TaskConfigSchemaResponse")
proto.RegisterType((*CapabilitiesRequest)(nil), "hashicorp.nomad.plugins.drivers.proto.CapabilitiesRequest")
@@ -3209,182 +3268,185 @@ var _Driver_serviceDesc = grpc.ServiceDesc{
}
func init() {
proto.RegisterFile("plugins/drivers/proto/driver.proto", fileDescriptor_driver_7208c577f32e2535)
proto.RegisterFile("plugins/drivers/proto/driver.proto", fileDescriptor_driver_d88956a7e53d129e)
}
var fileDescriptor_driver_7208c577f32e2535 = []byte{
// 2758 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcb, 0x6f, 0x23, 0xc7,
0xd1, 0x17, 0x9f, 0x22, 0x8b, 0x12, 0x35, 0xdb, 0xbb, 0xfb, 0x99, 0xa6, 0xf1, 0x7d, 0x5e, 0x0f,
0x60, 0x40, 0xb0, 0xbd, 0x94, 0x2d, 0xe3, 0xf3, 0x3e, 0x02, 0x3f, 0x68, 0x6a, 0x76, 0x25, 0xaf,
0x44, 0x29, 0x4d, 0x0a, 0xeb, 0x4d, 0x62, 0x4f, 0x46, 0x33, 0x2d, 0x72, 0x2c, 0xce, 0xc3, 0xdd,
0x33, 0x5a, 0x09, 0x41, 0x90, 0x20, 0x01, 0x82, 0x24, 0x40, 0x80, 0x5c, 0x82, 0xdc, 0x73, 0x0b,
0x72, 0xcd, 0x29, 0x8f, 0x4b, 0x80, 0xfc, 0x0f, 0x39, 0xe6, 0x12, 0x20, 0xd7, 0xfc, 0x05, 0x09,
0xfa, 0x31, 0xc3, 0xa1, 0xa4, 0xb5, 0x87, 0x54, 0x4e, 0x9c, 0xae, 0xee, 0xfa, 0x75, 0xb1, 0xaa,
0xba, 0xaa, 0xba, 0x0b, 0xf4, 0x70, 0x12, 0x8f, 0x5c, 0x9f, 0x6d, 0x38, 0xd4, 0x3d, 0x25, 0x94,
0x6d, 0x84, 0x34, 0x88, 0x02, 0x35, 0xea, 0x88, 0x01, 0x7a, 0x7d, 0x6c, 0xb1, 0xb1, 0x6b, 0x07,
0x34, 0xec, 0xf8, 0x81, 0x67, 0x39, 0x1d, 0xc5, 0xd3, 0x51, 0x3c, 0x72, 0x59, 0xfb, 0xff, 0x46,
0x41, 0x30, 0x9a, 0x10, 0x89, 0x70, 0x14, 0x1f, 0x6f, 0x38, 0x31, 0xb5, 0x22, 0x37, 0xf0, 0xd5,
0xfc, 0xab, 0x17, 0xe7, 0x23, 0xd7, 0x23, 0x2c, 0xb2, 0xbc, 0x50, 0x2d, 0xf8, 0x68, 0xe4, 0x46,
0xe3, 0xf8, 0xa8, 0x63, 0x07, 0xde, 0x46, 0xba, 0xe5, 0x86, 0xd8, 0x72, 0x23, 0x11, 0x93, 0x8d,
0x2d, 0x4a, 0x9c, 0x8d, 0xb1, 0x3d, 0x61, 0x21, 0xb1, 0xf9, 0xaf, 0xc9, 0x3f, 0x24, 0x82, 0xfe,
0x32, 0xbc, 0x34, 0xb4, 0xd8, 0x49, 0x2f, 0xf0, 0x8f, 0xdd, 0xd1, 0xc0, 0x1e, 0x13, 0xcf, 0xc2,
0xe4, 0xcb, 0x98, 0xb0, 0x48, 0xff, 0x0e, 0xb4, 0x2e, 0x4f, 0xb1, 0x30, 0xf0, 0x19, 0x41, 0x1f,
0x41, 0x99, 0x83, 0xb4, 0x0a, 0x77, 0x0a, 0xeb, 0x8d, 0xcd, 0xb7, 0x3a, 0x2f, 0xfa, 0xbf, 0x72,
0xf3, 0x8e, 0xda, 0xbc, 0x33, 0x08, 0x89, 0x8d, 0x05, 0xa7, 0x7e, 0x1b, 0x6e, 0xf6, 0xac, 0xd0,
0x3a, 0x72, 0x27, 0x6e, 0xe4, 0x12, 0x96, 0x6c, 0x1a, 0xc3, 0xad, 0x59, 0xb2, 0xda, 0xf0, 0x33,
0x58, 0xb1, 0x33, 0x74, 0xb5, 0xf1, 0x83, 0x4e, 0x2e, 0x45, 0x77, 0xb6, 0xc4, 0x68, 0x06, 0x78,
0x06, 0x4e, 0xbf, 0x05, 0xe8, 0x91, 0xeb, 0x8f, 0x08, 0x0d, 0xa9, 0xeb, 0x47, 0x89, 0x30, 0x3f,
0x2f, 0xc1, 0xcd, 0x19, 0xb2, 0x12, 0xe6, 0x0b, 0x00, 0x2b, 0x8a, 0xa8, 0x7b, 0x14, 0x47, 0x42,
0x94, 0xd2, 0x7a, 0x63, 0xf3, 0x93, 0x9c, 0xa2, 0x5c, 0x81, 0xd7, 0xe9, 0xa6, 0x60, 0x86, 0x1f,
0xd1, 0x73, 0x9c, 0x41, 0x47, 0x9f, 0x43, 0x75, 0x4c, 0xac, 0x49, 0x34, 0x6e, 0x15, 0xef, 0x14,
0xd6, 0x9b, 0x9b, 0x8f, 0xae, 0xb1, 0xcf, 0xb6, 0x00, 0x1a, 0x44, 0x56, 0x44, 0xb0, 0x42, 0x45,
0x77, 0x01, 0xc9, 0x2f, 0xd3, 0x21, 0xcc, 0xa6, 0x6e, 0xc8, 0xfd, 0xaf, 0x55, 0xba, 0x53, 0x58,
0xaf, 0xe3, 0x1b, 0x72, 0x66, 0x6b, 0x3a, 0xd1, 0x7e, 0x1f, 0xd6, 0x2e, 0x48, 0x8b, 0x34, 0x28,
0x9d, 0x90, 0x73, 0x61, 0x91, 0x3a, 0xe6, 0x9f, 0xe8, 0x16, 0x54, 0x4e, 0xad, 0x49, 0x4c, 0x84,
0xc8, 0x75, 0x2c, 0x07, 0x0f, 0x8b, 0xf7, 0x0b, 0xfa, 0x03, 0x68, 0x64, 0x84, 0x40, 0x4d, 0x80,
0xc3, 0xfe, 0x96, 0x31, 0x34, 0x7a, 0x43, 0x63, 0x4b, 0x5b, 0x42, 0xab, 0x50, 0x3f, 0xec, 0x6f,
0x1b, 0xdd, 0xdd, 0xe1, 0xf6, 0x33, 0xad, 0x80, 0x1a, 0xb0, 0x9c, 0x0c, 0x8a, 0xfa, 0x19, 0x20,
0x4c, 0xec, 0xe0, 0x94, 0x50, 0xee, 0x95, 0xca, 0x44, 0xe8, 0x25, 0x58, 0x8e, 0x2c, 0x76, 0x62,
0xba, 0x8e, 0x12, 0xa0, 0xca, 0x87, 0x3b, 0x0e, 0xda, 0x81, 0xea, 0xd8, 0xf2, 0x9d, 0x89, 0x14,
0xa2, 0xb1, 0xf9, 0x4e, 0x4e, 0xbd, 0x71, 0xf0, 0x6d, 0xc1, 0x88, 0x15, 0x00, 0x77, 0xd5, 0x99,
0x9d, 0xa5, 0x36, 0xf5, 0x67, 0xa0, 0x0d, 0x22, 0x8b, 0x46, 0x59, 0x71, 0x0c, 0x28, 0xf3, 0xfd,
0x95, 0x7b, 0xce, 0xb3, 0xa7, 0x3c, 0x66, 0x58, 0xb0, 0xeb, 0xff, 0x2a, 0xc2, 0x8d, 0x0c, 0xb6,
0x72, 0xbb, 0xa7, 0x50, 0xa5, 0x84, 0xc5, 0x93, 0x48, 0xc0, 0x37, 0x37, 0x3f, 0xcc, 0x09, 0x7f,
0x09, 0xa9, 0x83, 0x05, 0x0c, 0x56, 0x70, 0x68, 0x1d, 0x34, 0xc9, 0x61, 0x12, 0x4a, 0x03, 0x6a,
0x7a, 0x6c, 0xa4, 0x4c, 0xd7, 0x94, 0x74, 0x83, 0x93, 0xf7, 0xd8, 0x28, 0xa3, 0xd5, 0xd2, 0x35,
0xb5, 0x8a, 0x2c, 0xd0, 0x7c, 0x12, 0x3d, 0x0f, 0xe8, 0x89, 0xc9, 0x55, 0x4b, 0x5d, 0x87, 0xb4,
0xca, 0x02, 0xf4, 0xbd, 0x9c, 0xa0, 0x7d, 0xc9, 0xbe, 0xaf, 0xb8, 0xf1, 0x9a, 0x3f, 0x4b, 0xd0,
0xdf, 0x84, 0xaa, 0xfc, 0xa7, 0xdc, 0x93, 0x06, 0x87, 0xbd, 0x9e, 0x31, 0x18, 0x68, 0x4b, 0xa8,
0x0e, 0x15, 0x6c, 0x0c, 0x31, 0xf7, 0xb0, 0x3a, 0x54, 0x1e, 0x75, 0x87, 0xdd, 0x5d, 0xad, 0xa8,
0xbf, 0x01, 0x6b, 0x4f, 0x2d, 0x37, 0xca, 0xe3, 0x5c, 0x7a, 0x00, 0xda, 0x74, 0xad, 0xb2, 0xce,
0xce, 0x8c, 0x75, 0xf2, 0xab, 0xc6, 0x38, 0x73, 0xa3, 0x0b, 0xf6, 0xd0, 0xa0, 0x44, 0x28, 0x55,
0x26, 0xe0, 0x9f, 0xfa, 0x73, 0x58, 0x1b, 0x44, 0x41, 0x98, 0xcb, 0xf3, 0xdf, 0x85, 0x65, 0x9e,
0x27, 0x82, 0x38, 0x52, 0xae, 0xff, 0x72, 0x47, 0xe6, 0x91, 0x4e, 0x92, 0x47, 0x3a, 0x5b, 0x2a,
0xcf, 0xe0, 0x64, 0x25, 0xfa, 0x1f, 0xa8, 0x32, 0x77, 0xe4, 0x5b, 0x13, 0x75, 0xf4, 0xd5, 0x48,
0x47, 0xdc, 0xc9, 0x93, 0x8d, 0x95, 0xe3, 0xf7, 0x00, 0x6d, 0x11, 0x16, 0xd1, 0xe0, 0x3c, 0x97,
0x3c, 0xb7, 0xa0, 0x72, 0x1c, 0x50, 0x5b, 0x1e, 0xc4, 0x1a, 0x96, 0x03, 0x7e, 0xa8, 0x66, 0x40,
0x14, 0xf6, 0x5d, 0x40, 0x3b, 0x3e, 0x4f, 0x10, 0xf9, 0x0c, 0xf1, 0xcb, 0x22, 0xdc, 0x9c, 0x59,
0xaf, 0x8c, 0xb1, 0xf8, 0x39, 0xe4, 0x81, 0x29, 0x66, 0xf2, 0x1c, 0xa2, 0x7d, 0xa8, 0xca, 0x15,
0x4a, 0x93, 0xf7, 0xe6, 0x00, 0x92, 0x39, 0x47, 0xc1, 0x29, 0x98, 0x2b, 0x9d, 0xbe, 0xf4, 0xdf,
0x76, 0x7a, 0x2d, 0xf9, 0x1f, 0xec, 0x6b, 0xf5, 0xf7, 0x6d, 0xb8, 0x91, 0x59, 0xac, 0x94, 0xf7,
0x08, 0x2a, 0x8c, 0x13, 0x94, 0xf6, 0xde, 0x9e, 0x53, 0x7b, 0x0c, 0x4b, 0x76, 0xfd, 0xa6, 0x04,
0x37, 0x4e, 0x89, 0x9f, 0x8a, 0xa2, 0x6f, 0xc1, 0x8d, 0x81, 0x70, 0xad, 0x5c, 0xbe, 0x33, 0x75,
0xcb, 0xe2, 0x8c, 0x5b, 0xde, 0x02, 0x94, 0x45, 0x51, 0xce, 0x73, 0x0e, 0x6b, 0xc6, 0x19, 0xb1,
0x73, 0x21, 0xb7, 0x60, 0xd9, 0x0e, 0x3c, 0xcf, 0xf2, 0x9d, 0x56, 0xf1, 0x4e, 0x69, 0xbd, 0x8e,
0x93, 0x61, 0xf6, 0xfc, 0x94, 0xf2, 0x9e, 0x1f, 0xfd, 0x17, 0x05, 0xd0, 0xa6, 0x7b, 0x2b, 0x45,
0x72, 0xe9, 0x23, 0x87, 0x03, 0xf1, 0xbd, 0x57, 0xb0, 0x1a, 0x29, 0x7a, 0x72, 0xc4, 0x25, 0x9d,
0x50, 0x9a, 0x09, 0x21, 0xa5, 0x6b, 0x86, 0x10, 0xfd, 0x1f, 0x05, 0x40, 0x97, 0xab, 0x1e, 0xf4,
0x1a, 0xac, 0x30, 0xe2, 0x3b, 0xa6, 0x54, 0xa3, 0xb4, 0x70, 0x0d, 0x37, 0x38, 0x4d, 0xea, 0x93,
0x21, 0x04, 0x65, 0x72, 0x46, 0x6c, 0x75, 0x5a, 0xc5, 0x37, 0x1a, 0xc3, 0xca, 0x31, 0x33, 0x5d,
0x16, 0x4c, 0xac, 0xb4, 0x3c, 0x68, 0x6e, 0x1a, 0x0b, 0x57, 0x5f, 0x9d, 0x47, 0x83, 0x9d, 0x04,
0x0c, 0x37, 0x8e, 0x59, 0x3a, 0xd0, 0x3b, 0xd0, 0xc8, 0xcc, 0xa1, 0x1a, 0x94, 0xfb, 0xfb, 0x7d,
0x43, 0x5b, 0x42, 0x00, 0xd5, 0xde, 0x36, 0xde, 0xdf, 0x1f, 0xca, 0xa8, 0xbd, 0xb3, 0xd7, 0x7d,
0x6c, 0x68, 0x45, 0xfd, 0x4f, 0x65, 0x80, 0x69, 0xfa, 0x44, 0x4d, 0x28, 0xa6, 0x96, 0x2e, 0xba,
0x0e, 0xff, 0x33, 0xbe, 0xe5, 0x25, 0x85, 0x88, 0xf8, 0x46, 0x9b, 0x70, 0xdb, 0x63, 0xa3, 0xd0,
0xb2, 0x4f, 0x4c, 0x95, 0xf5, 0x6c, 0xc1, 0x2c, 0xfe, 0xd5, 0x0a, 0xbe, 0xa9, 0x26, 0x95, 0xd4,
0x12, 0x77, 0x17, 0x4a, 0xc4, 0x3f, 0x6d, 0x95, 0x45, 0xa9, 0xf7, 0x70, 0xee, 0xb4, 0xde, 0x31,
0xfc, 0x53, 0x59, 0xda, 0x71, 0x18, 0xd4, 0x87, 0x3a, 0x25, 0x2c, 0x88, 0xa9, 0x4d, 0x58, 0xab,
0x32, 0xd7, 0x21, 0xc3, 0x09, 0x1f, 0x9e, 0x42, 0xa0, 0x2d, 0xa8, 0x7a, 0x41, 0xec, 0x47, 0xac,
0x55, 0x15, 0x02, 0xbe, 0x95, 0x13, 0x6c, 0x8f, 0x33, 0x61, 0xc5, 0x8b, 0x1e, 0xc3, 0xb2, 0x43,
0x4e, 0x5d, 0x2e, 0xd3, 0xb2, 0x80, 0xb9, 0x9b, 0xd7, 0xbe, 0x82, 0x0b, 0x27, 0xdc, 0x5c, 0xe9,
0x31, 0x23, 0xb4, 0x55, 0x93, 0x4a, 0xe7, 0xdf, 0xe8, 0x15, 0xa8, 0x5b, 0x93, 0x49, 0x60, 0x9b,
0x8e, 0x4b, 0x5b, 0x75, 0x31, 0x51, 0x13, 0x84, 0x2d, 0x97, 0xa2, 0x57, 0xa1, 0x21, 0x4f, 0x86,
0x19, 0x5a, 0xd1, 0xb8, 0x05, 0x62, 0x1a, 0x24, 0xe9, 0xc0, 0x8a, 0xc6, 0x6a, 0x01, 0xa1, 0x54,
0x2e, 0x68, 0xa4, 0x0b, 0x08, 0xa5, 0x7c, 0x41, 0xfb, 0x3d, 0xa8, 0x25, 0x2a, 0x9e, 0xab, 0x1e,
0xfd, 0x6b, 0x01, 0xea, 0xa9, 0x4a, 0xd1, 0xa7, 0xb0, 0x4a, 0xad, 0xe7, 0xe6, 0xd4, 0x36, 0x32,
0x00, 0xbe, 0x9b, 0xd7, 0x36, 0xd6, 0xf3, 0xa9, 0x79, 0x56, 0x68, 0x66, 0x84, 0x3e, 0x87, 0xb5,
0x89, 0xeb, 0xc7, 0x67, 0x19, 0x6c, 0x99, 0x51, 0xfe, 0x3f, 0x27, 0xf6, 0x2e, 0xe7, 0x9e, 0xa2,
0x37, 0x27, 0x33, 0x63, 0xfd, 0xf7, 0x05, 0x58, 0xc9, 0x6e, 0xcf, 0x95, 0x60, 0x87, 0xb1, 0xf8,
0x03, 0x25, 0xcc, 0x3f, 0x79, 0xd0, 0xf1, 0x88, 0x17, 0xd0, 0x73, 0xb1, 0x73, 0x09, 0xab, 0x11,
0xb7, 0x96, 0xe3, 0xb2, 0x13, 0xe1, 0xfd, 0x25, 0x2c, 0xbe, 0x39, 0xcd, 0x0d, 0x42, 0x26, 0xea,
0xb1, 0x12, 0x16, 0xdf, 0x08, 0x43, 0x4d, 0xa5, 0x1a, 0xee, 0xb3, 0xa5, 0xf9, 0x53, 0x56, 0x22,
0x1c, 0x4e, 0x71, 0xf4, 0x5f, 0x17, 0x61, 0xed, 0xc2, 0x2c, 0x97, 0x53, 0x3a, 0x52, 0x12, 0xb0,
0xe5, 0x88, 0xcb, 0x64, 0xbb, 0x4e, 0x52, 0x15, 0x89, 0x6f, 0x71, 0xdc, 0x43, 0x55, 0xb1, 0x14,
0xdd, 0x90, 0x1b, 0xda, 0x3b, 0x72, 0x23, 0x29, 0x78, 0x05, 0xcb, 0x01, 0x7a, 0x06, 0x4d, 0x4a,
0x18, 0xa1, 0xa7, 0xc4, 0x31, 0xc3, 0x80, 0x46, 0x89, 0xfc, 0x9b, 0xf3, 0xc9, 0x7f, 0x10, 0xd0,
0x08, 0xaf, 0x26, 0x48, 0x7c, 0xc4, 0xd0, 0x53, 0x58, 0x75, 0xce, 0x7d, 0xcb, 0x73, 0x6d, 0x85,
0x5c, 0x5d, 0x18, 0x79, 0x45, 0x01, 0x09, 0x60, 0x7e, 0x51, 0xca, 0x4c, 0xf2, 0x3f, 0x36, 0xb1,
0x8e, 0xc8, 0x44, 0xe9, 0x44, 0x0e, 0x66, 0xfd, 0xba, 0xa2, 0xfc, 0x5a, 0xff, 0x77, 0x01, 0x9a,
0xb3, 0xee, 0x82, 0xfe, 0x17, 0xc0, 0x0e, 0x63, 0x33, 0x24, 0xd4, 0x0d, 0x1c, 0xe5, 0x14, 0x75,
0x3b, 0x8c, 0x0f, 0x04, 0x81, 0x1f, 0x4e, 0x3e, 0xfd, 0x65, 0x1c, 0x44, 0x96, 0xf2, 0x8e, 0x9a,
0x1d, 0xc6, 0xdf, 0xe4, 0xe3, 0x84, 0x57, 0xdc, 0xe4, 0x99, 0xf2, 0x12, 0xbe, 0x7c, 0x20, 0x08,
0xe8, 0x2d, 0x40, 0xd2, 0x91, 0xcc, 0x89, 0xeb, 0xb9, 0x91, 0x79, 0x74, 0xce, 0xef, 0xc4, 0xd2,
0x71, 0x34, 0x39, 0xb3, 0xcb, 0x27, 0x3e, 0xe6, 0x74, 0xa4, 0xc3, 0x6a, 0x10, 0x78, 0x26, 0xb3,
0x03, 0x4a, 0x4c, 0xcb, 0xf9, 0x42, 0x44, 0xbf, 0x12, 0x6e, 0x04, 0x81, 0x37, 0xe0, 0xb4, 0xae,
0xf3, 0x05, 0x3f, 0xec, 0x76, 0x18, 0x33, 0x12, 0x99, 0xfc, 0xa7, 0x55, 0x95, 0x87, 0x5d, 0x92,
0x7a, 0x61, 0xcc, 0x32, 0x0b, 0x3c, 0xe2, 0xf1, 0x60, 0x95, 0x59, 0xb0, 0x47, 0x3c, 0xa6, 0x7f,
0x06, 0x15, 0x11, 0xda, 0xf8, 0x1f, 0x13, 0xd9, 0x5f, 0x44, 0x0d, 0xa9, 0xba, 0x1a, 0x27, 0x88,
0xa0, 0xf2, 0x0a, 0xd4, 0xc7, 0x01, 0x53, 0x31, 0x47, 0x7a, 0x55, 0x8d, 0x13, 0xc4, 0x64, 0x1b,
0x6a, 0x94, 0x58, 0x4e, 0xe0, 0x4f, 0xce, 0xc5, 0x7f, 0xae, 0xe1, 0x74, 0xac, 0x7f, 0x09, 0x55,
0x19, 0xf2, 0xae, 0x81, 0x7f, 0x17, 0x90, 0x3d, 0xa2, 0x41, 0x1c, 0x72, 0xa3, 0x78, 0x2e, 0x63,
0x6e, 0xe0, 0xb3, 0xe4, 0xda, 0x2d, 0x67, 0x0e, 0xa6, 0x13, 0xfa, 0x5f, 0x0a, 0x32, 0xcd, 0xc9,
0x3b, 0x14, 0x2f, 0x14, 0x54, 0xce, 0x5a, 0xf8, 0xa2, 0xa9, 0x00, 0x92, 0x62, 0x8f, 0xa8, 0xe7,
0x85, 0x79, 0x8b, 0x3d, 0x22, 0x8b, 0x3d, 0xc2, 0x2b, 0x0b, 0x95, 0x4d, 0x25, 0x9c, 0x4c, 0xa6,
0x0d, 0x27, 0xad, 0x82, 0x89, 0xfe, 0xcf, 0x42, 0x7a, 0xda, 0x93, 0x6a, 0x15, 0x7d, 0x0e, 0x35,
0x7e, 0x70, 0x4c, 0xcf, 0x0a, 0xd5, 0x43, 0x4a, 0x6f, 0xb1, 0x42, 0xb8, 0xc3, 0xcf, 0xc9, 0x9e,
0x15, 0xca, 0x34, 0xbb, 0x1c, 0xca, 0x11, 0x8f, 0x1a, 0x96, 0x33, 0x8d, 0x1a, 0xfc, 0x1b, 0xbd,
0x0e, 0x4d, 0x2b, 0x8e, 0x02, 0xd3, 0x72, 0x4e, 0x09, 0x8d, 0x5c, 0x46, 0x94, 0x85, 0x57, 0x39,
0xb5, 0x9b, 0x10, 0xdb, 0x0f, 0x61, 0x25, 0x8b, 0xf9, 0x75, 0x79, 0xa5, 0x92, 0xcd, 0x2b, 0xdf,
0x05, 0x98, 0x16, 0x65, 0xdc, 0x13, 0xc8, 0x99, 0x1b, 0x99, 0x76, 0xe0, 0xc8, 0xa8, 0x56, 0xc1,
0x35, 0x4e, 0xe8, 0x05, 0x0e, 0xb9, 0x50, 0xe2, 0x56, 0x92, 0x12, 0x97, 0x9f, 0x3b, 0x7e, 0x54,
0x4e, 0xdc, 0xc9, 0x84, 0x38, 0x4a, 0xc2, 0x7a, 0x10, 0x78, 0x4f, 0x04, 0x41, 0xff, 0x73, 0x51,
0x7a, 0x84, 0xbc, 0x60, 0xe4, 0x2a, 0x7c, 0x52, 0x53, 0x97, 0xae, 0x67, 0xea, 0x07, 0x00, 0x2c,
0xb2, 0x68, 0x44, 0x1c, 0xd3, 0x8a, 0xd4, 0x9d, 0xbd, 0x7d, 0xa9, 0x46, 0x1e, 0x26, 0x6f, 0x95,
0xb8, 0xae, 0x56, 0x77, 0x23, 0xf4, 0x3e, 0xac, 0xd8, 0x81, 0x17, 0x4e, 0x88, 0x62, 0xae, 0x7c,
0x2d, 0x73, 0x23, 0x5d, 0xdf, 0x8d, 0x32, 0x05, 0x72, 0xf5, 0xba, 0x05, 0xf2, 0x1f, 0x0a, 0xf2,
0x9e, 0x94, 0xbd, 0xa6, 0xa1, 0xd1, 0x15, 0x0f, 0x7b, 0x8f, 0x17, 0xbc, 0xf3, 0x7d, 0xd5, 0xab,
0xde, 0x75, 0x9f, 0xd1, 0xfe, 0x58, 0x82, 0x7a, 0x7a, 0xdd, 0xba, 0x64, 0xfb, 0xfb, 0x50, 0x4f,
0x1f, 0x8a, 0x55, 0x99, 0xf1, 0x95, 0xe6, 0x49, 0x17, 0xa3, 0x63, 0x40, 0xd6, 0x68, 0x94, 0x16,
0x29, 0x66, 0xcc, 0xac, 0x51, 0x72, 0x41, 0xbd, 0x3f, 0x87, 0x1e, 0x92, 0xcc, 0x73, 0xc8, 0xf9,
0xb1, 0x66, 0x8d, 0x46, 0x33, 0x14, 0xf4, 0x3d, 0xb8, 0x3d, 0xbb, 0x87, 0x79, 0x74, 0x6e, 0x86,
0xae, 0xa3, 0x0a, 0xec, 0xed, 0x79, 0x6f, 0x9c, 0x9d, 0x19, 0xf8, 0x8f, 0xcf, 0x0f, 0x5c, 0x47,
0xea, 0x1c, 0xd1, 0x4b, 0x13, 0xed, 0x1f, 0xc0, 0x4b, 0x2f, 0x58, 0x7e, 0x85, 0x0d, 0xfa, 0x59,
0x1b, 0x5c, 0x47, 0x09, 0x19, 0xeb, 0xfd, 0xa6, 0x20, 0x2f, 0xc6, 0xb3, 0x3a, 0xe9, 0x4e, 0x2b,
0xb6, 0xc6, 0xe6, 0x46, 0xce, 0x7d, 0x7a, 0x07, 0x87, 0x12, 0x5e, 0x94, 0x78, 0x9f, 0xcc, 0x94,
0x78, 0xf9, 0xcb, 0x90, 0x3d, 0xc1, 0x24, 0x81, 0x14, 0x82, 0xfe, 0xbb, 0x12, 0xd4, 0x12, 0x74,
0x51, 0x7f, 0x9f, 0xb3, 0x88, 0x78, 0xa6, 0x97, 0x84, 0xb0, 0x02, 0x06, 0x49, 0xda, 0xe3, 0x41,
0xec, 0x15, 0xa8, 0xf3, 0x32, 0x5f, 0x4e, 0x17, 0xc5, 0x74, 0x8d, 0x13, 0xc4, 0xe4, 0xab, 0xd0,
0x88, 0x82, 0xc8, 0x9a, 0x98, 0x91, 0x6b, 0x9f, 0xc8, 0x24, 0x57, 0xc0, 0x20, 0x48, 0x43, 0x4e,
0x41, 0x6f, 0xc2, 0x8d, 0x68, 0x4c, 0x83, 0x28, 0x9a, 0xf0, 0x0a, 0x4d, 0xd4, 0x24, 0xb2, 0x84,
0x28, 0x63, 0x2d, 0x9d, 0x90, 0xb5, 0x0a, 0xe3, 0xd1, 0x7b, 0xba, 0x98, 0xbb, 0xae, 0x08, 0x22,
0x65, 0xbc, 0x9a, 0x52, 0xb9, 0x6b, 0xf3, 0xfb, 0x7d, 0x48, 0xa8, 0x4d, 0x7c, 0x19, 0x2b, 0x0a,
0x38, 0x19, 0x22, 0x13, 0xd6, 0x3c, 0x62, 0xb1, 0x98, 0x12, 0xc7, 0x3c, 0x76, 0xc9, 0xc4, 0x91,
0xf7, 0x9d, 0x66, 0xee, 0x7a, 0x36, 0x51, 0x4b, 0xe7, 0x91, 0xe0, 0xc6, 0xcd, 0x04, 0x4e, 0x8e,
0x79, 0x7d, 0x20, 0xbf, 0xd0, 0x1a, 0x34, 0x06, 0xcf, 0x06, 0x43, 0x63, 0xcf, 0xdc, 0xdb, 0xdf,
0x32, 0xd4, 0x03, 0xf7, 0xc0, 0xc0, 0x72, 0x58, 0xe0, 0xf3, 0xc3, 0xfd, 0x61, 0x77, 0xd7, 0x1c,
0xee, 0xf4, 0x9e, 0x0c, 0xb4, 0x22, 0xba, 0x0d, 0x37, 0x86, 0xdb, 0x78, 0x7f, 0x38, 0xdc, 0x35,
0xb6, 0xcc, 0x03, 0x03, 0xef, 0xec, 0x6f, 0x0d, 0xb4, 0x12, 0x42, 0xd0, 0x9c, 0x92, 0x87, 0x3b,
0x7b, 0x86, 0x56, 0x46, 0x0d, 0x58, 0x3e, 0x30, 0x70, 0xcf, 0xe8, 0x0f, 0xb5, 0x8a, 0xfe, 0xb7,
0x22, 0x34, 0x32, 0x56, 0xe4, 0x8e, 0x4c, 0x99, 0xbc, 0xbf, 0x94, 0x31, 0xff, 0xe4, 0xc1, 0xc4,
0xb6, 0xec, 0xb1, 0xb4, 0x4e, 0x19, 0xcb, 0x01, 0xb7, 0x9b, 0x67, 0x9d, 0x65, 0xce, 0x79, 0x19,
0xd7, 0x3c, 0xeb, 0x4c, 0x82, 0xbc, 0x06, 0x2b, 0x27, 0x84, 0xfa, 0x64, 0xa2, 0xe6, 0xa5, 0x45,
0x1a, 0x92, 0x26, 0x97, 0xac, 0x83, 0xa6, 0x96, 0x4c, 0x61, 0xa4, 0x39, 0x9a, 0x92, 0xbe, 0x97,
0x80, 0x1d, 0x5d, 0xd6, 0x7a, 0x55, 0x68, 0xfd, 0xc1, 0xfc, 0x4e, 0xfa, 0x22, 0xc5, 0x0f, 0x52,
0xc5, 0x2f, 0x43, 0x09, 0x27, 0x6f, 0xbd, 0xbd, 0x6e, 0x6f, 0x9b, 0x2b, 0x7b, 0x15, 0xea, 0x7b,
0xdd, 0x4f, 0xcd, 0xc3, 0x81, 0x78, 0x39, 0x40, 0x1a, 0xac, 0x3c, 0x31, 0x70, 0xdf, 0xd8, 0x55,
0x94, 0x12, 0xba, 0x05, 0x9a, 0xa2, 0x4c, 0xd7, 0x95, 0xf5, 0xdf, 0x16, 0x61, 0x4d, 0xc6, 0xf5,
0xf4, 0x31, 0xeb, 0xc5, 0xaf, 0x4a, 0x8b, 0x87, 0xde, 0x16, 0x2c, 0x7b, 0x84, 0xa5, 0x76, 0xa8,
0xe3, 0x64, 0x88, 0x5c, 0x68, 0x58, 0xbe, 0x1f, 0x44, 0xe2, 0x45, 0x84, 0xa9, 0x10, 0xf9, 0x78,
0xae, 0xb7, 0x97, 0x54, 0xf2, 0x4e, 0x77, 0x8a, 0x24, 0x23, 0x64, 0x16, 0xbb, 0xfd, 0x01, 0x68,
0x17, 0x17, 0xcc, 0x93, 0x97, 0xde, 0x78, 0x67, 0x9a, 0x96, 0x08, 0x77, 0xd0, 0xc3, 0xfe, 0x93,
0xfe, 0xfe, 0xd3, 0xbe, 0xb6, 0xc4, 0x07, 0xf8, 0xb0, 0xdf, 0xdf, 0xe9, 0x3f, 0xd6, 0x0a, 0x08,
0xa0, 0x6a, 0x7c, 0xba, 0x33, 0x34, 0xb6, 0xb4, 0xe2, 0xe6, 0xdf, 0x57, 0xa1, 0x2a, 0x85, 0x44,
0xbf, 0x52, 0x29, 0x39, 0xdb, 0x71, 0x44, 0x1f, 0xcc, 0x5d, 0xda, 0xce, 0x74, 0x31, 0xdb, 0x1f,
0x2e, 0xcc, 0xaf, 0x1e, 0x15, 0x97, 0xd0, 0xcf, 0x0a, 0xb0, 0x32, 0xf3, 0x8a, 0x96, 0xf7, 0x01,
0xe8, 0x8a, 0x06, 0x67, 0xfb, 0x1b, 0x0b, 0xf1, 0xa6, 0xb2, 0xfc, 0xb4, 0x00, 0x8d, 0x4c, 0x6b,
0x0f, 0x3d, 0x58, 0xa4, 0x1d, 0x28, 0x25, 0x79, 0xb8, 0x78, 0x27, 0x51, 0x5f, 0x7a, 0xbb, 0x80,
0x7e, 0x52, 0x80, 0x46, 0xa6, 0x2f, 0x96, 0x5b, 0x94, 0xcb, 0x5d, 0xbc, 0xdc, 0xa2, 0x5c, 0xd5,
0x86, 0x5b, 0x42, 0x3f, 0x2c, 0x40, 0x3d, 0xed, 0x71, 0xa1, 0x7b, 0xf3, 0x77, 0xc5, 0xa4, 0x10,
0xf7, 0x17, 0x6d, 0xa7, 0xe9, 0x4b, 0xe8, 0xfb, 0x50, 0x4b, 0x1a, 0x42, 0x28, 0x6f, 0x1a, 0xb9,
0xd0, 0x6d, 0x6a, 0xdf, 0x9b, 0x9b, 0x2f, 0xbb, 0x7d, 0xd2, 0xa5, 0xc9, 0xbd, 0xfd, 0x85, 0x7e,
0x52, 0xfb, 0xde, 0xdc, 0x7c, 0xe9, 0xf6, 0xdc, 0x13, 0x32, 0xcd, 0x9c, 0xdc, 0x9e, 0x70, 0xb9,
0x8b, 0x94, 0xdb, 0x13, 0xae, 0xea, 0x1d, 0x49, 0x41, 0x32, 0xed, 0xa0, 0xdc, 0x82, 0x5c, 0x6e,
0x39, 0xe5, 0x16, 0xe4, 0x8a, 0xee, 0x93, 0x72, 0xc9, 0x69, 0x81, 0x7e, 0x6f, 0xee, 0x0e, 0xca,
0x9c, 0x2e, 0x79, 0xa9, 0x87, 0xa3, 0x2f, 0xa1, 0x1f, 0xa9, 0x27, 0x03, 0xd9, 0x7e, 0x41, 0xf3,
0x40, 0xcd, 0x74, 0x6c, 0xda, 0xef, 0x2d, 0x96, 0x6a, 0x44, 0x8c, 0xf8, 0x71, 0x01, 0x60, 0xda,
0xa8, 0xc9, 0x2d, 0xc4, 0xa5, 0x0e, 0x51, 0xfb, 0xc1, 0x02, 0x9c, 0xd9, 0xe3, 0x91, 0xf4, 0x66,
0x72, 0x1f, 0x8f, 0x0b, 0x8d, 0xa4, 0xdc, 0xc7, 0xe3, 0x62, 0x13, 0x48, 0x5f, 0xfa, 0x78, 0xf9,
0x5b, 0x15, 0x99, 0xfb, 0xab, 0xe2, 0xe7, 0xdd, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x79,
0xa9, 0xc4, 0x43, 0x24, 0x00, 0x00,
var fileDescriptor_driver_d88956a7e53d129e = []byte{
// 2814 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xdd, 0x6f, 0x23, 0x49,
0x11, 0x8f, 0x3f, 0x63, 0x97, 0x1d, 0x67, 0xb6, 0x77, 0x97, 0xf3, 0xf9, 0x04, 0xb7, 0x37, 0xd2,
0xa1, 0xe8, 0xee, 0xd6, 0xb9, 0xcb, 0xc1, 0xed, 0x07, 0xba, 0x0f, 0x9f, 0x33, 0xbb, 0xc9, 0x6d,
0xe2, 0x84, 0xb6, 0xa3, 0xbd, 0x05, 0xee, 0x86, 0xc9, 0x4c, 0xc7, 0x9e, 0x8d, 0xe7, 0xe3, 0xba,
0xc7, 0xd9, 0x44, 0x08, 0x81, 0x40, 0x42, 0x80, 0x84, 0xc4, 0x0b, 0xe2, 0x9d, 0x37, 0xc4, 0x2b,
0x4f, 0x20, 0x5e, 0x90, 0xf8, 0x1f, 0x78, 0xe4, 0x05, 0x89, 0x57, 0xfe, 0x82, 0x43, 0xfd, 0x31,
0xe3, 0x71, 0x92, 0xbd, 0x1d, 0x3b, 0x3c, 0x79, 0xba, 0xba, 0xeb, 0xd7, 0xe5, 0xaa, 0xea, 0xaa,
0xea, 0x2e, 0xd0, 0xc3, 0xf1, 0x64, 0xe8, 0xfa, 0x6c, 0xdd, 0xa1, 0xee, 0x09, 0xa1, 0x6c, 0x3d,
0xa4, 0x41, 0x14, 0xa8, 0x51, 0x5b, 0x0c, 0xd0, 0xeb, 0x23, 0x8b, 0x8d, 0x5c, 0x3b, 0xa0, 0x61,
0xdb, 0x0f, 0x3c, 0xcb, 0x69, 0x2b, 0x9e, 0xb6, 0xe2, 0x91, 0xcb, 0x5a, 0xdf, 0x18, 0x06, 0xc1,
0x70, 0x4c, 0x24, 0xc2, 0xe1, 0xe4, 0x68, 0xdd, 0x99, 0x50, 0x2b, 0x72, 0x03, 0x5f, 0xcd, 0xbf,
0x7a, 0x7e, 0x3e, 0x72, 0x3d, 0xc2, 0x22, 0xcb, 0x0b, 0xd5, 0x82, 0x8f, 0x86, 0x6e, 0x34, 0x9a,
0x1c, 0xb6, 0xed, 0xc0, 0x5b, 0x4f, 0xb6, 0x5c, 0x17, 0x5b, 0xae, 0xc7, 0x62, 0xb2, 0x91, 0x45,
0x89, 0xb3, 0x3e, 0xb2, 0xc7, 0x2c, 0x24, 0x36, 0xff, 0x35, 0xf9, 0x87, 0x44, 0xd0, 0xbf, 0x05,
0x1a, 0x26, 0x76, 0x70, 0x42, 0xa8, 0x75, 0x38, 0x26, 0x06, 0xa5, 0x01, 0x45, 0xb7, 0xa0, 0x46,
0xa7, 0xb4, 0x66, 0xee, 0x56, 0x6e, 0xad, 0x82, 0xd3, 0x24, 0xfd, 0x65, 0x78, 0x69, 0x60, 0xb1,
0xe3, 0x6e, 0xe0, 0x1f, 0xb9, 0xc3, 0xbe, 0x3d, 0x22, 0x9e, 0x85, 0xc9, 0x17, 0x13, 0xc2, 0x22,
0xfd, 0x07, 0xd0, 0xbc, 0x38, 0xc5, 0xc2, 0xc0, 0x67, 0x04, 0x7d, 0x04, 0x45, 0xbe, 0xb5, 0x40,
0xac, 0x6d, 0xbc, 0xd5, 0x7e, 0x9e, 0x96, 0xa4, 0xc8, 0x6d, 0x25, 0x72, 0xbb, 0x1f, 0x12, 0x1b,
0x0b, 0x4e, 0xfd, 0x26, 0x5c, 0xef, 0x5a, 0xa1, 0x75, 0xe8, 0x8e, 0xdd, 0xc8, 0x25, 0x2c, 0xde,
0x74, 0x02, 0x37, 0x66, 0xc9, 0x6a, 0xc3, 0xcf, 0xa0, 0x6e, 0xa7, 0xe8, 0x6a, 0xe3, 0x7b, 0xed,
0x4c, 0xe6, 0x69, 0x6f, 0x8a, 0xd1, 0x0c, 0xf0, 0x0c, 0x9c, 0x7e, 0x03, 0xd0, 0x03, 0xd7, 0x1f,
0x12, 0x1a, 0x52, 0xd7, 0x8f, 0x62, 0x61, 0x7e, 0x5d, 0x80, 0xeb, 0x33, 0x64, 0x25, 0xcc, 0x53,
0x00, 0x2b, 0x8a, 0xa8, 0x7b, 0x38, 0x89, 0x84, 0x28, 0x85, 0xb5, 0xda, 0xc6, 0x27, 0x19, 0x45,
0xb9, 0x04, 0xaf, 0xdd, 0x49, 0xc0, 0x0c, 0x3f, 0xa2, 0x67, 0x38, 0x85, 0x8e, 0x3e, 0x87, 0xf2,
0x88, 0x58, 0xe3, 0x68, 0xd4, 0xcc, 0xdf, 0xca, 0xad, 0x35, 0x36, 0x1e, 0x5c, 0x61, 0x9f, 0x2d,
0x01, 0xd4, 0x8f, 0xac, 0x88, 0x60, 0x85, 0x8a, 0x6e, 0x03, 0x92, 0x5f, 0xa6, 0x43, 0x98, 0x4d,
0xdd, 0x90, 0x7b, 0x6d, 0xb3, 0x70, 0x2b, 0xb7, 0x56, 0xc5, 0xd7, 0xe4, 0xcc, 0xe6, 0x74, 0xa2,
0xf5, 0x3e, 0xac, 0x9e, 0x93, 0x16, 0x69, 0x50, 0x38, 0x26, 0x67, 0xc2, 0x22, 0x55, 0xcc, 0x3f,
0xd1, 0x0d, 0x28, 0x9d, 0x58, 0xe3, 0x09, 0x11, 0x22, 0x57, 0xb1, 0x1c, 0xdc, 0xcf, 0xdf, 0xcd,
0xe9, 0xf7, 0xa0, 0x96, 0x12, 0x02, 0x35, 0x00, 0x0e, 0x7a, 0x9b, 0xc6, 0xc0, 0xe8, 0x0e, 0x8c,
0x4d, 0x6d, 0x09, 0xad, 0x40, 0xf5, 0xa0, 0xb7, 0x65, 0x74, 0x76, 0x06, 0x5b, 0x4f, 0xb4, 0x1c,
0xaa, 0xc1, 0x72, 0x3c, 0xc8, 0xeb, 0xa7, 0x80, 0x94, 0x7f, 0x73, 0xaf, 0x54, 0x26, 0x42, 0x2f,
0xc1, 0x72, 0x64, 0xb1, 0x63, 0xd3, 0x75, 0x94, 0x00, 0x65, 0x3e, 0xdc, 0x76, 0xd0, 0x36, 0x94,
0x47, 0x96, 0xef, 0x8c, 0xa5, 0x10, 0xb5, 0x8d, 0x77, 0x32, 0xea, 0x8d, 0x83, 0x6f, 0x09, 0x46,
0xac, 0x00, 0xb8, 0xab, 0xce, 0xec, 0x2c, 0xb5, 0xa9, 0x3f, 0x01, 0xad, 0x1f, 0x59, 0x34, 0x4a,
0x8b, 0x63, 0x40, 0x91, 0xef, 0xaf, 0xdc, 0x73, 0x9e, 0x3d, 0xe5, 0x31, 0xc3, 0x82, 0x5d, 0xff,
0x6f, 0x1e, 0xae, 0xa5, 0xb0, 0x95, 0xdb, 0x3d, 0x86, 0x32, 0x25, 0x6c, 0x32, 0x8e, 0x04, 0x7c,
0x63, 0xe3, 0xc3, 0x8c, 0xf0, 0x17, 0x90, 0xda, 0x58, 0xc0, 0x60, 0x05, 0x87, 0xd6, 0x40, 0x93,
0x1c, 0x26, 0xe1, 0x61, 0xc3, 0xf4, 0xd8, 0x50, 0x99, 0xae, 0x21, 0xe9, 0x22, 0x9a, 0xec, 0xb2,
0x61, 0x4a, 0xab, 0x85, 0x2b, 0x6a, 0x15, 0x59, 0xa0, 0xf9, 0x24, 0x7a, 0x16, 0xd0, 0x63, 0x93,
0xab, 0x96, 0xba, 0x0e, 0x69, 0x16, 0x05, 0xe8, 0x7b, 0x19, 0x41, 0x7b, 0x92, 0x7d, 0x4f, 0x71,
0xe3, 0x55, 0x7f, 0x96, 0xa0, 0xbf, 0x09, 0x65, 0xf9, 0x4f, 0xb9, 0x27, 0xf5, 0x0f, 0xba, 0x5d,
0xa3, 0xdf, 0xd7, 0x96, 0x50, 0x15, 0x4a, 0xd8, 0x18, 0x60, 0xee, 0x61, 0x55, 0x28, 0x3d, 0xe8,
0x0c, 0x3a, 0x3b, 0x5a, 0x5e, 0x7f, 0x03, 0x56, 0x1f, 0x5b, 0x6e, 0x94, 0xc5, 0xb9, 0xf4, 0x00,
0xb4, 0xe9, 0x5a, 0x65, 0x9d, 0xed, 0x19, 0xeb, 0x64, 0x57, 0x8d, 0x71, 0xea, 0x46, 0xe7, 0xec,
0xa1, 0x41, 0x81, 0x50, 0xaa, 0x4c, 0xc0, 0x3f, 0xf5, 0x67, 0xb0, 0xda, 0x8f, 0x82, 0x30, 0x93,
0xe7, 0xbf, 0x0b, 0xcb, 0x3c, 0xbb, 0x04, 0x93, 0x48, 0xb9, 0xfe, 0xcb, 0x6d, 0x99, 0x7d, 0xda,
0x71, 0xf6, 0x69, 0x6f, 0xaa, 0xec, 0x84, 0xe3, 0x95, 0xe8, 0x6b, 0x50, 0x66, 0xee, 0xd0, 0xb7,
0xc6, 0xea, 0xe8, 0xab, 0x91, 0x8e, 0xb8, 0x93, 0xc7, 0x1b, 0x2b, 0xc7, 0xef, 0x02, 0xda, 0x24,
0x2c, 0xa2, 0xc1, 0x59, 0x26, 0x79, 0x6e, 0x40, 0xe9, 0x28, 0xa0, 0xb6, 0x3c, 0x88, 0x15, 0x2c,
0x07, 0xfc, 0x50, 0xcd, 0x80, 0x28, 0xec, 0xdb, 0x80, 0xb6, 0x7d, 0x9e, 0x20, 0xb2, 0x19, 0xe2,
0xb7, 0x79, 0xb8, 0x3e, 0xb3, 0x5e, 0x19, 0x63, 0xf1, 0x73, 0xc8, 0x03, 0xd3, 0x84, 0xc9, 0x73,
0x88, 0xf6, 0xa0, 0x2c, 0x57, 0x28, 0x4d, 0xde, 0x99, 0x03, 0x48, 0xe6, 0x1c, 0x05, 0xa7, 0x60,
0x2e, 0x75, 0xfa, 0xc2, 0xff, 0xdb, 0xe9, 0xb5, 0xf8, 0x7f, 0xb0, 0x17, 0xea, 0xef, 0xfb, 0x70,
0x2d, 0xb5, 0x58, 0x29, 0xef, 0x01, 0x94, 0x18, 0x27, 0x28, 0xed, 0xbd, 0x3d, 0xa7, 0xf6, 0x18,
0x96, 0xec, 0xfa, 0x75, 0x09, 0x6e, 0x9c, 0x10, 0x3f, 0x11, 0x45, 0xdf, 0x84, 0x6b, 0x7d, 0xe1,
0x5a, 0x99, 0x7c, 0x67, 0xea, 0x96, 0xf9, 0x19, 0xb7, 0xbc, 0x01, 0x28, 0x8d, 0xa2, 0x9c, 0xe7,
0x0c, 0x56, 0x8d, 0x53, 0x62, 0x67, 0x42, 0x6e, 0xc2, 0xb2, 0x1d, 0x78, 0x9e, 0xe5, 0x3b, 0xcd,
0xfc, 0xad, 0xc2, 0x5a, 0x15, 0xc7, 0xc3, 0xf4, 0xf9, 0x29, 0x64, 0x3d, 0x3f, 0xfa, 0x6f, 0x72,
0xa0, 0x4d, 0xf7, 0x56, 0x8a, 0xe4, 0xd2, 0x47, 0x0e, 0x07, 0xe2, 0x7b, 0xd7, 0xb1, 0x1a, 0x29,
0x7a, 0x7c, 0xc4, 0x25, 0x9d, 0x50, 0x9a, 0x0a, 0x21, 0x85, 0x2b, 0x86, 0x10, 0xfd, 0xdf, 0x39,
0x40, 0x17, 0xab, 0x1e, 0xf4, 0x1a, 0xd4, 0x19, 0xf1, 0x1d, 0x53, 0xaa, 0x91, 0xc5, 0x15, 0x21,
0xa7, 0x49, 0x7d, 0x32, 0x84, 0xa0, 0x48, 0x4e, 0x89, 0xad, 0x4e, 0xab, 0xf8, 0x46, 0x23, 0xa8,
0x1f, 0x31, 0xd3, 0x65, 0xc1, 0xd8, 0x4a, 0xca, 0x83, 0xc6, 0x86, 0xb1, 0x70, 0xf5, 0xd5, 0x7e,
0xd0, 0xdf, 0x8e, 0xc1, 0x70, 0xed, 0x88, 0x25, 0x03, 0xbd, 0x0d, 0xb5, 0xd4, 0x1c, 0xaa, 0x40,
0xb1, 0xb7, 0xd7, 0x33, 0xb4, 0x25, 0x04, 0x50, 0xee, 0x6e, 0xe1, 0xbd, 0xbd, 0x81, 0x8c, 0xda,
0xdb, 0xbb, 0x9d, 0x87, 0x86, 0x96, 0xd7, 0xbf, 0x2c, 0x02, 0x4c, 0xd3, 0x27, 0x6a, 0x40, 0x3e,
0xb1, 0x74, 0xde, 0x75, 0xf8, 0x9f, 0xf1, 0x2d, 0x2f, 0x2e, 0x44, 0xc4, 0x37, 0xda, 0x80, 0x9b,
0x1e, 0x1b, 0x86, 0x96, 0x7d, 0x6c, 0xaa, 0xac, 0x67, 0x0b, 0x66, 0xf1, 0xaf, 0xea, 0xf8, 0xba,
0x9a, 0x54, 0x52, 0x4b, 0xdc, 0x1d, 0x28, 0x10, 0xff, 0xa4, 0x59, 0x14, 0xa5, 0xde, 0xfd, 0xb9,
0xd3, 0x7a, 0xdb, 0xf0, 0x4f, 0x64, 0x69, 0xc7, 0x61, 0x50, 0x0f, 0xaa, 0x94, 0xb0, 0x60, 0x42,
0x6d, 0xc2, 0x9a, 0xa5, 0xb9, 0x0e, 0x19, 0x8e, 0xf9, 0xf0, 0x14, 0x02, 0x6d, 0x42, 0xd9, 0x0b,
0x26, 0x7e, 0xc4, 0x9a, 0x65, 0x21, 0xe0, 0x5b, 0x19, 0xc1, 0x76, 0x39, 0x13, 0x56, 0xbc, 0xe8,
0x21, 0x2c, 0x3b, 0xe4, 0xc4, 0xe5, 0x32, 0x2d, 0x0b, 0x98, 0xdb, 0x59, 0xed, 0x2b, 0xb8, 0x70,
0xcc, 0xcd, 0x95, 0x3e, 0x61, 0x84, 0x36, 0x2b, 0x52, 0xe9, 0xfc, 0x1b, 0xbd, 0x02, 0x55, 0x6b,
0x3c, 0x0e, 0x6c, 0xd3, 0x71, 0x69, 0xb3, 0x2a, 0x26, 0x2a, 0x82, 0xb0, 0xe9, 0x52, 0xf4, 0x2a,
0xd4, 0xe4, 0xc9, 0x30, 0x43, 0x2b, 0x1a, 0x35, 0x41, 0x4c, 0x83, 0x24, 0xed, 0x5b, 0xd1, 0x48,
0x2d, 0x20, 0x94, 0xca, 0x05, 0xb5, 0x64, 0x01, 0xa1, 0x54, 0x2c, 0xf8, 0x26, 0xac, 0x8a, 0x63,
0x3e, 0xa4, 0xc1, 0x24, 0x34, 0x85, 0xc9, 0xeb, 0x62, 0xd1, 0x0a, 0x27, 0x3f, 0xe4, 0xd4, 0x1e,
0xb7, 0xfd, 0xcb, 0x50, 0x79, 0x1a, 0x1c, 0xca, 0x05, 0x2b, 0x62, 0xc1, 0xf2, 0xd3, 0xe0, 0x90,
0x4f, 0xb5, 0xde, 0x83, 0x4a, 0x6c, 0xa5, 0xb9, 0x4a, 0xda, 0x7f, 0xe4, 0xa0, 0x9a, 0x58, 0x05,
0x7d, 0x0a, 0x2b, 0xd4, 0x7a, 0x66, 0x4e, 0xcd, 0x2b, 0x63, 0xe8, 0xbb, 0x59, 0xcd, 0x6b, 0x3d,
0x9b, 0x5a, 0xb8, 0x4e, 0x53, 0x23, 0xf4, 0x39, 0xac, 0x8e, 0x5d, 0x7f, 0x72, 0x9a, 0xc2, 0x96,
0x49, 0xe9, 0xdb, 0x19, 0xb1, 0x77, 0x38, 0xf7, 0x14, 0xbd, 0x31, 0x9e, 0x19, 0xeb, 0x7f, 0xce,
0x41, 0x3d, 0xbd, 0x3d, 0x57, 0x82, 0x1d, 0x4e, 0xc4, 0x1f, 0x28, 0x60, 0xfe, 0xc9, 0xe3, 0x96,
0x47, 0xbc, 0x80, 0x9e, 0x89, 0x9d, 0x0b, 0x58, 0x8d, 0xb8, 0xc1, 0x1d, 0x97, 0x1d, 0x8b, 0x03,
0x54, 0xc0, 0xe2, 0x9b, 0xd3, 0xdc, 0x20, 0x64, 0xa2, 0xa4, 0x2b, 0x60, 0xf1, 0x8d, 0x30, 0x54,
0x54, 0xb6, 0xe2, 0x6e, 0x5f, 0x98, 0x3f, 0xeb, 0xc5, 0xc2, 0xe1, 0x04, 0x47, 0xff, 0x7d, 0x1e,
0x56, 0xcf, 0xcd, 0x72, 0x39, 0xa5, 0x2f, 0xc6, 0x31, 0x5f, 0x8e, 0xb8, 0x4c, 0xb6, 0xeb, 0xc4,
0x85, 0x95, 0xf8, 0x16, 0x11, 0x23, 0x54, 0x45, 0x4f, 0xde, 0x0d, 0xb9, 0xa1, 0xbd, 0x43, 0x37,
0x92, 0x82, 0x97, 0xb0, 0x1c, 0xa0, 0x27, 0xd0, 0xa0, 0x84, 0x11, 0x7a, 0x42, 0x1c, 0x33, 0x0c,
0x68, 0x14, 0xcb, 0xbf, 0x31, 0x9f, 0xfc, 0xfb, 0x01, 0x8d, 0xf0, 0x4a, 0x8c, 0xc4, 0x47, 0x0c,
0x3d, 0x86, 0x15, 0xe7, 0xcc, 0xb7, 0x3c, 0xd7, 0x56, 0xc8, 0xe5, 0x85, 0x91, 0xeb, 0x0a, 0x48,
0x00, 0xf3, 0xbb, 0x56, 0x6a, 0x92, 0xff, 0xb1, 0xb1, 0x75, 0x48, 0xc6, 0x4a, 0x27, 0x72, 0x30,
0xeb, 0xd7, 0x25, 0xe5, 0xd7, 0xfa, 0x97, 0x39, 0x68, 0xcc, 0xba, 0x0b, 0xfa, 0x3a, 0x80, 0x1d,
0x4e, 0xcc, 0x90, 0x50, 0x37, 0x70, 0x94, 0x53, 0x54, 0xed, 0x70, 0xb2, 0x2f, 0x08, 0xfc, 0x7c,
0xf3, 0xe9, 0x2f, 0x26, 0x41, 0x64, 0x29, 0xef, 0xa8, 0xd8, 0xe1, 0xe4, 0xbb, 0x7c, 0x1c, 0xf3,
0x8a, 0xc7, 0x00, 0xa6, 0xbc, 0x84, 0x2f, 0xef, 0x0b, 0x02, 0x7a, 0x0b, 0x90, 0x74, 0x24, 0x73,
0xec, 0x7a, 0x6e, 0x64, 0x1e, 0x9e, 0xf1, 0x6b, 0xb5, 0x74, 0x1c, 0x4d, 0xce, 0xec, 0xf0, 0x89,
0x8f, 0x39, 0x1d, 0xe9, 0xb0, 0x12, 0x04, 0x9e, 0xc9, 0xec, 0x80, 0x12, 0xd3, 0x72, 0x9e, 0x8a,
0x00, 0x5a, 0xc0, 0xb5, 0x20, 0xf0, 0xfa, 0x9c, 0xd6, 0x71, 0x9e, 0xf2, 0x78, 0x61, 0x87, 0x13,
0x46, 0x22, 0x93, 0xff, 0x34, 0xcb, 0x32, 0x5e, 0x48, 0x52, 0x37, 0x9c, 0xb0, 0xd4, 0x02, 0x8f,
0x78, 0x3c, 0xde, 0xa5, 0x16, 0xec, 0x12, 0x8f, 0xe9, 0x9f, 0x41, 0x49, 0x44, 0x47, 0xfe, 0xc7,
0x44, 0x64, 0x11, 0x81, 0x47, 0xaa, 0xae, 0xc2, 0x09, 0x22, 0xec, 0xbc, 0x02, 0xd5, 0x51, 0xc0,
0x54, 0xd8, 0x92, 0x5e, 0x55, 0xe1, 0x04, 0x31, 0xd9, 0x82, 0x0a, 0x25, 0x96, 0x13, 0xf8, 0xe3,
0x33, 0xf1, 0x9f, 0x2b, 0x38, 0x19, 0xeb, 0x5f, 0x40, 0x59, 0x46, 0xcd, 0x2b, 0xe0, 0xdf, 0x06,
0x64, 0xcb, 0x78, 0x17, 0x12, 0xea, 0xb9, 0x8c, 0xb9, 0x81, 0xcf, 0xe2, 0x9b, 0xbb, 0x9c, 0xd9,
0x9f, 0x4e, 0xe8, 0x7f, 0xcf, 0xc9, 0x4c, 0x29, 0xaf, 0x61, 0xbc, 0xd6, 0x50, 0x69, 0x6f, 0xe1,
0xbb, 0xaa, 0x02, 0x88, 0xeb, 0x45, 0xa2, 0x5e, 0x28, 0xe6, 0xad, 0x17, 0x89, 0xac, 0x17, 0x09,
0x2f, 0x4e, 0x54, 0x42, 0x96, 0x70, 0x32, 0x1f, 0xd7, 0x9c, 0xa4, 0x90, 0x26, 0xfa, 0x7f, 0x72,
0xc9, 0x69, 0x8f, 0x0b, 0x5e, 0xf4, 0x39, 0x54, 0xf8, 0xc1, 0x31, 0x3d, 0x2b, 0x54, 0x6f, 0x31,
0xdd, 0xc5, 0x6a, 0xe9, 0x36, 0x3f, 0x27, 0xbb, 0x56, 0x28, 0x33, 0xf5, 0x72, 0x28, 0x47, 0x3c,
0x6a, 0x58, 0xce, 0x34, 0x6a, 0xf0, 0x6f, 0xf4, 0x3a, 0x34, 0xac, 0x49, 0x14, 0x98, 0x96, 0x73,
0x42, 0x68, 0xe4, 0x32, 0xa2, 0x2c, 0xbc, 0xc2, 0xa9, 0x9d, 0x98, 0xd8, 0xba, 0x0f, 0xf5, 0x34,
0xe6, 0x8b, 0xf2, 0x4a, 0x29, 0x9d, 0x57, 0x7e, 0x08, 0x30, 0xad, 0xeb, 0xb8, 0x27, 0x90, 0x53,
0x37, 0x32, 0xed, 0xc0, 0x91, 0x51, 0xad, 0x84, 0x2b, 0x9c, 0xd0, 0x0d, 0x1c, 0x72, 0xae, 0x4a,
0x2e, 0xc5, 0x55, 0x32, 0x3f, 0x77, 0xfc, 0xa8, 0x1c, 0xbb, 0xe3, 0x31, 0x71, 0x94, 0x84, 0xd5,
0x20, 0xf0, 0x1e, 0x09, 0x82, 0xfe, 0xb7, 0xbc, 0xf4, 0x08, 0x79, 0x47, 0xc9, 0x54, 0x3b, 0x25,
0xa6, 0x2e, 0x5c, 0xcd, 0xd4, 0xf7, 0x00, 0x58, 0x64, 0xd1, 0x88, 0x38, 0xa6, 0x15, 0xa9, 0x6b,
0x7f, 0xeb, 0x42, 0x99, 0x3d, 0x88, 0x1f, 0x49, 0x71, 0x55, 0xad, 0xee, 0x44, 0xe8, 0x7d, 0xa8,
0xdb, 0x81, 0x17, 0x8e, 0x89, 0x62, 0x2e, 0xbd, 0x90, 0xb9, 0x96, 0xac, 0xef, 0x44, 0xa9, 0x1a,
0xbb, 0x7c, 0xd5, 0x1a, 0xfb, 0x2f, 0x39, 0x79, 0xd5, 0x4a, 0xdf, 0xf4, 0xd0, 0xf0, 0x92, 0xb7,
0xc1, 0x87, 0x0b, 0x5e, 0x1b, 0xbf, 0xea, 0x61, 0xf0, 0xaa, 0x2f, 0x71, 0x7f, 0x2d, 0x40, 0x35,
0xb9, 0xb1, 0x5d, 0xb0, 0xfd, 0x5d, 0xa8, 0x26, 0x2f, 0xd4, 0xaa, 0xcc, 0xf8, 0x4a, 0xf3, 0x24,
0x8b, 0xd1, 0x11, 0x20, 0x6b, 0x38, 0x4c, 0x8a, 0x14, 0x73, 0xc2, 0xac, 0x61, 0x7c, 0xc7, 0xbd,
0x3b, 0x87, 0x1e, 0xe2, 0xcc, 0x73, 0xc0, 0xf9, 0xb1, 0x66, 0x0d, 0x87, 0x33, 0x14, 0xf4, 0x23,
0xb8, 0x39, 0xbb, 0x87, 0x79, 0x78, 0x66, 0x86, 0xae, 0xa3, 0x6a, 0xf4, 0xad, 0x79, 0x2f, 0xad,
0xed, 0x19, 0xf8, 0x8f, 0xcf, 0xf6, 0x5d, 0x47, 0xea, 0x1c, 0xd1, 0x0b, 0x13, 0xad, 0x9f, 0xc0,
0x4b, 0xcf, 0x59, 0x7e, 0x89, 0x0d, 0x7a, 0x69, 0x1b, 0x5c, 0x45, 0x09, 0x29, 0xeb, 0xfd, 0x21,
0x27, 0xef, 0xd6, 0xb3, 0x3a, 0xe9, 0x4c, 0x2b, 0xb6, 0xda, 0xc6, 0x7a, 0xc6, 0x7d, 0xba, 0xfb,
0x07, 0x12, 0x5e, 0x94, 0x78, 0x9f, 0xcc, 0x94, 0x78, 0xd9, 0xcb, 0x90, 0x5d, 0xc1, 0x24, 0x81,
0x14, 0x82, 0xfe, 0xa7, 0x02, 0x54, 0x62, 0x74, 0x51, 0xc2, 0x9f, 0xb1, 0x88, 0x78, 0xa6, 0x17,
0x87, 0xb0, 0x1c, 0x06, 0x49, 0xda, 0xe5, 0x41, 0xec, 0x15, 0xa8, 0xf2, 0x9b, 0x82, 0x9c, 0xce,
0x8b, 0xe9, 0x0a, 0x27, 0x88, 0xc9, 0x57, 0xa1, 0x16, 0x05, 0x91, 0x35, 0x36, 0x23, 0xd7, 0x3e,
0x96, 0x49, 0x2e, 0x87, 0x41, 0x90, 0x06, 0x9c, 0x82, 0xde, 0x84, 0x6b, 0xd1, 0x88, 0x06, 0x51,
0x34, 0xe6, 0x15, 0x9a, 0xa8, 0x49, 0x64, 0x09, 0x51, 0xc4, 0x5a, 0x32, 0x21, 0x6b, 0x15, 0xc6,
0xa3, 0xf7, 0x74, 0x31, 0x77, 0x5d, 0x11, 0x44, 0x8a, 0x78, 0x25, 0xa1, 0x72, 0xd7, 0x46, 0x4d,
0x58, 0x0e, 0x09, 0xb5, 0x89, 0x2f, 0x63, 0x45, 0x0e, 0xc7, 0x43, 0x64, 0xc2, 0xaa, 0x47, 0x2c,
0x36, 0xa1, 0xc4, 0x31, 0x8f, 0x5c, 0x32, 0x76, 0xe4, 0x95, 0xa9, 0x91, 0xb9, 0x9e, 0x8d, 0xd5,
0xd2, 0x7e, 0x20, 0xb8, 0x71, 0x23, 0x86, 0x93, 0x63, 0x5e, 0x1f, 0xc8, 0x2f, 0xb4, 0x0a, 0xb5,
0xfe, 0x93, 0xfe, 0xc0, 0xd8, 0x35, 0x77, 0xf7, 0x36, 0x0d, 0xf5, 0x46, 0xde, 0x37, 0xb0, 0x1c,
0xe6, 0xf8, 0xfc, 0x60, 0x6f, 0xd0, 0xd9, 0x31, 0x07, 0xdb, 0xdd, 0x47, 0x7d, 0x2d, 0x8f, 0x6e,
0xc2, 0xb5, 0xc1, 0x16, 0xde, 0x1b, 0x0c, 0x76, 0x8c, 0x4d, 0x73, 0xdf, 0xc0, 0xdb, 0x7b, 0x9b,
0x7d, 0xad, 0x80, 0x10, 0x34, 0xa6, 0xe4, 0xc1, 0xf6, 0xae, 0xa1, 0x15, 0x51, 0x0d, 0x96, 0xf7,
0x0d, 0xdc, 0x35, 0x7a, 0x03, 0xad, 0xa4, 0xff, 0x33, 0x0f, 0xb5, 0x94, 0x15, 0xb9, 0x23, 0x53,
0x26, 0xef, 0x2f, 0x45, 0xcc, 0x3f, 0x79, 0x30, 0xb1, 0x2d, 0x7b, 0x24, 0xad, 0x53, 0xc4, 0x72,
0xc0, 0xed, 0xe6, 0x59, 0xa7, 0xa9, 0x73, 0x5e, 0xc4, 0x15, 0xcf, 0x3a, 0x95, 0x20, 0xaf, 0x41,
0xfd, 0x98, 0x50, 0x9f, 0x8c, 0xd5, 0xbc, 0xb4, 0x48, 0x4d, 0xd2, 0xe4, 0x92, 0x35, 0xd0, 0xd4,
0x92, 0x29, 0x8c, 0x34, 0x47, 0x43, 0xd2, 0x77, 0x63, 0xb0, 0xc3, 0x8b, 0x5a, 0x2f, 0x0b, 0xad,
0xdf, 0x9b, 0xdf, 0x49, 0x9f, 0xa7, 0xf8, 0x7e, 0xa2, 0xf8, 0x65, 0x28, 0xe0, 0xf8, 0xb9, 0xb8,
0xdb, 0xe9, 0x6e, 0x71, 0x65, 0xaf, 0x40, 0x75, 0xb7, 0xf3, 0xa9, 0x79, 0xd0, 0x17, 0x8f, 0x0f,
0x48, 0x83, 0xfa, 0x23, 0x03, 0xf7, 0x8c, 0x1d, 0x45, 0x29, 0xa0, 0x1b, 0xa0, 0x29, 0xca, 0x74,
0x5d, 0x51, 0xff, 0x63, 0x1e, 0x56, 0x65, 0x5c, 0x4f, 0xde, 0xc3, 0x9e, 0xff, 0x30, 0xb5, 0x78,
0xe8, 0x6d, 0xc2, 0xb2, 0x47, 0x58, 0x62, 0x87, 0x2a, 0x8e, 0x87, 0xc8, 0x85, 0x9a, 0xe5, 0xfb,
0x41, 0x24, 0x1e, 0x55, 0x98, 0x0a, 0x91, 0x0f, 0xe7, 0x7a, 0xbe, 0x49, 0x24, 0x6f, 0x77, 0xa6,
0x48, 0x32, 0x42, 0xa6, 0xb1, 0x5b, 0x1f, 0x80, 0x76, 0x7e, 0xc1, 0x3c, 0x79, 0xe9, 0x8d, 0x77,
0xa6, 0x69, 0x89, 0x70, 0x07, 0x3d, 0xe8, 0x3d, 0xea, 0xed, 0x3d, 0xee, 0x69, 0x4b, 0x7c, 0x80,
0x0f, 0x7a, 0xbd, 0xed, 0xde, 0x43, 0x2d, 0x87, 0x00, 0xca, 0xc6, 0xa7, 0xdb, 0x03, 0x63, 0x53,
0xcb, 0x6f, 0xfc, 0x6b, 0x05, 0xca, 0x52, 0x48, 0xf4, 0x3b, 0x95, 0x92, 0xd3, 0x4d, 0x4b, 0xf4,
0xc1, 0xdc, 0xa5, 0xed, 0x4c, 0x23, 0xb4, 0xf5, 0xe1, 0xc2, 0xfc, 0xea, 0x5d, 0x72, 0x09, 0xfd,
0x2a, 0x07, 0xf5, 0x99, 0x87, 0xb8, 0xac, 0x6f, 0x48, 0x97, 0xf4, 0x48, 0x5b, 0xdf, 0x59, 0x88,
0x37, 0x91, 0xe5, 0x97, 0x39, 0xa8, 0xa5, 0xba, 0x83, 0xe8, 0xde, 0x22, 0x1d, 0x45, 0x29, 0xc9,
0xfd, 0xc5, 0x9b, 0x91, 0xfa, 0xd2, 0xdb, 0x39, 0xf4, 0x8b, 0x1c, 0xd4, 0x52, 0xad, 0xb5, 0xcc,
0xa2, 0x5c, 0x6c, 0x04, 0x66, 0x16, 0xe5, 0xb2, 0x4e, 0xde, 0x12, 0xfa, 0x69, 0x0e, 0xaa, 0x49,
0x9b, 0x0c, 0xdd, 0x99, 0xbf, 0xb1, 0x26, 0x85, 0xb8, 0xbb, 0x68, 0x47, 0x4e, 0x5f, 0x42, 0x3f,
0x86, 0x4a, 0xdc, 0x53, 0x42, 0x59, 0xd3, 0xc8, 0xb9, 0x86, 0x55, 0xeb, 0xce, 0xdc, 0x7c, 0xe9,
0xed, 0xe3, 0x46, 0x4f, 0xe6, 0xed, 0xcf, 0xb5, 0xa4, 0x5a, 0x77, 0xe6, 0xe6, 0x4b, 0xb6, 0xe7,
0x9e, 0x90, 0xea, 0x07, 0x65, 0xf6, 0x84, 0x8b, 0x8d, 0xa8, 0xcc, 0x9e, 0x70, 0x59, 0xfb, 0x49,
0x0a, 0x92, 0xea, 0x28, 0x65, 0x16, 0xe4, 0x62, 0xd7, 0x2a, 0xb3, 0x20, 0x97, 0x34, 0xb0, 0x94,
0x4b, 0x4e, 0x0b, 0xf4, 0x3b, 0x73, 0x37, 0x61, 0xe6, 0x74, 0xc9, 0x0b, 0x6d, 0x20, 0x7d, 0x09,
0xfd, 0x4c, 0x3d, 0x19, 0xc8, 0x0e, 0x0e, 0x9a, 0x07, 0x6a, 0xa6, 0xe9, 0xd3, 0x7a, 0x6f, 0xb1,
0x54, 0x23, 0x62, 0xc4, 0xcf, 0x73, 0x00, 0xd3, 0x5e, 0x4f, 0x66, 0x21, 0x2e, 0x34, 0x99, 0x5a,
0xf7, 0x16, 0xe0, 0x4c, 0x1f, 0x8f, 0xb8, 0xbd, 0x93, 0xf9, 0x78, 0x9c, 0xeb, 0x45, 0x65, 0x3e,
0x1e, 0xe7, 0xfb, 0x48, 0xfa, 0xd2, 0xc7, 0xcb, 0xdf, 0x2b, 0xc9, 0xdc, 0x5f, 0x16, 0x3f, 0xef,
0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xb7, 0xa9, 0x12, 0xbc, 0x24, 0x00, 0x00,
}

View File

@@ -7,6 +7,12 @@ import "google/protobuf/timestamp.proto";
import "github.com/hashicorp/nomad/plugins/shared/hclspec/hcl_spec.proto";
// RecoverableError is used with a grpc Status to indicate if the error is one
// which is recoverable and can be reattempted by the client.
message RecoverableError {
bool recoverable = 1;
}
// Driver service defines RPCs used to communicate with a nomad runtime driver.
// Some rpcs may not be implemented by the driver based on it's capabilities.
service Driver {

View File

@@ -4,10 +4,14 @@ import (
"fmt"
"io"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/golang/protobuf/ptypes"
hclog "github.com/hashicorp/go-hclog"
plugin "github.com/hashicorp/go-plugin"
cstructs "github.com/hashicorp/nomad/client/structs"
"github.com/hashicorp/nomad/nomad/structs"
"github.com/hashicorp/nomad/plugins/drivers/proto"
context "golang.org/x/net/context"
)
@@ -96,6 +100,15 @@ func (b *driverPluginServer) RecoverTask(ctx context.Context, req *proto.Recover
func (b *driverPluginServer) StartTask(ctx context.Context, req *proto.StartTaskRequest) (*proto.StartTaskResponse, error) {
handle, net, err := b.impl.StartTask(taskConfigFromProto(req.Task))
if err != nil {
if rec, ok := err.(structs.Recoverable); ok {
st := status.New(codes.FailedPrecondition, rec.Error())
st, err := st.WithDetails(&proto.RecoverableError{Recoverable: rec.IsRecoverable()})
if err != nil {
// If this error, it will always error
panic(err)
}
return nil, st.Err()
}
return nil, err
}