blob: e49b31ab7be719f5dc65e9d084f22c2cc194f4e8 [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/luci_notify/api/config/notify.proto
package config
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
proto1 "go.chromium.org/luci/buildbucket/proto"
math "math"
)
// 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.ProtoPackageIsVersion3 // please upgrade the proto package
// ProjectConfig is a luci-notify configuration for a particular project.
type ProjectConfig struct {
// Notifiers is a list of Notifiers which watch builders and send
// notifications for this project.
Notifiers []*Notifier `protobuf:"bytes,1,rep,name=notifiers,proto3" json:"notifiers,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ProjectConfig) Reset() { *m = ProjectConfig{} }
func (m *ProjectConfig) String() string { return proto.CompactTextString(m) }
func (*ProjectConfig) ProtoMessage() {}
func (*ProjectConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{0}
}
func (m *ProjectConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProjectConfig.Unmarshal(m, b)
}
func (m *ProjectConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ProjectConfig.Marshal(b, m, deterministic)
}
func (m *ProjectConfig) XXX_Merge(src proto.Message) {
xxx_messageInfo_ProjectConfig.Merge(m, src)
}
func (m *ProjectConfig) XXX_Size() int {
return xxx_messageInfo_ProjectConfig.Size(m)
}
func (m *ProjectConfig) XXX_DiscardUnknown() {
xxx_messageInfo_ProjectConfig.DiscardUnknown(m)
}
var xxx_messageInfo_ProjectConfig proto.InternalMessageInfo
func (m *ProjectConfig) GetNotifiers() []*Notifier {
if m != nil {
return m.Notifiers
}
return nil
}
// Notifier contains a set of notification configurations (which specify
// triggers to send notifications on) and a set of builders that will be
// watched for these triggers.
type Notifier struct {
// Name is an identifier for the notifier which must be unique within a
// project.
//
// Name must additionally match ^[a-z\-]+$, meaning it must only
// use an alphabet of lowercase characters and hyphens.
//
// Required.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Notifications is a list of notification configurations.
Notifications []*Notification `protobuf:"bytes,2,rep,name=notifications,proto3" json:"notifications,omitempty"`
// Builders is a list of buildbucket builders this Notifier should watch.
Builders []*Builder `protobuf:"bytes,3,rep,name=builders,proto3" json:"builders,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Notifier) Reset() { *m = Notifier{} }
func (m *Notifier) String() string { return proto.CompactTextString(m) }
func (*Notifier) ProtoMessage() {}
func (*Notifier) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{1}
}
func (m *Notifier) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Notifier.Unmarshal(m, b)
}
func (m *Notifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Notifier.Marshal(b, m, deterministic)
}
func (m *Notifier) XXX_Merge(src proto.Message) {
xxx_messageInfo_Notifier.Merge(m, src)
}
func (m *Notifier) XXX_Size() int {
return xxx_messageInfo_Notifier.Size(m)
}
func (m *Notifier) XXX_DiscardUnknown() {
xxx_messageInfo_Notifier.DiscardUnknown(m)
}
var xxx_messageInfo_Notifier proto.InternalMessageInfo
func (m *Notifier) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Notifier) GetNotifications() []*Notification {
if m != nil {
return m.Notifications
}
return nil
}
func (m *Notifier) GetBuilders() []*Builder {
if m != nil {
return m.Builders
}
return nil
}
// Notification specifies the triggers to watch for and send
// notifications on. It also specifies email recipients.
//
// Next ID: 8.
type Notification struct {
// Notify on each build success.
OnSuccess bool `protobuf:"varint,1,opt,name=on_success,json=onSuccess,proto3" json:"on_success,omitempty"`
// Notify on each build failure.
OnFailure bool `protobuf:"varint,2,opt,name=on_failure,json=onFailure,proto3" json:"on_failure,omitempty"`
// Notify on each build status different than the previous one.
OnChange bool `protobuf:"varint,3,opt,name=on_change,json=onChange,proto3" json:"on_change,omitempty"`
// Notify on each build failure unless the previous build was a failure.
OnNewFailure bool `protobuf:"varint,7,opt,name=on_new_failure,json=onNewFailure,proto3" json:"on_new_failure,omitempty"`
// Email is the set of email addresses to notify.
//
// Optional.
Email *Notification_Email `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"`
// Refers to which project template name to use to format this email.
// If not present, "default" will be used.
//
// Optional.
Template string `protobuf:"bytes,5,opt,name=template,proto3" json:"template,omitempty"`
// NotifyBlamelist specifies whether to notify the computed blamelist for a
// given build.
//
// If set, this notification will be sent to the blamelist of a build. Note
// that if this is set in multiple notifications pertaining to the same
// builder, the blamelist may receive multiple emails.
//
// Optional.
NotifyBlamelist *Notification_Blamelist `protobuf:"bytes,6,opt,name=notify_blamelist,json=notifyBlamelist,proto3" json:"notify_blamelist,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Notification) Reset() { *m = Notification{} }
func (m *Notification) String() string { return proto.CompactTextString(m) }
func (*Notification) ProtoMessage() {}
func (*Notification) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{2}
}
func (m *Notification) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Notification.Unmarshal(m, b)
}
func (m *Notification) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Notification.Marshal(b, m, deterministic)
}
func (m *Notification) XXX_Merge(src proto.Message) {
xxx_messageInfo_Notification.Merge(m, src)
}
func (m *Notification) XXX_Size() int {
return xxx_messageInfo_Notification.Size(m)
}
func (m *Notification) XXX_DiscardUnknown() {
xxx_messageInfo_Notification.DiscardUnknown(m)
}
var xxx_messageInfo_Notification proto.InternalMessageInfo
func (m *Notification) GetOnSuccess() bool {
if m != nil {
return m.OnSuccess
}
return false
}
func (m *Notification) GetOnFailure() bool {
if m != nil {
return m.OnFailure
}
return false
}
func (m *Notification) GetOnChange() bool {
if m != nil {
return m.OnChange
}
return false
}
func (m *Notification) GetOnNewFailure() bool {
if m != nil {
return m.OnNewFailure
}
return false
}
func (m *Notification) GetEmail() *Notification_Email {
if m != nil {
return m.Email
}
return nil
}
func (m *Notification) GetTemplate() string {
if m != nil {
return m.Template
}
return ""
}
func (m *Notification) GetNotifyBlamelist() *Notification_Blamelist {
if m != nil {
return m.NotifyBlamelist
}
return nil
}
// Email is a message representing a set of mail recipients (email
// addresses).
type Notification_Email struct {
// Recipients is a list of email addresses to notify.
Recipients []string `protobuf:"bytes,1,rep,name=recipients,proto3" json:"recipients,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Notification_Email) Reset() { *m = Notification_Email{} }
func (m *Notification_Email) String() string { return proto.CompactTextString(m) }
func (*Notification_Email) ProtoMessage() {}
func (*Notification_Email) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{2, 0}
}
func (m *Notification_Email) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Notification_Email.Unmarshal(m, b)
}
func (m *Notification_Email) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Notification_Email.Marshal(b, m, deterministic)
}
func (m *Notification_Email) XXX_Merge(src proto.Message) {
xxx_messageInfo_Notification_Email.Merge(m, src)
}
func (m *Notification_Email) XXX_Size() int {
return xxx_messageInfo_Notification_Email.Size(m)
}
func (m *Notification_Email) XXX_DiscardUnknown() {
xxx_messageInfo_Notification_Email.DiscardUnknown(m)
}
var xxx_messageInfo_Notification_Email proto.InternalMessageInfo
func (m *Notification_Email) GetRecipients() []string {
if m != nil {
return m.Recipients
}
return nil
}
// Blamelist is a message representing configuration for notifying the blamelist.
type Notification_Blamelist struct {
// A list of repositories which we are allowed to be included as part of the
// blamelist. If unset, a blamelist will be computed based on a Builder's
// repository field. If set, however luci-notify computes the blamelist for
// all commits related to a build (which may span multiple repositories) which
// are part of repository in this repository whitelist.
//
// Repositories should be valid Gerrit/Gitiles repository URLs, such as
// https://chromium.googlesource.com/chromium/src
//
// Optional.
RepositoryWhitelist []string `protobuf:"bytes,1,rep,name=repository_whitelist,json=repositoryWhitelist,proto3" json:"repository_whitelist,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Notification_Blamelist) Reset() { *m = Notification_Blamelist{} }
func (m *Notification_Blamelist) String() string { return proto.CompactTextString(m) }
func (*Notification_Blamelist) ProtoMessage() {}
func (*Notification_Blamelist) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{2, 1}
}
func (m *Notification_Blamelist) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Notification_Blamelist.Unmarshal(m, b)
}
func (m *Notification_Blamelist) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Notification_Blamelist.Marshal(b, m, deterministic)
}
func (m *Notification_Blamelist) XXX_Merge(src proto.Message) {
xxx_messageInfo_Notification_Blamelist.Merge(m, src)
}
func (m *Notification_Blamelist) XXX_Size() int {
return xxx_messageInfo_Notification_Blamelist.Size(m)
}
func (m *Notification_Blamelist) XXX_DiscardUnknown() {
xxx_messageInfo_Notification_Blamelist.DiscardUnknown(m)
}
var xxx_messageInfo_Notification_Blamelist proto.InternalMessageInfo
func (m *Notification_Blamelist) GetRepositoryWhitelist() []string {
if m != nil {
return m.RepositoryWhitelist
}
return nil
}
// Builder references a buildbucket builder in the current project.
type Builder struct {
// Bucket is the buildbucket bucket that the builder is a part of.
//
// Required.
Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
// Name is the name of the buildbucket builder.
//
// Required.
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// Repository is the git repository associated with this particular builder.
//
// The repository should look like a URL, e.g. https://chromium.googlesource.com/src
//
// Currently, luci-notify only supports Gerrit-like URLs since it checks
// against gitiles commits, so the URL's path (e.g. "src" in the above
// example) should map directly to a Gerrit project.
//
// Builds attached to the history of this repository will use this
// repository's git history to determine the order between two builds for the
// OnChange notification.
//
// Optional.
//
// If not set, OnChange notifications will derive their notion of
// "previous" build solely from build creation time, which is potentially
// less reliable.
Repository string `protobuf:"bytes,3,opt,name=repository,proto3" json:"repository,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Builder) Reset() { *m = Builder{} }
func (m *Builder) String() string { return proto.CompactTextString(m) }
func (*Builder) ProtoMessage() {}
func (*Builder) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{3}
}
func (m *Builder) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Builder.Unmarshal(m, b)
}
func (m *Builder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Builder.Marshal(b, m, deterministic)
}
func (m *Builder) XXX_Merge(src proto.Message) {
xxx_messageInfo_Builder.Merge(m, src)
}
func (m *Builder) XXX_Size() int {
return xxx_messageInfo_Builder.Size(m)
}
func (m *Builder) XXX_DiscardUnknown() {
xxx_messageInfo_Builder.DiscardUnknown(m)
}
var xxx_messageInfo_Builder proto.InternalMessageInfo
func (m *Builder) GetBucket() string {
if m != nil {
return m.Bucket
}
return ""
}
func (m *Builder) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Builder) GetRepository() string {
if m != nil {
return m.Repository
}
return ""
}
// Notifications encapsulates a list of notifications as a proto so code for
// storing it in the datastore may be generated.
type Notifications struct {
// Notifications is a list of notification configurations.
Notifications []*Notification `protobuf:"bytes,1,rep,name=notifications,proto3" json:"notifications,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Notifications) Reset() { *m = Notifications{} }
func (m *Notifications) String() string { return proto.CompactTextString(m) }
func (*Notifications) ProtoMessage() {}
func (*Notifications) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{4}
}
func (m *Notifications) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Notifications.Unmarshal(m, b)
}
func (m *Notifications) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Notifications.Marshal(b, m, deterministic)
}
func (m *Notifications) XXX_Merge(src proto.Message) {
xxx_messageInfo_Notifications.Merge(m, src)
}
func (m *Notifications) XXX_Size() int {
return xxx_messageInfo_Notifications.Size(m)
}
func (m *Notifications) XXX_DiscardUnknown() {
xxx_messageInfo_Notifications.DiscardUnknown(m)
}
var xxx_messageInfo_Notifications proto.InternalMessageInfo
func (m *Notifications) GetNotifications() []*Notification {
if m != nil {
return m.Notifications
}
return nil
}
// A collection of landed Git commits hosted on Gitiles.
type GitilesCommits struct {
// The Gitiles commits in this collection.
Commits []*proto1.GitilesCommit `protobuf:"bytes,1,rep,name=commits,proto3" json:"commits,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GitilesCommits) Reset() { *m = GitilesCommits{} }
func (m *GitilesCommits) String() string { return proto.CompactTextString(m) }
func (*GitilesCommits) ProtoMessage() {}
func (*GitilesCommits) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{5}
}
func (m *GitilesCommits) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GitilesCommits.Unmarshal(m, b)
}
func (m *GitilesCommits) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GitilesCommits.Marshal(b, m, deterministic)
}
func (m *GitilesCommits) XXX_Merge(src proto.Message) {
xxx_messageInfo_GitilesCommits.Merge(m, src)
}
func (m *GitilesCommits) XXX_Size() int {
return xxx_messageInfo_GitilesCommits.Size(m)
}
func (m *GitilesCommits) XXX_DiscardUnknown() {
xxx_messageInfo_GitilesCommits.DiscardUnknown(m)
}
var xxx_messageInfo_GitilesCommits proto.InternalMessageInfo
func (m *GitilesCommits) GetCommits() []*proto1.GitilesCommit {
if m != nil {
return m.Commits
}
return nil
}
// Input to an email template.
type TemplateInput struct {
// Buildbucket hostname, e.g. "cr-buildbucket.appspot.com".
BuildbucketHostname string `protobuf:"bytes,1,opt,name=buildbucket_hostname,json=buildbucketHostname,proto3" json:"buildbucket_hostname,omitempty"`
// The completed build.
Build *proto1.Build `protobuf:"bytes,2,opt,name=build,proto3" json:"build,omitempty"`
// State of the previous build in this builder.
OldStatus proto1.Status `protobuf:"varint,3,opt,name=old_status,json=oldStatus,proto3,enum=buildbucket.v2.Status" json:"old_status,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TemplateInput) Reset() { *m = TemplateInput{} }
func (m *TemplateInput) String() string { return proto.CompactTextString(m) }
func (*TemplateInput) ProtoMessage() {}
func (*TemplateInput) Descriptor() ([]byte, []int) {
return fileDescriptor_9a6945a7af0ec43b, []int{6}
}
func (m *TemplateInput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TemplateInput.Unmarshal(m, b)
}
func (m *TemplateInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TemplateInput.Marshal(b, m, deterministic)
}
func (m *TemplateInput) XXX_Merge(src proto.Message) {
xxx_messageInfo_TemplateInput.Merge(m, src)
}
func (m *TemplateInput) XXX_Size() int {
return xxx_messageInfo_TemplateInput.Size(m)
}
func (m *TemplateInput) XXX_DiscardUnknown() {
xxx_messageInfo_TemplateInput.DiscardUnknown(m)
}
var xxx_messageInfo_TemplateInput proto.InternalMessageInfo
func (m *TemplateInput) GetBuildbucketHostname() string {
if m != nil {
return m.BuildbucketHostname
}
return ""
}
func (m *TemplateInput) GetBuild() *proto1.Build {
if m != nil {
return m.Build
}
return nil
}
func (m *TemplateInput) GetOldStatus() proto1.Status {
if m != nil {
return m.OldStatus
}
return proto1.Status_STATUS_UNSPECIFIED
}
func init() {
proto.RegisterType((*ProjectConfig)(nil), "notify.ProjectConfig")
proto.RegisterType((*Notifier)(nil), "notify.Notifier")
proto.RegisterType((*Notification)(nil), "notify.Notification")
proto.RegisterType((*Notification_Email)(nil), "notify.Notification.Email")
proto.RegisterType((*Notification_Blamelist)(nil), "notify.Notification.Blamelist")
proto.RegisterType((*Builder)(nil), "notify.Builder")
proto.RegisterType((*Notifications)(nil), "notify.Notifications")
proto.RegisterType((*GitilesCommits)(nil), "notify.GitilesCommits")
proto.RegisterType((*TemplateInput)(nil), "notify.TemplateInput")
}
func init() {
proto.RegisterFile("go.chromium.org/luci/luci_notify/api/config/notify.proto", fileDescriptor_9a6945a7af0ec43b)
}
var fileDescriptor_9a6945a7af0ec43b = []byte{
// 575 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x6a, 0xd4, 0x40,
0x14, 0x26, 0xdd, 0xee, 0x36, 0x39, 0xed, 0xb6, 0x65, 0x5a, 0x4b, 0x88, 0xb4, 0x94, 0x20, 0x58,
0x28, 0x24, 0x9a, 0x22, 0x8a, 0x17, 0x0a, 0x2d, 0xfe, 0x2c, 0xc2, 0x22, 0xa9, 0x22, 0x78, 0x13,
0xb2, 0xb3, 0xb3, 0xbb, 0xa3, 0xc9, 0x4c, 0xc8, 0x4c, 0x5c, 0xfa, 0x04, 0x5e, 0xfb, 0x12, 0x3e,
0xa7, 0xf4, 0x4c, 0x92, 0x66, 0xeb, 0x5e, 0xf4, 0x66, 0x99, 0xf3, 0xfd, 0x9c, 0x7c, 0x7b, 0xe6,
0x24, 0xf0, 0x6a, 0x2e, 0x03, 0xba, 0x28, 0x65, 0xce, 0xab, 0x3c, 0x90, 0xe5, 0x3c, 0xcc, 0x2a,
0xca, 0xf1, 0x27, 0x11, 0x52, 0xf3, 0xd9, 0x4d, 0x98, 0x16, 0x3c, 0xa4, 0x52, 0xcc, 0xf8, 0x3c,
0x34, 0x48, 0x50, 0x94, 0x52, 0x4b, 0x32, 0x30, 0x95, 0x77, 0xb1, 0xb6, 0xc3, 0xa4, 0xe2, 0xd9,
0x74, 0x52, 0xd1, 0x9f, 0x4c, 0x87, 0xa8, 0x0f, 0xa9, 0xcc, 0x73, 0x29, 0x8c, 0xd9, 0x8b, 0x1e,
0x68, 0x42, 0xc4, 0x78, 0xfc, 0xb7, 0x30, 0xfc, 0x5c, 0xca, 0x1f, 0x8c, 0xea, 0x2b, 0x8c, 0x43,
0x02, 0x70, 0x30, 0x03, 0x67, 0xa5, 0x72, 0xad, 0xd3, 0xde, 0xd9, 0x76, 0xb4, 0x1f, 0xd4, 0x19,
0xc7, 0x35, 0x11, 0xdf, 0x49, 0xfc, 0xdf, 0x16, 0xd8, 0x0d, 0x4e, 0x08, 0x6c, 0x8a, 0x34, 0x67,
0xae, 0x75, 0x6a, 0x9d, 0x39, 0x31, 0x9e, 0xc9, 0x6b, 0x18, 0x1a, 0x35, 0x4d, 0x35, 0x97, 0x42,
0xb9, 0x1b, 0xd8, 0xf4, 0x70, 0xb5, 0xa9, 0x21, 0xe3, 0x55, 0x29, 0x39, 0x07, 0x1b, 0xc3, 0xde,
0x66, 0xe9, 0xa1, 0x6d, 0xaf, 0xb1, 0x5d, 0x1a, 0x3c, 0x6e, 0x05, 0xfe, 0x9f, 0x1e, 0xec, 0x74,
0x9b, 0x91, 0x63, 0x00, 0x29, 0x12, 0x55, 0x51, 0xca, 0x94, 0xc2, 0x4c, 0x76, 0xec, 0x48, 0x71,
0x6d, 0x80, 0x9a, 0x9e, 0xa5, 0x3c, 0xab, 0x4a, 0xe6, 0x6e, 0x34, 0xf4, 0x7b, 0x03, 0x90, 0xc7,
0xe0, 0x48, 0x91, 0xd0, 0x45, 0x2a, 0xe6, 0xcc, 0xed, 0x21, 0x6b, 0x4b, 0x71, 0x85, 0x35, 0x79,
0x02, 0xbb, 0x52, 0x24, 0x82, 0x2d, 0x5b, 0xff, 0x16, 0x2a, 0x76, 0xa4, 0x18, 0xb3, 0x65, 0xd3,
0xe2, 0x19, 0xf4, 0x59, 0x9e, 0xf2, 0xcc, 0xdd, 0x3c, 0xb5, 0xce, 0xb6, 0x23, 0x6f, 0xdd, 0x5f,
0x0e, 0xde, 0xdd, 0x2a, 0x62, 0x23, 0x24, 0x1e, 0xd8, 0x9a, 0xe5, 0x45, 0x96, 0x6a, 0xe6, 0xf6,
0x71, 0x88, 0x6d, 0x4d, 0x46, 0xb0, 0x6f, 0xfc, 0xc9, 0x24, 0x4b, 0x73, 0x96, 0x71, 0xa5, 0xdd,
0x01, 0x36, 0x3e, 0x59, 0xdb, 0xf8, 0xb2, 0x51, 0xc5, 0x7b, 0x86, 0x6e, 0x01, 0xef, 0x29, 0xf4,
0xf1, 0xb1, 0xe4, 0x04, 0xa0, 0x64, 0x94, 0x17, 0x9c, 0x09, 0x6d, 0xae, 0xdb, 0x89, 0x3b, 0x88,
0xf7, 0x06, 0x9c, 0xd6, 0x45, 0x9e, 0xc3, 0x61, 0xc9, 0x0a, 0xa9, 0xb8, 0x96, 0xe5, 0x4d, 0xb2,
0x5c, 0x70, 0x6d, 0x42, 0x18, 0xdb, 0xc1, 0x1d, 0xf7, 0xad, 0xa1, 0xfc, 0xaf, 0xb0, 0x55, 0x5f,
0x14, 0x39, 0x82, 0x81, 0xd9, 0xc2, 0x7a, 0x3b, 0xea, 0xaa, 0xdd, 0x99, 0x8d, 0xce, 0xce, 0x60,
0xac, 0xa6, 0x1b, 0x0e, 0x1f, 0x63, 0x35, 0x88, 0xff, 0x09, 0x86, 0xe3, 0x95, 0x45, 0xf9, 0x6f,
0xc9, 0xac, 0x07, 0x2f, 0x99, 0x3f, 0x82, 0xdd, 0x0f, 0x5c, 0xf3, 0x8c, 0xa9, 0x2b, 0x99, 0xe7,
0x5c, 0x2b, 0xf2, 0x12, 0xb6, 0xa8, 0x39, 0xd6, 0x7d, 0x8e, 0x83, 0xce, 0x5b, 0x14, 0xfc, 0x8a,
0x82, 0x15, 0x43, 0xdc, 0xa8, 0xfd, 0xbf, 0x16, 0x0c, 0xbf, 0xd4, 0xf7, 0x35, 0x12, 0x45, 0x85,
0x33, 0xeb, 0x58, 0x93, 0x85, 0x54, 0xba, 0xf3, 0x86, 0x1c, 0x74, 0xb8, 0x8f, 0x35, 0x45, 0xce,
0xa1, 0x8f, 0x30, 0x4e, 0x64, 0x3b, 0x7a, 0x74, 0xff, 0xd9, 0x38, 0xd0, 0xd8, 0x68, 0xc8, 0x0b,
0x00, 0x99, 0x4d, 0x13, 0xa5, 0x53, 0x5d, 0x29, 0x9c, 0xd4, 0x6e, 0x74, 0x74, 0xdf, 0x71, 0x8d,
0x6c, 0xec, 0xc8, 0x6c, 0x6a, 0x8e, 0x97, 0xf6, 0xf7, 0x81, 0xf9, 0xfc, 0x4c, 0x06, 0xf8, 0x1d,
0xb8, 0xf8, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x8d, 0x43, 0x72, 0xb4, 0x04, 0x00, 0x00,
}