Unverified Commit 4b874a02 authored by Cristian Maglie's avatar Cristian Maglie Committed by GitHub

Added dependencies, license and provides_includes fields in 'lib search' (#599)

* Added 'license' and 'provides_includes' fields in lib search

* Added 'dependencies' field in lib search

* Do not output empty field in 'lib search'

Fields 'license', 'provided includes' and 'dependencies' are printed
only if populated.
parent 561618a4
...@@ -41,17 +41,19 @@ type Library struct { ...@@ -41,17 +41,19 @@ type Library struct {
// Release is a release of a library available for download // Release is a release of a library available for download
type Release struct { type Release struct {
Author string Author string
Version *semver.Version Version *semver.Version
Dependencies []semver.Dependency Dependencies []semver.Dependency
Maintainer string Maintainer string
Sentence string Sentence string
Paragraph string Paragraph string
Website string Website string
Category string Category string
Architectures []string Architectures []string
Types []string Types []string
Resource *resources.DownloadResource Resource *resources.DownloadResource
License string
ProvidesIncludes []string
Library *Library `json:"-"` Library *Library `json:"-"`
} }
......
...@@ -29,21 +29,23 @@ type indexJSON struct { ...@@ -29,21 +29,23 @@ type indexJSON struct {
} }
type indexRelease struct { type indexRelease struct {
Name string `json:"name,required"` Name string `json:"name,required"`
Version *semver.Version `json:"version,required"` Version *semver.Version `json:"version,required"`
Author string `json:"author"` Author string `json:"author"`
Maintainer string `json:"maintainer"` Maintainer string `json:"maintainer"`
Sentence string `json:"sentence"` Sentence string `json:"sentence"`
Paragraph string `json:"paragraph"` Paragraph string `json:"paragraph"`
Website string `json:"website"` Website string `json:"website"`
Category string `json:"category"` Category string `json:"category"`
Architectures []string `json:"architectures"` Architectures []string `json:"architectures"`
Types []string `json:"types"` Types []string `json:"types"`
URL string `json:"url"` URL string `json:"url"`
ArchiveFileName string `json:"archiveFileName"` ArchiveFileName string `json:"archiveFileName"`
Size int64 `json:"size"` Size int64 `json:"size"`
Checksum string `json:"checksum"` Checksum string `json:"checksum"`
Dependencies []*indexDependency `json:"dependencies,omitempty"` Dependencies []*indexDependency `json:"dependencies,omitempty"`
License string `json:"license"`
ProvidesIncludes []string `json:"providesIncludes"`
} }
type indexDependency struct { type indexDependency struct {
...@@ -107,8 +109,10 @@ func (indexLib *indexRelease) extractReleaseIn(library *Library) { ...@@ -107,8 +109,10 @@ func (indexLib *indexRelease) extractReleaseIn(library *Library) {
Checksum: indexLib.Checksum, Checksum: indexLib.Checksum,
CachePath: "libraries", CachePath: "libraries",
}, },
Library: library, Library: library,
Dependencies: indexLib.extractDependencies(), Dependencies: indexLib.extractDependencies(),
License: indexLib.License,
ProvidesIncludes: indexLib.ProvidesIncludes,
} }
library.Releases[indexLib.Version.String()] = release library.Releases[indexLib.Version.String()] = release
if library.Latest == nil || library.Latest.Version.LessThan(release.Version) { if library.Latest == nil || library.Latest.Version.LessThan(release.Version) {
......
...@@ -113,21 +113,41 @@ func (res result) String() string { ...@@ -113,21 +113,41 @@ func (res result) String() string {
var out strings.Builder var out strings.Builder
for _, lsr := range results { for _, lib := range results {
out.WriteString(fmt.Sprintf("Name: \"%s\"\n", lsr.Name)) out.WriteString(fmt.Sprintf("Name: \"%s\"\n", lib.Name))
if res.namesOnly { if res.namesOnly {
continue continue
} }
out.WriteString(fmt.Sprintf(" Author: %s\n", lsr.GetLatest().Author)) latest := lib.GetLatest()
out.WriteString(fmt.Sprintf(" Maintainer: %s\n", lsr.GetLatest().Maintainer))
out.WriteString(fmt.Sprintf(" Sentence: %s\n", lsr.GetLatest().Sentence)) deps := []string{}
out.WriteString(fmt.Sprintf(" Paragraph: %s\n", lsr.GetLatest().Paragraph)) for _, dep := range latest.GetDependencies() {
out.WriteString(fmt.Sprintf(" Website: %s\n", lsr.GetLatest().Website)) if dep.GetVersionConstraint() == "" {
out.WriteString(fmt.Sprintf(" Category: %s\n", lsr.GetLatest().Category)) deps = append(deps, dep.GetName())
out.WriteString(fmt.Sprintf(" Architecture: %s\n", strings.Join(lsr.GetLatest().Architectures, ", "))) } else {
out.WriteString(fmt.Sprintf(" Types: %s\n", strings.Join(lsr.GetLatest().Types, ", "))) deps = append(deps, dep.GetName()+" ("+dep.GetVersionConstraint()+")")
out.WriteString(fmt.Sprintf(" Versions: %s\n", strings.Replace(fmt.Sprint(versionsFromSearchedLibrary(lsr)), " ", ", ", -1))) }
}
out.WriteString(fmt.Sprintf(" Author: %s\n", latest.Author))
out.WriteString(fmt.Sprintf(" Maintainer: %s\n", latest.Maintainer))
out.WriteString(fmt.Sprintf(" Sentence: %s\n", latest.Sentence))
out.WriteString(fmt.Sprintf(" Paragraph: %s\n", latest.Paragraph))
out.WriteString(fmt.Sprintf(" Website: %s\n", latest.Website))
if latest.License != "" {
out.WriteString(fmt.Sprintf(" License: %s\n", latest.License))
}
out.WriteString(fmt.Sprintf(" Category: %s\n", latest.Category))
out.WriteString(fmt.Sprintf(" Architecture: %s\n", strings.Join(latest.Architectures, ", ")))
out.WriteString(fmt.Sprintf(" Types: %s\n", strings.Join(latest.Types, ", ")))
out.WriteString(fmt.Sprintf(" Versions: %s\n", strings.Replace(fmt.Sprint(versionsFromSearchedLibrary(lib)), " ", ", ", -1)))
if len(latest.ProvidesIncludes) > 0 {
out.WriteString(fmt.Sprintf(" Provides includes: %s\n", strings.Join(latest.ProvidesIncludes, ", ")))
}
if len(latest.Dependencies) > 0 {
out.WriteString(fmt.Sprintf(" Dependencies: %s\n", strings.Join(deps, ", ")))
}
} }
return fmt.Sprintf("%s", out.String()) return fmt.Sprintf("%s", out.String())
......
...@@ -23,6 +23,7 @@ import ( ...@@ -23,6 +23,7 @@ import (
"github.com/arduino/arduino-cli/arduino/libraries/librariesindex" "github.com/arduino/arduino-cli/arduino/libraries/librariesindex"
"github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/commands"
rpc "github.com/arduino/arduino-cli/rpc/commands" rpc "github.com/arduino/arduino-cli/rpc/commands"
semver "go.bug.st/relaxed-semver"
) )
// LibrarySearch FIXMEDOC // LibrarySearch FIXMEDOC
...@@ -60,15 +61,18 @@ func LibrarySearch(ctx context.Context, req *rpc.LibrarySearchReq) (*rpc.Library ...@@ -60,15 +61,18 @@ func LibrarySearch(ctx context.Context, req *rpc.LibrarySearchReq) (*rpc.Library
// GetLibraryParameters FIXMEDOC // GetLibraryParameters FIXMEDOC
func GetLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease { func GetLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease {
return &rpc.LibraryRelease{ return &rpc.LibraryRelease{
Author: rel.Author, Author: rel.Author,
Version: rel.Version.String(), Version: rel.Version.String(),
Maintainer: rel.Maintainer, Maintainer: rel.Maintainer,
Sentence: rel.Sentence, Sentence: rel.Sentence,
Paragraph: rel.Paragraph, Paragraph: rel.Paragraph,
Website: rel.Website, Website: rel.Website,
Category: rel.Category, Category: rel.Category,
Architectures: rel.Architectures, Architectures: rel.Architectures,
Types: rel.Types, Types: rel.Types,
License: rel.License,
ProvidesIncludes: rel.ProvidesIncludes,
Dependencies: getLibraryDependenciesParameter(rel.GetDependencies()),
Resources: &rpc.DownloadResource{ Resources: &rpc.DownloadResource{
Url: rel.Resource.URL, Url: rel.Resource.URL,
Archivefilename: rel.Resource.ArchiveFileName, Archivefilename: rel.Resource.ArchiveFileName,
...@@ -78,3 +82,14 @@ func GetLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease { ...@@ -78,3 +82,14 @@ func GetLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease {
}, },
} }
} }
func getLibraryDependenciesParameter(deps []semver.Dependency) []*rpc.LibraryDependency {
res := []*rpc.LibraryDependency{}
for _, dep := range deps {
res = append(res, &rpc.LibraryDependency{
Name: dep.GetName(),
VersionConstraint: dep.GetConstraint().String(),
})
}
return res
}
...@@ -743,19 +743,22 @@ func (m *SearchedLibrary) GetLatest() *LibraryRelease { ...@@ -743,19 +743,22 @@ func (m *SearchedLibrary) GetLatest() *LibraryRelease {
} }
type LibraryRelease struct { type LibraryRelease struct {
Author string `protobuf:"bytes,1,opt,name=author,proto3" json:"author,omitempty"` Author string `protobuf:"bytes,1,opt,name=author,proto3" json:"author,omitempty"`
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
Maintainer string `protobuf:"bytes,3,opt,name=maintainer,proto3" json:"maintainer,omitempty"` Maintainer string `protobuf:"bytes,3,opt,name=maintainer,proto3" json:"maintainer,omitempty"`
Sentence string `protobuf:"bytes,4,opt,name=sentence,proto3" json:"sentence,omitempty"` Sentence string `protobuf:"bytes,4,opt,name=sentence,proto3" json:"sentence,omitempty"`
Paragraph string `protobuf:"bytes,5,opt,name=paragraph,proto3" json:"paragraph,omitempty"` Paragraph string `protobuf:"bytes,5,opt,name=paragraph,proto3" json:"paragraph,omitempty"`
Website string `protobuf:"bytes,6,opt,name=website,proto3" json:"website,omitempty"` Website string `protobuf:"bytes,6,opt,name=website,proto3" json:"website,omitempty"`
Category string `protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"` Category string `protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"`
Architectures []string `protobuf:"bytes,8,rep,name=architectures,proto3" json:"architectures,omitempty"` Architectures []string `protobuf:"bytes,8,rep,name=architectures,proto3" json:"architectures,omitempty"`
Types []string `protobuf:"bytes,9,rep,name=types,proto3" json:"types,omitempty"` Types []string `protobuf:"bytes,9,rep,name=types,proto3" json:"types,omitempty"`
Resources *DownloadResource `protobuf:"bytes,10,opt,name=resources,proto3" json:"resources,omitempty"` Resources *DownloadResource `protobuf:"bytes,10,opt,name=resources,proto3" json:"resources,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` License string `protobuf:"bytes,11,opt,name=license,proto3" json:"license,omitempty"`
XXX_unrecognized []byte `json:"-"` ProvidesIncludes []string `protobuf:"bytes,12,rep,name=provides_includes,json=providesIncludes,proto3" json:"provides_includes,omitempty"`
XXX_sizecache int32 `json:"-"` Dependencies []*LibraryDependency `protobuf:"bytes,13,rep,name=dependencies,proto3" json:"dependencies,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *LibraryRelease) Reset() { *m = LibraryRelease{} } func (m *LibraryRelease) Reset() { *m = LibraryRelease{} }
...@@ -853,6 +856,74 @@ func (m *LibraryRelease) GetResources() *DownloadResource { ...@@ -853,6 +856,74 @@ func (m *LibraryRelease) GetResources() *DownloadResource {
return nil return nil
} }
func (m *LibraryRelease) GetLicense() string {
if m != nil {
return m.License
}
return ""
}
func (m *LibraryRelease) GetProvidesIncludes() []string {
if m != nil {
return m.ProvidesIncludes
}
return nil
}
func (m *LibraryRelease) GetDependencies() []*LibraryDependency {
if m != nil {
return m.Dependencies
}
return nil
}
type LibraryDependency struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
VersionConstraint string `protobuf:"bytes,2,opt,name=version_constraint,json=versionConstraint,proto3" json:"version_constraint,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *LibraryDependency) Reset() { *m = LibraryDependency{} }
func (m *LibraryDependency) String() string { return proto.CompactTextString(m) }
func (*LibraryDependency) ProtoMessage() {}
func (*LibraryDependency) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{15}
}
func (m *LibraryDependency) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LibraryDependency.Unmarshal(m, b)
}
func (m *LibraryDependency) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_LibraryDependency.Marshal(b, m, deterministic)
}
func (m *LibraryDependency) XXX_Merge(src proto.Message) {
xxx_messageInfo_LibraryDependency.Merge(m, src)
}
func (m *LibraryDependency) XXX_Size() int {
return xxx_messageInfo_LibraryDependency.Size(m)
}
func (m *LibraryDependency) XXX_DiscardUnknown() {
xxx_messageInfo_LibraryDependency.DiscardUnknown(m)
}
var xxx_messageInfo_LibraryDependency proto.InternalMessageInfo
func (m *LibraryDependency) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *LibraryDependency) GetVersionConstraint() string {
if m != nil {
return m.VersionConstraint
}
return ""
}
type DownloadResource struct { type DownloadResource struct {
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
Archivefilename string `protobuf:"bytes,2,opt,name=archivefilename,proto3" json:"archivefilename,omitempty"` Archivefilename string `protobuf:"bytes,2,opt,name=archivefilename,proto3" json:"archivefilename,omitempty"`
...@@ -868,7 +939,7 @@ func (m *DownloadResource) Reset() { *m = DownloadResource{} } ...@@ -868,7 +939,7 @@ func (m *DownloadResource) Reset() { *m = DownloadResource{} }
func (m *DownloadResource) String() string { return proto.CompactTextString(m) } func (m *DownloadResource) String() string { return proto.CompactTextString(m) }
func (*DownloadResource) ProtoMessage() {} func (*DownloadResource) ProtoMessage() {}
func (*DownloadResource) Descriptor() ([]byte, []int) { func (*DownloadResource) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{15} return fileDescriptor_9feed0d29806df6c, []int{16}
} }
func (m *DownloadResource) XXX_Unmarshal(b []byte) error { func (m *DownloadResource) XXX_Unmarshal(b []byte) error {
...@@ -937,7 +1008,7 @@ func (m *LibraryListReq) Reset() { *m = LibraryListReq{} } ...@@ -937,7 +1008,7 @@ func (m *LibraryListReq) Reset() { *m = LibraryListReq{} }
func (m *LibraryListReq) String() string { return proto.CompactTextString(m) } func (m *LibraryListReq) String() string { return proto.CompactTextString(m) }
func (*LibraryListReq) ProtoMessage() {} func (*LibraryListReq) ProtoMessage() {}
func (*LibraryListReq) Descriptor() ([]byte, []int) { func (*LibraryListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{16} return fileDescriptor_9feed0d29806df6c, []int{17}
} }
func (m *LibraryListReq) XXX_Unmarshal(b []byte) error { func (m *LibraryListReq) XXX_Unmarshal(b []byte) error {
...@@ -990,7 +1061,7 @@ func (m *LibraryListResp) Reset() { *m = LibraryListResp{} } ...@@ -990,7 +1061,7 @@ func (m *LibraryListResp) Reset() { *m = LibraryListResp{} }
func (m *LibraryListResp) String() string { return proto.CompactTextString(m) } func (m *LibraryListResp) String() string { return proto.CompactTextString(m) }
func (*LibraryListResp) ProtoMessage() {} func (*LibraryListResp) ProtoMessage() {}
func (*LibraryListResp) Descriptor() ([]byte, []int) { func (*LibraryListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{17} return fileDescriptor_9feed0d29806df6c, []int{18}
} }
func (m *LibraryListResp) XXX_Unmarshal(b []byte) error { func (m *LibraryListResp) XXX_Unmarshal(b []byte) error {
...@@ -1030,7 +1101,7 @@ func (m *InstalledLibrary) Reset() { *m = InstalledLibrary{} } ...@@ -1030,7 +1101,7 @@ func (m *InstalledLibrary) Reset() { *m = InstalledLibrary{} }
func (m *InstalledLibrary) String() string { return proto.CompactTextString(m) } func (m *InstalledLibrary) String() string { return proto.CompactTextString(m) }
func (*InstalledLibrary) ProtoMessage() {} func (*InstalledLibrary) ProtoMessage() {}
func (*InstalledLibrary) Descriptor() ([]byte, []int) { func (*InstalledLibrary) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{18} return fileDescriptor_9feed0d29806df6c, []int{19}
} }
func (m *InstalledLibrary) XXX_Unmarshal(b []byte) error { func (m *InstalledLibrary) XXX_Unmarshal(b []byte) error {
...@@ -1098,7 +1169,7 @@ func (m *Library) Reset() { *m = Library{} } ...@@ -1098,7 +1169,7 @@ func (m *Library) Reset() { *m = Library{} }
func (m *Library) String() string { return proto.CompactTextString(m) } func (m *Library) String() string { return proto.CompactTextString(m) }
func (*Library) ProtoMessage() {} func (*Library) ProtoMessage() {}
func (*Library) Descriptor() ([]byte, []int) { func (*Library) Descriptor() ([]byte, []int) {
return fileDescriptor_9feed0d29806df6c, []int{19} return fileDescriptor_9feed0d29806df6c, []int{20}
} }
func (m *Library) XXX_Unmarshal(b []byte) error { func (m *Library) XXX_Unmarshal(b []byte) error {
...@@ -1299,6 +1370,7 @@ func init() { ...@@ -1299,6 +1370,7 @@ func init() {
proto.RegisterType((*SearchedLibrary)(nil), "cc.arduino.cli.commands.SearchedLibrary") proto.RegisterType((*SearchedLibrary)(nil), "cc.arduino.cli.commands.SearchedLibrary")
proto.RegisterMapType((map[string]*LibraryRelease)(nil), "cc.arduino.cli.commands.SearchedLibrary.ReleasesEntry") proto.RegisterMapType((map[string]*LibraryRelease)(nil), "cc.arduino.cli.commands.SearchedLibrary.ReleasesEntry")
proto.RegisterType((*LibraryRelease)(nil), "cc.arduino.cli.commands.LibraryRelease") proto.RegisterType((*LibraryRelease)(nil), "cc.arduino.cli.commands.LibraryRelease")
proto.RegisterType((*LibraryDependency)(nil), "cc.arduino.cli.commands.LibraryDependency")
proto.RegisterType((*DownloadResource)(nil), "cc.arduino.cli.commands.DownloadResource") proto.RegisterType((*DownloadResource)(nil), "cc.arduino.cli.commands.DownloadResource")
proto.RegisterType((*LibraryListReq)(nil), "cc.arduino.cli.commands.LibraryListReq") proto.RegisterType((*LibraryListReq)(nil), "cc.arduino.cli.commands.LibraryListReq")
proto.RegisterType((*LibraryListResp)(nil), "cc.arduino.cli.commands.LibraryListResp") proto.RegisterType((*LibraryListResp)(nil), "cc.arduino.cli.commands.LibraryListResp")
...@@ -1310,80 +1382,84 @@ func init() { ...@@ -1310,80 +1382,84 @@ func init() {
func init() { proto.RegisterFile("commands/lib.proto", fileDescriptor_9feed0d29806df6c) } func init() { proto.RegisterFile("commands/lib.proto", fileDescriptor_9feed0d29806df6c) }
var fileDescriptor_9feed0d29806df6c = []byte{ var fileDescriptor_9feed0d29806df6c = []byte{
// 1191 bytes of a gzipped FileDescriptorProto // 1261 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0xdf, 0x6f, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0xdd, 0x6f, 0x1b, 0x45,
0x13, 0xff, 0x9e, 0xdd, 0x26, 0xf6, 0xb8, 0xae, 0x9d, 0x6d, 0xda, 0xde, 0x37, 0xa5, 0xad, 0x39, 0x10, 0xe7, 0xec, 0x36, 0xb1, 0xc7, 0x71, 0xed, 0x6c, 0xd3, 0xf6, 0x48, 0x69, 0x1b, 0x4e, 0x20,
0x81, 0x70, 0x8b, 0xea, 0xa0, 0x22, 0x55, 0xa8, 0x52, 0x85, 0x8a, 0xd2, 0x22, 0x50, 0x84, 0xa2, 0xd2, 0x54, 0x75, 0x50, 0x91, 0x2a, 0x54, 0xa9, 0x42, 0x85, 0xb6, 0xa8, 0x28, 0xaa, 0xa2, 0xeb,
0x6b, 0xcb, 0x03, 0x20, 0x9d, 0xd6, 0x77, 0x13, 0x7b, 0xe5, 0xf5, 0xdd, 0x65, 0x77, 0xcf, 0x95, 0xc7, 0x03, 0x20, 0x9d, 0xd6, 0x77, 0x13, 0x7b, 0xe5, 0xf5, 0xed, 0x75, 0x77, 0xcf, 0x95, 0x79,
0x79, 0xe1, 0xd7, 0x2b, 0x2f, 0xbc, 0xf3, 0xc0, 0x0b, 0x42, 0xe2, 0x1f, 0xe2, 0xdf, 0x41, 0x7b, 0xe1, 0xeb, 0x95, 0x17, 0xde, 0x79, 0xe0, 0x05, 0x21, 0xf1, 0xc7, 0xf1, 0x37, 0xa0, 0xbd, 0xdd,
0xbb, 0x77, 0x3e, 0x3b, 0x71, 0x1a, 0x50, 0x54, 0x10, 0x4f, 0xb9, 0xf9, 0xcc, 0xce, 0xcc, 0x67, 0x3b, 0x7f, 0x24, 0x69, 0x03, 0x8a, 0x0a, 0xe2, 0x29, 0x37, 0x33, 0x3b, 0x33, 0xbf, 0x9d, 0x8f,
0x66, 0x76, 0x66, 0x63, 0x20, 0x61, 0x32, 0x9d, 0xd2, 0x38, 0x92, 0xbb, 0x9c, 0x0d, 0x07, 0xa9, 0xdf, 0x3a, 0x40, 0x62, 0x31, 0x1e, 0xd3, 0x34, 0x51, 0xbb, 0x9c, 0xf5, 0x7b, 0x99, 0x14, 0x5a,
0x48, 0x54, 0x42, 0xae, 0x87, 0xe1, 0x80, 0x8a, 0x28, 0x63, 0x71, 0x32, 0x08, 0x39, 0x1b, 0x14, 0x90, 0x4b, 0x71, 0xdc, 0xa3, 0x32, 0xc9, 0x59, 0x2a, 0x7a, 0x31, 0x67, 0xbd, 0xf2, 0xc8, 0xe6,
0x47, 0x76, 0xae, 0x96, 0x87, 0xf5, 0x47, 0x12, 0x9b, 0xf3, 0xde, 0x77, 0x0e, 0x90, 0x7d, 0x36, 0x85, 0xea, 0xb0, 0xf9, 0x10, 0xa9, 0x3d, 0x1f, 0x7c, 0xef, 0x01, 0xd9, 0x63, 0x7d, 0x49, 0xe5,
0x14, 0x54, 0xcc, 0xf7, 0x92, 0x97, 0x31, 0x4f, 0x68, 0xe4, 0xe3, 0x11, 0x79, 0x04, 0x0d, 0x16, 0xf4, 0xbe, 0x78, 0x99, 0x72, 0x41, 0x93, 0x10, 0x5f, 0x90, 0xbb, 0xd0, 0x60, 0xa9, 0xd2, 0x34,
0x4b, 0x45, 0xe3, 0x10, 0x5d, 0xa7, 0xe7, 0xf4, 0x5b, 0xf7, 0xdf, 0x1c, 0xac, 0xf1, 0x3c, 0xf8, 0x8d, 0xd1, 0xf7, 0xb6, 0xbc, 0xed, 0xd6, 0xad, 0x77, 0x7b, 0xc7, 0x44, 0xee, 0x3d, 0x72, 0x07,
0xc4, 0x1e, 0xf4, 0x4b, 0x13, 0x42, 0xe0, 0x42, 0x4c, 0xa7, 0xe8, 0xd6, 0x7a, 0x4e, 0xbf, 0xe9, 0xc3, 0xca, 0x85, 0x10, 0x38, 0x93, 0xd2, 0x31, 0xfa, 0xb5, 0x2d, 0x6f, 0xbb, 0x19, 0x16, 0xdf,
0xe7, 0xdf, 0xc4, 0x85, 0xcd, 0x19, 0x0a, 0xc9, 0x92, 0xd8, 0xad, 0xe7, 0x70, 0x21, 0x7a, 0x5f, 0xc4, 0x87, 0xd5, 0x09, 0x4a, 0xc5, 0x44, 0xea, 0xd7, 0x0b, 0x75, 0x29, 0x06, 0x5f, 0xc3, 0xf9,
0xc1, 0x95, 0x63, 0x14, 0x64, 0x4a, 0x9e, 0x40, 0x23, 0x15, 0xc9, 0x48, 0xa0, 0x94, 0x96, 0xc3, 0x43, 0x10, 0x54, 0x46, 0x1e, 0x40, 0x23, 0x93, 0x62, 0x20, 0x51, 0x29, 0x87, 0xe1, 0xfa, 0xb1,
0x9d, 0xb5, 0x1c, 0x0a, 0xc3, 0x03, 0x6b, 0xe0, 0x97, 0xa6, 0xde, 0xb7, 0x0e, 0x6c, 0x59, 0xf7, 0x18, 0x4a, 0xc7, 0x7d, 0xe7, 0x10, 0x56, 0xae, 0xc1, 0x77, 0x1e, 0xac, 0xbb, 0xf0, 0x05, 0x52,
0x39, 0x53, 0xce, 0x5f, 0x7b, 0x82, 0xbf, 0x2d, 0x8a, 0x5c, 0x52, 0x38, 0xb7, 0x04, 0xc9, 0xa7, 0xce, 0xdf, 0xf8, 0x05, 0x7f, 0x9f, 0x15, 0xb9, 0x82, 0x70, 0x6a, 0x17, 0x24, 0x5f, 0x40, 0x5b,
0xd0, 0x56, 0x54, 0x4e, 0x82, 0xd2, 0x57, 0x2d, 0xf7, 0xf5, 0xf6, 0x5a, 0x5f, 0xcf, 0xa9, 0x9c, 0x53, 0x35, 0x8a, 0xaa, 0x58, 0xb5, 0x22, 0xd6, 0xfb, 0xc7, 0xc6, 0x7a, 0x4a, 0xd5, 0xa8, 0x8a,
0x94, 0x7e, 0x2e, 0xa9, 0x8a, 0xe4, 0x7d, 0xef, 0x94, 0xbd, 0x78, 0x11, 0xb3, 0x7f, 0xa8, 0x5c, 0xb3, 0xa6, 0xe7, 0xa4, 0xe0, 0x07, 0xaf, 0xea, 0xc5, 0xb3, 0x94, 0xfd, 0x4b, 0xe5, 0xea, 0xc3,
0x43, 0xd8, 0x3e, 0xce, 0x41, 0xa6, 0xc7, 0x13, 0x75, 0xfe, 0x7e, 0xa2, 0x2f, 0x16, 0x31, 0xd2, 0xc6, 0x61, 0x0c, 0x2a, 0x3b, 0x7c, 0x51, 0xef, 0x9f, 0x5f, 0xf4, 0xd9, 0x2c, 0x47, 0x36, 0x90,
0x91, 0xa0, 0x11, 0x3e, 0x3e, 0x8f, 0x44, 0xbd, 0xdf, 0x1d, 0xb8, 0x7a, 0x82, 0xdf, 0x7f, 0x67, 0x34, 0xc1, 0x7b, 0xa7, 0x71, 0xd1, 0xe0, 0x0f, 0x0f, 0x2e, 0x1c, 0x11, 0xf7, 0xbf, 0xd9, 0xec,
0xb3, 0x7f, 0x74, 0xe0, 0xa6, 0x25, 0xeb, 0xa3, 0x4c, 0xf8, 0x0c, 0xf7, 0x30, 0xc5, 0x38, 0xc2, 0x9f, 0x3c, 0xb8, 0xe2, 0xc0, 0x86, 0xa8, 0x04, 0x9f, 0xe0, 0x7d, 0xcc, 0x30, 0x4d, 0x30, 0x8d,
0x38, 0x64, 0x28, 0x5f, 0x7b, 0xdb, 0x67, 0x70, 0xeb, 0x34, 0x36, 0x32, 0x25, 0xcf, 0xe1, 0x52, 0x19, 0xaa, 0x37, 0xde, 0xf6, 0x09, 0x5c, 0x7d, 0x15, 0x1a, 0x95, 0x91, 0xa7, 0xb0, 0x96, 0xcc,
0x54, 0xc1, 0x5c, 0xa7, 0x57, 0xef, 0xb7, 0xee, 0xbf, 0xb7, 0x96, 0x52, 0xb1, 0x55, 0x0a, 0x9b, 0xe9, 0x7c, 0x6f, 0xab, 0xbe, 0xdd, 0xba, 0xf5, 0xe1, 0xb1, 0x90, 0x4a, 0x56, 0x29, 0x7d, 0xa6,
0xf9, 0x33, 0x45, 0x55, 0x26, 0xfd, 0x25, 0x2f, 0xde, 0x0f, 0x0e, 0x5c, 0x5f, 0x73, 0xb2, 0xcc, 0x4f, 0x34, 0xd5, 0xb9, 0x0a, 0x17, 0xa2, 0x04, 0x3f, 0x7a, 0x70, 0xe9, 0x98, 0x93, 0xd5, 0x0d,
0xc0, 0xa9, 0x64, 0xd0, 0x87, 0x8e, 0xa5, 0xec, 0xe3, 0x51, 0xc6, 0x04, 0x46, 0x36, 0xc1, 0x55, 0xbc, 0xb9, 0x1b, 0x6c, 0x43, 0xc7, 0x41, 0x0e, 0xf1, 0x45, 0xce, 0x24, 0x26, 0xee, 0x82, 0xcb,
0x98, 0xdc, 0x85, 0xae, 0x85, 0xec, 0xd8, 0x63, 0x64, 0x93, 0x3e, 0x86, 0x7b, 0x23, 0xe8, 0x5a, 0x6a, 0xb2, 0x03, 0x5d, 0xa7, 0x72, 0x6b, 0x8f, 0x89, 0xbb, 0xf4, 0x21, 0x7d, 0x30, 0x80, 0xae,
0x12, 0xcf, 0x90, 0x8a, 0x70, 0x7c, 0x0e, 0xe5, 0xdf, 0x86, 0x8b, 0x47, 0x19, 0x8a, 0xb9, 0xa5, 0x03, 0xf1, 0x04, 0xa9, 0x8c, 0x87, 0xa7, 0x50, 0xfe, 0x0d, 0x38, 0xfb, 0x22, 0x47, 0x39, 0x75,
0x67, 0x04, 0xef, 0xcb, 0x72, 0x1d, 0x16, 0x81, 0x64, 0x4a, 0x9e, 0x42, 0x93, 0xe7, 0xe0, 0xa2, 0xf0, 0xac, 0x10, 0x7c, 0x55, 0xd1, 0x61, 0x99, 0x48, 0x65, 0xe4, 0x21, 0x34, 0x79, 0xa1, 0x9c,
0xac, 0xfd, 0xb5, 0xa1, 0x8c, 0x1d, 0x46, 0x45, 0xb7, 0x16, 0xa6, 0xde, 0x2f, 0x35, 0xe8, 0xac, 0x95, 0x75, 0xfb, 0xd8, 0x54, 0xd6, 0x0f, 0x93, 0xb2, 0x5b, 0x33, 0xd7, 0xe0, 0xd7, 0x1a, 0x74,
0xa8, 0x4f, 0xac, 0xa1, 0x0f, 0x0d, 0x81, 0x1c, 0xa9, 0x44, 0x7d, 0x83, 0x75, 0xb8, 0x07, 0x67, 0x96, 0xcc, 0x47, 0xd6, 0x30, 0x84, 0x86, 0x44, 0x8e, 0x54, 0xa1, 0x99, 0x60, 0x93, 0xee, 0xf6,
0x0d, 0x37, 0xf0, 0xad, 0xe1, 0x93, 0x58, 0x89, 0xb9, 0x5f, 0xfa, 0x21, 0x1f, 0xc2, 0x06, 0xa7, 0x49, 0xd3, 0xf5, 0x42, 0xe7, 0xf8, 0x20, 0xd5, 0x72, 0x1a, 0x56, 0x71, 0xc8, 0x27, 0xb0, 0xc2,
0x0a, 0xa5, 0xca, 0x6b, 0xdc, 0xba, 0xff, 0xce, 0xab, 0xee, 0x85, 0x75, 0xe4, 0x5b, 0xb3, 0x9d, 0xa9, 0x46, 0xa5, 0x8b, 0x1a, 0xb7, 0x6e, 0x7d, 0xf0, 0xba, 0xb9, 0x70, 0x81, 0x42, 0xe7, 0xb6,
0x08, 0xda, 0x4b, 0xbe, 0x49, 0x17, 0xea, 0x13, 0x9c, 0x5b, 0xe2, 0xfa, 0x93, 0x3c, 0x82, 0x8b, 0x99, 0x40, 0x7b, 0x21, 0x36, 0xe9, 0x42, 0x7d, 0x84, 0x53, 0x07, 0xdc, 0x7c, 0x92, 0xbb, 0x70,
0x33, 0xca, 0x33, 0xb4, 0x63, 0x77, 0xe6, 0x10, 0xc6, 0xea, 0x61, 0xed, 0x03, 0xc7, 0xfb, 0xa3, 0x76, 0x42, 0x79, 0x8e, 0x6e, 0xed, 0x4e, 0x9c, 0xc2, 0x7a, 0xdd, 0xa9, 0x7d, 0xec, 0x05, 0x7f,
0x06, 0x97, 0x97, 0xb5, 0xe4, 0x1a, 0x6c, 0xd0, 0x4c, 0x8d, 0x13, 0x61, 0x43, 0x59, 0xa9, 0x3a, 0xd6, 0xe1, 0xdc, 0xa2, 0x95, 0x5c, 0x84, 0x15, 0x9a, 0xeb, 0xa1, 0x90, 0x2e, 0x95, 0x93, 0xe6,
0x2b, 0xb5, 0xa5, 0x59, 0x21, 0xb7, 0x00, 0xa6, 0x94, 0xc5, 0x8a, 0xb2, 0x18, 0x85, 0xbd, 0x53, 0x77, 0xa5, 0xb6, 0xb0, 0x2b, 0xe4, 0x2a, 0xc0, 0x98, 0xb2, 0x54, 0x53, 0x96, 0xa2, 0x74, 0x33,
0x15, 0x84, 0xec, 0x40, 0x43, 0x62, 0xac, 0x50, 0xdf, 0x9c, 0x0b, 0xb9, 0xb6, 0x94, 0xc9, 0x1b, 0x35, 0xa7, 0x21, 0x9b, 0xd0, 0x50, 0x98, 0x6a, 0x34, 0x93, 0x73, 0xa6, 0xb0, 0x56, 0x32, 0x79,
0xd0, 0x4c, 0xa9, 0xa0, 0x23, 0x41, 0xd3, 0xb1, 0x7b, 0x31, 0x57, 0x2e, 0x00, 0x1d, 0xf3, 0x25, 0x07, 0x9a, 0x19, 0x95, 0x74, 0x20, 0x69, 0x36, 0xf4, 0xcf, 0x16, 0xc6, 0x99, 0xc2, 0xe4, 0x7c,
0x0e, 0x25, 0x53, 0xe8, 0x6e, 0x98, 0x98, 0x56, 0xd4, 0x3e, 0x43, 0xaa, 0x70, 0x94, 0x88, 0xb9, 0x89, 0x7d, 0xc5, 0x34, 0xfa, 0x2b, 0x36, 0xa7, 0x13, 0x4d, 0xcc, 0x98, 0x6a, 0x1c, 0x08, 0x39,
0xbb, 0x69, 0x7c, 0x16, 0x32, 0x79, 0x0b, 0xda, 0xba, 0x49, 0x4c, 0x61, 0xa8, 0x32, 0x81, 0xd2, 0xf5, 0x57, 0x6d, 0xcc, 0x52, 0x26, 0xef, 0x41, 0xdb, 0x34, 0x89, 0x69, 0x8c, 0x75, 0x2e, 0x51,
0x6d, 0xf4, 0xea, 0xfd, 0xa6, 0xbf, 0x0c, 0xea, 0x0b, 0xa9, 0xe6, 0x29, 0x4a, 0xb7, 0x99, 0x6b, 0xf9, 0x8d, 0xad, 0xfa, 0x76, 0x33, 0x5c, 0x54, 0x9a, 0x81, 0xd4, 0xd3, 0x0c, 0x95, 0xdf, 0x2c,
0x8d, 0x40, 0x3e, 0x86, 0xa6, 0x40, 0x99, 0x64, 0x22, 0x44, 0xe9, 0xc2, 0x19, 0x57, 0xa3, 0x6f, 0xac, 0x56, 0x20, 0x9f, 0x43, 0x53, 0xa2, 0x12, 0xb9, 0x8c, 0x51, 0xf9, 0x70, 0x42, 0x6a, 0x0c,
0x2d, 0xfc, 0x85, 0xad, 0xf7, 0xb3, 0x03, 0xdd, 0x55, 0xbd, 0xee, 0x61, 0x26, 0x78, 0xd1, 0xc3, 0x9d, 0x47, 0x38, 0xf3, 0x35, 0xd0, 0x39, 0x8b, 0x31, 0x55, 0xe8, 0xb7, 0x2c, 0x74, 0x27, 0x92,
0x4c, 0x70, 0x3d, 0xbf, 0x39, 0xad, 0x19, 0x1e, 0x32, 0x8e, 0x95, 0x05, 0xb5, 0x0a, 0xe7, 0x19, 0x1b, 0xb0, 0x9e, 0x49, 0x31, 0x61, 0x09, 0xaa, 0x88, 0xa5, 0x31, 0xcf, 0x13, 0x54, 0xfe, 0x5a,
0x8f, 0x31, 0x9c, 0xc8, 0x6c, 0x6a, 0x6b, 0x5c, 0xca, 0xfa, 0x56, 0x4b, 0xf6, 0xb5, 0xa9, 0x6e, 0x01, 0xa2, 0x5b, 0x1a, 0x1e, 0x39, 0x3d, 0x79, 0xbc, 0xc4, 0x32, 0xed, 0x62, 0x3e, 0x77, 0x4e,
0xdd, 0xcf, 0xbf, 0x75, 0x65, 0x43, 0x1a, 0x8e, 0x31, 0xa5, 0xaa, 0xac, 0x6c, 0x09, 0x78, 0xdf, 0xce, 0x32, 0x4b, 0xfc, 0xf2, 0xbc, 0x5a, 0xb8, 0xd9, 0x91, 0x23, 0x97, 0xe2, 0x26, 0x10, 0xd7,
0x94, 0x7d, 0xdf, 0x67, 0x52, 0x9d, 0xc3, 0x7c, 0x77, 0xa1, 0x4e, 0x39, 0xcf, 0xc9, 0x37, 0x7c, 0xdf, 0x28, 0x16, 0xa9, 0xd2, 0xd2, 0xf4, 0xd3, 0x75, 0x7e, 0xdd, 0x59, 0x3e, 0xab, 0x0c, 0xc1,
0xfd, 0xa9, 0x09, 0x64, 0x69, 0x44, 0x15, 0x1d, 0x72, 0xcc, 0x19, 0x37, 0xfc, 0x05, 0xe0, 0x31, 0x2f, 0x1e, 0x74, 0x97, 0xcb, 0x61, 0x46, 0x36, 0x97, 0xbc, 0x1c, 0xd9, 0x5c, 0x72, 0x43, 0x57,
0xe8, 0x2c, 0x11, 0x90, 0x29, 0xf9, 0x1c, 0xb6, 0x58, 0xb1, 0x82, 0x02, 0x33, 0xc6, 0x73, 0x3b, 0x45, 0x17, 0x26, 0x78, 0xc0, 0x38, 0xce, 0xf1, 0xf1, 0xb2, 0xba, 0x68, 0xf0, 0x10, 0xe3, 0x91,
0xff, 0x77, 0x4e, 0xa7, 0xa2, 0x2d, 0x8a, 0x6b, 0xdc, 0x65, 0x2b, 0x88, 0xf7, 0x93, 0x03, 0xdd, 0xca, 0xc7, 0x6e, 0xa4, 0x2a, 0xd9, 0xe0, 0x55, 0xec, 0x1b, 0x3b, 0x4c, 0xf5, 0xb0, 0xf8, 0x36,
0xd5, 0x63, 0xe4, 0x21, 0x6c, 0x2e, 0x42, 0xe8, 0x6c, 0x7b, 0xaf, 0x1c, 0x9f, 0xc2, 0x80, 0x3c, 0x83, 0x14, 0xd3, 0x78, 0x88, 0x19, 0xd5, 0xd5, 0x20, 0x55, 0x8a, 0xe0, 0xdb, 0x6a, 0xcc, 0xf7,
0x86, 0x4d, 0x3b, 0xe8, 0x7f, 0x75, 0xf4, 0x0a, 0x3b, 0xef, 0xd7, 0x0d, 0xd8, 0x3c, 0x6d, 0x27, 0x98, 0xd2, 0xa7, 0x40, 0x67, 0x5d, 0xa8, 0x53, 0xce, 0x0b, 0xf0, 0x8d, 0xd0, 0x7c, 0x1a, 0x00,
0x2d, 0xa6, 0xb0, 0xb6, 0x34, 0x85, 0xff, 0xa5, 0x59, 0xbb, 0x0d, 0x2d, 0xdb, 0xab, 0x20, 0x62, 0x79, 0x96, 0x50, 0x4d, 0xfb, 0x1c, 0x0b, 0xc4, 0x8d, 0x70, 0xa6, 0x08, 0x18, 0x74, 0x16, 0x00,
0x22, 0x9f, 0xb6, 0xa6, 0x0f, 0x16, 0xda, 0x63, 0x82, 0xdc, 0x04, 0x30, 0x83, 0x93, 0xeb, 0x5b, 0xa8, 0x8c, 0x3c, 0x87, 0x75, 0x56, 0x32, 0x6e, 0x64, 0x59, 0x6b, 0xea, 0xe8, 0xee, 0xfa, 0xab,
0x86, 0xb1, 0x41, 0xb4, 0xfa, 0x36, 0xb4, 0x32, 0xc5, 0x38, 0x53, 0xf3, 0x5c, 0x7f, 0xc9, 0xd8, 0xa1, 0x18, 0x8f, 0x72, 0x6b, 0xbb, 0x6c, 0x49, 0x13, 0xfc, 0xec, 0x41, 0x77, 0xf9, 0x18, 0xb9,
0x5b, 0x48, 0x1f, 0xd8, 0x81, 0x06, 0x4f, 0x42, 0xaa, 0xf4, 0xce, 0x6a, 0x1b, 0xe2, 0x85, 0x4c, 0x63, 0xc6, 0xb1, 0x4c, 0x61, 0x6e, 0xbb, 0xf5, 0x5a, 0xb6, 0x28, 0x1d, 0xc8, 0x3d, 0x58, 0x75,
0xee, 0xe9, 0x5f, 0x2c, 0xb6, 0x6a, 0x41, 0xca, 0xa9, 0x3a, 0x4c, 0xc4, 0xd4, 0xbd, 0x9c, 0x9f, 0xbc, 0xf6, 0x77, 0x99, 0xa6, 0xf4, 0x0b, 0x7e, 0x5b, 0x81, 0xd5, 0x57, 0x51, 0xf0, 0x8c, 0x74,
0xda, 0x2a, 0x35, 0x07, 0x56, 0xa1, 0xfb, 0xc1, 0xe9, 0x3c, 0xc9, 0x94, 0xdb, 0x31, 0xfd, 0x30, 0x6a, 0x0b, 0xa4, 0xf3, 0x7f, 0xa2, 0x96, 0x6b, 0xd0, 0x72, 0xbd, 0x8a, 0x12, 0x26, 0x0b, 0x72,
0x12, 0xb9, 0xa1, 0xf7, 0x05, 0xe5, 0x41, 0xde, 0xc0, 0xae, 0x89, 0xa1, 0x81, 0xcf, 0x74, 0x13, 0x69, 0x86, 0xe0, 0x54, 0xf7, 0x99, 0x24, 0x57, 0x00, 0xec, 0xe2, 0x14, 0x76, 0xcb, 0x1a, 0x4d,
0x3d, 0x68, 0x47, 0x89, 0x0a, 0x68, 0xc0, 0x59, 0x3c, 0xa1, 0x23, 0x74, 0xb7, 0xf2, 0x29, 0x68, 0xab, 0x31, 0xe6, 0x6b, 0xd0, 0xca, 0x35, 0xe3, 0x4c, 0x4f, 0x0b, 0xfb, 0x9a, 0xf5, 0x77, 0x2a,
0x45, 0x89, 0x7a, 0xbc, 0x6f, 0x20, 0xd2, 0x83, 0x56, 0x2a, 0x30, 0x4c, 0xa6, 0x29, 0xd3, 0x2f, 0x73, 0x60, 0x13, 0x1a, 0x5c, 0xc4, 0x54, 0x1b, 0x8a, 0x6e, 0x5b, 0xe0, 0xa5, 0x6c, 0xd6, 0x39,
0x32, 0x31, 0x27, 0x2a, 0x10, 0xf9, 0x3f, 0x34, 0x78, 0x14, 0x1c, 0x72, 0x3a, 0x92, 0xee, 0x15, 0x16, 0xae, 0x6a, 0x51, 0xc6, 0xa9, 0x3e, 0x10, 0x72, 0xec, 0x9f, 0xb3, 0xeb, 0x5c, 0x59, 0xf6,
0xd3, 0x19, 0x1e, 0x3d, 0xd5, 0xa2, 0x8e, 0xce, 0x64, 0xc0, 0x71, 0x44, 0xc3, 0xb9, 0xbb, 0x9d, 0x9d, 0xc1, 0xf4, 0x83, 0xd3, 0xa9, 0xc8, 0xb5, 0xdf, 0xb1, 0xfd, 0xb0, 0x12, 0xb9, 0x6c, 0xe8,
0x9b, 0x36, 0x98, 0xdc, 0xcf, 0xe5, 0xea, 0xc2, 0xbe, 0xba, 0xbc, 0xb0, 0x5d, 0x7d, 0xf7, 0x43, 0x91, 0xf2, 0xa8, 0x68, 0x60, 0xd7, 0xe6, 0x30, 0x8a, 0xc7, 0xa6, 0x89, 0x01, 0xb4, 0x13, 0xa1,
0x8c, 0x25, 0xba, 0xd7, 0xac, 0x43, 0x23, 0x92, 0x03, 0x80, 0x54, 0x24, 0x29, 0x0a, 0xa5, 0xdf, 0x23, 0x1a, 0x71, 0x96, 0x8e, 0xe8, 0x00, 0xfd, 0xf5, 0x62, 0x0b, 0x5a, 0x89, 0xd0, 0xf7, 0xf6,
0xde, 0xeb, 0x67, 0xfb, 0x97, 0x66, 0x70, 0x50, 0x9a, 0x98, 0x67, 0xb0, 0xe2, 0x63, 0xe7, 0x11, 0xac, 0x8a, 0x6c, 0x41, 0x2b, 0x93, 0x18, 0x8b, 0x71, 0xc6, 0xcc, 0x0f, 0x10, 0x62, 0x4f, 0xcc,
0x74, 0x56, 0xd4, 0x27, 0xbc, 0x64, 0xdb, 0xd5, 0x97, 0xac, 0x59, 0x79, 0xa0, 0xee, 0x3e, 0x80, 0xa9, 0xc8, 0xdb, 0xd0, 0xe0, 0x49, 0x74, 0xc0, 0xe9, 0x40, 0xf9, 0xe7, 0x1d, 0x73, 0x26, 0x0f,
0x76, 0xb1, 0x26, 0x4c, 0xc1, 0x3b, 0xd0, 0x3a, 0xe4, 0x54, 0x05, 0xa6, 0xfe, 0xdd, 0xff, 0x91, 0x8d, 0x68, 0xb2, 0x33, 0x15, 0x71, 0x1c, 0xd0, 0x78, 0xea, 0x6f, 0x14, 0xae, 0x0d, 0xa6, 0xf6,
0x6d, 0xe8, 0x0a, 0x0c, 0x33, 0x21, 0xd9, 0x0c, 0x0b, 0xd4, 0xb9, 0x5b, 0x59, 0x2f, 0x45, 0xc7, 0x0a, 0x79, 0xfe, 0x7d, 0xba, 0xb0, 0xf8, 0x3e, 0xcd, 0x51, 0xf1, 0xc5, 0x45, 0x2a, 0xde, 0x07,
0x3b, 0xd0, 0x62, 0x11, 0x06, 0xc3, 0x8c, 0x71, 0xc5, 0x62, 0x63, 0x59, 0x34, 0xbe, 0x44, 0x1d, 0xc8, 0xa4, 0xc8, 0x50, 0x6a, 0xc3, 0xad, 0x97, 0x4e, 0xf6, 0x0b, 0xae, 0xb7, 0x5f, 0xb9, 0xd8,
0x72, 0x1b, 0x6e, 0x08, 0x3c, 0x44, 0xa1, 0x47, 0x26, 0x0a, 0x8e, 0x1d, 0xa8, 0x91, 0xcb, 0x00, 0x57, 0x7f, 0x2e, 0xc6, 0xe6, 0x5d, 0xe8, 0x2c, 0x99, 0x8f, 0x78, 0xb8, 0x37, 0xe6, 0x1f, 0xee,
0x72, 0x82, 0x2a, 0x1c, 0x0f, 0x93, 0x64, 0xd2, 0xad, 0x7f, 0x74, 0xef, 0x8b, 0x77, 0x47, 0x4c, 0xe6, 0xdc, 0x7b, 0xbc, 0x73, 0x1b, 0xda, 0x25, 0x4d, 0xd8, 0x82, 0x77, 0xa0, 0x75, 0xc0, 0xa9,
0x8d, 0xb3, 0xa1, 0x2e, 0xcc, 0xae, 0x2d, 0x54, 0xf1, 0xf7, 0x5e, 0xc8, 0xd9, 0xae, 0x48, 0xc3, 0x8e, 0x6c, 0xfd, 0xbb, 0x6f, 0x91, 0x0d, 0xe8, 0x4a, 0x8c, 0x73, 0xa9, 0xd8, 0x04, 0x4b, 0xad,
0xdd, 0xa2, 0x68, 0xc3, 0x8d, 0xfc, 0xb7, 0xee, 0xfb, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x26, 0xb7, 0x33, 0x47, 0x2f, 0x65, 0xc7, 0x3b, 0xd0, 0x62, 0x09, 0x46, 0xfd, 0x9c, 0x71, 0xcd, 0x52,
0x21, 0xca, 0x20, 0x31, 0x0f, 0x00, 0x00, 0xeb, 0x59, 0x36, 0xbe, 0xd2, 0x7a, 0xe4, 0x1a, 0x5c, 0x96, 0x78, 0x80, 0xd2, 0xac, 0x4c, 0x12,
0x1d, 0x3a, 0x50, 0x23, 0xe7, 0x00, 0xd4, 0x08, 0x75, 0x3c, 0xec, 0x0b, 0x31, 0xea, 0xd6, 0x3f,
0xbd, 0xf9, 0xe5, 0x8d, 0x01, 0xd3, 0xc3, 0xbc, 0x6f, 0x0a, 0xb3, 0xeb, 0x0a, 0x55, 0xfe, 0xbd,
0x19, 0x73, 0xb6, 0x2b, 0xb3, 0x78, 0xb7, 0x2c, 0x5a, 0x7f, 0xa5, 0xf8, 0xd7, 0xfe, 0xa3, 0xbf,
0x02, 0x00, 0x00, 0xff, 0xff, 0x02, 0x41, 0xe8, 0x67, 0x20, 0x10, 0x00, 0x00,
} }
...@@ -103,6 +103,14 @@ message LibraryRelease { ...@@ -103,6 +103,14 @@ message LibraryRelease {
repeated string architectures = 8; repeated string architectures = 8;
repeated string types = 9; repeated string types = 9;
DownloadResource resources = 10; DownloadResource resources = 10;
string license = 11;
repeated string provides_includes = 12;
repeated LibraryDependency dependencies = 13;
}
message LibraryDependency {
string name = 1;
string version_constraint = 2;
} }
message DownloadResource { message DownloadResource {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment