blob: c3bb9c23f0e82bca7aee0a127b30757830154647 [file] [log] [blame]
// Code generated by protoc-gen-gogo.
// source: android.googlesource.com/platform/tools/gpu/gapid/robot/build/build.proto
// DO NOT EDIT!
/*
Package build is a generated protocol buffer package.
It is generated from these files:
android.googlesource.com/platform/tools/gpu/gapid/robot/build/build.proto
It has these top-level messages:
Information
Artifact
ToolSet
Package
Track
AddRequest
AddResponse
UpdateTrackRequest
UpdateTrackResponse
*/
package build
import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "github.com/gogo/protobuf/gogoproto"
import device "android.googlesource.com/platform/tools/gpu/framework/device"
import search "android.googlesource.com/platform/tools/gpu/gapid/search"
import (
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
// Type represents a build type.
type Type int32
const (
// UnknownType is the default (invalid) type.
UnknownType Type = 0
// BuildBot is the type for builds from the official build bots.
// For these kinds of builds, the tag must be set and can be used for merging.
BuildBot Type = 1
// User is the type for a user built build but without local modifications.
// For these types of builds, the cl must be set and can be used for merging.
User Type = 2
// Local is the type for local modified source builds.
// For these kinds of builds, the tag may be set, and if it is, it will be used
// for merging.
Local Type = 3
)
var Type_name = map[int32]string{
0: "UnknownType",
1: "BuildBot",
2: "User",
3: "Local",
}
var Type_value = map[string]int32{
"UnknownType": 0,
"BuildBot": 1,
"User": 2,
"Local": 3,
}
func (x Type) String() string {
return proto.EnumName(Type_name, int32(x))
}
func (Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorBuild, []int{0} }
// Information holds the non inferable meta inforamtion about a build.
type Information struct {
// Type is the build type.
Type Type `protobuf:"varint,1,opt,name=type,proto3,enum=build.Type" json:"type,omitempty"`
// The branch id if known of this build. This will normally be the git branch in
// the main gapid repository.
Branch string `protobuf:"bytes,2,opt,name=branch,proto3" json:"branch,omitempty"`
// Cl is the gapid repository cl at the time of the build if known.
// There may be multiple distinct builds at the same cl if the build is
// allowed local modifications.
Cl string `protobuf:"bytes,3,opt,name=cl,proto3" json:"cl,omitempty"`
// Tag is the external tag of the build if known.
// This is most often set by the build bot's, where it is common across all
// the bots for a specific build.
// Build uploads with the same tag will be merged.
Tag string `protobuf:"bytes,4,opt,name=tag,proto3" json:"tag,omitempty"`
// Description is a user assigned description of the build.
Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
// Builder is the device information for the machine that made the build.
Builder *device.Information `protobuf:"bytes,6,opt,name=builder" json:"builder,omitempty"`
// Uploader is the (optional) user name of the uploading entity.
Uploader string `protobuf:"bytes,7,opt,name=uploader,proto3" json:"uploader,omitempty"`
}
func (m *Information) Reset() { *m = Information{} }
func (m *Information) String() string { return proto.CompactTextString(m) }
func (*Information) ProtoMessage() {}
func (*Information) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{0} }
func (m *Information) GetBuilder() *device.Information {
if m != nil {
return m.Builder
}
return nil
}
// Artifact holds information about a single uploaded build artifact.
type Artifact struct {
// Id is the id in the stash of the build artifact.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Tool is the set of tool entry ids that were inferred from the build on upload.
Tool []*ToolSet `protobuf:"bytes,2,rep,name=tool" json:"tool,omitempty"`
}
func (m *Artifact) Reset() { *m = Artifact{} }
func (m *Artifact) String() string { return proto.CompactTextString(m) }
func (*Artifact) ProtoMessage() {}
func (*Artifact) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{1} }
func (m *Artifact) GetTool() []*ToolSet {
if m != nil {
return m.Tool
}
return nil
}
// ToolSet is the information for a collction files extracted from a package to perform a specific task.
type ToolSet struct {
// Abi is the target system this tool set runs on.
Abi *device.ABI `protobuf:"bytes,1,opt,name=abi" json:"abi,omitempty"`
// The stash id of the function interceptor
Interceptor string `protobuf:"bytes,2,opt,name=interceptor,proto3" json:"interceptor,omitempty"`
// The stash id of the graphics interceptor
Gapii string `protobuf:"bytes,3,opt,name=gapii,proto3" json:"gapii,omitempty"`
// The stash id of the replay daemon
Gapir string `protobuf:"bytes,4,opt,name=gapir,proto3" json:"gapir,omitempty"`
// The stash id of the graphics analysis server
Gapis string `protobuf:"bytes,5,opt,name=gapis,proto3" json:"gapis,omitempty"`
// The stash id of the graphics analysis command line tool
Gapit string `protobuf:"bytes,6,opt,name=gapit,proto3" json:"gapit,omitempty"`
// The stash id of the vulkan interception layer
VulkanTraceLayer string `protobuf:"bytes,7,opt,name=vulkanTraceLayer,proto3" json:"vulkanTraceLayer,omitempty"`
// The stash id of the vulkan replay layer
VulkanReplayLayer string `protobuf:"bytes,8,opt,name=vulkanReplayLayer,proto3" json:"vulkanReplayLayer,omitempty"`
}
func (m *ToolSet) Reset() { *m = ToolSet{} }
func (m *ToolSet) String() string { return proto.CompactTextString(m) }
func (*ToolSet) ProtoMessage() {}
func (*ToolSet) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{2} }
func (m *ToolSet) GetAbi() *device.ABI {
if m != nil {
return m.Abi
}
return nil
}
// Package represents an entry in a build track.
// It contains the merged set of build entries that all represent a single point in a tracks history.
// This allows multiple build outputs, from different build machines to be merged into a single package.
type Package struct {
// Id is the unique id of the package.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Parent is the id of the package that precedes this one in the timeline.
Parent string `protobuf:"bytes,2,opt,name=parent,proto3" json:"parent,omitempty"`
// Information holds the build metadata.
Information *Information `protobuf:"bytes,3,opt,name=information" json:"information,omitempty"`
// Artifact is the set of build artifacts that have been added to the package.
Artifact []string `protobuf:"bytes,4,rep,name=artifact" json:"artifact,omitempty"`
// Tool is the set of tools the package supports.
Tool []*ToolSet `protobuf:"bytes,5,rep,name=tool" json:"tool,omitempty"`
}
func (m *Package) Reset() { *m = Package{} }
func (m *Package) String() string { return proto.CompactTextString(m) }
func (*Package) ProtoMessage() {}
func (*Package) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{3} }
func (m *Package) GetInformation() *Information {
if m != nil {
return m.Information
}
return nil
}
func (m *Package) GetTool() []*ToolSet {
if m != nil {
return m.Tool
}
return nil
}
// Track represents a historical timeline of packages.
type Track struct {
// Id is the unique id of the track.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Name is a human readable name for the track, it should still be unique, but may change.
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// Head is the id of the package at the head of this track.
Head string `protobuf:"bytes,3,opt,name=head,proto3" json:"head,omitempty"`
// Description is a human readable explanation for the tracks existance.
Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
}
func (m *Track) Reset() { *m = Track{} }
func (m *Track) String() string { return proto.CompactTextString(m) }
func (*Track) ProtoMessage() {}
func (*Track) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{4} }
type AddRequest struct {
// Id is the id in the stash of the uploaded build.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Information holds the metadata for this entry.
Information *Information `protobuf:"bytes,2,opt,name=information" json:"information,omitempty"`
}
func (m *AddRequest) Reset() { *m = AddRequest{} }
func (m *AddRequest) String() string { return proto.CompactTextString(m) }
func (*AddRequest) ProtoMessage() {}
func (*AddRequest) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{5} }
func (m *AddRequest) GetInformation() *Information {
if m != nil {
return m.Information
}
return nil
}
type AddResponse struct {
// Id is the unique id of the build package.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Merged will be true if the upload was merged into an existing package.
Merged bool `protobuf:"varint,2,opt,name=merged,proto3" json:"merged,omitempty"`
}
func (m *AddResponse) Reset() { *m = AddResponse{} }
func (m *AddResponse) String() string { return proto.CompactTextString(m) }
func (*AddResponse) ProtoMessage() {}
func (*AddResponse) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{6} }
type UpdateTrackRequest struct {
// Track contains the information to merge into the track.
// If the id is present, it must match an existing track.
// If only a name is present, and it does not match an existing track, a new one will be created.
// Missing fields will be left alone, present fields will be replaced.
Track *Track `protobuf:"bytes,1,opt,name=track" json:"track,omitempty"`
}
func (m *UpdateTrackRequest) Reset() { *m = UpdateTrackRequest{} }
func (m *UpdateTrackRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateTrackRequest) ProtoMessage() {}
func (*UpdateTrackRequest) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{7} }
func (m *UpdateTrackRequest) GetTrack() *Track {
if m != nil {
return m.Track
}
return nil
}
type UpdateTrackResponse struct {
// Track is the updated track information.
Track *Track `protobuf:"bytes,1,opt,name=track" json:"track,omitempty"`
}
func (m *UpdateTrackResponse) Reset() { *m = UpdateTrackResponse{} }
func (m *UpdateTrackResponse) String() string { return proto.CompactTextString(m) }
func (*UpdateTrackResponse) ProtoMessage() {}
func (*UpdateTrackResponse) Descriptor() ([]byte, []int) { return fileDescriptorBuild, []int{8} }
func (m *UpdateTrackResponse) GetTrack() *Track {
if m != nil {
return m.Track
}
return nil
}
func init() {
proto.RegisterType((*Information)(nil), "build.Information")
proto.RegisterType((*Artifact)(nil), "build.Artifact")
proto.RegisterType((*ToolSet)(nil), "build.ToolSet")
proto.RegisterType((*Package)(nil), "build.Package")
proto.RegisterType((*Track)(nil), "build.Track")
proto.RegisterType((*AddRequest)(nil), "build.AddRequest")
proto.RegisterType((*AddResponse)(nil), "build.AddResponse")
proto.RegisterType((*UpdateTrackRequest)(nil), "build.UpdateTrackRequest")
proto.RegisterType((*UpdateTrackResponse)(nil), "build.UpdateTrackResponse")
proto.RegisterEnum("build.Type", Type_name, Type_value)
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion3
// Client API for Service service
type ServiceClient interface {
// SearchArtifacts is used to find build artifacts that match the given query.
SearchArtifacts(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchArtifactsClient, error)
// SearchPackages is used to find build packages that match the given query.
SearchPackages(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchPackagesClient, error)
// SearchTracks is used to find build tracks that match the given query.
SearchTracks(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchTracksClient, error)
// Add pulls the build from the stash, analyzes it and adds it to the service.
// The build may be merged with an existing build set, see Information for more details about merging.
Add(ctx context.Context, in *AddRequest, opts ...grpc.CallOption) (*AddResponse, error)
// UpdateTrack creates or updates a track entry.
UpdateTrack(ctx context.Context, in *UpdateTrackRequest, opts ...grpc.CallOption) (*UpdateTrackResponse, error)
}
type serviceClient struct {
cc *grpc.ClientConn
}
func NewServiceClient(cc *grpc.ClientConn) ServiceClient {
return &serviceClient{cc}
}
func (c *serviceClient) SearchArtifacts(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchArtifactsClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Service_serviceDesc.Streams[0], c.cc, "/build.Service/SearchArtifacts", opts...)
if err != nil {
return nil, err
}
x := &serviceSearchArtifactsClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Service_SearchArtifactsClient interface {
Recv() (*Artifact, error)
grpc.ClientStream
}
type serviceSearchArtifactsClient struct {
grpc.ClientStream
}
func (x *serviceSearchArtifactsClient) Recv() (*Artifact, error) {
m := new(Artifact)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *serviceClient) SearchPackages(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchPackagesClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Service_serviceDesc.Streams[1], c.cc, "/build.Service/SearchPackages", opts...)
if err != nil {
return nil, err
}
x := &serviceSearchPackagesClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Service_SearchPackagesClient interface {
Recv() (*Package, error)
grpc.ClientStream
}
type serviceSearchPackagesClient struct {
grpc.ClientStream
}
func (x *serviceSearchPackagesClient) Recv() (*Package, error) {
m := new(Package)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *serviceClient) SearchTracks(ctx context.Context, in *search.Query, opts ...grpc.CallOption) (Service_SearchTracksClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Service_serviceDesc.Streams[2], c.cc, "/build.Service/SearchTracks", opts...)
if err != nil {
return nil, err
}
x := &serviceSearchTracksClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Service_SearchTracksClient interface {
Recv() (*Track, error)
grpc.ClientStream
}
type serviceSearchTracksClient struct {
grpc.ClientStream
}
func (x *serviceSearchTracksClient) Recv() (*Track, error) {
m := new(Track)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *serviceClient) Add(ctx context.Context, in *AddRequest, opts ...grpc.CallOption) (*AddResponse, error) {
out := new(AddResponse)
err := grpc.Invoke(ctx, "/build.Service/Add", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *serviceClient) UpdateTrack(ctx context.Context, in *UpdateTrackRequest, opts ...grpc.CallOption) (*UpdateTrackResponse, error) {
out := new(UpdateTrackResponse)
err := grpc.Invoke(ctx, "/build.Service/UpdateTrack", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for Service service
type ServiceServer interface {
// SearchArtifacts is used to find build artifacts that match the given query.
SearchArtifacts(*search.Query, Service_SearchArtifactsServer) error
// SearchPackages is used to find build packages that match the given query.
SearchPackages(*search.Query, Service_SearchPackagesServer) error
// SearchTracks is used to find build tracks that match the given query.
SearchTracks(*search.Query, Service_SearchTracksServer) error
// Add pulls the build from the stash, analyzes it and adds it to the service.
// The build may be merged with an existing build set, see Information for more details about merging.
Add(context.Context, *AddRequest) (*AddResponse, error)
// UpdateTrack creates or updates a track entry.
UpdateTrack(context.Context, *UpdateTrackRequest) (*UpdateTrackResponse, error)
}
func RegisterServiceServer(s *grpc.Server, srv ServiceServer) {
s.RegisterService(&_Service_serviceDesc, srv)
}
func _Service_SearchArtifacts_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(search.Query)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(ServiceServer).SearchArtifacts(m, &serviceSearchArtifactsServer{stream})
}
type Service_SearchArtifactsServer interface {
Send(*Artifact) error
grpc.ServerStream
}
type serviceSearchArtifactsServer struct {
grpc.ServerStream
}
func (x *serviceSearchArtifactsServer) Send(m *Artifact) error {
return x.ServerStream.SendMsg(m)
}
func _Service_SearchPackages_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(search.Query)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(ServiceServer).SearchPackages(m, &serviceSearchPackagesServer{stream})
}
type Service_SearchPackagesServer interface {
Send(*Package) error
grpc.ServerStream
}
type serviceSearchPackagesServer struct {
grpc.ServerStream
}
func (x *serviceSearchPackagesServer) Send(m *Package) error {
return x.ServerStream.SendMsg(m)
}
func _Service_SearchTracks_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(search.Query)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(ServiceServer).SearchTracks(m, &serviceSearchTracksServer{stream})
}
type Service_SearchTracksServer interface {
Send(*Track) error
grpc.ServerStream
}
type serviceSearchTracksServer struct {
grpc.ServerStream
}
func (x *serviceSearchTracksServer) Send(m *Track) error {
return x.ServerStream.SendMsg(m)
}
func _Service_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(AddRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ServiceServer).Add(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/build.Service/Add",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ServiceServer).Add(ctx, req.(*AddRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Service_UpdateTrack_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateTrackRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ServiceServer).UpdateTrack(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/build.Service/UpdateTrack",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ServiceServer).UpdateTrack(ctx, req.(*UpdateTrackRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Service_serviceDesc = grpc.ServiceDesc{
ServiceName: "build.Service",
HandlerType: (*ServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Add",
Handler: _Service_Add_Handler,
},
{
MethodName: "UpdateTrack",
Handler: _Service_UpdateTrack_Handler,
},
},
Streams: []grpc.StreamDesc{
{
StreamName: "SearchArtifacts",
Handler: _Service_SearchArtifacts_Handler,
ServerStreams: true,
},
{
StreamName: "SearchPackages",
Handler: _Service_SearchPackages_Handler,
ServerStreams: true,
},
{
StreamName: "SearchTracks",
Handler: _Service_SearchTracks_Handler,
ServerStreams: true,
},
},
Metadata: fileDescriptorBuild,
}
func init() {
proto.RegisterFile("android.googlesource.com/platform/tools/gpu/gapid/robot/build/build.proto", fileDescriptorBuild)
}
var fileDescriptorBuild = []byte{
// 750 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x54, 0x4d, 0x6e, 0xdb, 0x3a,
0x10, 0xb6, 0x64, 0xf9, 0x27, 0xa3, 0x3c, 0xc7, 0x61, 0x1e, 0x02, 0x3d, 0x03, 0xaf, 0x35, 0xb4,
0x32, 0x82, 0xc6, 0x2a, 0x9c, 0x06, 0x68, 0xbb, 0x28, 0x60, 0x03, 0x2d, 0x10, 0x20, 0x8b, 0x56,
0x49, 0x0e, 0x40, 0x8b, 0xb4, 0x2c, 0x58, 0x16, 0x55, 0x8a, 0x4a, 0xe0, 0xcb, 0x74, 0xdb, 0xeb,
0x74, 0xd3, 0x03, 0xf4, 0x1e, 0x5d, 0x14, 0xa4, 0x48, 0xc3, 0x89, 0x82, 0x22, 0xd9, 0xd8, 0x9c,
0x6f, 0x7e, 0x38, 0xdf, 0x37, 0x23, 0xc2, 0x05, 0xce, 0x08, 0x67, 0x09, 0x19, 0xc7, 0x8c, 0xc5,
0x29, 0x2d, 0x58, 0xc9, 0x23, 0x3a, 0x8e, 0xd8, 0x3a, 0xc8, 0x53, 0x2c, 0x16, 0x8c, 0xaf, 0x03,
0xc1, 0x58, 0x5a, 0x04, 0x71, 0x5e, 0x06, 0x31, 0xce, 0x13, 0x12, 0x70, 0x36, 0x67, 0x22, 0x98,
0x97, 0x49, 0x4a, 0xaa, 0xdf, 0x71, 0xce, 0x99, 0x60, 0xa8, 0xa5, 0x8c, 0xc1, 0x69, 0x9c, 0x88,
0x65, 0x39, 0x57, 0x35, 0x62, 0x16, 0xb3, 0x40, 0x79, 0xe7, 0xe5, 0x42, 0x59, 0xca, 0x50, 0xa7,
0x2a, 0x6b, 0xf0, 0xac, 0x06, 0x16, 0x1c, 0xaf, 0xe9, 0x1d, 0xe3, 0xab, 0x80, 0xd0, 0xdb, 0x24,
0xa2, 0xfa, 0x4f, 0x97, 0xfa, 0xf8, 0x7c, 0x2e, 0x05, 0xc5, 0x3c, 0x5a, 0xea, 0xbf, 0xaa, 0x8c,
0xff, 0xd3, 0x02, 0xf7, 0x22, 0x93, 0xe1, 0x58, 0x24, 0x2c, 0x43, 0x2f, 0xc1, 0x11, 0x9b, 0x9c,
0x7a, 0xd6, 0xd0, 0x1a, 0xf5, 0x26, 0xee, 0xb8, 0xe2, 0x7c, 0xbd, 0xc9, 0x69, 0xa8, 0x1c, 0xe8,
0x18, 0xda, 0x73, 0x8e, 0xb3, 0x68, 0xe9, 0xd9, 0x43, 0x6b, 0xb4, 0x17, 0x6a, 0x0b, 0xf5, 0xc0,
0x8e, 0x52, 0xaf, 0xa9, 0x30, 0x3b, 0x4a, 0x51, 0x1f, 0x9a, 0x02, 0xc7, 0x9e, 0xa3, 0x00, 0x79,
0x44, 0x43, 0x70, 0x09, 0x2d, 0x22, 0x9e, 0xe4, 0xf2, 0x26, 0xaf, 0xa5, 0x3c, 0xbb, 0x10, 0x3a,
0x85, 0x8e, 0xba, 0x8f, 0x72, 0xaf, 0x3d, 0xb4, 0x46, 0xee, 0xe4, 0x68, 0xac, 0x39, 0xef, 0xb4,
0x18, 0x9a, 0x18, 0x34, 0x80, 0x6e, 0x99, 0xa7, 0x0c, 0xcb, 0xf8, 0x8e, 0xaa, 0xb6, 0xb5, 0xfd,
0x0f, 0xd0, 0x9d, 0x72, 0x91, 0x2c, 0x70, 0x24, 0x64, 0x6b, 0x09, 0x51, 0x8c, 0xf6, 0x42, 0x3b,
0x21, 0xc8, 0x07, 0x47, 0x4a, 0xe3, 0xd9, 0xc3, 0xe6, 0xc8, 0x9d, 0xf4, 0x0c, 0x47, 0xc6, 0xd2,
0x2b, 0x2a, 0x42, 0xe5, 0xf3, 0x7f, 0x5b, 0xd0, 0xd1, 0x08, 0xfa, 0x1f, 0x9a, 0x78, 0x9e, 0xa8,
0x02, 0xee, 0xc4, 0x35, 0x2d, 0x4d, 0x67, 0x17, 0xa1, 0xc4, 0x25, 0xaf, 0x24, 0x13, 0x94, 0x47,
0x34, 0x17, 0x8c, 0x6b, 0x59, 0x76, 0x21, 0xf4, 0x2f, 0xb4, 0xe4, 0x04, 0x12, 0x2d, 0x4f, 0x65,
0x18, 0x94, 0x6b, 0x8d, 0x2a, 0xc3, 0xa0, 0x85, 0xd6, 0xa7, 0x32, 0x0c, 0x2a, 0x94, 0x2e, 0x1a,
0x15, 0xe8, 0x04, 0xfa, 0xb7, 0x65, 0xba, 0xc2, 0xd9, 0x35, 0xc7, 0x11, 0xbd, 0xc4, 0x9b, 0xad,
0x10, 0x35, 0x1c, 0xbd, 0x82, 0xc3, 0x0a, 0x0b, 0x69, 0x9e, 0xe2, 0x4d, 0x15, 0xdc, 0x55, 0xc1,
0x75, 0x87, 0xff, 0xdd, 0x82, 0xce, 0x67, 0x1c, 0xad, 0x70, 0x4c, 0x6b, 0xf2, 0x1d, 0x43, 0x3b,
0xc7, 0x9c, 0x66, 0xc2, 0x6c, 0x40, 0x65, 0xa1, 0x37, 0x52, 0x87, 0xed, 0x98, 0x14, 0x57, 0x77,
0x82, 0xb4, 0xba, 0xbb, 0x03, 0xdc, 0x0d, 0x93, 0x43, 0xc4, 0x7a, 0x50, 0x9e, 0x33, 0x6c, 0xca,
0x21, 0x1a, 0x7b, 0x3b, 0xa8, 0xd6, 0x5f, 0x06, 0x85, 0xa1, 0x25, 0x59, 0xae, 0x6a, 0x6d, 0x22,
0x70, 0x32, 0xbc, 0xa6, 0xba, 0x49, 0x75, 0x96, 0xd8, 0x92, 0x62, 0xa2, 0xe7, 0xa0, 0xce, 0x0f,
0xd7, 0xd2, 0xa9, 0xad, 0xa5, 0x1f, 0x02, 0x4c, 0x09, 0x09, 0xe9, 0xd7, 0x92, 0x16, 0xf5, 0x6d,
0x7a, 0x40, 0xdb, 0x7e, 0x12, 0x6d, 0xff, 0x1c, 0x5c, 0x55, 0xb3, 0xc8, 0x59, 0x56, 0x3c, 0xaa,
0xf1, 0x9a, 0xf2, 0x98, 0x12, 0x55, 0xaf, 0x1b, 0x6a, 0xcb, 0x7f, 0x0b, 0xe8, 0x26, 0x27, 0x58,
0x50, 0xc5, 0xd9, 0xb4, 0xe4, 0x43, 0x4b, 0x48, 0x5b, 0xaf, 0xe8, 0xbe, 0x11, 0x4a, 0xc5, 0x54,
0x2e, 0xff, 0x1d, 0x1c, 0xdd, 0xcb, 0xd4, 0x17, 0x3f, 0x21, 0xf5, 0xe4, 0x3d, 0x38, 0xf2, 0x01,
0x40, 0x07, 0xe0, 0xde, 0x64, 0xab, 0x8c, 0xdd, 0x65, 0xd2, 0xec, 0x37, 0xd0, 0x3e, 0x74, 0x67,
0x32, 0x7c, 0xc6, 0x44, 0xdf, 0x42, 0x5d, 0x70, 0x6e, 0x0a, 0xca, 0xfb, 0x36, 0xda, 0x83, 0xd6,
0x25, 0x8b, 0x70, 0xda, 0x6f, 0x4e, 0xbe, 0xd9, 0xd0, 0xb9, 0xa2, 0x5c, 0x7e, 0x31, 0xe8, 0x1c,
0x0e, 0xae, 0xd4, 0xdb, 0x63, 0xbe, 0xcc, 0x02, 0xfd, 0x33, 0xd6, 0xaf, 0xd1, 0x97, 0x92, 0xf2,
0xcd, 0xe0, 0x40, 0x5f, 0x6f, 0x02, 0xfc, 0xc6, 0x6b, 0x0b, 0x9d, 0x41, 0xaf, 0x4a, 0xd3, 0x0b,
0x59, 0xcb, 0x32, 0x8b, 0xa1, 0xfd, 0x2a, 0x29, 0x80, 0xfd, 0x2a, 0x49, 0x31, 0xa9, 0xa5, 0xdc,
0xe3, 0xa9, 0x12, 0xc6, 0xd0, 0x9c, 0x12, 0x82, 0x0e, 0x4d, 0x07, 0xdb, 0x81, 0x0f, 0xd0, 0x2e,
0x54, 0xc9, 0xe6, 0x37, 0xd0, 0x27, 0x70, 0x77, 0xf4, 0x44, 0xff, 0xe9, 0xa0, 0xfa, 0x74, 0x06,
0x83, 0xc7, 0x5c, 0xa6, 0xce, 0xcc, 0xf9, 0xf1, 0xeb, 0x45, 0x63, 0xde, 0x56, 0xaf, 0xf1, 0xd9,
0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x81, 0x21, 0x5f, 0xa2, 0x06, 0x00, 0x00,
}