[YUNIKORN-460] Handle app reservation timeout (32)

The TerminationType is stored in a separate enum, so it can be reused for an AllocationAsk as well.
Also The AllocationAskReleaseRequest message is renamed to AllocationAskRelease, so it can be used
in both directions, not only from shim to core.

Fixes: #32

commit fc1085fa3f7ff45adc697460e6f78b4857fb4f1a
Author: kmarton <kmarton@cloudera.com>
Date:   Tue Feb 23 14:48:17 2021 +0100

    [YUNIKORN-460] Handle app reservation timeout

    Made the AllocationAskRelease message bidirectional.
    Also extended the UpdateResponse message with an array of AllocationAskRelease
diff --git a/go.mod b/go.mod
index 2fa605c..1179dd5 100644
--- a/go.mod
+++ b/go.mod
@@ -23,5 +23,8 @@
 
 require (
 	github.com/golang/protobuf v1.3.2
+	golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 // indirect
+	golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 // indirect
 	google.golang.org/grpc v1.26.0
+	honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc // indirect
 )
diff --git a/lib/go/si/si.pb.go b/lib/go/si/si.pb.go
index a3e87e0..6df1dd3 100644
--- a/lib/go/si/si.pb.go
+++ b/lib/go/si/si.pb.go
@@ -25,6 +25,37 @@
 // proto package needs to be updated.
 const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
+type TerminationType int32
+
+const (
+	TerminationType_STOPPED_BY_RM          TerminationType = 0
+	TerminationType_TIMEOUT                TerminationType = 1
+	TerminationType_PREEMPTED_BY_SCHEDULER TerminationType = 2
+	TerminationType_PLACEHOLDER_REPLACED   TerminationType = 3
+)
+
+var TerminationType_name = map[int32]string{
+	0: "STOPPED_BY_RM",
+	1: "TIMEOUT",
+	2: "PREEMPTED_BY_SCHEDULER",
+	3: "PLACEHOLDER_REPLACED",
+}
+
+var TerminationType_value = map[string]int32{
+	"STOPPED_BY_RM":          0,
+	"TIMEOUT":                1,
+	"PREEMPTED_BY_SCHEDULER": 2,
+	"PLACEHOLDER_REPLACED":   3,
+}
+
+func (x TerminationType) String() string {
+	return proto.EnumName(TerminationType_name, int32(x))
+}
+
+func (TerminationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bcd2636ebca16c8c, []int{0}
+}
+
 // Scheduler can send action to RM.
 type UpdateResponse_ActionFromScheduler int32
 
@@ -87,37 +118,6 @@
 	return fileDescriptor_bcd2636ebca16c8c, []int{20, 0}
 }
 
-type AllocationRelease_TerminationType int32
-
-const (
-	AllocationRelease_STOPPED_BY_RM          AllocationRelease_TerminationType = 0
-	AllocationRelease_TIMEOUT                AllocationRelease_TerminationType = 1
-	AllocationRelease_PREEMPTED_BY_SCHEDULER AllocationRelease_TerminationType = 2
-	AllocationRelease_PLACEHOLDER_REPLACED   AllocationRelease_TerminationType = 3
-)
-
-var AllocationRelease_TerminationType_name = map[int32]string{
-	0: "STOPPED_BY_RM",
-	1: "TIMEOUT",
-	2: "PREEMPTED_BY_SCHEDULER",
-	3: "PLACEHOLDER_REPLACED",
-}
-
-var AllocationRelease_TerminationType_value = map[string]int32{
-	"STOPPED_BY_RM":          0,
-	"TIMEOUT":                1,
-	"PREEMPTED_BY_SCHEDULER": 2,
-	"PLACEHOLDER_REPLACED":   3,
-}
-
-func (x AllocationRelease_TerminationType) String() string {
-	return proto.EnumName(AllocationRelease_TerminationType_name, int32(x))
-}
-
-func (AllocationRelease_TerminationType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{23, 0}
-}
-
 // Action from RM
 type UpdateNodeInfo_ActionFromRM int32
 
@@ -440,25 +440,27 @@
 	// Released allocations, this could be either ack from scheduler when RM asks to terminate some allocations.
 	// Or it could be decision made by scheduler (such as preemption or timeout).
 	ReleasedAllocations []*AllocationRelease `protobuf:"bytes,3,rep,name=releasedAllocations,proto3" json:"releasedAllocations,omitempty"`
+	// Released allocation asks(placeholder), when the placeholder allocation times out
+	ReleasedAllocationAsks []*AllocationAskRelease `protobuf:"bytes,4,rep,name=releasedAllocationAsks,proto3" json:"releasedAllocationAsks,omitempty"`
 	// Rejected allocation requests
-	RejectedAllocations []*RejectedAllocationAsk `protobuf:"bytes,4,rep,name=rejectedAllocations,proto3" json:"rejectedAllocations,omitempty"`
+	RejectedAllocations []*RejectedAllocationAsk `protobuf:"bytes,5,rep,name=rejectedAllocations,proto3" json:"rejectedAllocations,omitempty"`
 	// Suggested node update.
 	// This could include:
 	// 1) Schedulable resources on each node. This can be used when we want to run
 	//    two resource management systems side-by-side. For example, YARN/K8s running side by side.
 	//    and update YARN NodeManager / Kubelet resource dynamically.
 	// 2) Other recommendations.
-	NodeRecommendations []*NodeRecommendation `protobuf:"bytes,5,rep,name=nodeRecommendations,proto3" json:"nodeRecommendations,omitempty"`
+	NodeRecommendations []*NodeRecommendation `protobuf:"bytes,6,rep,name=nodeRecommendations,proto3" json:"nodeRecommendations,omitempty"`
 	// Rejected Applications
-	RejectedApplications []*RejectedApplication `protobuf:"bytes,6,rep,name=rejectedApplications,proto3" json:"rejectedApplications,omitempty"`
+	RejectedApplications []*RejectedApplication `protobuf:"bytes,7,rep,name=rejectedApplications,proto3" json:"rejectedApplications,omitempty"`
 	// Accepted Applications
-	AcceptedApplications []*AcceptedApplication `protobuf:"bytes,7,rep,name=acceptedApplications,proto3" json:"acceptedApplications,omitempty"`
+	AcceptedApplications []*AcceptedApplication `protobuf:"bytes,8,rep,name=acceptedApplications,proto3" json:"acceptedApplications,omitempty"`
 	// Updated Applications
-	UpdatedApplications []*UpdatedApplication `protobuf:"bytes,8,rep,name=updatedApplications,proto3" json:"updatedApplications,omitempty"`
+	UpdatedApplications []*UpdatedApplication `protobuf:"bytes,9,rep,name=updatedApplications,proto3" json:"updatedApplications,omitempty"`
 	// Rejected Node Registrations
-	RejectedNodes []*RejectedNode `protobuf:"bytes,9,rep,name=rejectedNodes,proto3" json:"rejectedNodes,omitempty"`
+	RejectedNodes []*RejectedNode `protobuf:"bytes,10,rep,name=rejectedNodes,proto3" json:"rejectedNodes,omitempty"`
 	// Accepted Node Registrations
-	AcceptedNodes        []*AcceptedNode `protobuf:"bytes,10,rep,name=acceptedNodes,proto3" json:"acceptedNodes,omitempty"`
+	AcceptedNodes        []*AcceptedNode `protobuf:"bytes,11,rep,name=acceptedNodes,proto3" json:"acceptedNodes,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
 	XXX_unrecognized     []byte          `json:"-"`
 	XXX_sizecache        int32           `json:"-"`
@@ -510,6 +512,13 @@
 	return nil
 }
 
+func (m *UpdateResponse) GetReleasedAllocationAsks() []*AllocationAskRelease {
+	if m != nil {
+		return m.ReleasedAllocationAsks
+	}
+	return nil
+}
+
 func (m *UpdateResponse) GetRejectedAllocations() []*RejectedAllocationAsk {
 	if m != nil {
 		return m.RejectedAllocations
@@ -1616,9 +1625,9 @@
 	ApplicationID string `protobuf:"bytes,9,opt,name=applicationID,proto3" json:"applicationID,omitempty"`
 	// Partition of the allocation
 	PartitionName string `protobuf:"bytes,10,opt,name=partitionName,proto3" json:"partitionName,omitempty"`
-	// The name of the TaskGroup this ask belongs to
+	// The name of the TaskGroup this allocation belongs to
 	TaskGroupName string `protobuf:"bytes,11,opt,name=taskGroupName,proto3" json:"taskGroupName,omitempty"`
-	// Is this a placeholder ask (true) or a real ask (false), defaults to false
+	// Is this a placeholder allocation (true) or a real allocation (false), defaults to false
 	// ignored if the taskGroupName is not set
 	Placeholder          bool     `protobuf:"varint,12,opt,name=placeholder,proto3" json:"placeholder,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -1732,10 +1741,10 @@
 	// The allocations to release
 	AllocationsToRelease []*AllocationRelease `protobuf:"bytes,1,rep,name=allocationsToRelease,proto3" json:"allocationsToRelease,omitempty"`
 	// The asks to release
-	AllocationAsksToRelease []*AllocationAskReleaseRequest `protobuf:"bytes,2,rep,name=allocationAsksToRelease,proto3" json:"allocationAsksToRelease,omitempty"`
-	XXX_NoUnkeyedLiteral    struct{}                       `json:"-"`
-	XXX_unrecognized        []byte                         `json:"-"`
-	XXX_sizecache           int32                          `json:"-"`
+	AllocationAsksToRelease []*AllocationAskRelease `protobuf:"bytes,2,rep,name=allocationAsksToRelease,proto3" json:"allocationAsksToRelease,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}                `json:"-"`
+	XXX_unrecognized        []byte                  `json:"-"`
+	XXX_sizecache           int32                   `json:"-"`
 }
 
 func (m *AllocationReleasesRequest) Reset()         { *m = AllocationReleasesRequest{} }
@@ -1770,7 +1779,7 @@
 	return nil
 }
 
-func (m *AllocationReleasesRequest) GetAllocationAsksToRelease() []*AllocationAskReleaseRequest {
+func (m *AllocationReleasesRequest) GetAllocationAsksToRelease() []*AllocationAskRelease {
 	if m != nil {
 		return m.AllocationAsksToRelease
 	}
@@ -1789,7 +1798,7 @@
 	// the applicationID
 	UUID string `protobuf:"bytes,3,opt,name=UUID,proto3" json:"UUID,omitempty"`
 	// Termination type of the released allocation
-	TerminationType AllocationRelease_TerminationType `protobuf:"varint,4,opt,name=terminationType,proto3,enum=si.v1.AllocationRelease_TerminationType" json:"terminationType,omitempty"`
+	TerminationType TerminationType `protobuf:"varint,4,opt,name=terminationType,proto3,enum=si.v1.TerminationType" json:"terminationType,omitempty"`
 	// human-readable message
 	Message              string   `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -1843,11 +1852,11 @@
 	return ""
 }
 
-func (m *AllocationRelease) GetTerminationType() AllocationRelease_TerminationType {
+func (m *AllocationRelease) GetTerminationType() TerminationType {
 	if m != nil {
 		return m.TerminationType
 	}
-	return AllocationRelease_STOPPED_BY_RM
+	return TerminationType_STOPPED_BY_RM
 }
 
 func (m *AllocationRelease) GetMessage() string {
@@ -1858,7 +1867,7 @@
 }
 
 // Release ask
-type AllocationAskReleaseRequest struct {
+type AllocationAskRelease struct {
 	// Which partition to release the ask from, required.
 	PartitionName string `protobuf:"bytes,1,opt,name=partitionName,proto3" json:"partitionName,omitempty"`
 	// optional, when this is set, filter allocation key by application id.
@@ -1866,60 +1875,69 @@
 	ApplicationID string `protobuf:"bytes,2,opt,name=applicationID,proto3" json:"applicationID,omitempty"`
 	// optional, when this is set, only release allocation ask by specified
 	Allocationkey string `protobuf:"bytes,3,opt,name=allocationkey,proto3" json:"allocationkey,omitempty"`
+	// Termination type of the released allocation ask
+	TerminationType TerminationType `protobuf:"varint,4,opt,name=terminationType,proto3,enum=si.v1.TerminationType" json:"terminationType,omitempty"`
 	// For human-readable message
-	Message              string   `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
+	Message              string   `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *AllocationAskReleaseRequest) Reset()         { *m = AllocationAskReleaseRequest{} }
-func (m *AllocationAskReleaseRequest) String() string { return proto.CompactTextString(m) }
-func (*AllocationAskReleaseRequest) ProtoMessage()    {}
-func (*AllocationAskReleaseRequest) Descriptor() ([]byte, []int) {
+func (m *AllocationAskRelease) Reset()         { *m = AllocationAskRelease{} }
+func (m *AllocationAskRelease) String() string { return proto.CompactTextString(m) }
+func (*AllocationAskRelease) ProtoMessage()    {}
+func (*AllocationAskRelease) Descriptor() ([]byte, []int) {
 	return fileDescriptor_bcd2636ebca16c8c, []int{24}
 }
 
-func (m *AllocationAskReleaseRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AllocationAskReleaseRequest.Unmarshal(m, b)
+func (m *AllocationAskRelease) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AllocationAskRelease.Unmarshal(m, b)
 }
-func (m *AllocationAskReleaseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AllocationAskReleaseRequest.Marshal(b, m, deterministic)
+func (m *AllocationAskRelease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AllocationAskRelease.Marshal(b, m, deterministic)
 }
-func (m *AllocationAskReleaseRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AllocationAskReleaseRequest.Merge(m, src)
+func (m *AllocationAskRelease) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AllocationAskRelease.Merge(m, src)
 }
-func (m *AllocationAskReleaseRequest) XXX_Size() int {
-	return xxx_messageInfo_AllocationAskReleaseRequest.Size(m)
+func (m *AllocationAskRelease) XXX_Size() int {
+	return xxx_messageInfo_AllocationAskRelease.Size(m)
 }
-func (m *AllocationAskReleaseRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_AllocationAskReleaseRequest.DiscardUnknown(m)
+func (m *AllocationAskRelease) XXX_DiscardUnknown() {
+	xxx_messageInfo_AllocationAskRelease.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_AllocationAskReleaseRequest proto.InternalMessageInfo
+var xxx_messageInfo_AllocationAskRelease proto.InternalMessageInfo
 
-func (m *AllocationAskReleaseRequest) GetPartitionName() string {
+func (m *AllocationAskRelease) GetPartitionName() string {
 	if m != nil {
 		return m.PartitionName
 	}
 	return ""
 }
 
-func (m *AllocationAskReleaseRequest) GetApplicationID() string {
+func (m *AllocationAskRelease) GetApplicationID() string {
 	if m != nil {
 		return m.ApplicationID
 	}
 	return ""
 }
 
-func (m *AllocationAskReleaseRequest) GetAllocationkey() string {
+func (m *AllocationAskRelease) GetAllocationkey() string {
 	if m != nil {
 		return m.Allocationkey
 	}
 	return ""
 }
 
-func (m *AllocationAskReleaseRequest) GetMessage() string {
+func (m *AllocationAskRelease) GetTerminationType() TerminationType {
+	if m != nil {
+		return m.TerminationType
+	}
+	return TerminationType_STOPPED_BY_RM
+}
+
+func (m *AllocationAskRelease) GetMessage() string {
 	if m != nil {
 		return m.Message
 	}
@@ -2791,9 +2809,9 @@
 }
 
 func init() {
+	proto.RegisterEnum("si.v1.TerminationType", TerminationType_name, TerminationType_value)
 	proto.RegisterEnum("si.v1.UpdateResponse_ActionFromScheduler", UpdateResponse_ActionFromScheduler_name, UpdateResponse_ActionFromScheduler_value)
 	proto.RegisterEnum("si.v1.AffinityTargetExpression_AffinityTargetOperator", AffinityTargetExpression_AffinityTargetOperator_name, AffinityTargetExpression_AffinityTargetOperator_value)
-	proto.RegisterEnum("si.v1.AllocationRelease_TerminationType", AllocationRelease_TerminationType_name, AllocationRelease_TerminationType_value)
 	proto.RegisterEnum("si.v1.UpdateNodeInfo_ActionFromRM", UpdateNodeInfo_ActionFromRM_name, UpdateNodeInfo_ActionFromRM_value)
 	proto.RegisterEnum("si.v1.UpdateContainerSchedulingStateRequest_SchedulingState", UpdateContainerSchedulingStateRequest_SchedulingState_name, UpdateContainerSchedulingStateRequest_SchedulingState_value)
 	proto.RegisterEnum("si.v1.EventRecord_Type", EventRecord_Type_name, EventRecord_Type_value)
@@ -2825,7 +2843,7 @@
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.Allocation.AllocationTagsEntry")
 	proto.RegisterType((*AllocationReleasesRequest)(nil), "si.v1.AllocationReleasesRequest")
 	proto.RegisterType((*AllocationRelease)(nil), "si.v1.AllocationRelease")
-	proto.RegisterType((*AllocationAskReleaseRequest)(nil), "si.v1.AllocationAskReleaseRequest")
+	proto.RegisterType((*AllocationAskRelease)(nil), "si.v1.AllocationAskRelease")
 	proto.RegisterType((*NewNodeInfo)(nil), "si.v1.NewNodeInfo")
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.NewNodeInfo.AttributesEntry")
 	proto.RegisterType((*UpdateNodeInfo)(nil), "si.v1.UpdateNodeInfo")
@@ -2852,168 +2870,169 @@
 }
 
 var fileDescriptor_bcd2636ebca16c8c = []byte{
-	// 2571 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6e, 0x1b, 0xc9,
-	0xf1, 0xd7, 0x90, 0x94, 0x44, 0x96, 0x24, 0x8a, 0x6a, 0xca, 0x36, 0x2d, 0xef, 0x7a, 0xb5, 0x83,
-	0xb5, 0xa0, 0x3f, 0x16, 0xa6, 0xff, 0x56, 0x80, 0xec, 0xfa, 0x23, 0x59, 0x50, 0xe2, 0xc8, 0x62,
-	0x2c, 0x91, 0x74, 0x93, 0x72, 0xb2, 0x41, 0x00, 0x61, 0x34, 0x6c, 0xd1, 0x63, 0x91, 0x33, 0x74,
-	0xf7, 0x8c, 0x6c, 0x25, 0x0f, 0x90, 0x43, 0x72, 0xcf, 0x3d, 0x01, 0x02, 0x24, 0xb9, 0xe6, 0x05,
-	0x72, 0x0a, 0x90, 0x53, 0xee, 0x39, 0xe5, 0x01, 0x16, 0xc9, 0x3d, 0x97, 0xa0, 0x7b, 0x7a, 0x86,
-	0xf3, 0x29, 0xd1, 0xde, 0x3d, 0xe4, 0xc6, 0xae, 0xf9, 0x55, 0x4d, 0x75, 0x55, 0x75, 0x55, 0x75,
-	0x0d, 0xe1, 0x81, 0x69, 0x19, 0xee, 0xa9, 0xee, 0xd8, 0xf4, 0xfe, 0xa5, 0x6b, 0x99, 0xe7, 0x36,
-	0xb5, 0xee, 0x33, 0xe3, 0x15, 0x19, 0xb8, 0x23, 0x42, 0xef, 0x9b, 0x96, 0x43, 0xe8, 0x99, 0x6e,
-	0x90, 0x07, 0xcc, 0xac, 0x4f, 0xa8, 0xed, 0xd8, 0x68, 0x9e, 0x99, 0xf5, 0x8b, 0x87, 0x1b, 0x9b,
-	0x43, 0xdb, 0x1e, 0x8e, 0xc8, 0x03, 0x41, 0x3c, 0x75, 0xcf, 0x1e, 0x0c, 0x08, 0x33, 0xa8, 0x39,
-	0x71, 0x6c, 0xea, 0x01, 0xd5, 0x09, 0xdc, 0xc5, 0x64, 0x68, 0x32, 0x87, 0x50, 0x4c, 0x98, 0xed,
-	0x52, 0x83, 0x1c, 0xe9, 0x96, 0x3e, 0xe4, 0xcb, 0x37, 0x2e, 0x61, 0x0e, 0x42, 0x50, 0xa0, 0xe3,
-	0x56, 0xb3, 0xa6, 0x6c, 0x2a, 0xdb, 0x25, 0x2c, 0x7e, 0xa3, 0x1a, 0x2c, 0x5e, 0x10, 0xca, 0x4c,
-	0xdb, 0xaa, 0xe5, 0x04, 0xd9, 0x5f, 0xa2, 0x4d, 0x58, 0x9a, 0xd8, 0x23, 0xd3, 0xb8, 0x7c, 0x46,
-	0x6d, 0x77, 0x52, 0xcb, 0x8b, 0xa7, 0x61, 0x92, 0xfa, 0x29, 0x7c, 0x92, 0xf9, 0x46, 0x36, 0xb1,
-	0x2d, 0x46, 0xd4, 0x7f, 0xe5, 0x61, 0xe5, 0x78, 0x32, 0xd0, 0x1d, 0xe2, 0x2b, 0xb1, 0x0d, 0x05,
-	0x9d, 0x9d, 0xb3, 0x9a, 0xb2, 0x99, 0xdf, 0x5e, 0xda, 0x59, 0xaf, 0x8b, 0xed, 0xd5, 0x1b, 0xa3,
-	0x91, 0x6d, 0xe8, 0x8e, 0x69, 0x5b, 0x0d, 0x76, 0x8e, 0x05, 0x02, 0x3d, 0x85, 0x22, 0x25, 0x23,
-	0xa2, 0x33, 0xc2, 0x84, 0x6e, 0x4b, 0x3b, 0x9b, 0x09, 0x34, 0x96, 0x00, 0x29, 0x1d, 0x07, 0x1c,
-	0xa8, 0x09, 0x55, 0x8b, 0xbc, 0xed, 0x79, 0xa6, 0xd5, 0x4f, 0x47, 0xa4, 0x6d, 0x0f, 0x08, 0xab,
-	0xe5, 0xc5, 0x6b, 0x91, 0x14, 0xd4, 0x26, 0x6f, 0x39, 0xb9, 0x65, 0x9d, 0xd9, 0x38, 0x0d, 0x8e,
-	0x1e, 0xc1, 0xb2, 0x2b, 0xd4, 0x1f, 0x78, 0xec, 0x05, 0xc1, 0x7e, 0x43, 0xb2, 0x7b, 0x3b, 0x0b,
-	0x24, 0x44, 0xa0, 0xe8, 0x00, 0x90, 0xeb, 0x98, 0x23, 0xf3, 0xe7, 0x52, 0xd1, 0x89, 0x4d, 0x1d,
-	0x56, 0x9b, 0x17, 0x02, 0x6a, 0xbe, 0x80, 0x38, 0x00, 0xa7, 0xf0, 0x04, 0x7e, 0x5b, 0x08, 0xf9,
-	0x6d, 0x1f, 0x56, 0x2d, 0xf2, 0xb6, 0x31, 0x99, 0x8c, 0x4c, 0xcf, 0x12, 0xac, 0x56, 0x14, 0xa2,
-	0x3f, 0xf2, 0x6d, 0x34, 0x18, 0x84, 0x9e, 0xfa, 0xf6, 0x89, 0x33, 0xa1, 0x0e, 0x20, 0x4a, 0xc6,
-	0xf6, 0x05, 0x89, 0x88, 0x2a, 0x09, 0x51, 0x9f, 0x48, 0x51, 0x38, 0x0e, 0xf0, 0xa5, 0xa5, 0xb0,
-	0xaa, 0xbf, 0x5a, 0x80, 0xb2, 0xef, 0x71, 0x2f, 0x08, 0x50, 0x03, 0x16, 0x74, 0x83, 0x3f, 0x15,
-	0x91, 0x57, 0xde, 0xf9, 0xbf, 0x88, 0xf9, 0x7c, 0x58, 0xbd, 0x21, 0x30, 0xfb, 0xd4, 0x1e, 0xf7,
-	0xfc, 0x03, 0x81, 0x25, 0x23, 0x7a, 0x04, 0x65, 0xae, 0x79, 0xe0, 0x77, 0x1e, 0x11, 0x5c, 0xc5,
-	0xb5, 0x64, 0x44, 0xc4, 0x80, 0xe8, 0x47, 0x50, 0x95, 0x41, 0x31, 0x08, 0xf3, 0xe7, 0x23, 0x8e,
-	0x48, 0x44, 0x14, 0x4e, 0x63, 0x42, 0x6d, 0x2e, 0xeb, 0x35, 0x31, 0x9c, 0xa8, 0xac, 0x42, 0xc4,
-	0xf2, 0x38, 0x81, 0xe0, 0x31, 0x9d, 0xc6, 0x88, 0x9e, 0x43, 0xd5, 0xb2, 0x07, 0x04, 0x13, 0xc3,
-	0x1e, 0x8f, 0x89, 0x35, 0x90, 0xf2, 0xbc, 0x20, 0xb9, 0xed, 0x07, 0x69, 0x02, 0x81, 0xd3, 0xb8,
-	0x50, 0x1b, 0xd6, 0x83, 0x77, 0x84, 0x9d, 0xb9, 0x20, 0xa4, 0x6d, 0xc4, 0xb5, 0x0b, 0xb9, 0x33,
-	0x95, 0x8f, 0xcb, 0xd3, 0x0d, 0x83, 0x4c, 0xe2, 0xf2, 0x16, 0x23, 0xf2, 0x1a, 0x49, 0x08, 0x4e,
-	0xe5, 0xe3, 0x9b, 0x95, 0x07, 0x24, 0x25, 0x6c, 0x6f, 0x47, 0x62, 0x22, 0x22, 0x2d, 0x8d, 0x0b,
-	0x3d, 0x82, 0x15, 0x5f, 0x69, 0xef, 0x64, 0x7a, 0x21, 0x5b, 0x8d, 0xed, 0x52, 0xd8, 0x2e, 0x8a,
-	0xe4, 0xac, 0xbe, 0x7e, 0x1e, 0x2b, 0x44, 0x58, 0x1b, 0xa1, 0x67, 0x38, 0x8a, 0x54, 0x1f, 0x40,
-	0x35, 0x25, 0x4a, 0xd1, 0x32, 0x14, 0xdb, 0x9d, 0xc6, 0x5e, 0xbf, 0xd5, 0x69, 0x57, 0xe6, 0x10,
-	0xc0, 0x02, 0xd6, 0x7a, 0x5f, 0xb7, 0xf7, 0x2a, 0x8a, 0xfa, 0x7b, 0x05, 0x50, 0x72, 0x4b, 0xe8,
-	0x33, 0x58, 0xd1, 0xa7, 0xcb, 0x20, 0x25, 0x47, 0x89, 0x68, 0x1d, 0xe6, 0x99, 0xa3, 0x3b, 0x44,
-	0x66, 0x66, 0x6f, 0x81, 0x1e, 0x43, 0x4d, 0xfc, 0xe8, 0x53, 0xdd, 0x62, 0x26, 0x87, 0xf6, 0xcd,
-	0x31, 0x61, 0x8e, 0x3e, 0xf6, 0x92, 0x74, 0x1e, 0x67, 0x3e, 0xe7, 0xd9, 0x7e, 0x4c, 0x18, 0xd3,
-	0x87, 0xa4, 0x56, 0xf0, 0xb2, 0xbd, 0x5c, 0xaa, 0x3d, 0xa8, 0xa6, 0x44, 0xc6, 0x8c, 0x8a, 0xde,
-	0x84, 0x05, 0x4a, 0x74, 0x16, 0xd4, 0x10, 0xb9, 0x52, 0x9f, 0x70, 0x73, 0x25, 0x22, 0x61, 0x36,
-	0xa1, 0xea, 0x0f, 0x61, 0x39, 0xec, 0x45, 0xfe, 0x12, 0x1e, 0xf5, 0x01, 0x5c, 0xae, 0x32, 0x5f,
-	0xbe, 0x05, 0xcb, 0x61, 0x57, 0x66, 0xf1, 0xab, 0x16, 0x14, 0xbb, 0xd4, 0xb4, 0xa9, 0xe9, 0x5c,
-	0xa2, 0x2d, 0x58, 0x99, 0xc8, 0xdf, 0x2f, 0xf5, 0x91, 0x4b, 0x04, 0x74, 0xfe, 0x60, 0x0e, 0x47,
-	0xc9, 0xa8, 0x0e, 0x6b, 0x3e, 0x61, 0x6f, 0xa4, 0x33, 0xd6, 0xd6, 0xc7, 0xd2, 0x4b, 0x07, 0x73,
-	0x38, 0xf9, 0x68, 0x17, 0xa0, 0xe8, 0x13, 0xd5, 0xdf, 0x28, 0x50, 0xf4, 0xcb, 0x25, 0x7a, 0x0a,
-	0x25, 0x2a, 0x7f, 0xfb, 0x25, 0xf1, 0x6e, 0x10, 0xc2, 0x1e, 0x3d, 0xf8, 0xc1, 0x34, 0xcb, 0xa1,
-	0x97, 0x78, 0xca, 0xb0, 0x71, 0x04, 0xe5, 0xe8, 0x43, 0x54, 0x81, 0xfc, 0x39, 0xb9, 0x94, 0x3b,
-	0xe4, 0x3f, 0xd1, 0x3d, 0x98, 0xbf, 0x10, 0x5b, 0xf1, 0x4a, 0xe8, 0xaa, 0x94, 0xfe, 0xc2, 0xd5,
-	0x2d, 0xc7, 0x74, 0x2e, 0xb1, 0xf7, 0xf4, 0x71, 0xee, 0x4b, 0x45, 0xdd, 0x84, 0xa2, 0x4f, 0xe6,
-	0xb1, 0x77, 0x11, 0x58, 0x20, 0x2f, 0x51, 0xea, 0xdf, 0x0b, 0xb0, 0x12, 0x49, 0x6b, 0xc2, 0x97,
-	0x01, 0xe1, 0x79, 0xf0, 0xea, 0x28, 0x31, 0xe9, 0xf1, 0x5c, 0x5a, 0x18, 0x7d, 0x06, 0x2b, 0x13,
-	0x9d, 0x3a, 0x22, 0x66, 0x85, 0x45, 0xbd, 0x9e, 0x23, 0x4a, 0x44, 0x0f, 0x61, 0xc9, 0xb7, 0x40,
-	0x83, 0x9d, 0x8b, 0x38, 0x9e, 0x6e, 0xcb, 0x37, 0x07, 0x0e, 0x63, 0xd0, 0x16, 0x94, 0xc7, 0xfa,
-	0xbb, 0x70, 0xc6, 0x9e, 0xe7, 0x7e, 0xc5, 0x31, 0x2a, 0xfa, 0x7c, 0xea, 0x26, 0x51, 0x6c, 0xa7,
-	0x72, 0xfd, 0x08, 0xc1, 0x01, 0x00, 0xed, 0xc2, 0x47, 0xe4, 0x1d, 0x31, 0x5c, 0xff, 0x84, 0xd9,
-	0xae, 0x73, 0x64, 0x8e, 0x46, 0x66, 0x8f, 0x18, 0xb6, 0x35, 0xe0, 0x69, 0x92, 0x1b, 0xee, 0x4a,
-	0x0c, 0xda, 0x81, 0x82, 0xa3, 0x0f, 0xfd, 0x1c, 0x78, 0x37, 0xad, 0x19, 0xaa, 0xf7, 0xf5, 0xa1,
-	0xf4, 0xbc, 0xc0, 0xa2, 0x43, 0xa8, 0x4e, 0x46, 0xba, 0x41, 0xc6, 0xc4, 0x72, 0xf6, 0x6c, 0x8b,
-	0x39, 0x54, 0x37, 0x2d, 0xa7, 0x56, 0x12, 0xfa, 0xfa, 0x59, 0xb9, 0x9b, 0x44, 0xe0, 0x34, 0x36,
-	0x6e, 0x73, 0x47, 0x67, 0xe7, 0xa2, 0xa1, 0x13, 0x36, 0x07, 0xcf, 0xe6, 0x11, 0xa2, 0xe8, 0x05,
-	0x39, 0xf3, 0x2b, 0x7b, 0x34, 0x20, 0xb4, 0xb6, 0xb4, 0xa9, 0x6c, 0x17, 0x71, 0x98, 0xb4, 0xf1,
-	0x05, 0x94, 0x02, 0x45, 0x53, 0xa2, 0x70, 0x3d, 0x1c, 0x85, 0xa5, 0x70, 0xd0, 0xfd, 0x36, 0x0f,
-	0x37, 0x52, 0x7b, 0x95, 0x19, 0x73, 0xcf, 0x47, 0x50, 0x7a, 0xe3, 0x12, 0x97, 0x4c, 0x8f, 0x20,
-	0x9e, 0x12, 0x66, 0x0c, 0xa9, 0xfb, 0x90, 0x77, 0x87, 0xa6, 0x0c, 0xa5, 0x3b, 0x7e, 0x25, 0x62,
-	0x84, 0x0a, 0x0b, 0xf0, 0xde, 0x8e, 0x8e, 0x3d, 0xd5, 0x38, 0x0e, 0x3d, 0x96, 0x5e, 0xf3, 0xca,
-	0xf4, 0xd6, 0x55, 0x0d, 0x57, 0xc2, 0x7b, 0xd7, 0x45, 0xcd, 0xc2, 0x0c, 0x51, 0xf3, 0x05, 0x94,
-	0x43, 0xa6, 0xe7, 0x87, 0x60, 0x31, 0xfd, 0x10, 0xc4, 0x60, 0x1f, 0xee, 0xa4, 0x33, 0xa8, 0x65,
-	0x35, 0x81, 0x33, 0xba, 0x29, 0xe1, 0x88, 0x5c, 0x8a, 0x23, 0xd4, 0x5d, 0x58, 0x4f, 0x33, 0x3b,
-	0xef, 0x80, 0x5d, 0x46, 0xa8, 0x7f, 0x73, 0xe1, 0xbf, 0x79, 0x3e, 0x1f, 0x72, 0x9c, 0xd7, 0x0a,
-	0x96, 0xb0, 0x5c, 0xa9, 0x0c, 0xaa, 0x29, 0xd1, 0x8f, 0xda, 0x50, 0x61, 0xe6, 0x78, 0x32, 0x22,
-	0xa1, 0x33, 0xa3, 0x44, 0x6e, 0x15, 0x3d, 0xf1, 0x38, 0x85, 0xf7, 0x60, 0x0e, 0x27, 0x78, 0x77,
-	0x97, 0x01, 0x8c, 0x60, 0xa5, 0xfe, 0x43, 0x81, 0xdb, 0x99, 0xfc, 0xe8, 0x25, 0xdc, 0xe4, 0xc5,
-	0xa6, 0x71, 0x76, 0x66, 0x5a, 0xbc, 0x2e, 0xc4, 0x35, 0xb8, 0x1b, 0xea, 0xf4, 0x92, 0x20, 0x86,
-	0x33, 0xb8, 0xd1, 0x19, 0xdc, 0x99, 0xe6, 0x59, 0xff, 0x79, 0xc3, 0x71, 0xa8, 0x79, 0xea, 0x3a,
-	0x7e, 0xc6, 0xff, 0x2c, 0x99, 0x55, 0x52, 0x5e, 0x71, 0x95, 0x20, 0xf5, 0x15, 0xdc, 0xca, 0x50,
-	0x0d, 0x1d, 0xc1, 0x9a, 0xa3, 0xd3, 0x21, 0x71, 0xb4, 0x77, 0x13, 0x4a, 0x18, 0x0b, 0xf5, 0xe6,
-	0xfe, 0xf5, 0xc1, 0x67, 0xeb, 0xc7, 0x70, 0x38, 0xc9, 0xa9, 0xfe, 0x5b, 0x81, 0x8f, 0xaf, 0x54,
-	0x54, 0x34, 0x45, 0x86, 0x3d, 0x21, 0x32, 0x16, 0xbc, 0x85, 0x50, 0x83, 0xea, 0x1f, 0xaa, 0x46,
-	0x9c, 0x53, 0x14, 0x0c, 0xd3, 0xda, 0xd3, 0xe9, 0xc0, 0xb4, 0xf4, 0x11, 0x2f, 0x07, 0x79, 0x59,
-	0x30, 0x22, 0x54, 0x59, 0x58, 0xc2, 0xb8, 0x42, 0x50, 0x58, 0xc2, 0xb8, 0x0d, 0x7e, 0x95, 0x7d,
-	0xe3, 0x9a, 0x94, 0x0c, 0x44, 0xe9, 0x29, 0xe2, 0x60, 0xad, 0x7e, 0xa3, 0x40, 0x2d, 0x4b, 0x37,
-	0xf4, 0x0c, 0xca, 0x9e, 0x91, 0x3a, 0x13, 0x42, 0x75, 0xc7, 0xa6, 0x32, 0x62, 0xae, 0xdd, 0x54,
-	0x8c, 0x8d, 0xa7, 0x49, 0x8f, 0xc2, 0x6b, 0xb4, 0x4c, 0x93, 0x01, 0x01, 0xa9, 0xb0, 0xec, 0x2d,
-	0x44, 0x7b, 0xe3, 0x5d, 0x8e, 0x4a, 0x38, 0x42, 0x53, 0xf7, 0xe1, 0x66, 0xf4, 0x6d, 0x81, 0xec,
-	0x05, 0xc8, 0xb5, 0x64, 0xe3, 0xdb, 0xee, 0xf4, 0x4f, 0x5a, 0xed, 0x8a, 0x82, 0x4a, 0x30, 0xaf,
-	0xfd, 0xa4, 0xd5, 0xeb, 0x57, 0x72, 0x68, 0x05, 0x4a, 0x9c, 0xec, 0x2d, 0xf3, 0xea, 0xaf, 0x0b,
-	0x00, 0x53, 0x17, 0xcf, 0xd8, 0x40, 0x1c, 0x41, 0x79, 0x4a, 0xe0, 0x39, 0x4c, 0x3a, 0xf7, 0x5e,
-	0x22, 0xb8, 0x43, 0x3f, 0xa7, 0xb9, 0x37, 0xc6, 0xcc, 0xf3, 0xc9, 0xf1, 0x71, 0xab, 0x29, 0xab,
-	0x81, 0xf8, 0x8d, 0x9e, 0x40, 0xc5, 0xef, 0x19, 0xba, 0x84, 0x0a, 0x29, 0xc2, 0x57, 0x29, 0x79,
-	0x35, 0x01, 0x7c, 0xbf, 0xce, 0x21, 0x52, 0xb2, 0x16, 0xe3, 0x25, 0x6b, 0xda, 0xa7, 0x16, 0x23,
-	0x7d, 0x6e, 0x22, 0xcf, 0x96, 0x66, 0xca, 0xb3, 0x90, 0x56, 0xf0, 0x12, 0x55, 0x7f, 0x69, 0x86,
-	0xaa, 0xbf, 0x9c, 0xac, 0xfa, 0x0d, 0xa8, 0xa6, 0x98, 0xfb, 0xbd, 0x4a, 0xcb, 0x5f, 0x15, 0xb8,
-	0x9d, 0x39, 0xcf, 0x41, 0x87, 0xb0, 0x3e, 0x75, 0x1d, 0xeb, 0xdb, 0xf2, 0xb9, 0x6c, 0x95, 0xb3,
-	0x6f, 0xef, 0xa9, 0x5c, 0xe8, 0x67, 0x70, 0x4b, 0x0f, 0xf7, 0x56, 0x21, 0x81, 0x5e, 0x38, 0xa9,
-	0xa9, 0xe3, 0x28, 0x29, 0x53, 0x0e, 0x3d, 0xb2, 0x44, 0xa8, 0x7f, 0xcb, 0xc1, 0x5a, 0x42, 0x93,
-	0xa4, 0x43, 0x94, 0x0c, 0x87, 0xcc, 0xd0, 0x20, 0xa7, 0x85, 0x2d, 0x86, 0x55, 0x87, 0xd0, 0xb1,
-	0x69, 0x79, 0x3e, 0xb8, 0x9c, 0x78, 0x57, 0xbb, 0xf2, 0xce, 0x76, 0x96, 0x71, 0xea, 0xfd, 0x28,
-	0x1e, 0xc7, 0x05, 0x84, 0xaf, 0x89, 0xf3, 0xd1, 0x6b, 0xe2, 0x10, 0x56, 0x63, 0xdc, 0x68, 0x0d,
-	0x56, 0x7a, 0xfd, 0x4e, 0xb7, 0xab, 0x35, 0x4f, 0x76, 0xbf, 0x3e, 0xc1, 0x47, 0x95, 0x39, 0xb4,
-	0x04, 0x8b, 0xfd, 0xd6, 0x91, 0xd6, 0x39, 0xee, 0x57, 0x14, 0xb4, 0x01, 0x37, 0xbb, 0x58, 0xd3,
-	0x8e, 0xba, 0x7d, 0x0f, 0xd1, 0xdb, 0x3b, 0xd0, 0x9a, 0xc7, 0x87, 0x1a, 0xae, 0xe4, 0x50, 0x0d,
-	0xd6, 0xbb, 0x87, 0x8d, 0x3d, 0xed, 0xa0, 0x73, 0xd8, 0xd4, 0xf0, 0x09, 0xd6, 0xc4, 0xaa, 0x59,
-	0xc9, 0xab, 0x7f, 0x50, 0xe0, 0xce, 0x15, 0x5e, 0xf8, 0x4e, 0xcd, 0x1a, 0x49, 0x41, 0x3c, 0x70,
-	0xf3, 0xf1, 0x14, 0xc4, 0x43, 0x38, 0xfb, 0xee, 0xfc, 0x4d, 0x0e, 0x96, 0x42, 0x93, 0xc4, 0xcc,
-	0x9b, 0xea, 0x2e, 0x80, 0xee, 0xd7, 0x54, 0x16, 0x8b, 0xb8, 0x10, 0x7f, 0x3d, 0x28, 0xbc, 0x32,
-	0x7b, 0x85, 0xb8, 0x50, 0x03, 0xaa, 0x6c, 0x3a, 0xa4, 0xf4, 0x33, 0x92, 0xd0, 0x38, 0x25, 0x51,
-	0xa5, 0x61, 0x79, 0xa2, 0xb3, 0x0d, 0xc3, 0x9d, 0x98, 0x64, 0x10, 0xf0, 0x67, 0xdc, 0xa2, 0x12,
-	0x40, 0xb4, 0x07, 0x55, 0xf2, 0xce, 0x64, 0x8e, 0x69, 0x0d, 0xa3, 0xf7, 0xa9, 0x8c, 0x69, 0x5c,
-	0x1a, 0x7a, 0xe3, 0x07, 0xb0, 0x1a, 0xdb, 0xe3, 0x7b, 0xa5, 0x8c, 0xbf, 0xe4, 0xfd, 0x11, 0xe3,
-	0xb5, 0x26, 0xd7, 0x52, 0x4c, 0x7e, 0x2f, 0x75, 0x7a, 0xfb, 0x3f, 0x6d, 0xf5, 0xc7, 0xc1, 0x04,
-	0x75, 0x5e, 0x9c, 0x6d, 0x35, 0x63, 0x0b, 0xc1, 0x6c, 0x0a, 0x1f, 0xf9, 0xa3, 0xd3, 0x6f, 0x6b,
-	0xec, 0x63, 0x58, 0x0e, 0x8b, 0xe5, 0x45, 0xfe, 0xb8, 0xdb, 0x6c, 0xf4, 0xb5, 0xca, 0x1c, 0x2a,
-	0x03, 0x34, 0x71, 0xa3, 0xd5, 0x3e, 0x69, 0x77, 0x9a, 0x5a, 0x45, 0x41, 0xab, 0xb0, 0xd4, 0xd4,
-	0xf6, 0x3a, 0x47, 0xad, 0x5e, 0xaf, 0xd5, 0x69, 0x7b, 0xe7, 0xdb, 0x03, 0xf4, 0x3b, 0xfe, 0xb9,
-	0x6f, 0xec, 0x1e, 0x6a, 0x95, 0xbc, 0x3a, 0x80, 0xb5, 0xc4, 0xf0, 0x1b, 0x95, 0x21, 0x17, 0x78,
-	0x30, 0xd7, 0x6a, 0xa2, 0xaf, 0x00, 0xe9, 0x86, 0xe3, 0xea, 0xa3, 0x63, 0x16, 0xb2, 0x5a, 0x2e,
-	0xdd, 0x6a, 0x29, 0x50, 0xf5, 0x17, 0x70, 0x23, 0x75, 0x1a, 0xfb, 0x9d, 0x8e, 0x2d, 0xa6, 0x03,
-	0xa8, 0x7c, 0x64, 0x00, 0xf5, 0x4b, 0x05, 0x50, 0x72, 0x76, 0x8b, 0x7e, 0x0c, 0x77, 0xa9, 0x4f,
-	0x21, 0x83, 0x5e, 0x4a, 0x58, 0x29, 0xe9, 0x1b, 0xbc, 0x86, 0x2d, 0x9c, 0xa0, 0x72, 0xd1, 0x04,
-	0xf5, 0x1a, 0xca, 0x5d, 0x4a, 0x06, 0x5c, 0x65, 0xc2, 0x1a, 0x74, 0xc8, 0x66, 0xdc, 0xff, 0xf4,
-	0x54, 0xe5, 0x22, 0xa7, 0x6a, 0x03, 0x8a, 0x12, 0xe8, 0x9d, 0x81, 0x22, 0x0e, 0xd6, 0xea, 0x9f,
-	0x14, 0x7e, 0x57, 0xec, 0x5d, 0x5a, 0x46, 0x30, 0x1f, 0xdd, 0xd3, 0x8d, 0x57, 0x44, 0xbc, 0xf6,
-	0x00, 0x90, 0xce, 0x98, 0x3b, 0x8e, 0x8e, 0xcf, 0x63, 0xc5, 0x3c, 0x0e, 0xc0, 0x29, 0x3c, 0x48,
-	0x83, 0xb5, 0x33, 0x9b, 0x77, 0xa1, 0xc9, 0x6f, 0x02, 0xb7, 0xa4, 0xa0, 0x7d, 0x9b, 0x0e, 0xed,
-	0xd0, 0x73, 0x9c, 0xe4, 0x50, 0x5f, 0xc0, 0x5a, 0xe2, 0x7d, 0xdf, 0xce, 0x38, 0xea, 0x97, 0x50,
-	0x89, 0xbf, 0x79, 0x36, 0x89, 0xea, 0x1f, 0x73, 0x70, 0xcf, 0x3b, 0xd1, 0x7b, 0xb6, 0xe5, 0xe8,
-	0xa6, 0x45, 0xa8, 0xb4, 0xa1, 0x69, 0x0d, 0x7b, 0x4e, 0xe8, 0x23, 0xda, 0x16, 0x94, 0x65, 0x0c,
-	0xd2, 0xc8, 0xa5, 0x3b, 0x46, 0x4d, 0xbe, 0x37, 0x97, 0xb6, 0x13, 0xec, 0xcf, 0x99, 0xf3, 0x22,
-	0xb9, 0x3c, 0x8d, 0x24, 0x97, 0x6b, 0x54, 0xa9, 0xc7, 0xc9, 0x72, 0x4a, 0x3d, 0x3d, 0x14, 0x85,
-	0xc8, 0xa1, 0x78, 0x06, 0xab, 0x31, 0x0e, 0xde, 0x2d, 0xf4, 0x9e, 0xb7, 0x78, 0x03, 0x51, 0x99,
-	0xe3, 0x97, 0x05, 0xbf, 0x41, 0x68, 0x56, 0x14, 0xb4, 0x0c, 0x45, 0xac, 0xf5, 0x34, 0xfc, 0x52,
-	0x6b, 0x56, 0x72, 0x3c, 0xf7, 0xec, 0x37, 0x5a, 0x87, 0xa2, 0x41, 0xf8, 0x3e, 0x6c, 0x04, 0x0a,
-	0x9e, 0x99, 0x43, 0x97, 0x46, 0x86, 0x12, 0x35, 0x58, 0x34, 0x04, 0x9d, 0x49, 0xcb, 0xf8, 0x4b,
-	0x75, 0x0c, 0x77, 0x52, 0xf9, 0xe4, 0xb7, 0xaa, 0x1a, 0x2c, 0x32, 0xd7, 0x30, 0x08, 0xf3, 0x18,
-	0x8b, 0xd8, 0x5f, 0xf2, 0xae, 0xdd, 0x1e, 0x0d, 0x3c, 0x2e, 0xff, 0x06, 0x15, 0x10, 0x32, 0x93,
-	0xc0, 0x7f, 0x14, 0x58, 0xd2, 0x2e, 0x88, 0xe5, 0xf0, 0x2c, 0x40, 0x07, 0xe8, 0x73, 0x28, 0x38,
-	0x97, 0xf2, 0xf6, 0x5a, 0x0e, 0x42, 0x35, 0x84, 0xa8, 0x8b, 0x96, 0x4c, 0x80, 0xf8, 0x39, 0xb3,
-	0x4f, 0x79, 0xfa, 0x0a, 0x82, 0x2c, 0x58, 0x73, 0x45, 0xc5, 0xc0, 0x23, 0x68, 0x07, 0xfd, 0x65,
-	0x96, 0xe9, 0xb3, 0xbb, 0x3a, 0x71, 0x1d, 0xf0, 0xbf, 0x11, 0xb4, 0x75, 0xcb, 0x96, 0x53, 0xa8,
-	0x28, 0x51, 0x7d, 0x08, 0x05, 0xd1, 0xf0, 0x2d, 0xc1, 0x22, 0xd6, 0x5e, 0x1c, 0x6b, 0xbd, 0x7e,
-	0x65, 0x0e, 0x2d, 0x42, 0xbe, 0xd1, 0xed, 0x56, 0x14, 0x54, 0x84, 0x82, 0xa8, 0x02, 0x39, 0x7e,
-	0xf5, 0x7b, 0x71, 0xac, 0x1d, 0xf3, 0x2c, 0x6f, 0x02, 0x6a, 0xb8, 0x8e, 0xdd, 0x33, 0x74, 0xee,
-	0xee, 0x23, 0xe2, 0x50, 0xd3, 0x60, 0xa8, 0x07, 0x55, 0xdb, 0x75, 0x98, 0xa3, 0x5b, 0x03, 0xd3,
-	0x1a, 0x4a, 0x97, 0xf9, 0x69, 0xe0, 0x53, 0x69, 0x92, 0x4e, 0x18, 0x21, 0x33, 0xa0, 0xec, 0xc0,
-	0xd3, 0xb8, 0xd5, 0x7f, 0x2a, 0xb0, 0x91, 0xcd, 0xc3, 0xbd, 0x47, 0xbd, 0x9f, 0xc1, 0x61, 0x99,
-	0x12, 0xf8, 0xf5, 0x8d, 0x5e, 0x53, 0x5e, 0x02, 0x00, 0xfa, 0x4a, 0x8e, 0xff, 0xbc, 0x2f, 0x88,
-	0x9f, 0x5f, 0xab, 0x6f, 0x7c, 0x06, 0xf8, 0xc1, 0x63, 0xb8, 0x9d, 0x3f, 0x2b, 0x50, 0x9a, 0x7e,
-	0x75, 0x7a, 0x0d, 0xb7, 0x32, 0x3e, 0xbf, 0xa3, 0x7b, 0x81, 0xf6, 0x57, 0xfd, 0x21, 0x60, 0x63,
-	0xeb, 0x3a, 0x98, 0xfc, 0x8a, 0x3f, 0x87, 0x9e, 0xc0, 0x82, 0x77, 0x6a, 0xd0, 0x7a, 0xec, 0xe3,
-	0xad, 0x27, 0xe9, 0x46, 0xea, 0x27, 0x5d, 0x75, 0x6e, 0x5b, 0xf9, 0x7f, 0xe5, 0xf1, 0x13, 0x28,
-	0x31, 0xf3, 0x84, 0x11, 0x83, 0x12, 0x07, 0x7d, 0x5c, 0xf7, 0xfe, 0xc9, 0x50, 0xf7, 0xff, 0xc9,
-	0x50, 0xdf, 0x37, 0xc9, 0x68, 0xd0, 0x99, 0x78, 0x29, 0xfc, 0x77, 0x45, 0xaf, 0x9e, 0x30, 0xb3,
-	0x27, 0xf0, 0xbb, 0x85, 0x9f, 0xe6, 0x98, 0x79, 0xba, 0x20, 0xd0, 0xdf, 0xfb, 0x6f, 0x00, 0x00,
-	0x00, 0xff, 0xff, 0x5d, 0x59, 0xfd, 0xad, 0x3f, 0x21, 0x00, 0x00,
+	// 2583 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x72, 0xdb, 0xc8,
+	0xf1, 0x17, 0x48, 0x4a, 0x22, 0x9b, 0x12, 0x45, 0x0d, 0x65, 0x99, 0xd6, 0xee, 0x7a, 0xb5, 0xa8,
+	0xb5, 0x4a, 0xff, 0xff, 0x96, 0xe9, 0x58, 0xa9, 0xca, 0xae, 0x3f, 0x92, 0x0d, 0x25, 0x42, 0x16,
+	0x63, 0x89, 0xa4, 0x87, 0xa4, 0x93, 0xcd, 0x45, 0x05, 0x81, 0x23, 0x1a, 0x16, 0x09, 0xd0, 0x33,
+	0x80, 0x6c, 0x25, 0x0f, 0x90, 0x4b, 0xee, 0xb9, 0x27, 0x55, 0x39, 0x24, 0xd7, 0x3c, 0x40, 0xf2,
+	0x04, 0xc9, 0x3d, 0x97, 0xa4, 0x2a, 0xd7, 0xad, 0xe4, 0x9e, 0x4b, 0x6a, 0x06, 0x03, 0x10, 0x5f,
+	0xb4, 0x68, 0xef, 0xa6, 0x2a, 0x37, 0x4c, 0xe3, 0xd7, 0x8d, 0x9e, 0xee, 0x9e, 0xee, 0x9e, 0x26,
+	0xe1, 0x9e, 0x69, 0x19, 0xee, 0x99, 0xee, 0xd8, 0xf4, 0xee, 0x95, 0x6b, 0x99, 0x17, 0x36, 0xb5,
+	0xee, 0x32, 0xe3, 0x05, 0x19, 0xb8, 0x23, 0x42, 0xef, 0x9a, 0x96, 0x43, 0xe8, 0xb9, 0x6e, 0x90,
+	0x7b, 0xcc, 0xac, 0x4d, 0xa8, 0xed, 0xd8, 0x68, 0x91, 0x99, 0xb5, 0xcb, 0xfb, 0x5b, 0xdb, 0x43,
+	0xdb, 0x1e, 0x8e, 0xc8, 0x3d, 0x41, 0x3c, 0x73, 0xcf, 0xef, 0x0d, 0x08, 0x33, 0xa8, 0x39, 0x71,
+	0x6c, 0xea, 0x01, 0xd5, 0x09, 0xdc, 0xc6, 0x64, 0x68, 0x32, 0x87, 0x50, 0x4c, 0x98, 0xed, 0x52,
+	0x83, 0x9c, 0xe8, 0x96, 0x3e, 0xe4, 0xcb, 0x57, 0x2e, 0x61, 0x0e, 0x42, 0x90, 0xa3, 0xe3, 0x66,
+	0xa3, 0xaa, 0x6c, 0x2b, 0xbb, 0x05, 0x2c, 0x9e, 0x51, 0x15, 0x96, 0x2f, 0x09, 0x65, 0xa6, 0x6d,
+	0x55, 0x33, 0x82, 0xec, 0x2f, 0xd1, 0x36, 0x14, 0x27, 0xf6, 0xc8, 0x34, 0xae, 0x9e, 0x50, 0xdb,
+	0x9d, 0x54, 0xb3, 0xe2, 0x6d, 0x98, 0xa4, 0x7e, 0x02, 0x1f, 0xcf, 0xfc, 0x22, 0x9b, 0xd8, 0x16,
+	0x23, 0xea, 0x3f, 0xb3, 0xb0, 0xda, 0x9f, 0x0c, 0x74, 0x87, 0xf8, 0x4a, 0xec, 0x42, 0x4e, 0x67,
+	0x17, 0xac, 0xaa, 0x6c, 0x67, 0x77, 0x8b, 0x7b, 0x1b, 0x35, 0xb1, 0xbd, 0x5a, 0x7d, 0x34, 0xb2,
+	0x0d, 0xdd, 0x31, 0x6d, 0xab, 0xce, 0x2e, 0xb0, 0x40, 0xa0, 0xc7, 0x90, 0xa7, 0x64, 0x44, 0x74,
+	0x46, 0x98, 0xd0, 0xad, 0xb8, 0xb7, 0x9d, 0x40, 0x63, 0x09, 0x90, 0xd2, 0x71, 0xc0, 0x81, 0x1a,
+	0x50, 0xb1, 0xc8, 0xeb, 0xae, 0x67, 0x5a, 0xfd, 0x6c, 0x44, 0x5a, 0xf6, 0x80, 0xb0, 0x6a, 0x56,
+	0x7c, 0x16, 0x49, 0x41, 0x2d, 0xf2, 0x9a, 0x93, 0x9b, 0xd6, 0xb9, 0x8d, 0xd3, 0xe0, 0xe8, 0x01,
+	0xac, 0xb8, 0x42, 0xfd, 0x81, 0xc7, 0x9e, 0x13, 0xec, 0x37, 0x24, 0xbb, 0xb7, 0xb3, 0x40, 0x42,
+	0x04, 0x8a, 0x8e, 0x00, 0xb9, 0x8e, 0x39, 0x32, 0x7f, 0x26, 0x15, 0x9d, 0xd8, 0xd4, 0x61, 0xd5,
+	0x45, 0x21, 0xa0, 0xea, 0x0b, 0x88, 0x03, 0x70, 0x0a, 0x4f, 0xe0, 0xb7, 0xa5, 0x90, 0xdf, 0x0e,
+	0x61, 0xcd, 0x22, 0xaf, 0xeb, 0x93, 0xc9, 0xc8, 0xf4, 0x2c, 0xc1, 0xaa, 0x79, 0x21, 0xfa, 0x43,
+	0xdf, 0x46, 0x83, 0x41, 0xe8, 0xad, 0x6f, 0x9f, 0x38, 0x13, 0x6a, 0x03, 0xa2, 0x64, 0x6c, 0x5f,
+	0x92, 0x88, 0xa8, 0x82, 0x10, 0xf5, 0xb1, 0x14, 0x85, 0xe3, 0x00, 0x5f, 0x5a, 0x0a, 0xab, 0xfa,
+	0xb7, 0x25, 0x28, 0xf9, 0x1e, 0xf7, 0x82, 0x00, 0xd5, 0x61, 0x49, 0x37, 0xf8, 0x5b, 0x11, 0x79,
+	0xa5, 0xbd, 0xff, 0x8b, 0x98, 0xcf, 0x87, 0xd5, 0xea, 0x02, 0x73, 0x48, 0xed, 0x71, 0xd7, 0x3f,
+	0x10, 0x58, 0x32, 0xa2, 0x07, 0x50, 0xe2, 0x9a, 0x07, 0x7e, 0xe7, 0x11, 0xc1, 0x55, 0x5c, 0x4f,
+	0x46, 0x44, 0x0c, 0x88, 0x7e, 0x04, 0x15, 0x19, 0x14, 0x83, 0x30, 0x7f, 0x36, 0xe2, 0x88, 0x44,
+	0x44, 0xe1, 0x34, 0x26, 0xd4, 0x85, 0xcd, 0x24, 0xb9, 0xce, 0xc3, 0xd9, 0x0b, 0x8c, 0x0f, 0x52,
+	0xc3, 0x59, 0x4a, 0x9c, 0xc1, 0x8a, 0x5a, 0x5c, 0xc1, 0x97, 0xc4, 0x70, 0xa2, 0x0a, 0x2e, 0x46,
+	0xdc, 0x89, 0x13, 0x08, 0x2e, 0x39, 0x8d, 0x11, 0x3d, 0x85, 0x8a, 0x65, 0x0f, 0x08, 0x26, 0x86,
+	0x3d, 0x1e, 0x13, 0x6b, 0x20, 0xe5, 0x2d, 0x09, 0x79, 0xb7, 0xfc, 0xc8, 0x4f, 0x20, 0x70, 0x1a,
+	0x17, 0x6a, 0xc1, 0x46, 0xf0, 0x8d, 0x70, 0x84, 0x2c, 0x0b, 0x69, 0x5b, 0x71, 0xed, 0x42, 0x31,
+	0x92, 0xca, 0xc7, 0xe5, 0xe9, 0x86, 0x41, 0x26, 0x71, 0x79, 0xf9, 0x88, 0xbc, 0x7a, 0x12, 0x82,
+	0x53, 0xf9, 0xf8, 0x66, 0xe5, 0xa9, 0x4b, 0x09, 0xe0, 0x5b, 0x91, 0x40, 0x8b, 0x48, 0x4b, 0xe3,
+	0x42, 0x0f, 0x60, 0xd5, 0x57, 0xda, 0x3b, 0xee, 0x20, 0xc4, 0x54, 0x62, 0xbb, 0x14, 0xb6, 0x8b,
+	0x22, 0x39, 0xab, 0xaf, 0x9f, 0xc7, 0x5a, 0x8c, 0xb0, 0xd6, 0x43, 0xef, 0x70, 0x14, 0xa9, 0xde,
+	0x83, 0x4a, 0x4a, 0xe8, 0xa3, 0x15, 0xc8, 0xb7, 0xda, 0xf5, 0x83, 0x5e, 0xb3, 0xdd, 0x2a, 0x2f,
+	0x20, 0x80, 0x25, 0xac, 0x75, 0xbf, 0x6a, 0x1d, 0x94, 0x15, 0xf5, 0xb7, 0x0a, 0xa0, 0xe4, 0x96,
+	0xd0, 0xa7, 0xb0, 0xaa, 0x4f, 0x97, 0x41, 0x9e, 0x8f, 0x12, 0xd1, 0x06, 0x2c, 0x32, 0x47, 0x77,
+	0x88, 0x4c, 0xf7, 0xde, 0x02, 0x3d, 0x84, 0xaa, 0x78, 0xe8, 0x51, 0xdd, 0x62, 0x26, 0x87, 0xf6,
+	0xcc, 0x31, 0x61, 0x8e, 0x3e, 0xf6, 0x32, 0x7f, 0x16, 0xcf, 0x7c, 0xcf, 0x4b, 0xc8, 0x98, 0x30,
+	0xa6, 0x0f, 0x49, 0x35, 0xe7, 0x95, 0x10, 0xb9, 0x54, 0xbb, 0x50, 0x49, 0x89, 0x8c, 0x39, 0x15,
+	0xdd, 0x84, 0x25, 0x4a, 0x74, 0x16, 0x14, 0x26, 0xb9, 0x52, 0x1f, 0x71, 0x73, 0x25, 0x22, 0x61,
+	0x3e, 0xa1, 0xea, 0x0f, 0x60, 0x25, 0xec, 0x45, 0xfe, 0x11, 0x1e, 0xf5, 0x01, 0x5c, 0xae, 0x66,
+	0x7e, 0x7c, 0x07, 0x56, 0xc2, 0xae, 0x9c, 0xc5, 0xaf, 0x5a, 0x90, 0xef, 0x50, 0xd3, 0xa6, 0xa6,
+	0x73, 0x85, 0x76, 0x60, 0x75, 0x22, 0x9f, 0x9f, 0xeb, 0x23, 0x97, 0x08, 0xe8, 0xe2, 0xd1, 0x02,
+	0x8e, 0x92, 0x51, 0x0d, 0xd6, 0x7d, 0xc2, 0xc1, 0x48, 0x67, 0xac, 0xa5, 0x8f, 0xa5, 0x97, 0x8e,
+	0x16, 0x70, 0xf2, 0xd5, 0x3e, 0x40, 0xde, 0x27, 0xaa, 0xbf, 0x52, 0x20, 0xef, 0xd7, 0x60, 0xf4,
+	0x18, 0x0a, 0x54, 0x3e, 0xfb, 0x75, 0xf6, 0x76, 0x10, 0xc2, 0x1e, 0x3d, 0x78, 0x60, 0x9a, 0xe5,
+	0xd0, 0x2b, 0x3c, 0x65, 0xd8, 0x3a, 0x81, 0x52, 0xf4, 0x25, 0x2a, 0x43, 0xf6, 0x82, 0x5c, 0xc9,
+	0x1d, 0xf2, 0x47, 0x74, 0x07, 0x16, 0x2f, 0xc5, 0x56, 0xbc, 0xba, 0xbc, 0x26, 0xa5, 0x3f, 0x73,
+	0x75, 0xcb, 0x31, 0x9d, 0x2b, 0xec, 0xbd, 0x7d, 0x98, 0xf9, 0x42, 0x51, 0xb7, 0x21, 0xef, 0x93,
+	0x79, 0xec, 0x5d, 0x06, 0x16, 0xc8, 0x4a, 0x94, 0xfa, 0x97, 0x1c, 0xac, 0x46, 0xd2, 0x9a, 0xf0,
+	0x65, 0x40, 0x78, 0x1a, 0x7c, 0x3a, 0x4a, 0x4c, 0x7a, 0x3c, 0x93, 0x16, 0x46, 0x9f, 0xc2, 0xea,
+	0x44, 0xa7, 0x8e, 0x88, 0x59, 0x61, 0x51, 0xaf, 0x91, 0x89, 0x12, 0xd1, 0x7d, 0x28, 0xfa, 0x16,
+	0xa8, 0xb3, 0x0b, 0x11, 0xc7, 0xd3, 0x6d, 0xf9, 0xe6, 0xc0, 0x61, 0x0c, 0xda, 0x81, 0xd2, 0x58,
+	0x7f, 0x13, 0xcd, 0xd8, 0xca, 0xee, 0x22, 0x8e, 0x51, 0xd1, 0x67, 0x53, 0x37, 0x89, 0x0a, 0x3e,
+	0x95, 0xeb, 0x47, 0x08, 0x0e, 0x00, 0x68, 0x1f, 0x3e, 0x24, 0x6f, 0x88, 0xe1, 0xfa, 0x27, 0xcc,
+	0x76, 0x9d, 0x13, 0x73, 0x34, 0x32, 0xbb, 0xc4, 0xb0, 0xad, 0x01, 0x4f, 0xbb, 0xdc, 0x70, 0x6f,
+	0xc5, 0xa0, 0x3d, 0xc8, 0x39, 0xfa, 0xd0, 0x4f, 0xa9, 0xb7, 0xd3, 0x4a, 0x52, 0xad, 0xa7, 0x0f,
+	0xa5, 0xe7, 0x05, 0x16, 0x1d, 0x43, 0x65, 0x32, 0xd2, 0x0d, 0x32, 0x26, 0x96, 0x73, 0x60, 0x5b,
+	0xcc, 0xa1, 0xba, 0x69, 0x39, 0xd5, 0x82, 0xd0, 0xd7, 0xcf, 0xca, 0x9d, 0x24, 0x02, 0xa7, 0xb1,
+	0x71, 0x9b, 0x3b, 0x3a, 0xbb, 0x10, 0x5d, 0xa2, 0xb0, 0x39, 0x78, 0x36, 0x8f, 0x10, 0x45, 0x83,
+	0xc9, 0x99, 0x5f, 0xd8, 0xa3, 0x01, 0xa1, 0xd5, 0xe2, 0xb6, 0xb2, 0x9b, 0xc7, 0x61, 0xd2, 0xd6,
+	0xe7, 0x50, 0x08, 0x14, 0x4d, 0x89, 0xc2, 0x8d, 0x70, 0x14, 0x16, 0xc2, 0x41, 0xf7, 0xeb, 0x2c,
+	0xdc, 0x48, 0x6d, 0x80, 0xe6, 0xcc, 0x3d, 0x1f, 0x42, 0xe1, 0x95, 0x4b, 0x5c, 0x32, 0x3d, 0x82,
+	0x78, 0x4a, 0x98, 0x33, 0xa4, 0xee, 0x42, 0xd6, 0x1d, 0x9a, 0x32, 0x94, 0xfc, 0xc6, 0xa0, 0xcf,
+	0x08, 0x15, 0x16, 0xe0, 0x0d, 0x23, 0x1d, 0x7b, 0xaa, 0x71, 0x1c, 0x7a, 0x28, 0xbd, 0xe6, 0x95,
+	0xfd, 0x9d, 0xb7, 0x75, 0x71, 0x09, 0xef, 0x5d, 0x17, 0x35, 0x4b, 0x73, 0x44, 0xcd, 0xe7, 0x50,
+	0x0a, 0x99, 0x9e, 0x1f, 0x82, 0xe5, 0xf4, 0x43, 0x10, 0x83, 0xbd, 0xbf, 0x93, 0xce, 0xa1, 0x3a,
+	0xab, 0xb3, 0x9c, 0xd3, 0x4d, 0x09, 0x47, 0x64, 0x52, 0x1c, 0xa1, 0xee, 0xc3, 0x46, 0x9a, 0xd9,
+	0x79, 0x5b, 0xed, 0x32, 0x42, 0xfd, 0xeb, 0x10, 0x7f, 0xe6, 0xf9, 0x7c, 0xc8, 0x71, 0x5e, 0x7f,
+	0x59, 0xc0, 0x72, 0xa5, 0x32, 0xa8, 0xa4, 0x44, 0x3f, 0x6a, 0x41, 0x99, 0x99, 0xe3, 0xc9, 0x88,
+	0x84, 0xce, 0x8c, 0x12, 0xb9, 0xaa, 0x74, 0xc5, 0xeb, 0x14, 0xde, 0xa3, 0x05, 0x9c, 0xe0, 0xdd,
+	0x5f, 0x01, 0x30, 0x82, 0x95, 0xfa, 0x57, 0x05, 0x6e, 0xcd, 0xe4, 0x47, 0xcf, 0x61, 0x93, 0x17,
+	0x9b, 0xfa, 0xf9, 0xb9, 0x69, 0xf1, 0xba, 0x10, 0xd7, 0xe0, 0x76, 0xa8, 0xd3, 0x4b, 0x82, 0x18,
+	0x9e, 0xc1, 0x8d, 0xce, 0xe1, 0x83, 0x69, 0x9e, 0xf5, 0xdf, 0xd7, 0x1d, 0x87, 0x9a, 0x67, 0xae,
+	0xe3, 0x67, 0xfc, 0x4f, 0x93, 0x59, 0x25, 0xe5, 0x13, 0x6f, 0x13, 0xa4, 0xbe, 0x80, 0x9b, 0x33,
+	0x54, 0x43, 0x27, 0xb0, 0xee, 0xe8, 0x74, 0x48, 0x1c, 0xed, 0xcd, 0x84, 0x12, 0xc6, 0x42, 0x0d,
+	0xbf, 0x7f, 0x27, 0xf1, 0xd9, 0x7a, 0x31, 0x1c, 0x4e, 0x72, 0xaa, 0xff, 0x52, 0xe0, 0xa3, 0xb7,
+	0x2a, 0x2a, 0x9a, 0x22, 0xc3, 0x9e, 0x10, 0x19, 0x0b, 0xde, 0x42, 0xa8, 0x41, 0xf5, 0xf7, 0x55,
+	0x23, 0xce, 0x29, 0x0a, 0x86, 0x69, 0x1d, 0xe8, 0x74, 0x60, 0x5a, 0xfa, 0x88, 0x97, 0x83, 0xac,
+	0x2c, 0x18, 0x11, 0xaa, 0x2c, 0x2c, 0x61, 0x5c, 0x2e, 0x28, 0x2c, 0x61, 0xdc, 0x16, 0xbf, 0x1f,
+	0xbf, 0x72, 0x4d, 0x4a, 0x06, 0xa2, 0xf4, 0xe4, 0x71, 0xb0, 0x56, 0xbf, 0x56, 0xa0, 0x3a, 0x4b,
+	0x37, 0xf4, 0x04, 0x4a, 0x9e, 0x91, 0xda, 0x13, 0x42, 0x75, 0xc7, 0xa6, 0x32, 0x62, 0xae, 0xdd,
+	0x54, 0x8c, 0x8d, 0xa7, 0x49, 0x8f, 0xc2, 0x6b, 0xb4, 0x4c, 0x93, 0x01, 0x01, 0xa9, 0xb0, 0xe2,
+	0x2d, 0x44, 0x7b, 0xe3, 0xdd, 0xb8, 0x0a, 0x38, 0x42, 0x53, 0x0f, 0x61, 0x33, 0xfa, 0xb5, 0x40,
+	0xf6, 0x12, 0x64, 0x9a, 0xb2, 0xf1, 0x6d, 0xb5, 0x7b, 0xa7, 0xcd, 0x56, 0x59, 0x41, 0x05, 0x58,
+	0xd4, 0x7e, 0xd2, 0xec, 0xf6, 0xca, 0x19, 0xb4, 0x0a, 0x05, 0x4e, 0xf6, 0x96, 0x59, 0xf5, 0x97,
+	0x39, 0x80, 0xa9, 0x8b, 0xe7, 0x6c, 0x20, 0x4e, 0xa0, 0x34, 0x25, 0xf0, 0x1c, 0x26, 0x9d, 0x7b,
+	0x27, 0x11, 0xdc, 0xa1, 0xc7, 0x69, 0xee, 0x8d, 0x31, 0xf3, 0x7c, 0xd2, 0xef, 0x37, 0x1b, 0xb2,
+	0x1a, 0x88, 0x67, 0xf4, 0x08, 0xca, 0x7e, 0xcf, 0xd0, 0x21, 0x54, 0x48, 0x11, 0xbe, 0x4a, 0xc9,
+	0xab, 0x09, 0xe0, 0xbb, 0x75, 0x0e, 0x91, 0x92, 0xb5, 0x1c, 0x2f, 0x59, 0xd3, 0x3e, 0x35, 0x1f,
+	0xe9, 0x73, 0x13, 0x79, 0xb6, 0x30, 0x57, 0x9e, 0x85, 0xb4, 0x82, 0x97, 0xa8, 0xfa, 0xc5, 0x39,
+	0xaa, 0xfe, 0x4a, 0xb2, 0xea, 0xd7, 0xa1, 0x92, 0x62, 0xee, 0x77, 0x2a, 0x2d, 0x7f, 0x54, 0xe0,
+	0xd6, 0xcc, 0x21, 0x11, 0x3a, 0x86, 0x8d, 0xa9, 0xeb, 0x58, 0xcf, 0x96, 0xef, 0x65, 0xab, 0x3c,
+	0x7b, 0x24, 0x90, 0xca, 0x85, 0xfa, 0x70, 0x53, 0x8f, 0x5c, 0xe8, 0xa7, 0x02, 0x33, 0xd7, 0x0f,
+	0x05, 0x66, 0xf1, 0xaa, 0x7f, 0x56, 0x60, 0x3d, 0xa1, 0x42, 0xd2, 0x13, 0xca, 0x0c, 0x4f, 0xcc,
+	0xd1, 0x19, 0xa7, 0xc5, 0xeb, 0x0f, 0x61, 0xcd, 0x21, 0x74, 0x6c, 0x5a, 0x9e, 0xf1, 0xaf, 0x26,
+	0xde, 0x9d, 0xae, 0xb4, 0xb7, 0x29, 0x37, 0xd1, 0x8b, 0xbe, 0xc5, 0x71, 0x78, 0xf8, 0x36, 0xb8,
+	0x18, 0xbd, 0x0d, 0xfe, 0x43, 0x81, 0x8d, 0x34, 0x1b, 0x7c, 0xab, 0x9b, 0x8a, 0x9c, 0x7c, 0x1e,
+	0x2f, 0xd9, 0xf8, 0xc9, 0xe7, 0x91, 0xf3, 0xdf, 0xdc, 0xe6, 0xd7, 0x19, 0x28, 0x86, 0xe6, 0x8a,
+	0x33, 0xaf, 0x98, 0xfb, 0x00, 0xba, 0x5f, 0x0c, 0xfd, 0xcc, 0xa3, 0x26, 0xe7, 0x92, 0xb5, 0xa0,
+	0x62, 0xca, 0xb4, 0x13, 0xe2, 0x42, 0x75, 0xa8, 0xb0, 0xe9, 0xc8, 0xd2, 0x4f, 0x25, 0x62, 0xcf,
+	0x29, 0x19, 0x26, 0x0d, 0xcb, 0x33, 0x94, 0x6d, 0x18, 0xee, 0xc4, 0x24, 0x83, 0x80, 0x7f, 0xc6,
+	0xf5, 0x27, 0x01, 0x44, 0x07, 0x50, 0x21, 0x6f, 0x4c, 0xe6, 0x98, 0xd6, 0x30, 0x39, 0xba, 0x4a,
+	0x99, 0xcd, 0xa5, 0xa1, 0xb7, 0xbe, 0x0f, 0x6b, 0xb1, 0x3d, 0xbe, 0xd3, 0x59, 0xff, 0x53, 0xd6,
+	0x1f, 0x38, 0x5e, 0x6b, 0x72, 0x2d, 0xc5, 0xe4, 0x77, 0x52, 0x67, 0xb9, 0xff, 0xd3, 0x56, 0x7f,
+	0x18, 0xcc, 0x53, 0x17, 0x45, 0xd0, 0xaa, 0x33, 0xb6, 0x10, 0x0c, 0x95, 0xf0, 0x89, 0x3f, 0x48,
+	0xfd, 0xa6, 0xc6, 0xee, 0xc3, 0x4a, 0x58, 0x2c, 0xaf, 0xce, 0xfd, 0x4e, 0xa3, 0xde, 0xd3, 0xca,
+	0x0b, 0xa8, 0x04, 0xd0, 0xc0, 0xf5, 0x66, 0xeb, 0xb4, 0xd5, 0x6e, 0x68, 0x65, 0x05, 0xad, 0x41,
+	0xb1, 0xa1, 0x1d, 0xb4, 0x4f, 0x9a, 0xdd, 0x6e, 0xb3, 0xdd, 0x2a, 0x67, 0x50, 0x15, 0x36, 0x3c,
+	0x40, 0xaf, 0x7d, 0xda, 0x3d, 0x38, 0xd2, 0x1a, 0xfd, 0xe3, 0xfa, 0xfe, 0xb1, 0x56, 0xce, 0xaa,
+	0x03, 0x58, 0x4f, 0x8c, 0xc2, 0x51, 0x09, 0x32, 0x81, 0x07, 0x33, 0xcd, 0x06, 0xfa, 0x12, 0x90,
+	0x6e, 0x38, 0xae, 0x3e, 0xea, 0xb3, 0x90, 0xd5, 0x32, 0xe9, 0x56, 0x4b, 0x81, 0xaa, 0x3f, 0x87,
+	0x1b, 0xa9, 0x63, 0xd4, 0x6f, 0x75, 0xde, 0x30, 0x9d, 0x1c, 0x65, 0x23, 0x93, 0xa3, 0x5f, 0x28,
+	0x80, 0x92, 0x43, 0x57, 0xf4, 0x63, 0xb8, 0x4d, 0x7d, 0x0a, 0x19, 0x74, 0x53, 0xc2, 0x4a, 0x49,
+	0xdf, 0xe0, 0x35, 0x6c, 0xe1, 0x04, 0x95, 0x89, 0x26, 0xa8, 0x97, 0x50, 0xea, 0x50, 0x32, 0xe0,
+	0x2a, 0x13, 0x56, 0xa7, 0x43, 0x36, 0xe7, 0xfe, 0xa7, 0xa7, 0x2a, 0x13, 0x39, 0x55, 0x5b, 0x90,
+	0x97, 0x40, 0xef, 0x0c, 0xe4, 0x71, 0xb0, 0x56, 0x7f, 0xaf, 0xf0, 0x4b, 0x5e, 0xf7, 0xca, 0x32,
+	0x82, 0xc1, 0xe6, 0x81, 0x6e, 0xbc, 0x20, 0xe2, 0xb3, 0x47, 0x80, 0x74, 0xc6, 0xdc, 0x71, 0x74,
+	0xee, 0x1d, 0xab, 0xc2, 0x71, 0x00, 0x4e, 0xe1, 0x41, 0x1a, 0xac, 0x9f, 0xdb, 0xbc, 0x7d, 0x4c,
+	0xfe, 0x42, 0x70, 0x53, 0x0a, 0x3a, 0xb4, 0xe9, 0xd0, 0x0e, 0xbd, 0xc7, 0x49, 0x0e, 0xf5, 0x19,
+	0xac, 0x27, 0xbe, 0xf7, 0xcd, 0x8c, 0xa3, 0x7e, 0x01, 0xe5, 0xf8, 0x97, 0xe7, 0x93, 0xa8, 0xfe,
+	0x2e, 0x03, 0x77, 0xbc, 0x13, 0x7d, 0x60, 0x5b, 0x8e, 0x6e, 0x5a, 0x84, 0x4a, 0x1b, 0x9a, 0xd6,
+	0xb0, 0xeb, 0x84, 0x7e, 0x52, 0xdb, 0x81, 0x92, 0x8c, 0x41, 0x1a, 0xb9, 0x2d, 0xc7, 0xa8, 0xc9,
+	0xef, 0x66, 0xd2, 0x76, 0x82, 0xfd, 0x01, 0x71, 0x56, 0x24, 0x97, 0xc7, 0x91, 0xe4, 0x72, 0x8d,
+	0x2a, 0xb5, 0x38, 0x59, 0x8e, 0x97, 0xa7, 0x87, 0x22, 0x17, 0x39, 0x14, 0x4f, 0x60, 0x2d, 0xc6,
+	0x81, 0x8a, 0xb0, 0xdc, 0x7d, 0xda, 0xec, 0x74, 0xb4, 0x46, 0x79, 0x81, 0x77, 0xf9, 0x32, 0x51,
+	0x68, 0x8d, 0xb2, 0x82, 0x56, 0x20, 0x8f, 0xb5, 0xae, 0x86, 0x9f, 0x6b, 0x8d, 0x72, 0x86, 0xe7,
+	0x9e, 0xc3, 0x7a, 0x93, 0xbf, 0xc9, 0xaa, 0xdf, 0x83, 0xad, 0x40, 0xc1, 0x73, 0x73, 0xe8, 0xd2,
+	0xc8, 0x34, 0xa1, 0x0a, 0xcb, 0x86, 0xa0, 0x33, 0x69, 0x19, 0x7f, 0xa9, 0x8e, 0xe1, 0x83, 0x54,
+	0x3e, 0xf9, 0xcb, 0x55, 0x15, 0x96, 0x99, 0x6b, 0x18, 0x84, 0x79, 0x8c, 0x79, 0xec, 0x2f, 0x79,
+	0xbb, 0x6d, 0x8f, 0x06, 0x1e, 0x97, 0x7f, 0xf5, 0x09, 0x08, 0x33, 0x93, 0xc0, 0xbf, 0x15, 0x28,
+	0x6a, 0x97, 0xc4, 0x72, 0x78, 0x16, 0xa0, 0x03, 0xf4, 0x19, 0xe4, 0x9c, 0x2b, 0x79, 0xed, 0x2c,
+	0x05, 0xa1, 0x1a, 0x42, 0xd4, 0x44, 0xf7, 0x21, 0x40, 0xfc, 0x9c, 0xd9, 0x67, 0x3c, 0x7d, 0x05,
+	0x41, 0x16, 0xac, 0xb9, 0xa2, 0x62, 0x52, 0x11, 0xb4, 0x73, 0xfe, 0x72, 0x96, 0xe9, 0x67, 0x37,
+	0x30, 0xa2, 0x8f, 0xf7, 0x87, 0xfb, 0x2d, 0xdd, 0xb2, 0xe5, 0xf8, 0x28, 0x4a, 0x54, 0xef, 0x43,
+	0x4e, 0x34, 0x42, 0x45, 0x58, 0xc6, 0xda, 0xb3, 0xbe, 0xd6, 0xed, 0x95, 0x17, 0xd0, 0x32, 0x64,
+	0xeb, 0x9d, 0x4e, 0x59, 0x41, 0x79, 0xc8, 0x89, 0x2a, 0x90, 0xe1, 0x77, 0xb6, 0x67, 0x7d, 0xad,
+	0xcf, 0xb3, 0xbc, 0x09, 0xa8, 0xee, 0x3a, 0x76, 0xd7, 0xd0, 0xb9, 0xbb, 0x4f, 0x88, 0x43, 0x4d,
+	0x83, 0xa1, 0x2e, 0x54, 0x6c, 0xd7, 0x61, 0x8e, 0x6e, 0x0d, 0x4c, 0x6b, 0x28, 0x5d, 0xe6, 0xa7,
+	0x81, 0x4f, 0xa4, 0x49, 0xda, 0x61, 0x84, 0xcc, 0x80, 0xf2, 0x47, 0xc8, 0x34, 0x6e, 0xf5, 0xef,
+	0x0a, 0x6c, 0xcd, 0xe6, 0xe1, 0xde, 0xa3, 0xde, 0x63, 0x70, 0x58, 0xa6, 0x04, 0x7e, 0xef, 0xa2,
+	0xd7, 0x94, 0x97, 0x00, 0x80, 0xbe, 0x94, 0x73, 0x3b, 0xef, 0xf7, 0xc4, 0xcf, 0xae, 0xd5, 0x37,
+	0x3e, 0xbc, 0x7b, 0xef, 0xf9, 0xd9, 0xff, 0x0f, 0x61, 0x2d, 0xd6, 0xa6, 0xa2, 0x75, 0x58, 0xed,
+	0xf6, 0xda, 0xfc, 0xf0, 0x9c, 0xee, 0x7f, 0x75, 0x8a, 0x4f, 0xca, 0x0b, 0xdc, 0x3f, 0xbd, 0xe6,
+	0x89, 0xd6, 0xee, 0xf7, 0xca, 0x0a, 0xda, 0x82, 0xcd, 0x0e, 0xd6, 0xb4, 0x93, 0x4e, 0xcf, 0x43,
+	0xf8, 0x87, 0x0b, 0x7b, 0xd5, 0xb9, 0x73, 0x5c, 0x3f, 0xd0, 0x8e, 0xda, 0xc7, 0x0d, 0x0d, 0x9f,
+	0x62, 0x4d, 0xac, 0x1a, 0xe5, 0xec, 0xde, 0x1f, 0x14, 0x28, 0x4c, 0x7f, 0x97, 0x7a, 0x09, 0x37,
+	0x67, 0xfc, 0xea, 0x8f, 0xee, 0x04, 0x66, 0x7a, 0xdb, 0xff, 0x10, 0xb6, 0x76, 0xae, 0x83, 0xc9,
+	0x3f, 0x0f, 0x2c, 0xa0, 0x47, 0xb0, 0xe4, 0x1d, 0x4f, 0xb4, 0x11, 0xfb, 0xcd, 0xd8, 0x93, 0x74,
+	0x23, 0xf5, 0x97, 0x64, 0x75, 0x61, 0x57, 0xf9, 0x8e, 0xf2, 0xf0, 0x11, 0x14, 0x98, 0x79, 0xca,
+	0x88, 0x41, 0x89, 0x83, 0x3e, 0xaa, 0x79, 0x7f, 0xa0, 0xa8, 0xf9, 0x7f, 0xa0, 0xa8, 0x1d, 0x9a,
+	0x64, 0x34, 0x68, 0x4f, 0xbc, 0x5a, 0xf1, 0x9b, 0xbc, 0x57, 0xb8, 0x98, 0xd9, 0x15, 0xf8, 0xfd,
+	0xdc, 0x4f, 0x33, 0xcc, 0x3c, 0x5b, 0x12, 0xe8, 0xef, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xd1,
+	0x2d, 0xb5, 0xaa, 0xb6, 0x21, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/scheduler-interface-spec.md b/scheduler-interface-spec.md
index 7eedfc0..b919c15 100644
--- a/scheduler-interface-spec.md
+++ b/scheduler-interface-spec.md
@@ -253,8 +253,11 @@
   // Or it could be decision made by scheduler (such as preemption or timeout).
   repeated AllocationRelease releasedAllocations = 3;
 
+  // Released allocation asks(placeholder), when the placeholder allocation times out
+  repeated AllocationAskRelease releasedAllocationAsks = 4;
+
   // Rejected allocation requests
-  repeated RejectedAllocationAsk rejectedAllocations = 4;
+  repeated RejectedAllocationAsk rejectedAllocations = 5;
 
   // Suggested node update.
   // This could include:
@@ -262,22 +265,22 @@
   //    two resource management systems side-by-side. For example, YARN/K8s running side by side.
   //    and update YARN NodeManager / Kubelet resource dynamically.
   // 2) Other recommendations.
-  repeated NodeRecommendation nodeRecommendations = 5;
+  repeated NodeRecommendation nodeRecommendations = 6;
 
   // Rejected Applications
-  repeated RejectedApplication rejectedApplications = 6;
+  repeated RejectedApplication rejectedApplications = 7;
 
   // Accepted Applications
-  repeated AcceptedApplication acceptedApplications = 7;
+  repeated AcceptedApplication acceptedApplications = 8;
 
   // Updated Applications
-  repeated UpdatedApplication updatedApplications = 8;
+  repeated UpdatedApplication updatedApplications = 9;
 
   // Rejected Node Registrations
-  repeated RejectedNode rejectedNodes = 9;
+  repeated RejectedNode rejectedNodes = 10;
 
   // Accepted Node Registrations
-  repeated AcceptedNode acceptedNodes = 10;
+  repeated AcceptedNode acceptedNodes = 11;
 }
 
 message UpdatedApplication {
@@ -612,19 +615,20 @@
   // The allocations to release
   repeated AllocationRelease allocationsToRelease = 1;
   // The asks to release
-  repeated AllocationAskReleaseRequest allocationAsksToRelease = 2;
+  repeated AllocationAskRelease allocationAsksToRelease = 2;
+}
+
+enum TerminationType {
+    STOPPED_BY_RM = 0;          // Stopped or killed by ResourceManager (created by RM)
+    TIMEOUT = 1;                // Timed out based on the executionTimeoutMilliSeconds (created by core)
+    PREEMPTED_BY_SCHEDULER = 2; // Preempted allocation by scheduler (created by core)
+    PLACEHOLDER_REPLACED = 3;   // Placeholder allocation replaced by real allocation (created by core)
 }
 
 // Release allocation: this is a bidirectional message. The Terminationtype defines the origin, or creator,
 // as per the comment. The confirmation or response from the receiver is the same message with the same
 // termination type set.  
 message AllocationRelease {
-  enum TerminationType {
-    STOPPED_BY_RM = 0;          // Stopped or killed by ResourceManager (created by RM)
-    TIMEOUT = 1;                // Timed out based on the executionTimeoutMilliSeconds (created by core)
-    PREEMPTED_BY_SCHEDULER = 2; // Preempted allocation by scheduler (created by core)
-    PLACEHOLDER_REPLACED = 3;   // Placeholder allocation replaced by real allocation (created by core)
-  }
 
   // The name of the partition the allocation belongs to
   string partitionName = 1;
@@ -640,7 +644,7 @@
 }
 
 // Release ask
-message AllocationAskReleaseRequest {
+message AllocationAskRelease {
   // Which partition to release the ask from, required.
   string partitionName = 1;
   // optional, when this is set, filter allocation key by application id.
@@ -648,8 +652,10 @@
   string applicationID = 2;
   // optional, when this is set, only release allocation ask by specified
   string allocationkey = 3;
+  // Termination type of the released allocation ask
+  TerminationType terminationType = 4;
   // For human-readable message
-  string message = 4;
+  string message = 5;
 }
 ```
 
diff --git a/si.proto b/si.proto
index 6bbbb2e..4610a6c 100644
--- a/si.proto
+++ b/si.proto
@@ -114,8 +114,11 @@
   // Or it could be decision made by scheduler (such as preemption or timeout).
   repeated AllocationRelease releasedAllocations = 3;
 
+  // Released allocation asks(placeholder), when the placeholder allocation times out
+  repeated AllocationAskRelease releasedAllocationAsks = 4;
+
   // Rejected allocation requests
-  repeated RejectedAllocationAsk rejectedAllocations = 4;
+  repeated RejectedAllocationAsk rejectedAllocations = 5;
 
   // Suggested node update.
   // This could include:
@@ -123,22 +126,22 @@
   //    two resource management systems side-by-side. For example, YARN/K8s running side by side.
   //    and update YARN NodeManager / Kubelet resource dynamically.
   // 2) Other recommendations.
-  repeated NodeRecommendation nodeRecommendations = 5;
+  repeated NodeRecommendation nodeRecommendations = 6;
 
   // Rejected Applications
-  repeated RejectedApplication rejectedApplications = 6;
+  repeated RejectedApplication rejectedApplications = 7;
 
   // Accepted Applications
-  repeated AcceptedApplication acceptedApplications = 7;
+  repeated AcceptedApplication acceptedApplications = 8;
 
   // Updated Applications
-  repeated UpdatedApplication updatedApplications = 8;
+  repeated UpdatedApplication updatedApplications = 9;
 
   // Rejected Node Registrations
-  repeated RejectedNode rejectedNodes = 9;
+  repeated RejectedNode rejectedNodes = 10;
 
   // Accepted Node Registrations
-  repeated AcceptedNode acceptedNodes = 10;
+  repeated AcceptedNode acceptedNodes = 11;
 }
 
 message UpdatedApplication {
@@ -347,9 +350,9 @@
   string applicationID = 9;
   // Partition of the allocation
   string partitionName = 10;
-  // The name of the TaskGroup this ask belongs to
+  // The name of the TaskGroup this allocation belongs to
   string taskGroupName = 11;
-  // Is this a placeholder ask (true) or a real ask (false), defaults to false
+  // Is this a placeholder allocation (true) or a real allocation (false), defaults to false
   // ignored if the taskGroupName is not set
   bool placeholder = 12;
 }
@@ -357,19 +360,20 @@
   // The allocations to release
   repeated AllocationRelease allocationsToRelease = 1;
   // The asks to release
-  repeated AllocationAskReleaseRequest allocationAsksToRelease = 2;
+  repeated AllocationAskRelease allocationAsksToRelease = 2;
+}
+
+enum TerminationType {
+    STOPPED_BY_RM = 0;          // Stopped or killed by ResourceManager (created by RM)
+    TIMEOUT = 1;                // Timed out based on the executionTimeoutMilliSeconds (created by core)
+    PREEMPTED_BY_SCHEDULER = 2; // Preempted allocation by scheduler (created by core)
+    PLACEHOLDER_REPLACED = 3;   // Placeholder allocation replaced by real allocation (created by core)
 }
 
 // Release allocation: this is a bidirectional message. The Terminationtype defines the origin, or creator,
 // as per the comment. The confirmation or response from the receiver is the same message with the same
 // termination type set.  
 message AllocationRelease {
-  enum TerminationType {
-    STOPPED_BY_RM = 0;          // Stopped or killed by ResourceManager (created by RM)
-    TIMEOUT = 1;                // Timed out based on the executionTimeoutMilliSeconds (created by core)
-    PREEMPTED_BY_SCHEDULER = 2; // Preempted allocation by scheduler (created by core)
-    PLACEHOLDER_REPLACED = 3;   // Placeholder allocation replaced by real allocation (created by core)
-  }
 
   // The name of the partition the allocation belongs to
   string partitionName = 1;
@@ -385,7 +389,7 @@
 }
 
 // Release ask
-message AllocationAskReleaseRequest {
+message AllocationAskRelease {
   // Which partition to release the ask from, required.
   string partitionName = 1;
   // optional, when this is set, filter allocation key by application id.
@@ -393,8 +397,10 @@
   string applicationID = 2;
   // optional, when this is set, only release allocation ask by specified
   string allocationkey = 3;
+  // Termination type of the released allocation ask
+  TerminationType terminationType = 4;
   // For human-readable message
-  string message = 4;
+  string message = 5;
 }
 message NewNodeInfo {
   // ID of node, must be unique