diff --git a/api/services/control/control.pb.go b/api/services/control/control.pb.go index cdfcb25c0501..3c24ebb5b5cc 100644 --- a/api/services/control/control.pb.go +++ b/api/services/control/control.pb.go @@ -1843,12 +1843,12 @@ func (m *Descriptor) GetAnnotations() map[string]string { } type BuildResultInfo struct { - ResultDeprecated *Descriptor `protobuf:"bytes,1,opt,name=ResultDeprecated,proto3" json:"ResultDeprecated,omitempty"` - Attestations []*Descriptor `protobuf:"bytes,2,rep,name=Attestations,proto3" json:"Attestations,omitempty"` - Results map[string]*Descriptor `protobuf:"bytes,3,rep,name=Results,proto3" json:"Results,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResultDeprecated *Descriptor `protobuf:"bytes,1,opt,name=ResultDeprecated,proto3" json:"ResultDeprecated,omitempty"` + Attestations []*Descriptor `protobuf:"bytes,2,rep,name=Attestations,proto3" json:"Attestations,omitempty"` + Results map[int64]*Descriptor `protobuf:"bytes,3,rep,name=Results,proto3" json:"Results,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *BuildResultInfo) Reset() { *m = BuildResultInfo{} } @@ -1898,7 +1898,7 @@ func (m *BuildResultInfo) GetAttestations() []*Descriptor { return nil } -func (m *BuildResultInfo) GetResults() map[string]*Descriptor { +func (m *BuildResultInfo) GetResults() map[int64]*Descriptor { if m != nil { return m.Results } @@ -1910,12 +1910,10 @@ type Exporter struct { // Type identifies the exporter Type string `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"` // Attrs specifies exporter configuration - Attrs map[string]string `protobuf:"bytes,2,rep,name=Attrs,proto3" json:"Attrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // ID identifies the exporter in the wire protocol - ID string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Attrs map[string]string `protobuf:"bytes,2,rep,name=Attrs,proto3" json:"Attrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Exporter) Reset() { *m = Exporter{} } @@ -1965,13 +1963,6 @@ func (m *Exporter) GetAttrs() map[string]string { return nil } -func (m *Exporter) GetID() string { - if m != nil { - return m.ID - } - return "" -} - func init() { proto.RegisterEnum("moby.buildkit.v1.BuildHistoryEventType", BuildHistoryEventType_name, BuildHistoryEventType_value) proto.RegisterType((*PruneRequest)(nil), "moby.buildkit.v1.PruneRequest") @@ -2010,7 +2001,7 @@ func init() { proto.RegisterType((*Descriptor)(nil), "moby.buildkit.v1.Descriptor") proto.RegisterMapType((map[string]string)(nil), "moby.buildkit.v1.Descriptor.AnnotationsEntry") proto.RegisterType((*BuildResultInfo)(nil), "moby.buildkit.v1.BuildResultInfo") - proto.RegisterMapType((map[string]*Descriptor)(nil), "moby.buildkit.v1.BuildResultInfo.ResultsEntry") + proto.RegisterMapType((map[int64]*Descriptor)(nil), "moby.buildkit.v1.BuildResultInfo.ResultsEntry") proto.RegisterType((*Exporter)(nil), "moby.buildkit.v1.Exporter") proto.RegisterMapType((map[string]string)(nil), "moby.buildkit.v1.Exporter.AttrsEntry") } @@ -2018,153 +2009,152 @@ func init() { func init() { proto.RegisterFile("control.proto", fileDescriptor_0c5120591600887d) } var fileDescriptor_0c5120591600887d = []byte{ - // 2331 bytes of a gzipped FileDescriptorProto + // 2315 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x73, 0x1b, 0x49, - 0x15, 0xdf, 0x91, 0x64, 0x59, 0x7a, 0x92, 0xbd, 0x72, 0x67, 0x37, 0x0c, 0x43, 0xd6, 0x76, 0x66, - 0x13, 0x70, 0x85, 0x64, 0xe4, 0x15, 0x84, 0x64, 0x1d, 0x08, 0xb1, 0x2c, 0xb1, 0x71, 0x48, 0x2a, - 0xde, 0xb6, 0xb3, 0xa1, 0xb6, 0x2a, 0x50, 0x63, 0xa9, 0xad, 0x4c, 0x79, 0x34, 0x33, 0x74, 0xb7, - 0xbc, 0xf1, 0x9e, 0x38, 0x51, 0xc5, 0x85, 0xe2, 0xc6, 0x85, 0x3b, 0x27, 0xce, 0x9c, 0x39, 0x50, - 0x95, 0x23, 0xe7, 0x3d, 0x04, 0x2a, 0x1f, 0x80, 0xe2, 0x08, 0x37, 0xaa, 0xff, 0x8c, 0x34, 0xd2, - 0x8c, 0x2c, 0x39, 0xc9, 0x49, 0xfd, 0xba, 0xdf, 0xef, 0xcd, 0x7b, 0xaf, 0x5f, 0xbf, 0x7e, 0xaf, - 0x05, 0x4b, 0x9d, 0x30, 0xe0, 0x34, 0xf4, 0x9d, 0x88, 0x86, 0x3c, 0x44, 0xb5, 0x7e, 0x78, 0x78, - 0xea, 0x1c, 0x0e, 0x3c, 0xbf, 0x7b, 0xec, 0x71, 0xe7, 0xe4, 0x13, 0xab, 0xd1, 0xf3, 0xf8, 0xf3, - 0xc1, 0xa1, 0xd3, 0x09, 0xfb, 0xf5, 0x5e, 0xd8, 0x0b, 0xeb, 0xbd, 0x30, 0xec, 0xf9, 0xc4, 0x8d, - 0x3c, 0xa6, 0x87, 0x75, 0x1a, 0x75, 0xea, 0x8c, 0xbb, 0x7c, 0xc0, 0x94, 0x14, 0xeb, 0xc6, 0x24, - 0x46, 0x4e, 0x1f, 0x0e, 0x8e, 0x24, 0x25, 0x09, 0x39, 0xd2, 0xec, 0xf5, 0x04, 0xbb, 0xf8, 0x7e, - 0x3d, 0xfe, 0x7e, 0xdd, 0x8d, 0xbc, 0x3a, 0x3f, 0x8d, 0x08, 0xab, 0x7f, 0x15, 0xd2, 0x63, 0x42, - 0x35, 0xe0, 0xfa, 0x54, 0x00, 0x0b, 0xfd, 0x13, 0x42, 0xeb, 0xd1, 0x61, 0x3d, 0x8c, 0x62, 0x6d, - 0x6e, 0x9e, 0xc1, 0x3d, 0xa0, 0x1d, 0x12, 0x85, 0xbe, 0xd7, 0x39, 0x15, 0x18, 0x35, 0xd2, 0xb0, - 0x35, 0x6d, 0xdd, 0x50, 0x77, 0xee, 0xf5, 0x09, 0xe3, 0x6e, 0x3f, 0x52, 0x0c, 0xf6, 0x6f, 0x0d, - 0xa8, 0xee, 0xd1, 0x41, 0x40, 0x30, 0xf9, 0xf5, 0x80, 0x30, 0x8e, 0x2e, 0x42, 0xf1, 0xc8, 0xf3, - 0x39, 0xa1, 0xa6, 0xb1, 0x9e, 0xdf, 0x28, 0x63, 0x4d, 0xa1, 0x1a, 0xe4, 0x5d, 0xdf, 0x37, 0x73, - 0xeb, 0xc6, 0x46, 0x09, 0x8b, 0x21, 0xda, 0x80, 0xea, 0x31, 0x21, 0x51, 0x6b, 0x40, 0x5d, 0xee, - 0x85, 0x81, 0x99, 0x5f, 0x37, 0x36, 0xf2, 0xcd, 0xc2, 0xcb, 0x57, 0x6b, 0x06, 0x1e, 0x5b, 0x41, - 0x36, 0x94, 0x05, 0xdd, 0x3c, 0xe5, 0x84, 0x99, 0x85, 0x04, 0xdb, 0x68, 0xda, 0xbe, 0x06, 0xb5, - 0x96, 0xc7, 0x8e, 0x9f, 0x30, 0xb7, 0x37, 0x4b, 0x17, 0xfb, 0x01, 0xac, 0x24, 0x78, 0x59, 0x14, - 0x06, 0x8c, 0xa0, 0x9b, 0x50, 0xa4, 0xa4, 0x13, 0xd2, 0xae, 0x64, 0xae, 0x34, 0x3e, 0x72, 0x26, - 0xc3, 0xc0, 0xd1, 0x00, 0xc1, 0x84, 0x35, 0xb3, 0xfd, 0xc7, 0x3c, 0x54, 0x12, 0xf3, 0x68, 0x19, - 0x72, 0xbb, 0x2d, 0xd3, 0x58, 0x37, 0x36, 0xca, 0x38, 0xb7, 0xdb, 0x42, 0x26, 0x2c, 0x3e, 0x1a, - 0x70, 0xf7, 0xd0, 0x27, 0xda, 0xf6, 0x98, 0x44, 0x1f, 0xc0, 0xc2, 0x6e, 0xf0, 0x84, 0x11, 0x69, - 0x78, 0x09, 0x2b, 0x02, 0x21, 0x28, 0xec, 0x7b, 0x5f, 0x13, 0x65, 0x26, 0x96, 0x63, 0x64, 0x41, - 0x71, 0xcf, 0xa5, 0x24, 0xe0, 0xe6, 0x82, 0x90, 0xdb, 0xcc, 0x99, 0x06, 0xd6, 0x33, 0xa8, 0x09, - 0xe5, 0x1d, 0x4a, 0x5c, 0x4e, 0xba, 0xdb, 0xdc, 0x2c, 0xae, 0x1b, 0x1b, 0x95, 0x86, 0xe5, 0xa8, - 0x5d, 0x73, 0xe2, 0x5d, 0x73, 0x0e, 0xe2, 0x5d, 0x6b, 0x96, 0x5e, 0xbe, 0x5a, 0x7b, 0xef, 0x0f, - 0xff, 0x14, 0xbe, 0x1b, 0xc2, 0xd0, 0x3d, 0x80, 0x87, 0x2e, 0xe3, 0x4f, 0x98, 0x14, 0xb2, 0x38, - 0x53, 0x48, 0x41, 0x0a, 0x48, 0x60, 0xd0, 0x2a, 0x80, 0x74, 0xc2, 0x4e, 0x38, 0x08, 0xb8, 0x59, - 0x92, 0xba, 0x27, 0x66, 0xd0, 0x3a, 0x54, 0x5a, 0x84, 0x75, 0xa8, 0x17, 0xc9, 0xad, 0x2e, 0x4b, - 0xf7, 0x24, 0xa7, 0x84, 0x04, 0xe5, 0xc1, 0x83, 0xd3, 0x88, 0x98, 0x20, 0x19, 0x12, 0x33, 0x62, - 0x2f, 0xf7, 0x9f, 0xbb, 0x94, 0x74, 0xcd, 0x8a, 0x74, 0x97, 0xa6, 0x84, 0x7f, 0x95, 0x27, 0x98, - 0x59, 0x95, 0x9b, 0x1c, 0x93, 0xf6, 0x6f, 0x4a, 0x50, 0xdd, 0x17, 0x47, 0x21, 0x0e, 0x87, 0x1a, - 0xe4, 0x31, 0x39, 0xd2, 0x7b, 0x23, 0x86, 0xc8, 0x01, 0x68, 0x91, 0x23, 0x2f, 0xf0, 0xa4, 0x56, - 0x39, 0x69, 0xf8, 0xb2, 0x13, 0x1d, 0x3a, 0xa3, 0x59, 0x9c, 0xe0, 0x40, 0x0e, 0xa0, 0xf6, 0x8b, - 0x28, 0xa4, 0x9c, 0xd0, 0x16, 0x89, 0x28, 0xe9, 0x08, 0x07, 0xca, 0xfd, 0x2b, 0xe3, 0x8c, 0x15, - 0x34, 0x80, 0x6f, 0xc5, 0xb3, 0xdb, 0x9c, 0x53, 0x96, 0x00, 0x15, 0x64, 0x90, 0xdd, 0x49, 0x07, - 0x59, 0x52, 0x65, 0x67, 0x0a, 0xba, 0x1d, 0x70, 0x7a, 0x8a, 0xa7, 0xc9, 0x16, 0x3e, 0xd9, 0x27, - 0x8c, 0x09, 0x9b, 0x64, 0xc0, 0xe0, 0x98, 0x44, 0x16, 0x94, 0x7e, 0x46, 0xc3, 0x80, 0x93, 0xa0, - 0x2b, 0x83, 0xa5, 0x8c, 0x87, 0x34, 0x7a, 0x0a, 0x4b, 0xf1, 0x58, 0x0a, 0x34, 0x17, 0xa5, 0x8a, - 0x9f, 0xcc, 0x50, 0x71, 0x0c, 0xa3, 0x14, 0x1b, 0x97, 0x83, 0xb6, 0x60, 0x61, 0xc7, 0xed, 0x3c, - 0x27, 0x32, 0x2e, 0x2a, 0x8d, 0xd5, 0xb4, 0x40, 0xb9, 0xfc, 0x58, 0x06, 0x02, 0x93, 0x47, 0xfb, - 0x3d, 0xac, 0x20, 0xe8, 0x97, 0x50, 0x6d, 0x07, 0xdc, 0xe3, 0x3e, 0xe9, 0xcb, 0x3d, 0x2e, 0x8b, - 0x3d, 0x6e, 0x6e, 0x7d, 0xf3, 0x6a, 0xed, 0x47, 0x53, 0x33, 0xda, 0x80, 0x7b, 0x7e, 0x9d, 0x24, - 0x50, 0x4e, 0x42, 0x04, 0x1e, 0x93, 0x87, 0xbe, 0x84, 0xe5, 0x58, 0xd9, 0xdd, 0x20, 0x1a, 0x70, - 0x66, 0x82, 0xb4, 0xba, 0x31, 0xa7, 0xd5, 0x0a, 0xa4, 0xcc, 0x9e, 0x90, 0x24, 0x9c, 0xbd, 0x1b, - 0x70, 0x42, 0x03, 0xd7, 0xd7, 0x41, 0x3b, 0xa4, 0xd1, 0xae, 0x88, 0x4d, 0x91, 0x78, 0xf7, 0x64, - 0xba, 0x35, 0xab, 0xd2, 0x35, 0x57, 0xd3, 0x5f, 0x4d, 0xa6, 0x67, 0x47, 0x31, 0xe3, 0x31, 0x28, - 0xba, 0x0d, 0xe5, 0x38, 0x10, 0x98, 0xb9, 0x24, 0xb5, 0xb7, 0xd2, 0x72, 0x62, 0x16, 0x3c, 0x62, - 0xb6, 0x1e, 0xc0, 0xa5, 0xb3, 0x02, 0x4c, 0x1c, 0x98, 0x63, 0x72, 0x1a, 0x1f, 0x98, 0x63, 0x72, - 0x2a, 0x72, 0xd6, 0x89, 0xeb, 0x0f, 0x54, 0x2e, 0x2b, 0x63, 0x45, 0x6c, 0xe5, 0x6e, 0x1b, 0xd6, - 0x3d, 0x40, 0xe9, 0x48, 0x38, 0x97, 0x84, 0xcf, 0xe1, 0x42, 0x86, 0x57, 0x33, 0x44, 0x5c, 0x49, - 0x8a, 0x48, 0x1f, 0xd8, 0x91, 0x48, 0xfb, 0x2f, 0x79, 0xa8, 0x26, 0x63, 0x0b, 0x6d, 0xc2, 0x05, - 0x65, 0x31, 0x26, 0x47, 0x89, 0xc3, 0xa8, 0x84, 0x67, 0x2d, 0xa1, 0x06, 0x7c, 0xb0, 0xdb, 0xd7, - 0xd3, 0xc9, 0xf3, 0x9b, 0x93, 0xc9, 0x26, 0x73, 0x0d, 0x85, 0xf0, 0xa1, 0x12, 0x35, 0x79, 0xe8, - 0xf3, 0x72, 0x77, 0x3e, 0x3d, 0xfb, 0x00, 0x38, 0x99, 0x58, 0x15, 0x62, 0xd9, 0x72, 0xd1, 0x4f, - 0x60, 0x51, 0x2d, 0x30, 0x9d, 0x57, 0x3e, 0x3e, 0xfb, 0x13, 0x4a, 0x58, 0x8c, 0x11, 0x70, 0x65, - 0x07, 0x33, 0x17, 0xce, 0x01, 0xd7, 0x18, 0xeb, 0x3e, 0x58, 0xd3, 0x55, 0x3e, 0x4f, 0x08, 0xd8, - 0x7f, 0x36, 0x60, 0x25, 0xf5, 0x21, 0x71, 0x25, 0xca, 0x4b, 0x41, 0x89, 0x90, 0x63, 0xd4, 0x82, - 0x05, 0x95, 0xa4, 0x72, 0x52, 0x61, 0x67, 0x0e, 0x85, 0x9d, 0x44, 0x86, 0x52, 0x60, 0xeb, 0x36, - 0xc0, 0x9b, 0x05, 0xab, 0xfd, 0x57, 0x03, 0x96, 0x74, 0x42, 0xd0, 0xf5, 0x83, 0x0b, 0xb5, 0xe1, - 0x19, 0xd3, 0x73, 0xba, 0x92, 0xb8, 0x39, 0x35, 0x97, 0x28, 0x36, 0x67, 0x12, 0xa7, 0x74, 0x4c, - 0x89, 0xb3, 0x76, 0xe2, 0xb8, 0x9a, 0x60, 0x3d, 0x97, 0xe6, 0x97, 0x61, 0x69, 0x5f, 0xd6, 0xa9, - 0x53, 0xaf, 0x45, 0xfb, 0x3f, 0x06, 0x2c, 0xc7, 0x3c, 0xda, 0xba, 0x1f, 0x42, 0xe9, 0x84, 0x50, - 0x4e, 0x5e, 0x10, 0xa6, 0xad, 0x32, 0xd3, 0x56, 0x7d, 0x21, 0x39, 0xf0, 0x90, 0x13, 0x6d, 0x41, - 0x49, 0xd5, 0xc4, 0x24, 0xde, 0xa8, 0xd5, 0x69, 0x28, 0xfd, 0xbd, 0x21, 0x3f, 0xaa, 0x43, 0xc1, - 0x0f, 0x7b, 0x4c, 0x9f, 0x99, 0xef, 0x4c, 0xc3, 0x3d, 0x0c, 0x7b, 0x58, 0x32, 0xa2, 0x3b, 0x50, - 0xfa, 0xca, 0xa5, 0x81, 0x17, 0xf4, 0xe2, 0x53, 0xb0, 0x36, 0x0d, 0xf4, 0x54, 0xf1, 0xe1, 0x21, - 0x40, 0x94, 0x71, 0x45, 0xb5, 0x86, 0x1e, 0x40, 0xb1, 0xeb, 0xf5, 0x08, 0xe3, 0xca, 0x25, 0xcd, - 0x86, 0xb8, 0x8f, 0xbe, 0x79, 0xb5, 0x76, 0x2d, 0x71, 0xe1, 0x84, 0x11, 0x09, 0x44, 0xd3, 0xe0, - 0x7a, 0x01, 0xa1, 0xa2, 0x07, 0xb8, 0xa1, 0x20, 0x4e, 0x4b, 0xfe, 0x60, 0x2d, 0x41, 0xc8, 0xf2, - 0xd4, 0xb5, 0x22, 0xf3, 0xc5, 0x9b, 0xc9, 0x52, 0x12, 0xc4, 0x31, 0x08, 0xdc, 0x3e, 0xd1, 0xe5, - 0x86, 0x1c, 0x8b, 0xaa, 0xa8, 0x23, 0xe2, 0xbc, 0x2b, 0xeb, 0xc5, 0x12, 0xd6, 0x14, 0xda, 0x82, - 0x45, 0xc6, 0x5d, 0x2a, 0x72, 0xce, 0xc2, 0x9c, 0xe5, 0x5c, 0x0c, 0x40, 0x77, 0xa1, 0xdc, 0x09, - 0xfb, 0x91, 0x4f, 0x04, 0xba, 0x38, 0x27, 0x7a, 0x04, 0x11, 0xa1, 0x47, 0x28, 0x0d, 0xa9, 0x2c, - 0x24, 0xcb, 0x58, 0x11, 0xe8, 0x16, 0x2c, 0x45, 0x34, 0xec, 0x51, 0xc2, 0xd8, 0x67, 0x34, 0x1c, - 0x44, 0xba, 0x18, 0x58, 0x11, 0xc9, 0x7b, 0x2f, 0xb9, 0x80, 0xc7, 0xf9, 0xec, 0x7f, 0xe7, 0xa0, - 0x9a, 0x0c, 0x91, 0x54, 0x85, 0xfd, 0x00, 0x8a, 0x2a, 0xe0, 0x54, 0xac, 0xbf, 0x99, 0x8f, 0x95, - 0x84, 0x4c, 0x1f, 0x9b, 0xb0, 0xd8, 0x19, 0x50, 0x59, 0x7e, 0xab, 0xa2, 0x3c, 0x26, 0x85, 0xa5, - 0x3c, 0xe4, 0xae, 0x2f, 0x7d, 0x9c, 0xc7, 0x8a, 0x10, 0x15, 0xf9, 0xb0, 0x4b, 0x3a, 0x5f, 0x45, - 0x3e, 0x84, 0x25, 0xf7, 0x6f, 0xf1, 0xad, 0xf6, 0xaf, 0x74, 0xee, 0xfd, 0xb3, 0xff, 0x6e, 0x40, - 0x79, 0x78, 0xb6, 0x12, 0xde, 0x35, 0xde, 0xda, 0xbb, 0x63, 0x9e, 0xc9, 0xbd, 0x99, 0x67, 0x2e, - 0x42, 0x91, 0x71, 0x4a, 0xdc, 0xbe, 0xea, 0x17, 0xb1, 0xa6, 0x44, 0x16, 0xeb, 0xb3, 0x9e, 0xdc, - 0xa1, 0x2a, 0x16, 0x43, 0xfb, 0xbf, 0x06, 0x2c, 0x8d, 0x1d, 0xf7, 0x77, 0x6a, 0xcb, 0x07, 0xb0, - 0xe0, 0x93, 0x13, 0xa2, 0x3a, 0xda, 0x3c, 0x56, 0x84, 0x98, 0x65, 0xcf, 0x43, 0xca, 0xa5, 0x72, - 0x55, 0xac, 0x08, 0xa1, 0x73, 0x97, 0x70, 0xd7, 0xf3, 0x65, 0x5e, 0xaa, 0x62, 0x4d, 0x09, 0x9d, - 0x07, 0xd4, 0xd7, 0x35, 0xba, 0x18, 0x22, 0x1b, 0x0a, 0x5e, 0x70, 0x14, 0xea, 0xb0, 0x91, 0x95, - 0x8d, 0xaa, 0xf5, 0x76, 0x83, 0xa3, 0x10, 0xcb, 0x35, 0x74, 0x19, 0x8a, 0xd4, 0x0d, 0x7a, 0x24, - 0x2e, 0xd0, 0xcb, 0x82, 0x0b, 0x8b, 0x19, 0xac, 0x17, 0x6c, 0x1b, 0xaa, 0xb2, 0x2b, 0x7e, 0x44, - 0x98, 0xe8, 0xc1, 0x44, 0x58, 0x77, 0x5d, 0xee, 0x4a, 0xb3, 0xab, 0x58, 0x8e, 0xed, 0xeb, 0x80, - 0x1e, 0x7a, 0x8c, 0x3f, 0x95, 0x6f, 0x0a, 0x6c, 0x56, 0xcb, 0xbc, 0x0f, 0x17, 0xc6, 0xb8, 0xf5, - 0xb5, 0xf0, 0xe3, 0x89, 0xa6, 0xf9, 0x4a, 0x3a, 0xe3, 0xca, 0xa7, 0x0b, 0x47, 0x01, 0x27, 0x7a, - 0xe7, 0x25, 0xa8, 0x48, 0xbb, 0xd4, 0xb7, 0x6d, 0x17, 0xaa, 0x8a, 0xd4, 0xc2, 0x3f, 0x87, 0xf7, - 0x63, 0x41, 0x5f, 0x10, 0x2a, 0xdb, 0x19, 0x43, 0xfa, 0xe5, 0x7b, 0xd3, 0xbe, 0xd2, 0x1c, 0x67, - 0xc7, 0x93, 0x78, 0x9b, 0xc0, 0x05, 0xc9, 0x73, 0xdf, 0x63, 0x3c, 0xa4, 0xa7, 0xb1, 0xd5, 0xab, - 0x00, 0xdb, 0x1d, 0xee, 0x9d, 0x90, 0xc7, 0x81, 0xaf, 0xae, 0xd1, 0x12, 0x4e, 0xcc, 0xc4, 0x57, - 0x64, 0x6e, 0xd4, 0x39, 0x5e, 0x82, 0x72, 0xdb, 0xa5, 0xfe, 0x69, 0xfb, 0x85, 0xc7, 0x75, 0x03, - 0x3f, 0x9a, 0xb0, 0x7f, 0x6f, 0xc0, 0x4a, 0xf2, 0x3b, 0xed, 0x13, 0x91, 0x2e, 0xee, 0x40, 0x81, - 0xc7, 0x75, 0xcc, 0x72, 0x96, 0x11, 0x29, 0x88, 0x28, 0x75, 0xb0, 0x04, 0x25, 0x3c, 0xad, 0x0e, - 0xce, 0x95, 0xb3, 0xe1, 0x13, 0x9e, 0xfe, 0x5f, 0x09, 0x50, 0x7a, 0x39, 0xa3, 0x23, 0x4e, 0x36, - 0x88, 0xb9, 0x89, 0x06, 0xf1, 0xd9, 0x64, 0x83, 0xa8, 0xae, 0xe6, 0x5b, 0xf3, 0x68, 0x32, 0x47, - 0x9b, 0x38, 0xd6, 0xc7, 0x14, 0xce, 0xd1, 0xc7, 0xa0, 0x8d, 0xf8, 0xc6, 0x51, 0x77, 0x1d, 0x8a, - 0x73, 0x0a, 0x8d, 0x3a, 0x8e, 0xae, 0x2b, 0xf4, 0x2d, 0x74, 0xf7, 0x7c, 0xaf, 0x25, 0x85, 0xc9, - 0x97, 0x92, 0x26, 0x54, 0x76, 0xe2, 0x44, 0x79, 0x8e, 0xa7, 0x92, 0x24, 0x08, 0x6d, 0xea, 0xc2, - 0x46, 0xa5, 0xe6, 0x4b, 0x69, 0x13, 0xe3, 0x67, 0x91, 0x90, 0xea, 0xca, 0xe6, 0x28, 0xa3, 0xb4, - 0x2c, 0x4b, 0x07, 0x6d, 0xcd, 0xe5, 0xfb, 0x39, 0xeb, 0x4b, 0xf4, 0x29, 0x14, 0x31, 0x61, 0x03, - 0x9f, 0xcb, 0xf7, 0x97, 0x4a, 0xe3, 0xf2, 0x14, 0xe9, 0x8a, 0x49, 0x9e, 0x55, 0x0d, 0x40, 0x3f, - 0x87, 0x45, 0x35, 0x62, 0x66, 0x65, 0xda, 0xb3, 0x41, 0x86, 0x66, 0x1a, 0xa3, 0x1b, 0x0a, 0x4d, - 0x89, 0xe3, 0xf8, 0x19, 0x09, 0x88, 0x7e, 0x17, 0x14, 0xad, 0xf1, 0x02, 0x4e, 0xcc, 0xa0, 0x06, - 0x2c, 0x70, 0xea, 0x76, 0x88, 0xb9, 0x34, 0x87, 0x0b, 0x15, 0xab, 0x48, 0x6c, 0x91, 0x17, 0x04, - 0xa4, 0x6b, 0x2e, 0xab, 0x4a, 0x49, 0x51, 0xe8, 0xbb, 0xb0, 0x1c, 0x0c, 0xfa, 0xb2, 0x59, 0xe8, - 0xee, 0x73, 0x12, 0x31, 0xf3, 0x7d, 0xf9, 0xbd, 0x89, 0x59, 0x74, 0x05, 0x96, 0x82, 0x41, 0xff, - 0x40, 0xdc, 0xf0, 0x8a, 0xad, 0x26, 0xd9, 0xc6, 0x27, 0xd1, 0x75, 0x58, 0x11, 0xb8, 0x78, 0xb7, - 0x15, 0xe7, 0x8a, 0xe4, 0x4c, 0x2f, 0xbc, 0x83, 0x9e, 0xf9, 0x5d, 0x74, 0x04, 0xd6, 0x33, 0xa8, - 0x26, 0xf7, 0x21, 0x03, 0x7b, 0x6b, 0xbc, 0xe3, 0x9e, 0x23, 0x2e, 0x12, 0x0d, 0xc7, 0x33, 0xf8, - 0xf6, 0x93, 0xa8, 0xeb, 0x72, 0x92, 0x95, 0x79, 0xd3, 0x19, 0xe8, 0x22, 0x14, 0xf7, 0xd4, 0x46, - 0xa9, 0xf7, 0x52, 0x4d, 0x89, 0xf9, 0x16, 0x11, 0xce, 0xd3, 0xe9, 0x56, 0x53, 0xf6, 0x25, 0xb0, - 0xb2, 0xc4, 0x2b, 0x67, 0xd8, 0x7f, 0xca, 0x01, 0x8c, 0x82, 0x01, 0x7d, 0x04, 0xd0, 0x27, 0x5d, - 0xcf, 0xfd, 0x15, 0x1f, 0x35, 0x94, 0x65, 0x39, 0x23, 0xbb, 0xca, 0x51, 0xe9, 0x9f, 0x7b, 0xeb, - 0xd2, 0x1f, 0x41, 0x81, 0x79, 0x5f, 0x13, 0x5d, 0xa6, 0xc8, 0x31, 0x7a, 0x0c, 0x15, 0x37, 0x08, - 0x42, 0x2e, 0xc3, 0x38, 0x6e, 0xb6, 0x6f, 0x9c, 0x15, 0xbe, 0xce, 0xf6, 0x88, 0x5f, 0x9d, 0x92, - 0xa4, 0x04, 0xeb, 0x2e, 0xd4, 0x26, 0x19, 0xce, 0xd5, 0x0c, 0xfe, 0x2d, 0x07, 0xef, 0x4f, 0x6c, - 0x1d, 0xba, 0x0f, 0x35, 0x45, 0x4d, 0x3c, 0x90, 0xcc, 0x3a, 0x68, 0x29, 0x14, 0xba, 0x07, 0xd5, - 0x6d, 0xce, 0x45, 0x26, 0x54, 0xf6, 0xaa, 0x16, 0xf0, 0x6c, 0x29, 0x63, 0x08, 0x74, 0x7f, 0x94, - 0x56, 0xf2, 0xd3, 0x1a, 0xfd, 0x09, 0xfd, 0xb3, 0x73, 0x8a, 0xf5, 0x8b, 0x99, 0x41, 0xde, 0x18, - 0x0f, 0xf2, 0x19, 0x59, 0x25, 0xf1, 0xc8, 0x64, 0x40, 0x29, 0x3e, 0x84, 0x99, 0x6f, 0x15, 0x77, - 0xc6, 0xdf, 0x2a, 0xae, 0x4e, 0xbf, 0xd4, 0xd2, 0x4f, 0x14, 0xe8, 0x22, 0xe4, 0x3c, 0xfd, 0xc4, - 0xdc, 0x2c, 0xbe, 0x7e, 0xb5, 0x96, 0xdb, 0x6d, 0xe1, 0x9c, 0xd7, 0x7d, 0xf3, 0xa7, 0x8b, 0x6b, - 0x3f, 0x85, 0x0f, 0x33, 0x0b, 0x0d, 0x54, 0x81, 0xc5, 0xfd, 0x83, 0x6d, 0x7c, 0xd0, 0x6e, 0xd5, - 0xde, 0x43, 0x55, 0x28, 0xed, 0x3c, 0x7e, 0xb4, 0xf7, 0xb0, 0x7d, 0xd0, 0xae, 0x19, 0x62, 0xa9, - 0xd5, 0x16, 0xe3, 0x56, 0x2d, 0xd7, 0xf8, 0x5d, 0x11, 0x16, 0x77, 0xd4, 0x3f, 0x66, 0xe8, 0x00, - 0xca, 0xc3, 0xbf, 0x52, 0x90, 0x9d, 0xe1, 0xb2, 0x89, 0xff, 0x64, 0xac, 0x8f, 0xcf, 0xe4, 0xd1, - 0x17, 0xd1, 0x7d, 0x58, 0x90, 0x7f, 0x2a, 0xa1, 0x8c, 0xe7, 0x82, 0xe4, 0xbf, 0x4d, 0xd6, 0xd9, - 0x7f, 0xd2, 0x6c, 0x1a, 0x42, 0x92, 0x7c, 0x6b, 0xc9, 0x92, 0x94, 0x7c, 0xd0, 0xb5, 0xd6, 0x66, - 0x3c, 0xd2, 0xa0, 0x47, 0x50, 0xd4, 0x0d, 0x68, 0x16, 0x6b, 0xf2, 0x45, 0xc5, 0x5a, 0x9f, 0xce, - 0xa0, 0x84, 0x6d, 0x1a, 0xe8, 0xd1, 0xf0, 0x8d, 0x3e, 0x4b, 0xb5, 0x64, 0xf5, 0x6e, 0xcd, 0x58, - 0xdf, 0x30, 0x36, 0x0d, 0xf4, 0x25, 0x54, 0x12, 0xf5, 0x39, 0xca, 0xa8, 0x0e, 0xd3, 0xc5, 0xbe, - 0x75, 0x75, 0x06, 0x97, 0xb6, 0xbc, 0x0d, 0x05, 0x99, 0x18, 0x32, 0x9c, 0x9d, 0x28, 0xdf, 0xb3, - 0xd4, 0x1c, 0x2b, 0xe7, 0x0f, 0x55, 0xc3, 0x41, 0x82, 0x64, 0xf4, 0xa1, 0xab, 0xb3, 0xea, 0x84, - 0xa9, 0x61, 0x93, 0x0a, 0xe2, 0x4d, 0x03, 0x85, 0x80, 0xd2, 0x97, 0x01, 0xfa, 0x7e, 0x46, 0x94, - 0x4c, 0xbb, 0x91, 0xac, 0xeb, 0xf3, 0x31, 0x2b, 0xa3, 0x9a, 0xd5, 0x97, 0xaf, 0x57, 0x8d, 0x7f, - 0xbc, 0x5e, 0x35, 0xfe, 0xf5, 0x7a, 0xd5, 0x38, 0x2c, 0xca, 0x0a, 0xf0, 0x07, 0xff, 0x0f, 0x00, - 0x00, 0xff, 0xff, 0xc2, 0xc1, 0xf2, 0x3d, 0x51, 0x1e, 0x00, 0x00, + 0x15, 0xcf, 0x48, 0xb2, 0x2c, 0x3d, 0xc9, 0x8e, 0xdc, 0xc9, 0x86, 0x61, 0xc8, 0xda, 0xce, 0x6c, + 0x02, 0xae, 0x90, 0x8c, 0xbc, 0x82, 0x90, 0xac, 0x03, 0x21, 0xb6, 0x25, 0x36, 0x0e, 0x49, 0xc5, + 0xdb, 0x76, 0x36, 0xd4, 0x56, 0x05, 0x6a, 0x2c, 0xb5, 0x95, 0x29, 0x8f, 0x66, 0x86, 0xee, 0x96, + 0x37, 0xde, 0x13, 0x27, 0xaa, 0xb8, 0x50, 0x5c, 0x28, 0x2e, 0xdc, 0x39, 0x71, 0xe6, 0xcc, 0x81, + 0xaa, 0x1c, 0x39, 0xef, 0x21, 0x50, 0xf9, 0x00, 0x14, 0x47, 0xb8, 0x6d, 0xf5, 0x9f, 0x91, 0x46, + 0x9a, 0x91, 0x2d, 0x25, 0x39, 0xa9, 0x5f, 0xf7, 0xfb, 0xbd, 0x79, 0xef, 0xf5, 0xeb, 0xd7, 0xef, + 0xb5, 0x60, 0xa1, 0x1d, 0x06, 0x9c, 0x86, 0xbe, 0x13, 0xd1, 0x90, 0x87, 0xa8, 0xd6, 0x0b, 0x0f, + 0x4e, 0x9c, 0x83, 0xbe, 0xe7, 0x77, 0x8e, 0x3c, 0xee, 0x1c, 0x7f, 0x6c, 0x35, 0xba, 0x1e, 0x7f, + 0xd1, 0x3f, 0x70, 0xda, 0x61, 0xaf, 0xde, 0x0d, 0xbb, 0x61, 0xbd, 0x1b, 0x86, 0x5d, 0x9f, 0xb8, + 0x91, 0xc7, 0xf4, 0xb0, 0x4e, 0xa3, 0x76, 0x9d, 0x71, 0x97, 0xf7, 0x99, 0x92, 0x62, 0xdd, 0x1c, + 0xc7, 0xc8, 0xe9, 0x83, 0xfe, 0xa1, 0xa4, 0x24, 0x21, 0x47, 0x9a, 0xbd, 0x9e, 0x60, 0x17, 0xdf, + 0xaf, 0xc7, 0xdf, 0xaf, 0xbb, 0x91, 0x57, 0xe7, 0x27, 0x11, 0x61, 0xf5, 0x2f, 0x43, 0x7a, 0x44, + 0xa8, 0x06, 0xdc, 0x98, 0x08, 0x60, 0xa1, 0x7f, 0x4c, 0x68, 0x3d, 0x3a, 0xa8, 0x87, 0x51, 0xac, + 0xcd, 0xad, 0x53, 0xb8, 0xfb, 0xb4, 0x4d, 0xa2, 0xd0, 0xf7, 0xda, 0x27, 0x02, 0xa3, 0x46, 0x1a, + 0xb6, 0xa2, 0xad, 0x1b, 0xe8, 0xce, 0xbd, 0x1e, 0x61, 0xdc, 0xed, 0x45, 0x8a, 0xc1, 0xfe, 0xad, + 0x01, 0xd5, 0x5d, 0xda, 0x0f, 0x08, 0x26, 0xbf, 0xee, 0x13, 0xc6, 0xd1, 0x25, 0x28, 0x1e, 0x7a, + 0x3e, 0x27, 0xd4, 0x34, 0x56, 0xf3, 0x6b, 0x65, 0xac, 0x29, 0x54, 0x83, 0xbc, 0xeb, 0xfb, 0x66, + 0x6e, 0xd5, 0x58, 0x2b, 0x61, 0x31, 0x44, 0x6b, 0x50, 0x3d, 0x22, 0x24, 0x6a, 0xf6, 0xa9, 0xcb, + 0xbd, 0x30, 0x30, 0xf3, 0xab, 0xc6, 0x5a, 0x7e, 0xab, 0xf0, 0xea, 0xf5, 0x8a, 0x81, 0x47, 0x56, + 0x90, 0x0d, 0x65, 0x41, 0x6f, 0x9d, 0x70, 0xc2, 0xcc, 0x42, 0x82, 0x6d, 0x38, 0x6d, 0x5f, 0x87, + 0x5a, 0xd3, 0x63, 0x47, 0x4f, 0x99, 0xdb, 0x3d, 0x4b, 0x17, 0xfb, 0x21, 0x2c, 0x25, 0x78, 0x59, + 0x14, 0x06, 0x8c, 0xa0, 0x5b, 0x50, 0xa4, 0xa4, 0x1d, 0xd2, 0x8e, 0x64, 0xae, 0x34, 0x3e, 0x74, + 0xc6, 0xc3, 0xc0, 0xd1, 0x00, 0xc1, 0x84, 0x35, 0xb3, 0xfd, 0xa7, 0x3c, 0x54, 0x12, 0xf3, 0x68, + 0x11, 0x72, 0x3b, 0x4d, 0xd3, 0x58, 0x35, 0xd6, 0xca, 0x38, 0xb7, 0xd3, 0x44, 0x26, 0xcc, 0x3f, + 0xee, 0x73, 0xf7, 0xc0, 0x27, 0xda, 0xf6, 0x98, 0x44, 0x17, 0x61, 0x6e, 0x27, 0x78, 0xca, 0x88, + 0x34, 0xbc, 0x84, 0x15, 0x81, 0x10, 0x14, 0xf6, 0xbc, 0xaf, 0x88, 0x32, 0x13, 0xcb, 0x31, 0xb2, + 0xa0, 0xb8, 0xeb, 0x52, 0x12, 0x70, 0x73, 0x4e, 0xc8, 0xdd, 0xca, 0x99, 0x06, 0xd6, 0x33, 0x68, + 0x0b, 0xca, 0xdb, 0x94, 0xb8, 0x9c, 0x74, 0x36, 0xb9, 0x59, 0x5c, 0x35, 0xd6, 0x2a, 0x0d, 0xcb, + 0x51, 0xbb, 0xe6, 0xc4, 0xbb, 0xe6, 0xec, 0xc7, 0xbb, 0xb6, 0x55, 0x7a, 0xf5, 0x7a, 0xe5, 0xdc, + 0x1f, 0xfe, 0x25, 0x7c, 0x37, 0x80, 0xa1, 0xfb, 0x00, 0x8f, 0x5c, 0xc6, 0x9f, 0x32, 0x29, 0x64, + 0xfe, 0x4c, 0x21, 0x05, 0x29, 0x20, 0x81, 0x41, 0xcb, 0x00, 0xd2, 0x09, 0xdb, 0x61, 0x3f, 0xe0, + 0x66, 0x49, 0xea, 0x9e, 0x98, 0x41, 0xab, 0x50, 0x69, 0x12, 0xd6, 0xa6, 0x5e, 0x24, 0xb7, 0xba, + 0x2c, 0xdd, 0x93, 0x9c, 0x12, 0x12, 0x94, 0x07, 0xf7, 0x4f, 0x22, 0x62, 0x82, 0x64, 0x48, 0xcc, + 0x88, 0xbd, 0xdc, 0x7b, 0xe1, 0x52, 0xd2, 0x31, 0x2b, 0xd2, 0x5d, 0x9a, 0x12, 0xfe, 0x55, 0x9e, + 0x60, 0x66, 0x55, 0x6e, 0x72, 0x4c, 0xda, 0xbf, 0x29, 0x41, 0x75, 0x4f, 0x1c, 0x85, 0x38, 0x1c, + 0x6a, 0x90, 0xc7, 0xe4, 0x50, 0xef, 0x8d, 0x18, 0x22, 0x07, 0xa0, 0x49, 0x0e, 0xbd, 0xc0, 0x93, + 0x5a, 0xe5, 0xa4, 0xe1, 0x8b, 0x4e, 0x74, 0xe0, 0x0c, 0x67, 0x71, 0x82, 0x03, 0x39, 0x80, 0x5a, + 0x2f, 0xa3, 0x90, 0x72, 0x42, 0x9b, 0x24, 0xa2, 0xa4, 0x2d, 0x1c, 0x28, 0xf7, 0xaf, 0x8c, 0x33, + 0x56, 0x50, 0x1f, 0xbe, 0x15, 0xcf, 0x6e, 0x72, 0x4e, 0x59, 0x02, 0x54, 0x90, 0x41, 0x76, 0x37, + 0x1d, 0x64, 0x49, 0x95, 0x9d, 0x09, 0xe8, 0x56, 0xc0, 0xe9, 0x09, 0x9e, 0x24, 0x5b, 0xf8, 0x64, + 0x8f, 0x30, 0x26, 0x6c, 0x92, 0x01, 0x83, 0x63, 0x12, 0x59, 0x50, 0xfa, 0x19, 0x0d, 0x03, 0x4e, + 0x82, 0x8e, 0x0c, 0x96, 0x32, 0x1e, 0xd0, 0xe8, 0x19, 0x2c, 0xc4, 0x63, 0x29, 0xd0, 0x9c, 0x97, + 0x2a, 0x7e, 0x7c, 0x86, 0x8a, 0x23, 0x18, 0xa5, 0xd8, 0xa8, 0x1c, 0xb4, 0x01, 0x73, 0xdb, 0x6e, + 0xfb, 0x05, 0x91, 0x71, 0x51, 0x69, 0x2c, 0xa7, 0x05, 0xca, 0xe5, 0x27, 0x32, 0x10, 0x98, 0x3c, + 0xda, 0xe7, 0xb0, 0x82, 0xa0, 0x5f, 0x42, 0xb5, 0x15, 0x70, 0x8f, 0xfb, 0xa4, 0x27, 0xf7, 0xb8, + 0x2c, 0xf6, 0x78, 0x6b, 0xe3, 0xeb, 0xd7, 0x2b, 0x3f, 0x9a, 0x98, 0xd1, 0xfa, 0xdc, 0xf3, 0xeb, + 0x24, 0x81, 0x72, 0x12, 0x22, 0xf0, 0x88, 0x3c, 0xf4, 0x05, 0x2c, 0xc6, 0xca, 0xee, 0x04, 0x51, + 0x9f, 0x33, 0x13, 0xa4, 0xd5, 0x8d, 0x29, 0xad, 0x56, 0x20, 0x65, 0xf6, 0x98, 0x24, 0xe1, 0xec, + 0x9d, 0x80, 0x13, 0x1a, 0xb8, 0xbe, 0x0e, 0xda, 0x01, 0x8d, 0x76, 0x44, 0x6c, 0x8a, 0xc4, 0xbb, + 0x2b, 0xd3, 0xad, 0x59, 0x95, 0xae, 0xb9, 0x96, 0xfe, 0x6a, 0x32, 0x3d, 0x3b, 0x8a, 0x19, 0x8f, + 0x40, 0xd1, 0x1d, 0x28, 0xc7, 0x81, 0xc0, 0xcc, 0x05, 0xa9, 0xbd, 0x95, 0x96, 0x13, 0xb3, 0xe0, + 0x21, 0xb3, 0xf5, 0x10, 0x2e, 0x9f, 0x16, 0x60, 0xe2, 0xc0, 0x1c, 0x91, 0x93, 0xf8, 0xc0, 0x1c, + 0x91, 0x13, 0x91, 0xb3, 0x8e, 0x5d, 0xbf, 0xaf, 0x72, 0x59, 0x19, 0x2b, 0x62, 0x23, 0x77, 0xc7, + 0xb0, 0xee, 0x03, 0x4a, 0x47, 0xc2, 0x4c, 0x12, 0x3e, 0x83, 0x0b, 0x19, 0x5e, 0xcd, 0x10, 0x71, + 0x35, 0x29, 0x22, 0x7d, 0x60, 0x87, 0x22, 0xed, 0xbf, 0xe6, 0xa1, 0x9a, 0x8c, 0x2d, 0xb4, 0x0e, + 0x17, 0x94, 0xc5, 0x98, 0x1c, 0x26, 0x0e, 0xa3, 0x12, 0x9e, 0xb5, 0x84, 0x1a, 0x70, 0x71, 0xa7, + 0xa7, 0xa7, 0x93, 0xe7, 0x37, 0x27, 0x93, 0x4d, 0xe6, 0x1a, 0x0a, 0xe1, 0x03, 0x25, 0x6a, 0xfc, + 0xd0, 0xe7, 0xe5, 0xee, 0x7c, 0x72, 0xfa, 0x01, 0x70, 0x32, 0xb1, 0x2a, 0xc4, 0xb2, 0xe5, 0xa2, + 0x9f, 0xc0, 0xbc, 0x5a, 0x60, 0x3a, 0xaf, 0x7c, 0x74, 0xfa, 0x27, 0x94, 0xb0, 0x18, 0x23, 0xe0, + 0xca, 0x0e, 0x66, 0xce, 0xcd, 0x00, 0xd7, 0x18, 0xeb, 0x01, 0x58, 0x93, 0x55, 0x9e, 0x25, 0x04, + 0xec, 0xbf, 0x18, 0xb0, 0x94, 0xfa, 0x90, 0xb8, 0x12, 0xe5, 0xa5, 0xa0, 0x44, 0xc8, 0x31, 0x6a, + 0xc2, 0x9c, 0x4a, 0x52, 0x39, 0xa9, 0xb0, 0x33, 0x85, 0xc2, 0x4e, 0x22, 0x43, 0x29, 0xb0, 0x75, + 0x07, 0xe0, 0xed, 0x82, 0xd5, 0xfe, 0x9b, 0x01, 0x0b, 0x3a, 0x21, 0xe8, 0xfa, 0xc1, 0x85, 0xda, + 0xe0, 0x8c, 0xe9, 0x39, 0x5d, 0x49, 0xdc, 0x9a, 0x98, 0x4b, 0x14, 0x9b, 0x33, 0x8e, 0x53, 0x3a, + 0xa6, 0xc4, 0x59, 0xdb, 0x71, 0x5c, 0x8d, 0xb1, 0xce, 0xa4, 0xf9, 0x15, 0x58, 0xd8, 0x93, 0x75, + 0xea, 0xc4, 0x6b, 0xd1, 0xfe, 0xaf, 0x01, 0x8b, 0x31, 0x8f, 0xb6, 0xee, 0x87, 0x50, 0x3a, 0x26, + 0x94, 0x93, 0x97, 0x84, 0x69, 0xab, 0xcc, 0xb4, 0x55, 0x9f, 0x4b, 0x0e, 0x3c, 0xe0, 0x44, 0x1b, + 0x50, 0x52, 0x35, 0x31, 0x89, 0x37, 0x6a, 0x79, 0x12, 0x4a, 0x7f, 0x6f, 0xc0, 0x8f, 0xea, 0x50, + 0xf0, 0xc3, 0x2e, 0xd3, 0x67, 0xe6, 0x3b, 0x93, 0x70, 0x8f, 0xc2, 0x2e, 0x96, 0x8c, 0xe8, 0x2e, + 0x94, 0xbe, 0x74, 0x69, 0xe0, 0x05, 0xdd, 0xf8, 0x14, 0xac, 0x4c, 0x02, 0x3d, 0x53, 0x7c, 0x78, + 0x00, 0x10, 0x65, 0x5c, 0x51, 0xad, 0xa1, 0x87, 0x50, 0xec, 0x78, 0x5d, 0xc2, 0xb8, 0x72, 0xc9, + 0x56, 0x43, 0xdc, 0x47, 0x5f, 0xbf, 0x5e, 0xb9, 0x9e, 0xb8, 0x70, 0xc2, 0x88, 0x04, 0xa2, 0x69, + 0x70, 0xbd, 0x80, 0x50, 0xd1, 0x03, 0xdc, 0x54, 0x10, 0xa7, 0x29, 0x7f, 0xb0, 0x96, 0x20, 0x64, + 0x79, 0xea, 0x5a, 0x91, 0xf9, 0xe2, 0xed, 0x64, 0x29, 0x09, 0xe2, 0x18, 0x04, 0x6e, 0x8f, 0xe8, + 0x72, 0x43, 0x8e, 0x45, 0x55, 0xd4, 0x16, 0x71, 0xde, 0x91, 0xf5, 0x62, 0x09, 0x6b, 0x0a, 0x6d, + 0xc0, 0x3c, 0xe3, 0x2e, 0x15, 0x39, 0x67, 0x6e, 0xca, 0x72, 0x2e, 0x06, 0xa0, 0x7b, 0x50, 0x6e, + 0x87, 0xbd, 0xc8, 0x27, 0x02, 0x5d, 0x9c, 0x12, 0x3d, 0x84, 0x88, 0xd0, 0x23, 0x94, 0x86, 0x54, + 0x16, 0x92, 0x65, 0xac, 0x08, 0x74, 0x1b, 0x16, 0x22, 0x1a, 0x76, 0x29, 0x61, 0xec, 0x53, 0x1a, + 0xf6, 0x23, 0x5d, 0x0c, 0x2c, 0x89, 0xe4, 0xbd, 0x9b, 0x5c, 0xc0, 0xa3, 0x7c, 0xf6, 0x7f, 0x72, + 0x50, 0x4d, 0x86, 0x48, 0xaa, 0xc2, 0x7e, 0x08, 0x45, 0x15, 0x70, 0x2a, 0xd6, 0xdf, 0xce, 0xc7, + 0x4a, 0x42, 0xa6, 0x8f, 0x4d, 0x98, 0x6f, 0xf7, 0xa9, 0x2c, 0xbf, 0x55, 0x51, 0x1e, 0x93, 0xc2, + 0x52, 0x1e, 0x72, 0xd7, 0x97, 0x3e, 0xce, 0x63, 0x45, 0x88, 0x8a, 0x7c, 0xd0, 0x25, 0xcd, 0x56, + 0x91, 0x0f, 0x60, 0xc9, 0xfd, 0x9b, 0x7f, 0xa7, 0xfd, 0x2b, 0xcd, 0xbc, 0x7f, 0xf6, 0x3f, 0x0c, + 0x28, 0x0f, 0xce, 0x56, 0xc2, 0xbb, 0xc6, 0x3b, 0x7b, 0x77, 0xc4, 0x33, 0xb9, 0xb7, 0xf3, 0xcc, + 0x25, 0x28, 0x32, 0x4e, 0x89, 0xdb, 0x53, 0xfd, 0x22, 0xd6, 0x94, 0xc8, 0x62, 0x3d, 0xd6, 0x95, + 0x3b, 0x54, 0xc5, 0x62, 0x68, 0xff, 0xcf, 0x80, 0x85, 0x91, 0xe3, 0xfe, 0x5e, 0x6d, 0xb9, 0x08, + 0x73, 0x3e, 0x39, 0x26, 0xaa, 0xa3, 0xcd, 0x63, 0x45, 0x88, 0x59, 0xf6, 0x22, 0xa4, 0x5c, 0x2a, + 0x57, 0xc5, 0x8a, 0x10, 0x3a, 0x77, 0x08, 0x77, 0x3d, 0x5f, 0xe6, 0xa5, 0x2a, 0xd6, 0x94, 0xd0, + 0xb9, 0x4f, 0x7d, 0x5d, 0xa3, 0x8b, 0x21, 0xb2, 0xa1, 0xe0, 0x05, 0x87, 0xa1, 0x0e, 0x1b, 0x59, + 0xd9, 0xa8, 0x5a, 0x6f, 0x27, 0x38, 0x0c, 0xb1, 0x5c, 0x43, 0x57, 0xa0, 0x48, 0xdd, 0xa0, 0x4b, + 0xe2, 0x02, 0xbd, 0x2c, 0xb8, 0xb0, 0x98, 0xc1, 0x7a, 0xc1, 0xb6, 0xa1, 0x2a, 0xbb, 0xe2, 0xc7, + 0x84, 0x89, 0x1e, 0x4c, 0x84, 0x75, 0xc7, 0xe5, 0xae, 0x34, 0xbb, 0x8a, 0xe5, 0xd8, 0xbe, 0x01, + 0xe8, 0x91, 0xc7, 0xf8, 0x33, 0xf9, 0xa6, 0xc0, 0xce, 0x6a, 0x99, 0xf7, 0xe0, 0xc2, 0x08, 0xb7, + 0xbe, 0x16, 0x7e, 0x3c, 0xd6, 0x34, 0x5f, 0x4d, 0x67, 0x5c, 0xf9, 0x74, 0xe1, 0x28, 0xe0, 0x58, + 0xef, 0xbc, 0x00, 0x15, 0x69, 0x97, 0xfa, 0xb6, 0xed, 0x42, 0x55, 0x91, 0x5a, 0xf8, 0x67, 0x70, + 0x3e, 0x16, 0xf4, 0x39, 0xa1, 0xb2, 0x9d, 0x31, 0xa4, 0x5f, 0xbe, 0x37, 0xe9, 0x2b, 0x5b, 0xa3, + 0xec, 0x78, 0x1c, 0x6f, 0x13, 0xb8, 0x20, 0x79, 0x1e, 0x78, 0x8c, 0x87, 0xf4, 0x24, 0xb6, 0x7a, + 0x19, 0x60, 0xb3, 0xcd, 0xbd, 0x63, 0xf2, 0x24, 0xf0, 0xd5, 0x35, 0x5a, 0xc2, 0x89, 0x99, 0xf8, + 0x8a, 0xcc, 0x0d, 0x3b, 0xc7, 0xcb, 0x50, 0x6e, 0xb9, 0xd4, 0x3f, 0x69, 0xbd, 0xf4, 0xb8, 0x6e, + 0xe0, 0x87, 0x13, 0xf6, 0xef, 0x0d, 0x58, 0x4a, 0x7e, 0xa7, 0x75, 0x2c, 0xd2, 0xc5, 0x5d, 0x28, + 0xf0, 0xb8, 0x8e, 0x59, 0xcc, 0x32, 0x22, 0x05, 0x11, 0xa5, 0x0e, 0x96, 0xa0, 0x84, 0xa7, 0xd5, + 0xc1, 0xb9, 0x7a, 0x3a, 0x7c, 0xcc, 0xd3, 0xff, 0x2f, 0x01, 0x4a, 0x2f, 0x67, 0x74, 0xc4, 0xc9, + 0x06, 0x31, 0x37, 0xd6, 0x20, 0x3e, 0x1f, 0x6f, 0x10, 0xd5, 0xd5, 0x7c, 0x7b, 0x1a, 0x4d, 0xa6, + 0x68, 0x13, 0x47, 0xfa, 0x98, 0xc2, 0x0c, 0x7d, 0x0c, 0x5a, 0x8b, 0x6f, 0x1c, 0x75, 0xd7, 0xa1, + 0x38, 0xa7, 0xd0, 0xa8, 0xed, 0xe8, 0xba, 0x42, 0xdf, 0x42, 0xf7, 0x66, 0x7b, 0x2d, 0x29, 0x8c, + 0xbf, 0x94, 0x6c, 0x41, 0x65, 0x3b, 0x4e, 0x94, 0x33, 0x3c, 0x95, 0x24, 0x41, 0x68, 0x5d, 0x17, + 0x36, 0x2a, 0x35, 0x5f, 0x4e, 0x9b, 0x18, 0x3f, 0x8b, 0x84, 0x54, 0x57, 0x36, 0x87, 0x19, 0xa5, + 0x65, 0x59, 0x3a, 0x68, 0x63, 0x2a, 0xdf, 0x4f, 0x59, 0x5f, 0xa2, 0x4f, 0xa0, 0x88, 0x09, 0xeb, + 0xfb, 0x5c, 0xbe, 0xbf, 0x54, 0x1a, 0x57, 0x26, 0x48, 0x57, 0x4c, 0xf2, 0xac, 0x6a, 0x00, 0xfa, + 0x39, 0xcc, 0xab, 0x11, 0x33, 0x2b, 0x93, 0x9e, 0x0d, 0x32, 0x34, 0xd3, 0x18, 0xdd, 0x50, 0x68, + 0x4a, 0x1c, 0xc7, 0x4f, 0x49, 0x40, 0xf4, 0xbb, 0xa0, 0x68, 0x8d, 0xe7, 0x70, 0x62, 0x06, 0x35, + 0x60, 0x8e, 0x53, 0xb7, 0x4d, 0xcc, 0x85, 0x29, 0x5c, 0xa8, 0x58, 0x45, 0x62, 0x8b, 0xbc, 0x20, + 0x20, 0x1d, 0x73, 0x51, 0x55, 0x4a, 0x8a, 0x42, 0xdf, 0x85, 0xc5, 0xa0, 0xdf, 0x93, 0xcd, 0x42, + 0x67, 0x8f, 0x93, 0x88, 0x99, 0xe7, 0xe5, 0xf7, 0xc6, 0x66, 0xd1, 0x55, 0x58, 0x08, 0xfa, 0xbd, + 0x7d, 0x71, 0xc3, 0x2b, 0xb6, 0x9a, 0x64, 0x1b, 0x9d, 0x44, 0x37, 0x60, 0x49, 0xe0, 0xe2, 0xdd, + 0x56, 0x9c, 0x4b, 0x92, 0x33, 0xbd, 0xf0, 0x1e, 0x7a, 0xe6, 0xf7, 0xd1, 0x11, 0x58, 0xcf, 0xa1, + 0x9a, 0xdc, 0x87, 0x0c, 0xec, 0xed, 0xd1, 0x8e, 0x7b, 0x8a, 0xb8, 0x48, 0x34, 0x1c, 0xcf, 0xe1, + 0xdb, 0x4f, 0xa3, 0x8e, 0xcb, 0x49, 0x56, 0xe6, 0x4d, 0x67, 0xa0, 0x4b, 0x50, 0xdc, 0x55, 0x1b, + 0xa5, 0xde, 0x4b, 0x35, 0x25, 0xe6, 0x9b, 0x44, 0x38, 0x4f, 0xa7, 0x5b, 0x4d, 0xd9, 0x97, 0xc1, + 0xca, 0x12, 0xaf, 0x9c, 0x61, 0xff, 0x39, 0x07, 0x30, 0x0c, 0x06, 0xf4, 0x21, 0x40, 0x8f, 0x74, + 0x3c, 0xf7, 0x57, 0x7c, 0xd8, 0x50, 0x96, 0xe5, 0x8c, 0xec, 0x2a, 0x87, 0xa5, 0x7f, 0xee, 0x9d, + 0x4b, 0x7f, 0x04, 0x05, 0xe6, 0x7d, 0x45, 0x74, 0x99, 0x22, 0xc7, 0xe8, 0x09, 0x54, 0xdc, 0x20, + 0x08, 0xb9, 0x0c, 0xe3, 0xb8, 0xd9, 0xbe, 0x79, 0x5a, 0xf8, 0x3a, 0x9b, 0x43, 0x7e, 0x75, 0x4a, + 0x92, 0x12, 0xac, 0x7b, 0x50, 0x1b, 0x67, 0x98, 0xa9, 0x19, 0xfc, 0x7b, 0x0e, 0xce, 0x8f, 0x6d, + 0x1d, 0x7a, 0x00, 0x35, 0x45, 0x8d, 0x3d, 0x90, 0x9c, 0x75, 0xd0, 0x52, 0x28, 0x74, 0x1f, 0xaa, + 0x9b, 0x9c, 0x8b, 0x4c, 0xa8, 0xec, 0x55, 0x2d, 0xe0, 0xe9, 0x52, 0x46, 0x10, 0xe8, 0xc1, 0x30, + 0xad, 0xe4, 0x27, 0x35, 0xfa, 0x63, 0xfa, 0x67, 0xe7, 0x14, 0xeb, 0x17, 0x93, 0x83, 0x3c, 0xaf, + 0xbc, 0xd4, 0x18, 0x0d, 0xf2, 0x33, 0xb2, 0xca, 0xd0, 0x87, 0x7f, 0x34, 0xa0, 0x14, 0x1f, 0xc2, + 0xcc, 0xb7, 0x8a, 0xbb, 0xa3, 0x6f, 0x15, 0xd7, 0x26, 0x5f, 0x6a, 0xef, 0xf3, 0x89, 0xe2, 0xfa, + 0x4f, 0xe1, 0x83, 0xcc, 0x82, 0x02, 0x55, 0x60, 0x7e, 0x6f, 0x7f, 0x13, 0xef, 0xb7, 0x9a, 0xb5, + 0x73, 0xa8, 0x0a, 0xa5, 0xed, 0x27, 0x8f, 0x77, 0x1f, 0xb5, 0xf6, 0x5b, 0x35, 0x43, 0x2c, 0x35, + 0x5b, 0x62, 0xdc, 0xac, 0xe5, 0x1a, 0xbf, 0x2b, 0xc2, 0xfc, 0xb6, 0xfa, 0x67, 0x0c, 0xed, 0x43, + 0x79, 0xf0, 0x97, 0x09, 0xb2, 0x33, 0x5c, 0x33, 0xf6, 0xdf, 0x8b, 0xf5, 0xd1, 0xa9, 0x3c, 0xfa, + 0xc2, 0x79, 0x00, 0x73, 0xf2, 0xcf, 0x23, 0x94, 0xf1, 0x2c, 0x90, 0xfc, 0x57, 0xc9, 0x3a, 0xfd, + 0xcf, 0x98, 0x75, 0x43, 0x48, 0x92, 0x6f, 0x2a, 0x59, 0x92, 0x92, 0x0f, 0xb7, 0xd6, 0xca, 0x19, + 0x8f, 0x31, 0xe8, 0x31, 0x14, 0x75, 0xa3, 0x99, 0xc5, 0x9a, 0x7c, 0x39, 0xb1, 0x56, 0x27, 0x33, + 0x28, 0x61, 0xeb, 0x06, 0x7a, 0x3c, 0x78, 0x8b, 0xcf, 0x52, 0x2d, 0x59, 0xa5, 0x5b, 0x67, 0xac, + 0xaf, 0x19, 0xeb, 0x06, 0xfa, 0x02, 0x2a, 0x89, 0x3a, 0x1c, 0x65, 0x54, 0x81, 0xe9, 0xa2, 0xde, + 0xba, 0x76, 0x06, 0x97, 0xb6, 0xbc, 0x05, 0x05, 0x99, 0x00, 0x32, 0x9c, 0x9d, 0x28, 0xd3, 0xb3, + 0xd4, 0x1c, 0x29, 0xdb, 0x0f, 0x54, 0x63, 0x41, 0x82, 0x64, 0xf4, 0xa1, 0x6b, 0x67, 0xd5, 0x03, + 0x13, 0xc3, 0x26, 0x15, 0xc4, 0xeb, 0x06, 0x0a, 0x01, 0xa5, 0x93, 0x3e, 0xfa, 0x7e, 0x46, 0x94, + 0x4c, 0xba, 0x79, 0xac, 0x1b, 0xd3, 0x31, 0x2b, 0xa3, 0xb6, 0xaa, 0xaf, 0xde, 0x2c, 0x1b, 0xff, + 0x7c, 0xb3, 0x6c, 0xfc, 0xfb, 0xcd, 0xb2, 0x71, 0x50, 0x94, 0x95, 0xde, 0x0f, 0xbe, 0x09, 0x00, + 0x00, 0xff, 0xff, 0x16, 0xc8, 0xe5, 0x4c, 0x39, 0x1e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4405,11 +4395,9 @@ func (m *BuildResultInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) + i = encodeVarintControl(dAtA, i, uint64(k)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 i = encodeVarintControl(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x1a @@ -4468,13 +4456,6 @@ func (m *Exporter) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0x1a - } if len(m.Attrs) > 0 { for k := range m.Attrs { v := m.Attrs[k] @@ -5311,7 +5292,7 @@ func (m *BuildResultInfo) Size() (n int) { l = v.Size() l += 1 + sovControl(uint64(l)) } - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + l + mapEntrySize := 1 + sovControl(uint64(k)) + l n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) } } @@ -5339,10 +5320,6 @@ func (m *Exporter) Size() (n int) { n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) } } - l = len(m.ID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -10827,9 +10804,9 @@ func (m *BuildResultInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Results == nil { - m.Results = make(map[string]*Descriptor) + m.Results = make(map[int64]*Descriptor) } - var mapkey string + var mapkey int64 var mapvalue *Descriptor for iNdEx < postIndex { entryPreIndex := iNdEx @@ -10850,7 +10827,6 @@ func (m *BuildResultInfo) Unmarshal(dAtA []byte) error { } fieldNum := int32(wire >> 3) if fieldNum == 1 { - var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowControl @@ -10860,24 +10836,11 @@ func (m *BuildResultInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift + mapkey |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey } else if fieldNum == 2 { var mapmsglen int for shift := uint(0); ; shift += 7 { @@ -11136,38 +11099,6 @@ func (m *Exporter) Unmarshal(dAtA []byte) error { } m.Attrs[mapkey] = mapvalue iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipControl(dAtA[iNdEx:]) diff --git a/api/services/control/control.proto b/api/services/control/control.proto index b863d478842d..919b1dd8c387 100644 --- a/api/services/control/control.proto +++ b/api/services/control/control.proto @@ -233,7 +233,7 @@ message Descriptor { message BuildResultInfo { Descriptor ResultDeprecated = 1; repeated Descriptor Attestations = 2; - map Results = 3; + map Results = 3; } // Exporter describes the output exporter @@ -242,6 +242,4 @@ message Exporter { string Type = 1; // Attrs specifies exporter configuration map Attrs = 2; - // ID identifies the exporter in the wire protocol - string id = 3 [(gogoproto.customname) = "ID"]; } diff --git a/client/client_test.go b/client/client_test.go index 150ad37af4a8..b364a3673bf8 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -2606,8 +2606,23 @@ func testMultipleExporters(t *testing.T, sb integration.Sandbox) { imageExporter = "moby" } + ref := identity.NewID() resp, err := c.Solve(sb.Context(), def, SolveOpt{ + Ref: ref, Exports: []ExportEntry{ + { + Type: imageExporter, + Attrs: map[string]string{ + "name": target1, + }, + }, + { + Type: imageExporter, + Attrs: map[string]string{ + "name": target2, + "oci-mediatypes": "true", + }, + }, // Ensure that multiple local exporter destinations are written properly { Type: ExporterLocal, @@ -2626,21 +2641,34 @@ func testMultipleExporters(t *testing.T, sb integration.Sandbox) { Type: ExporterTar, Output: fixedWriteCloser(outW2), }, - { - Type: imageExporter, - Attrs: map[string]string{ - "name": strings.Join([]string{target1, target2}, ","), - }, - }, }, }, nil) require.NoError(t, err) - require.Equal(t, resp.ExporterResponse["image.name"], target1+","+target2) + require.Equal(t, resp.ExporterResponse["image.name"], target2) require.FileExists(t, filepath.Join(destDir, "out.tar")) require.FileExists(t, filepath.Join(destDir, "out2.tar")) require.FileExists(t, filepath.Join(destDir, "foo.txt")) require.FileExists(t, filepath.Join(destDir2, "foo.txt")) + + history, err := c.ControlClient().ListenBuildHistory(sb.Context(), &controlapi.BuildHistoryRequest{ + Ref: ref, + EarlyExit: true, + }) + require.NoError(t, err) + for { + ev, err := history.Recv() + if err != nil { + require.Equal(t, io.EOF, err) + break + } + require.Equal(t, ref, ev.Record.Ref) + + require.Len(t, ev.Record.Result.Results, 2) + require.Equal(t, images.MediaTypeDockerSchema2Manifest, ev.Record.Result.Results[0].MediaType) + require.Equal(t, ocispecs.MediaTypeImageManifest, ev.Record.Result.Results[1].MediaType) + require.Equal(t, ev.Record.Result.Results[0], ev.Record.Result.ResultDeprecated) + } } func testOCIExporter(t *testing.T, sb integration.Sandbox) { diff --git a/client/solve.go b/client/solve.go index 386777285f04..6c4dcff67c41 100644 --- a/client/solve.go +++ b/client/solve.go @@ -4,7 +4,6 @@ import ( "context" "encoding/base64" "encoding/json" - "fmt" "io" "os" "path/filepath" @@ -131,25 +130,6 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG return nil, err } - type exporter struct { - ExportEntry - id string - } - - var exporters []exporter - ids := make(map[string]int) - for _, exp := range opt.Exports { - if id, ok := ids[exp.Type]; !ok { - ids[exp.Type] = 1 - } else { - ids[exp.Type] = id + 1 - } - exporters = append(exporters, exporter{ - ExportEntry: exp, - id: fmt.Sprint(exp.Type, ids[exp.Type]), - }) - } - storesToUpdate := []string{} if !opt.SessionPreInitialized { @@ -174,7 +154,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG } var syncTargets []filesync.FSSyncTarget - for _, ex := range exporters { + for exID, ex := range opt.Exports { var supportFile bool var supportDir bool switch ex.Type { @@ -199,7 +179,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG if ex.Output == nil { return nil, errors.Errorf("output file writer is required for %s exporter", ex.Type) } - syncTargets = append(syncTargets, filesync.WithFSSync(ex.id, ex.Output)) + syncTargets = append(syncTargets, filesync.WithFSSync(exID, ex.Output)) } if supportDir { if ex.OutputDir == "" { @@ -217,7 +197,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG contentStores["export"] = cs storesToUpdate = append(storesToUpdate, ex.OutputDir) default: - syncTargets = append(syncTargets, filesync.WithFSSyncDir(ex.id, ex.OutputDir)) + syncTargets = append(syncTargets, filesync.WithFSSyncDir(exID, ex.OutputDir)) } } } @@ -280,13 +260,12 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG exports := make([]*controlapi.Exporter, 0, len(opt.Exports)) exportDeprecated := "" exportAttrDeprecated := map[string]string{} - for i, exp := range exporters { + for i, exp := range opt.Exports { if i == 0 { exportDeprecated = exp.Type exportAttrDeprecated = exp.Attrs } exports = append(exports, &controlapi.Exporter{ - ID: exp.id, Type: exp.Type, Attrs: exp.Attrs, }) diff --git a/control/control.go b/control/control.go index 1901c6f7ab66..cae84984d683 100644 --- a/control/control.go +++ b/control/control.go @@ -366,12 +366,12 @@ func (c *Controller) Solve(ctx context.Context, req *controlapi.SolveRequest) (* } var expis []exporter.ExporterInstance - for _, ex := range req.Exporters { + for i, ex := range req.Exporters { exp, err := w.Exporter(ex.Type, c.opt.SessionManager) if err != nil { return nil, err } - expi, err := exp.Resolve(ctx, ex.ID, ex.Attrs) + expi, err := exp.Resolve(ctx, i, ex.Attrs) if err != nil { return nil, err } diff --git a/exporter/containerimage/export.go b/exporter/containerimage/export.go index c8550b8f7eac..26afb842dcc7 100644 --- a/exporter/containerimage/export.go +++ b/exporter/containerimage/export.go @@ -64,7 +64,7 @@ func New(opt Opt) (exporter.Exporter, error) { return im, nil } -func (e *imageExporter) Resolve(ctx context.Context, id string, opt map[string]string) (exporter.ExporterInstance, error) { +func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) { i := &imageExporterInstance{ imageExporter: e, id: id, @@ -168,7 +168,7 @@ func (e *imageExporter) Resolve(ctx context.Context, id string, opt map[string]s type imageExporterInstance struct { *imageExporter - id string + id int opts ImageCommitOpts push bool @@ -182,7 +182,7 @@ type imageExporterInstance struct { meta map[string][]byte } -func (e *imageExporterInstance) ID() string { +func (e *imageExporterInstance) ID() int { return e.id } diff --git a/exporter/exporter.go b/exporter/exporter.go index eb19ddc6bfd0..bbaf4b8a49a0 100644 --- a/exporter/exporter.go +++ b/exporter/exporter.go @@ -15,11 +15,11 @@ type Source = result.Result[cache.ImmutableRef] type Attestation = result.Attestation[cache.ImmutableRef] type Exporter interface { - Resolve(context.Context, string, map[string]string) (ExporterInstance, error) + Resolve(context.Context, int, map[string]string) (ExporterInstance, error) } type ExporterInstance interface { - ID() string + ID() int Name() string Config() *Config Export(ctx context.Context, src *Source, inlineCache exptypes.InlineCache, sessionID string) (map[string]string, DescriptorReference, error) diff --git a/exporter/local/export.go b/exporter/local/export.go index a45ba920617a..b6fa6866cb96 100644 --- a/exporter/local/export.go +++ b/exporter/local/export.go @@ -35,7 +35,7 @@ func New(opt Opt) (exporter.Exporter, error) { return le, nil } -func (e *localExporter) Resolve(ctx context.Context, id string, opt map[string]string) (exporter.ExporterInstance, error) { +func (e *localExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) { i := &localExporterInstance{ id: id, localExporter: e, @@ -50,12 +50,12 @@ func (e *localExporter) Resolve(ctx context.Context, id string, opt map[string]s type localExporterInstance struct { *localExporter - id string + id int opts CreateFSOpts } -func (e *localExporterInstance) ID() string { +func (e *localExporterInstance) ID() int { return e.id } diff --git a/exporter/oci/export.go b/exporter/oci/export.go index a788706b9e5e..3748f536caa4 100644 --- a/exporter/oci/export.go +++ b/exporter/oci/export.go @@ -58,7 +58,7 @@ func New(opt Opt) (exporter.Exporter, error) { return im, nil } -func (e *imageExporter) Resolve(ctx context.Context, id string, opt map[string]string) (exporter.ExporterInstance, error) { +func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) { i := &imageExporterInstance{ imageExporter: e, id: id, @@ -100,14 +100,14 @@ func (e *imageExporter) Resolve(ctx context.Context, id string, opt map[string]s type imageExporterInstance struct { *imageExporter - id string + id int opts containerimage.ImageCommitOpts tar bool meta map[string][]byte } -func (e *imageExporterInstance) ID() string { +func (e *imageExporterInstance) ID() int { return e.id } diff --git a/exporter/tar/export.go b/exporter/tar/export.go index 1d19f4b2e826..4f6afbd24f24 100644 --- a/exporter/tar/export.go +++ b/exporter/tar/export.go @@ -33,7 +33,7 @@ func New(opt Opt) (exporter.Exporter, error) { return le, nil } -func (e *localExporter) Resolve(ctx context.Context, id string, opt map[string]string) (exporter.ExporterInstance, error) { +func (e *localExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) { li := &localExporterInstance{ localExporter: e, id: id, @@ -49,12 +49,12 @@ func (e *localExporter) Resolve(ctx context.Context, id string, opt map[string]s type localExporterInstance struct { *localExporter - id string + id int opts local.CreateFSOpts } -func (e *localExporterInstance) ID() string { +func (e *localExporterInstance) ID() int { return e.id } diff --git a/session/filesync/filesync.go b/session/filesync/filesync.go index d781e02aee99..dc3402f2d3b8 100644 --- a/session/filesync/filesync.go +++ b/session/filesync/filesync.go @@ -240,7 +240,7 @@ type FSSyncTarget interface { } type fsSyncTarget struct { - id string + id int outdir string f FileOutputFunc } @@ -249,14 +249,14 @@ func (target *fsSyncTarget) target() *fsSyncTarget { return target } -func WithFSSync(id string, f FileOutputFunc) FSSyncTarget { +func WithFSSync(id int, f FileOutputFunc) FSSyncTarget { return &fsSyncTarget{ id: id, f: f, } } -func WithFSSyncDir(id string, outdir string) FSSyncTarget { +func WithFSSyncDir(id int, outdir string) FSSyncTarget { return &fsSyncTarget{ id: id, outdir: outdir, @@ -264,9 +264,8 @@ func WithFSSyncDir(id string, outdir string) FSSyncTarget { } func NewFSSyncTarget(targets ...FSSyncTarget) session.Attachable { - fs := make(map[string]FileOutputFunc) - outdirs := make(map[string]string) - defaultID := "" + fs := make(map[int]FileOutputFunc) + outdirs := make(map[int]string) for _, t := range targets { t := t.target() if t.f != nil { @@ -275,39 +274,36 @@ func NewFSSyncTarget(targets ...FSSyncTarget) session.Attachable { if t.outdir != "" { outdirs[t.id] = t.outdir } - if defaultID == "" { - defaultID = t.id - } } return &fsSyncAttachable{ - fs: fs, - outdirs: outdirs, - defaultID: defaultID, + fs: fs, + outdirs: outdirs, } } type fsSyncAttachable struct { - fs map[string]FileOutputFunc - outdirs map[string]string - - defaultID string + fs map[int]FileOutputFunc + outdirs map[int]string } func (sp *fsSyncAttachable) Register(server *grpc.Server) { RegisterFileSendServer(server, sp) } -func (sp *fsSyncAttachable) chooser(ctx context.Context) string { +func (sp *fsSyncAttachable) chooser(ctx context.Context) int { md, ok := metadata.FromIncomingContext(ctx) if !ok { - return sp.defaultID + return 0 } values := md[keyExporterID] if len(values) == 0 { - return sp.defaultID + return 0 + } + id, err := strconv.ParseInt(values[0], 10, 64) + if err != nil { + return 0 } - id := values[0] - return id + return int(id) } func (sp *fsSyncAttachable) DiffCopy(stream FileSend_DiffCopyServer) (err error) { @@ -317,7 +313,7 @@ func (sp *fsSyncAttachable) DiffCopy(stream FileSend_DiffCopyServer) (err error) } f, ok := sp.fs[id] if !ok { - return errors.Errorf("exporter %q not found", id) + return errors.Errorf("exporter %d not found", id) } opts, _ := metadata.FromIncomingContext(stream.Context()) // if no metadata continue with empty object @@ -343,7 +339,7 @@ func (sp *fsSyncAttachable) DiffCopy(stream FileSend_DiffCopyServer) (err error) return writeTargetFile(stream, wc) } -func CopyToCaller(ctx context.Context, fs fsutil.FS, id string, c session.Caller, progress func(int, bool)) error { +func CopyToCaller(ctx context.Context, fs fsutil.FS, id int, c session.Caller, progress func(int, bool)) error { method := session.MethodURL(_FileSend_serviceDesc.ServiceName, "diffcopy") if !c.Supports(method) { return errors.Errorf("method %s not supported by the client", method) @@ -352,7 +348,7 @@ func CopyToCaller(ctx context.Context, fs fsutil.FS, id string, c session.Caller client := NewFileSendClient(c.Conn()) opts := map[string][]string{ - keyExporterID: {id}, + keyExporterID: {fmt.Sprint(id)}, } ctx = metadata.NewOutgoingContext(ctx, opts) @@ -364,7 +360,7 @@ func CopyToCaller(ctx context.Context, fs fsutil.FS, id string, c session.Caller return sendDiffCopy(cc, fs, progress) } -func CopyFileWriter(ctx context.Context, md map[string]string, id string, c session.Caller) (io.WriteCloser, error) { +func CopyFileWriter(ctx context.Context, md map[string]string, id int, c session.Caller) (io.WriteCloser, error) { method := session.MethodURL(_FileSend_serviceDesc.ServiceName, "diffcopy") if !c.Supports(method) { return nil, errors.Errorf("method %s not supported by the client", method) @@ -386,7 +382,7 @@ func CopyFileWriter(ctx context.Context, md map[string]string, id string, c sess if existingVal, ok := opts[keyExporterID]; ok { bklog.G(ctx).Warnf("overwriting grpc metadata key %q from value %+v to %+v", keyExporterID, existingVal, id) } - opts[keyExporterID] = []string{id} + opts[keyExporterID] = []string{fmt.Sprint(id)} ctx = metadata.NewOutgoingContext(ctx, opts) cc, err := client.DiffCopy(ctx) diff --git a/solver/llbsolver/solver.go b/solver/llbsolver/solver.go index e13be476c89f..8b516223a783 100644 --- a/solver/llbsolver/solver.go +++ b/solver/llbsolver/solver.go @@ -149,7 +149,7 @@ func (s *Solver) Bridge(b solver.Builder) frontend.FrontendLLBBridge { return s.bridge(b) } -func (s *Solver) recordBuildHistory(ctx context.Context, id string, req frontend.SolveRequest, exp ExporterRequest, j *solver.Job, usage *resources.SysSampler) (func(*Result, map[string]exporter.DescriptorReference, error) error, error) { +func (s *Solver) recordBuildHistory(ctx context.Context, id string, req frontend.SolveRequest, exp ExporterRequest, j *solver.Job, usage *resources.SysSampler) (func(*Result, []exporter.DescriptorReference, error) error, error) { var stopTrace func() []tracetest.SpanStub if s := trace.SpanFromContext(ctx); s.SpanContext().IsValid() { @@ -182,7 +182,7 @@ func (s *Solver) recordBuildHistory(ctx context.Context, id string, req frontend return nil, err } - return func(res *Result, descrefs map[string]exporter.DescriptorReference, err error) error { + return func(res *Result, descrefs []exporter.DescriptorReference, err error) error { en := time.Now() rec.CompletedAt = &en @@ -314,16 +314,16 @@ func (s *Solver) recordBuildHistory(ctx context.Context, id string, req frontend return j.Status(ctx2, ch) }) - for k, descref := range descrefs { - k, descref := k, descref + setDeprecated := true + for i, descref := range descrefs { + i, descref := i, descref + if descref == nil { + continue + } + deprecate := setDeprecated + setDeprecated = false eg.Go(func() error { mu.Lock() - if rec.Result == nil { - rec.Result = &controlapi.BuildResultInfo{} - } - if rec.Result.Results == nil { - rec.Result.Results = make(map[string]*controlapi.Descriptor) - } desc := descref.Descriptor() controlDesc := &controlapi.Descriptor{ Digest: desc.Digest, @@ -331,15 +331,22 @@ func (s *Solver) recordBuildHistory(ctx context.Context, id string, req frontend MediaType: desc.MediaType, Annotations: desc.Annotations, } - if rec.Result.ResultDeprecated == nil { + if rec.Result == nil { + rec.Result = &controlapi.BuildResultInfo{} + } + if rec.Result.Results == nil { + rec.Result.Results = make(map[int64]*controlapi.Descriptor) + } + if deprecate { + // write the first available descriptor to the deprecated + // field for legacy clients rec.Result.ResultDeprecated = controlDesc } - rec.Result.Results[k] = controlDesc + rec.Result.Results[int64(i)] = controlDesc mu.Unlock() return nil }) } - if err1 := eg.Wait(); err == nil { err = err1 } @@ -433,7 +440,7 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro var res *frontend.Result var resProv *Result - var descrefs map[string]exporter.DescriptorReference + var descrefs []exporter.DescriptorReference var releasers []func() defer func() { @@ -441,7 +448,9 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro f() } for _, descref := range descrefs { - descref.Release() + if descref != nil { + descref.Release() + } } }() @@ -665,7 +674,7 @@ func runInlineCacheExporter(ctx context.Context, e exporter.ExporterInstance, in return res, done(err) } -func (s *Solver) runExporters(ctx context.Context, exporters []exporter.ExporterInstance, inlineCacheExporter inlineCacheExporter, job *solver.Job, cached *result.Result[solver.CachedResult], inp *result.Result[cache.ImmutableRef]) (exporterResponse map[string]string, descrefs map[string]exporter.DescriptorReference, err error) { +func (s *Solver) runExporters(ctx context.Context, exporters []exporter.ExporterInstance, inlineCacheExporter inlineCacheExporter, job *solver.Job, cached *result.Result[solver.CachedResult], inp *result.Result[cache.ImmutableRef]) (exporterResponse map[string]string, descrefs []exporter.DescriptorReference, err error) { eg, ctx := errgroup.WithContext(ctx) resps := make([]map[string]string, len(exporters)) descs := make([]exporter.DescriptorReference, len(exporters)) @@ -701,17 +710,7 @@ func (s *Solver) runExporters(ctx context.Context, exporters []exporter.Exporter } } - for i, desc := range descs { - if desc == nil { - continue - } - if descrefs == nil { - descrefs = make(map[string]exporter.DescriptorReference) - } - descrefs[exporters[i].ID()] = desc - } - - return exporterResponse, descrefs, nil + return exporterResponse, descs, nil } func splitCacheExporters(exporters []RemoteCacheExporter) (rest []RemoteCacheExporter, inline inlineCacheExporter) {