diff --git a/conn/node.go b/conn/node.go index 6c7d5d4c8cf..8e9a7327840 100644 --- a/conn/node.go +++ b/conn/node.go @@ -58,6 +58,7 @@ type Node struct { _raft raft.Node // Fields which are never changed after init. + StartTime time.Time Cfg *raft.Config MyAddr string Id uint64 @@ -84,9 +85,10 @@ func NewNode(rc *pb.RaftContext, store *raftwal.DiskStorage) *Node { x.Check(err) n := &Node{ - Id: rc.Id, - MyAddr: rc.Addr, - Store: store, + StartTime: time.Now(), + Id: rc.Id, + MyAddr: rc.Addr, + Store: store, Cfg: &raft.Config{ ID: rc.Id, ElectionTick: 20, // 2s if we call Tick() every 100 ms. diff --git a/conn/pool.go b/conn/pool.go index 6f7f870ac3d..8252db47499 100644 --- a/conn/pool.go +++ b/conn/pool.go @@ -48,9 +48,10 @@ type Pool struct { // messages in the same TCP stream. conn *grpc.ClientConn - lastEcho time.Time - Addr string - closer *y.Closer + lastEcho time.Time + Addr string + closer *y.Closer + healthInfo pb.HealthInfo } // Pools manages a concurrency-safe set of Pool. @@ -85,6 +86,17 @@ func (p *Pools) Get(addr string) (*Pool, error) { return pool, nil } +// GetAll returns all pool entries. +func (p *Pools) GetAll() []*Pool { + p.RLock() + defer p.RUnlock() + var pool []*Pool + for _, v := range p.all { + pool = append(pool, v) + } + return pool +} + // RemoveInvalid removes invalid nodes from the list of pools. func (p *Pools) RemoveInvalid(state *pb.MembershipState) { // Keeps track of valid IP addresses, assigned to active nodes. We do this @@ -212,13 +224,15 @@ func (p *Pool) listenToHeartbeat() error { // This loop can block indefinitely as long as it keeps on receiving pings back. for { - _, err := s.Recv() - if err != nil { + res, err := s.Recv() + if err != nil || res == nil { return err } + // We do this periodic stream receive based approach to defend against network partitions. p.Lock() p.lastEcho = time.Now() + p.healthInfo = *res p.Unlock() } } @@ -235,7 +249,7 @@ func (p *Pool) MonitorHealth() { default: err := p.listenToHeartbeat() if lastErr != nil && err == nil { - glog.Infof("Connection established with %v\n", p.Addr) + glog.Infof("Connection re-established with %v\n", p.Addr) } else if err != nil && lastErr == nil { glog.Warningf("Connection lost with %v. Error: %v\n", p.Addr, err) } @@ -255,3 +269,15 @@ func (p *Pool) IsHealthy() bool { defer p.RUnlock() return time.Since(p.lastEcho) < 4*echoDuration } + +// HealthInfo returns the healthinfo. +func (p *Pool) HealthInfo() pb.HealthInfo { + p.RLock() + defer p.RUnlock() + p.healthInfo.Status = "healthy" + if !p.IsHealthy() { + p.healthInfo.Status = "unhealthy" + } + p.healthInfo.LastEcho = p.lastEcho.Unix() + return p.healthInfo +} diff --git a/conn/raft_server.go b/conn/raft_server.go index 4f63eb5a8fb..ade44f8d5fc 100644 --- a/conn/raft_server.go +++ b/conn/raft_server.go @@ -20,6 +20,7 @@ import ( "context" "encoding/binary" "math/rand" + "strconv" "sync" "sync/atomic" "time" @@ -271,18 +272,34 @@ func (w *RaftServer) RaftMessage(server pb.Raft_RaftMessageServer) error { // Heartbeat rpc call is used to check connection with other workers after worker // tcp server for this instance starts. -func (w *RaftServer) Heartbeat(in *api.Payload, stream pb.Raft_HeartbeatServer) error { +func (w *RaftServer) Heartbeat(_ *api.Payload, stream pb.Raft_HeartbeatServer) error { ticker := time.NewTicker(echoDuration) defer ticker.Stop() + node := w.GetNode() + if node == nil { + return ErrNoNode + } + info := pb.HealthInfo{ + Instance: "alpha", + Addr: node.MyAddr, + Group: strconv.Itoa(int(node.RaftContext.GetGroup())), + Version: x.Version(), + Uptime: int64(time.Since(node.StartTime) / time.Second), + } + if info.Group == "0" { + info.Instance = "zero" + } + ctx := stream.Context() - out := &api.Payload{Data: []byte("beat")} + for { + info.Uptime = int64(time.Since(node.StartTime) / time.Second) select { case <-ctx.Done(): return ctx.Err() case <-ticker.C: - if err := stream.Send(out); err != nil { + if err := stream.Send(&info); err != nil { return err } } diff --git a/dgraph/cmd/alpha/run.go b/dgraph/cmd/alpha/run.go index 3e9f1ed8272..76038e32488 100644 --- a/dgraph/cmd/alpha/run.go +++ b/dgraph/cmd/alpha/run.go @@ -68,7 +68,7 @@ var ( bindall bool // used for computing uptime - beginTime = time.Now() + startTime = time.Now() // Alpha is the sub-command invoked when running "dgraph alpha". Alpha x.SubCommand @@ -278,6 +278,25 @@ func grpcPort() int { func healthCheck(w http.ResponseWriter, r *http.Request) { x.AddCorsHeaders(w) + if _, ok := r.URL.Query()["all"]; ok { + var err error + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + + ctx := attachAccessJwt(context.Background(), r) + var resp *api.Response + if resp, err = (&edgraph.Server{}).HealthAll(ctx); err != nil { + x.SetStatus(w, x.Error, err.Error()) + return + } + if resp == nil { + x.SetStatus(w, x.ErrorNoData, "No state information available.") + return + } + _, _ = w.Write(resp.Json) + return + } + _, ok := r.URL.Query()["live"] if !ok { if err := x.HealthCheck(); err != nil { @@ -297,7 +316,7 @@ func healthCheck(w http.ResponseWriter, r *http.Request) { }{ Version: x.Version(), Instance: "alpha", - Uptime: time.Since(beginTime), + Uptime: time.Since(startTime) / time.Second, } data, _ := json.Marshal(info) @@ -532,6 +551,7 @@ func run() { AclEnabled: secretFile != "", SnapshotAfter: Alpha.Conf.GetInt("snapshot_after"), AbortOlderThan: abortDur, + StartTime: startTime, } setupCustomTokenizers() diff --git a/edgraph/access.go b/edgraph/access.go index dbbd20deb4c..57ac1285597 100644 --- a/edgraph/access.go +++ b/edgraph/access.go @@ -65,7 +65,7 @@ func authorizeQuery(ctx context.Context, parsedReq *gql.Result) error { return nil } -func authorizeState(ctx context.Context) error { +func authorizeGroot(ctx context.Context) error { // always allow access return nil } diff --git a/edgraph/access_ee.go b/edgraph/access_ee.go index 5e204ad4084..e5e22e1c64f 100644 --- a/edgraph/access_ee.go +++ b/edgraph/access_ee.go @@ -784,8 +784,8 @@ func authorizeQuery(ctx context.Context, parsedReq *gql.Result) error { return nil } -// authorizeState authorizes the State operation -func authorizeState(ctx context.Context) error { +// authorizeGroot authorizes the operation for Groot users. +func authorizeGroot(ctx context.Context) error { if len(worker.Config.HmacSecret) == 0 { // the user has not turned on the acl feature return nil @@ -793,7 +793,7 @@ func authorizeState(ctx context.Context) error { var userID string // doAuthorizeState checks if the user is authorized to perform this API request - doAuthorizeState := func() error { + doAuthorizeGroot := func() error { userData, err := extractUserAndGroups(ctx) switch { case err == errNoJwt: @@ -811,7 +811,7 @@ func authorizeState(ctx context.Context) error { } } - return doAuthorizeState() + return doAuthorizeGroot() } func removePredsFromQuery(gqs []*gql.GraphQuery, diff --git a/edgraph/server.go b/edgraph/server.go index ccdc2083c4c..d5ea968bdef 100644 --- a/edgraph/server.go +++ b/edgraph/server.go @@ -30,6 +30,7 @@ import ( "github.com/dgraph-io/dgo/v2/protos/api" "github.com/dgraph-io/dgraph/chunker" + "github.com/dgraph-io/dgraph/conn" "github.com/dgraph-io/dgraph/dgraph/cmd/zero" "github.com/dgraph-io/dgraph/gql" "github.com/dgraph-io/dgraph/posting" @@ -598,22 +599,47 @@ type queryContext struct { span *trace.Span } -// State handles state requests -func (s *Server) State(ctx context.Context) (*api.Response, error) { - return s.doState(ctx, NeedAuthorize) -} +// HealthAll handles health?all requests. +func (s *Server) HealthAll(ctx context.Context) (*api.Response, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + if err := authorizeGroot(ctx); err != nil { + return nil, err + } -func (s *Server) doState(ctx context.Context, authorize int) ( - *api.Response, error) { + var healthAll []pb.HealthInfo + pool := conn.GetPools().GetAll() + for _, p := range pool { + healthAll = append(healthAll, p.HealthInfo()) + } + // Append self. + healthAll = append(healthAll, pb.HealthInfo{ + Instance: "alpha", + Addr: x.WorkerConfig.MyAddr, + Status: "healthy", + Group: strconv.Itoa(int(worker.GroupId())), + Version: x.Version(), + Uptime: int64(time.Since(x.WorkerConfig.StartTime) / time.Second), + LastEcho: time.Now().Unix(), + }) + var err error + var jsonOut []byte + if jsonOut, err = json.Marshal(healthAll); err != nil { + return nil, errors.Errorf("Unable to Marshal. Err %v", err) + } + return &api.Response{Json: jsonOut}, nil +} + +// State handles state requests +func (s *Server) State(ctx context.Context) (*api.Response, error) { if ctx.Err() != nil { return nil, ctx.Err() } - if authorize == NeedAuthorize { - if err := authorizeState(ctx); err != nil { - return nil, err - } + if err := authorizeGroot(ctx); err != nil { + return nil, err } ms := worker.GetMembershipState() diff --git a/protos/pb.proto b/protos/pb.proto index d3d39771689..8138a3af4d3 100644 --- a/protos/pb.proto +++ b/protos/pb.proto @@ -181,6 +181,16 @@ message ConnectionState { uint64 max_pending = 3; // Used to determine the timstamp for reading after bulk load } +message HealthInfo { + string Instance = 1; + string Addr = 2; + string Status = 3; + string Group = 4; // string so group = 0 can be printed in JSON. + string Version = 5; + int64 Uptime = 6; + int64 LastEcho = 7; +} + message Tablet { uint32 group_id = 1; // Served by which group. string predicate = 2; @@ -467,7 +477,7 @@ message RaftBatch { } service Raft { - rpc Heartbeat (api.Payload) returns (stream api.Payload) {} + rpc Heartbeat (api.Payload) returns (stream HealthInfo) {} rpc RaftMessage (stream RaftBatch) returns (api.Payload) {} rpc JoinCluster (RaftContext) returns (api.Payload) {} rpc IsPeer (RaftContext) returns (PeerResponse) {} diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 224b58ddb17..2d1f3a02b46 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -51,7 +51,7 @@ func (x DirectedEdge_Op) String() string { } func (DirectedEdge_Op) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{18, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{19, 0} } type Mutations_DropOp int32 @@ -82,7 +82,7 @@ func (x Mutations_DropOp) String() string { } func (Mutations_DropOp) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{19, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{20, 0} } // HintType represents a hint that will be passed along the mutation and used @@ -115,7 +115,7 @@ func (x Metadata_HintType) String() string { } func (Metadata_HintType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{20, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{21, 0} } type Posting_ValType int32 @@ -167,7 +167,7 @@ func (x Posting_ValType) String() string { } func (Posting_ValType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{24, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{25, 0} } type Posting_PostingType int32 @@ -195,7 +195,7 @@ func (x Posting_PostingType) String() string { } func (Posting_PostingType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{24, 1} + return fileDescriptor_f80abaa17e25ccc8, []int{25, 1} } type SchemaUpdate_Directive int32 @@ -226,7 +226,7 @@ func (x SchemaUpdate_Directive) String() string { } func (SchemaUpdate_Directive) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{37, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{38, 0} } type BackupKey_KeyType int32 @@ -269,7 +269,7 @@ func (x BackupKey_KeyType) String() string { } func (BackupKey_KeyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{54, 0} + return fileDescriptor_f80abaa17e25ccc8, []int{55, 0} } type List struct { @@ -1575,6 +1575,101 @@ func (m *ConnectionState) GetMaxPending() uint64 { return 0 } +type HealthInfo struct { + Instance string `protobuf:"bytes,1,opt,name=Instance,proto3" json:"Instance,omitempty"` + Addr string `protobuf:"bytes,2,opt,name=Addr,proto3" json:"Addr,omitempty"` + Status string `protobuf:"bytes,3,opt,name=Status,proto3" json:"Status,omitempty"` + Group string `protobuf:"bytes,4,opt,name=Group,proto3" json:"Group,omitempty"` + Version string `protobuf:"bytes,5,opt,name=Version,proto3" json:"Version,omitempty"` + Uptime int64 `protobuf:"varint,6,opt,name=Uptime,proto3" json:"Uptime,omitempty"` + LastEcho int64 `protobuf:"varint,7,opt,name=LastEcho,proto3" json:"LastEcho,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HealthInfo) Reset() { *m = HealthInfo{} } +func (m *HealthInfo) String() string { return proto.CompactTextString(m) } +func (*HealthInfo) ProtoMessage() {} +func (*HealthInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_f80abaa17e25ccc8, []int{17} +} +func (m *HealthInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HealthInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HealthInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HealthInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthInfo.Merge(m, src) +} +func (m *HealthInfo) XXX_Size() int { + return m.Size() +} +func (m *HealthInfo) XXX_DiscardUnknown() { + xxx_messageInfo_HealthInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthInfo proto.InternalMessageInfo + +func (m *HealthInfo) GetInstance() string { + if m != nil { + return m.Instance + } + return "" +} + +func (m *HealthInfo) GetAddr() string { + if m != nil { + return m.Addr + } + return "" +} + +func (m *HealthInfo) GetStatus() string { + if m != nil { + return m.Status + } + return "" +} + +func (m *HealthInfo) GetGroup() string { + if m != nil { + return m.Group + } + return "" +} + +func (m *HealthInfo) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *HealthInfo) GetUptime() int64 { + if m != nil { + return m.Uptime + } + return 0 +} + +func (m *HealthInfo) GetLastEcho() int64 { + if m != nil { + return m.LastEcho + } + return 0 +} + type Tablet struct { GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` Predicate string `protobuf:"bytes,2,opt,name=predicate,proto3" json:"predicate,omitempty"` @@ -1592,7 +1687,7 @@ func (m *Tablet) Reset() { *m = Tablet{} } func (m *Tablet) String() string { return proto.CompactTextString(m) } func (*Tablet) ProtoMessage() {} func (*Tablet) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{17} + return fileDescriptor_f80abaa17e25ccc8, []int{18} } func (m *Tablet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1689,7 +1784,7 @@ func (m *DirectedEdge) Reset() { *m = DirectedEdge{} } func (m *DirectedEdge) String() string { return proto.CompactTextString(m) } func (*DirectedEdge) ProtoMessage() {} func (*DirectedEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{18} + return fileDescriptor_f80abaa17e25ccc8, []int{19} } func (m *DirectedEdge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1799,7 +1894,7 @@ func (m *Mutations) Reset() { *m = Mutations{} } func (m *Mutations) String() string { return proto.CompactTextString(m) } func (*Mutations) ProtoMessage() {} func (*Mutations) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{19} + return fileDescriptor_f80abaa17e25ccc8, []int{20} } func (m *Mutations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1896,7 +1991,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{20} + return fileDescriptor_f80abaa17e25ccc8, []int{21} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1949,7 +2044,7 @@ func (m *Snapshot) Reset() { *m = Snapshot{} } func (m *Snapshot) String() string { return proto.CompactTextString(m) } func (*Snapshot) ProtoMessage() {} func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{21} + return fileDescriptor_f80abaa17e25ccc8, []int{22} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2031,7 +2126,7 @@ func (m *Proposal) Reset() { *m = Proposal{} } func (m *Proposal) String() string { return proto.CompactTextString(m) } func (*Proposal) ProtoMessage() {} func (*Proposal) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{22} + return fileDescriptor_f80abaa17e25ccc8, []int{23} } func (m *Proposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2129,7 +2224,7 @@ func (m *KVS) Reset() { *m = KVS{} } func (m *KVS) String() string { return proto.CompactTextString(m) } func (*KVS) ProtoMessage() {} func (*KVS) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{23} + return fileDescriptor_f80abaa17e25ccc8, []int{24} } func (m *KVS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2194,7 +2289,7 @@ func (m *Posting) Reset() { *m = Posting{} } func (m *Posting) String() string { return proto.CompactTextString(m) } func (*Posting) ProtoMessage() {} func (*Posting) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{24} + return fileDescriptor_f80abaa17e25ccc8, []int{25} } func (m *Posting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2315,7 +2410,7 @@ func (m *UidBlock) Reset() { *m = UidBlock{} } func (m *UidBlock) String() string { return proto.CompactTextString(m) } func (*UidBlock) ProtoMessage() {} func (*UidBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{25} + return fileDescriptor_f80abaa17e25ccc8, []int{26} } func (m *UidBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2377,7 +2472,7 @@ func (m *UidPack) Reset() { *m = UidPack{} } func (m *UidPack) String() string { return proto.CompactTextString(m) } func (*UidPack) ProtoMessage() {} func (*UidPack) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{26} + return fileDescriptor_f80abaa17e25ccc8, []int{27} } func (m *UidPack) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2434,7 +2529,7 @@ func (m *PostingList) Reset() { *m = PostingList{} } func (m *PostingList) String() string { return proto.CompactTextString(m) } func (*PostingList) ProtoMessage() {} func (*PostingList) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{27} + return fileDescriptor_f80abaa17e25ccc8, []int{28} } func (m *PostingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2503,7 +2598,7 @@ func (m *FacetParam) Reset() { *m = FacetParam{} } func (m *FacetParam) String() string { return proto.CompactTextString(m) } func (*FacetParam) ProtoMessage() {} func (*FacetParam) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{28} + return fileDescriptor_f80abaa17e25ccc8, []int{29} } func (m *FacetParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2558,7 +2653,7 @@ func (m *FacetParams) Reset() { *m = FacetParams{} } func (m *FacetParams) String() string { return proto.CompactTextString(m) } func (*FacetParams) ProtoMessage() {} func (*FacetParams) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{29} + return fileDescriptor_f80abaa17e25ccc8, []int{30} } func (m *FacetParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2612,7 +2707,7 @@ func (m *Facets) Reset() { *m = Facets{} } func (m *Facets) String() string { return proto.CompactTextString(m) } func (*Facets) ProtoMessage() {} func (*Facets) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{30} + return fileDescriptor_f80abaa17e25ccc8, []int{31} } func (m *Facets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2659,7 +2754,7 @@ func (m *FacetsList) Reset() { *m = FacetsList{} } func (m *FacetsList) String() string { return proto.CompactTextString(m) } func (*FacetsList) ProtoMessage() {} func (*FacetsList) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{31} + return fileDescriptor_f80abaa17e25ccc8, []int{32} } func (m *FacetsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2708,7 +2803,7 @@ func (m *Function) Reset() { *m = Function{} } func (m *Function) String() string { return proto.CompactTextString(m) } func (*Function) ProtoMessage() {} func (*Function) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{32} + return fileDescriptor_f80abaa17e25ccc8, []int{33} } func (m *Function) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2772,7 +2867,7 @@ func (m *FilterTree) Reset() { *m = FilterTree{} } func (m *FilterTree) String() string { return proto.CompactTextString(m) } func (*FilterTree) ProtoMessage() {} func (*FilterTree) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{33} + return fileDescriptor_f80abaa17e25ccc8, []int{34} } func (m *FilterTree) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2838,7 +2933,7 @@ func (m *SchemaRequest) Reset() { *m = SchemaRequest{} } func (m *SchemaRequest) String() string { return proto.CompactTextString(m) } func (*SchemaRequest) ProtoMessage() {} func (*SchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{34} + return fileDescriptor_f80abaa17e25ccc8, []int{35} } func (m *SchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2915,7 +3010,7 @@ func (m *SchemaNode) Reset() { *m = SchemaNode{} } func (m *SchemaNode) String() string { return proto.CompactTextString(m) } func (*SchemaNode) ProtoMessage() {} func (*SchemaNode) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{35} + return fileDescriptor_f80abaa17e25ccc8, []int{36} } func (m *SchemaNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3025,7 +3120,7 @@ func (m *SchemaResult) Reset() { *m = SchemaResult{} } func (m *SchemaResult) String() string { return proto.CompactTextString(m) } func (*SchemaResult) ProtoMessage() {} func (*SchemaResult) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{36} + return fileDescriptor_f80abaa17e25ccc8, []int{37} } func (m *SchemaResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3087,7 +3182,7 @@ func (m *SchemaUpdate) Reset() { *m = SchemaUpdate{} } func (m *SchemaUpdate) String() string { return proto.CompactTextString(m) } func (*SchemaUpdate) ProtoMessage() {} func (*SchemaUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{37} + return fileDescriptor_f80abaa17e25ccc8, []int{38} } func (m *SchemaUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3212,7 +3307,7 @@ func (m *TypeUpdate) Reset() { *m = TypeUpdate{} } func (m *TypeUpdate) String() string { return proto.CompactTextString(m) } func (*TypeUpdate) ProtoMessage() {} func (*TypeUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{38} + return fileDescriptor_f80abaa17e25ccc8, []int{39} } func (m *TypeUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3270,7 +3365,7 @@ func (m *MapEntry) Reset() { *m = MapEntry{} } func (m *MapEntry) String() string { return proto.CompactTextString(m) } func (*MapEntry) ProtoMessage() {} func (*MapEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{39} + return fileDescriptor_f80abaa17e25ccc8, []int{40} } func (m *MapEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3335,7 +3430,7 @@ func (m *MovePredicatePayload) Reset() { *m = MovePredicatePayload{} } func (m *MovePredicatePayload) String() string { return proto.CompactTextString(m) } func (*MovePredicatePayload) ProtoMessage() {} func (*MovePredicatePayload) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{40} + return fileDescriptor_f80abaa17e25ccc8, []int{41} } func (m *MovePredicatePayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3411,7 +3506,7 @@ func (m *TxnStatus) Reset() { *m = TxnStatus{} } func (m *TxnStatus) String() string { return proto.CompactTextString(m) } func (*TxnStatus) ProtoMessage() {} func (*TxnStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{41} + return fileDescriptor_f80abaa17e25ccc8, []int{42} } func (m *TxnStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3467,7 +3562,7 @@ func (m *OracleDelta) Reset() { *m = OracleDelta{} } func (m *OracleDelta) String() string { return proto.CompactTextString(m) } func (*OracleDelta) ProtoMessage() {} func (*OracleDelta) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{42} + return fileDescriptor_f80abaa17e25ccc8, []int{43} } func (m *OracleDelta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3528,7 +3623,7 @@ func (m *TxnTimestamps) Reset() { *m = TxnTimestamps{} } func (m *TxnTimestamps) String() string { return proto.CompactTextString(m) } func (*TxnTimestamps) ProtoMessage() {} func (*TxnTimestamps) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{43} + return fileDescriptor_f80abaa17e25ccc8, []int{44} } func (m *TxnTimestamps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3575,7 +3670,7 @@ func (m *PeerResponse) Reset() { *m = PeerResponse{} } func (m *PeerResponse) String() string { return proto.CompactTextString(m) } func (*PeerResponse) ProtoMessage() {} func (*PeerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{44} + return fileDescriptor_f80abaa17e25ccc8, []int{45} } func (m *PeerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3623,7 +3718,7 @@ func (m *RaftBatch) Reset() { *m = RaftBatch{} } func (m *RaftBatch) String() string { return proto.CompactTextString(m) } func (*RaftBatch) ProtoMessage() {} func (*RaftBatch) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{45} + return fileDescriptor_f80abaa17e25ccc8, []int{46} } func (m *RaftBatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3677,7 +3772,7 @@ func (m *SubscriptionRequest) Reset() { *m = SubscriptionRequest{} } func (m *SubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*SubscriptionRequest) ProtoMessage() {} func (*SubscriptionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{46} + return fileDescriptor_f80abaa17e25ccc8, []int{47} } func (m *SubscriptionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3724,7 +3819,7 @@ func (m *SubscriptionResponse) Reset() { *m = SubscriptionResponse{} } func (m *SubscriptionResponse) String() string { return proto.CompactTextString(m) } func (*SubscriptionResponse) ProtoMessage() {} func (*SubscriptionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{47} + return fileDescriptor_f80abaa17e25ccc8, []int{48} } func (m *SubscriptionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3773,7 +3868,7 @@ func (m *Num) Reset() { *m = Num{} } func (m *Num) String() string { return proto.CompactTextString(m) } func (*Num) ProtoMessage() {} func (*Num) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{48} + return fileDescriptor_f80abaa17e25ccc8, []int{49} } func (m *Num) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3837,7 +3932,7 @@ func (m *AssignedIds) Reset() { *m = AssignedIds{} } func (m *AssignedIds) String() string { return proto.CompactTextString(m) } func (*AssignedIds) ProtoMessage() {} func (*AssignedIds) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{49} + return fileDescriptor_f80abaa17e25ccc8, []int{50} } func (m *AssignedIds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3899,7 +3994,7 @@ func (m *SnapshotMeta) Reset() { *m = SnapshotMeta{} } func (m *SnapshotMeta) String() string { return proto.CompactTextString(m) } func (*SnapshotMeta) ProtoMessage() {} func (*SnapshotMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{50} + return fileDescriptor_f80abaa17e25ccc8, []int{51} } func (m *SnapshotMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3956,7 +4051,7 @@ func (m *Status) Reset() { *m = Status{} } func (m *Status) String() string { return proto.CompactTextString(m) } func (*Status) ProtoMessage() {} func (*Status) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{51} + return fileDescriptor_f80abaa17e25ccc8, []int{52} } func (m *Status) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4023,7 +4118,7 @@ func (m *BackupRequest) Reset() { *m = BackupRequest{} } func (m *BackupRequest) String() string { return proto.CompactTextString(m) } func (*BackupRequest) ProtoMessage() {} func (*BackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{52} + return fileDescriptor_f80abaa17e25ccc8, []int{53} } func (m *BackupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4136,7 +4231,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} func (*ExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{53} + return fileDescriptor_f80abaa17e25ccc8, []int{54} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4210,7 +4305,7 @@ func (m *BackupKey) Reset() { *m = BackupKey{} } func (m *BackupKey) String() string { return proto.CompactTextString(m) } func (*BackupKey) ProtoMessage() {} func (*BackupKey) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{54} + return fileDescriptor_f80abaa17e25ccc8, []int{55} } func (m *BackupKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4296,7 +4391,7 @@ func (m *BackupPostingList) Reset() { *m = BackupPostingList{} } func (m *BackupPostingList) String() string { return proto.CompactTextString(m) } func (*BackupPostingList) ProtoMessage() {} func (*BackupPostingList) Descriptor() ([]byte, []int) { - return fileDescriptor_f80abaa17e25ccc8, []int{55} + return fileDescriptor_f80abaa17e25ccc8, []int{56} } func (m *BackupPostingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4383,6 +4478,7 @@ func init() { proto.RegisterMapType((map[uint32]*Group)(nil), "pb.MembershipState.GroupsEntry") proto.RegisterMapType((map[uint64]*Member)(nil), "pb.MembershipState.ZerosEntry") proto.RegisterType((*ConnectionState)(nil), "pb.ConnectionState") + proto.RegisterType((*HealthInfo)(nil), "pb.HealthInfo") proto.RegisterType((*Tablet)(nil), "pb.Tablet") proto.RegisterType((*DirectedEdge)(nil), "pb.DirectedEdge") proto.RegisterType((*Mutations)(nil), "pb.Mutations") @@ -4429,258 +4525,264 @@ func init() { func init() { proto.RegisterFile("pb.proto", fileDescriptor_f80abaa17e25ccc8) } var fileDescriptor_f80abaa17e25ccc8 = []byte{ - // 4015 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x3a, 0x4b, 0x70, 0x1b, 0x47, - 0x76, 0x9a, 0x01, 0x30, 0x98, 0x79, 0x00, 0x28, 0x78, 0xac, 0x95, 0x61, 0xda, 0x2b, 0xd1, 0x63, - 0xcb, 0xa2, 0xa5, 0x15, 0x25, 0xd3, 0x4e, 0x65, 0xed, 0xaa, 0x1c, 0x28, 0x12, 0x92, 0x69, 0x51, - 0x20, 0xb7, 0x01, 0xca, 0x59, 0x1f, 0x82, 0x1a, 0xce, 0x34, 0xc9, 0x59, 0x0e, 0x66, 0x26, 0xd3, - 0x03, 0x06, 0xf4, 0x2d, 0x95, 0x4a, 0x4e, 0xc9, 0x29, 0x97, 0x3d, 0xa4, 0x92, 0x9c, 0x73, 0x49, - 0x55, 0x4e, 0xa9, 0xe4, 0x96, 0x53, 0x2a, 0xa7, 0xdc, 0x73, 0x48, 0xca, 0xc9, 0x2d, 0xc7, 0x54, - 0xe5, 0xbc, 0xf5, 0x5e, 0xf7, 0xfc, 0x20, 0x48, 0x5a, 0x6f, 0xd5, 0x9e, 0xd0, 0xef, 0xd3, 0xbf, - 0xf7, 0x5e, 0xbf, 0xdf, 0x00, 0xcc, 0xe4, 0x64, 0x2b, 0x49, 0xe3, 0x2c, 0xb6, 0xf5, 0xe4, 0x64, - 0xdd, 0x72, 0x93, 0x40, 0x82, 0xeb, 0x77, 0xcf, 0x82, 0xec, 0x7c, 0x7e, 0xb2, 0xe5, 0xc5, 0xb3, - 0x87, 0xfe, 0x59, 0xea, 0x26, 0xe7, 0x0f, 0x82, 0xf8, 0xe1, 0x89, 0xeb, 0x9f, 0xf1, 0xf4, 0x61, - 0x72, 0xf2, 0x30, 0x9f, 0xe7, 0xac, 0x43, 0xf3, 0x20, 0x10, 0x99, 0x6d, 0x43, 0x73, 0x1e, 0xf8, - 0x62, 0xa0, 0x6d, 0x34, 0x36, 0x0d, 0x46, 0x63, 0xe7, 0x39, 0x58, 0x13, 0x57, 0x5c, 0xbc, 0x70, - 0xc3, 0x39, 0xb7, 0xfb, 0xd0, 0xb8, 0x74, 0xc3, 0x81, 0xb6, 0xa1, 0x6d, 0x76, 0x19, 0x0e, 0xed, - 0x2d, 0x30, 0x2f, 0xdd, 0x70, 0x9a, 0x5d, 0x25, 0x7c, 0xa0, 0x6f, 0x68, 0x9b, 0x6b, 0xdb, 0x6f, - 0x6f, 0x25, 0x27, 0x5b, 0x47, 0xb1, 0xc8, 0x82, 0xe8, 0x6c, 0xeb, 0x85, 0x1b, 0x4e, 0xae, 0x12, - 0xce, 0xda, 0x97, 0x72, 0xe0, 0x1c, 0x42, 0x67, 0x9c, 0x7a, 0x4f, 0xe6, 0x91, 0x97, 0x05, 0x71, - 0x84, 0x3b, 0x46, 0xee, 0x8c, 0xd3, 0x8a, 0x16, 0xa3, 0x31, 0xe2, 0xdc, 0xf4, 0x4c, 0x0c, 0x1a, - 0x1b, 0x0d, 0xc4, 0xe1, 0xd8, 0x1e, 0x40, 0x3b, 0x10, 0xbb, 0xf1, 0x3c, 0xca, 0x06, 0xcd, 0x0d, - 0x6d, 0xd3, 0x64, 0x39, 0xe8, 0xfc, 0x4d, 0x03, 0x5a, 0x3f, 0x9b, 0xf3, 0xf4, 0x8a, 0xe6, 0x65, - 0x59, 0x9a, 0xaf, 0x85, 0x63, 0xfb, 0x06, 0xb4, 0x42, 0x37, 0x3a, 0x13, 0x03, 0x9d, 0x16, 0x93, - 0x80, 0xfd, 0x1e, 0x58, 0xee, 0x69, 0xc6, 0xd3, 0xe9, 0x3c, 0xf0, 0x07, 0x8d, 0x0d, 0x6d, 0xd3, - 0x60, 0x26, 0x21, 0x8e, 0x03, 0xdf, 0x7e, 0x17, 0x4c, 0x3f, 0x9e, 0x7a, 0xd5, 0xbd, 0xfc, 0x98, - 0xf6, 0xb2, 0x3f, 0x04, 0x73, 0x1e, 0xf8, 0xd3, 0x30, 0x10, 0xd9, 0xa0, 0xb5, 0xa1, 0x6d, 0x76, - 0xb6, 0x4d, 0xbc, 0x2c, 0xca, 0x8e, 0xb5, 0xe7, 0x81, 0x4f, 0x42, 0xbc, 0x07, 0xa6, 0x48, 0xbd, - 0xe9, 0xe9, 0x3c, 0xf2, 0x06, 0x06, 0x31, 0x5d, 0x47, 0xa6, 0xca, 0xad, 0x59, 0x5b, 0x48, 0x00, - 0xaf, 0x95, 0xf2, 0x4b, 0x9e, 0x0a, 0x3e, 0x68, 0xcb, 0xad, 0x14, 0x68, 0x3f, 0x82, 0xce, 0xa9, - 0xeb, 0xf1, 0x6c, 0x9a, 0xb8, 0xa9, 0x3b, 0x1b, 0x98, 0xe5, 0x42, 0x4f, 0x10, 0x7d, 0x84, 0x58, - 0xc1, 0xe0, 0xb4, 0x00, 0xec, 0xcf, 0xa0, 0x47, 0x90, 0x98, 0x9e, 0x06, 0x61, 0xc6, 0xd3, 0x81, - 0x45, 0x73, 0xd6, 0x68, 0x0e, 0x61, 0x26, 0x29, 0xe7, 0xac, 0x2b, 0x99, 0x24, 0xc6, 0xfe, 0x31, - 0x00, 0x5f, 0x24, 0x6e, 0xe4, 0x4f, 0xdd, 0x30, 0x1c, 0x00, 0x9d, 0xc1, 0x92, 0x98, 0x9d, 0x30, - 0xb4, 0xdf, 0xc1, 0xf3, 0xb9, 0xfe, 0x34, 0x13, 0x83, 0xde, 0x86, 0xb6, 0xd9, 0x64, 0x06, 0x82, - 0x13, 0x81, 0x72, 0xf5, 0x5c, 0xef, 0x9c, 0x0f, 0xd6, 0x36, 0xb4, 0xcd, 0x16, 0x93, 0x00, 0x62, - 0x4f, 0x83, 0x54, 0x64, 0x83, 0xeb, 0x12, 0x4b, 0x80, 0xb3, 0x0d, 0x16, 0x59, 0x0f, 0x49, 0xe7, - 0x0e, 0x18, 0x97, 0x08, 0x48, 0x23, 0xeb, 0x6c, 0xf7, 0xf0, 0x78, 0x85, 0x81, 0x31, 0x45, 0x74, - 0x6e, 0x81, 0x79, 0xe0, 0x46, 0x67, 0xb9, 0x55, 0xa2, 0xda, 0x68, 0x82, 0xc5, 0x68, 0xec, 0xfc, - 0x52, 0x07, 0x83, 0x71, 0x31, 0x0f, 0x33, 0xfb, 0x2e, 0x00, 0x2a, 0x65, 0xe6, 0x66, 0x69, 0xb0, - 0x50, 0xab, 0x96, 0x6a, 0xb1, 0xe6, 0x81, 0xff, 0x9c, 0x48, 0xf6, 0x23, 0xe8, 0xd2, 0xea, 0x39, - 0xab, 0x5e, 0x1e, 0xa0, 0x38, 0x1f, 0xeb, 0x10, 0x8b, 0x9a, 0x71, 0x13, 0x0c, 0xb2, 0x03, 0x69, - 0x8b, 0x3d, 0xa6, 0x20, 0xfb, 0x0e, 0xac, 0x05, 0x51, 0x86, 0x7a, 0xf2, 0xb2, 0xa9, 0xcf, 0x45, - 0x6e, 0x28, 0xbd, 0x02, 0xbb, 0xc7, 0x45, 0x66, 0x7f, 0x0a, 0x52, 0xd8, 0xf9, 0x86, 0x2d, 0xda, - 0x70, 0xad, 0x50, 0xa2, 0x90, 0x3b, 0x12, 0x8f, 0xda, 0xf1, 0x01, 0x74, 0xf0, 0x7e, 0xf9, 0x0c, - 0x83, 0x66, 0x74, 0xe9, 0x36, 0x4a, 0x1c, 0x0c, 0x90, 0x41, 0xb1, 0xa3, 0x68, 0xd0, 0x18, 0xa5, - 0xf1, 0xd0, 0xd8, 0x19, 0x42, 0xeb, 0x30, 0xf5, 0x79, 0xba, 0xf2, 0x3d, 0xd8, 0xd0, 0xf4, 0xb9, - 0xf0, 0xe8, 0xa9, 0x9a, 0x8c, 0xc6, 0xe5, 0x1b, 0x69, 0x54, 0xde, 0x88, 0xf3, 0xd7, 0x1a, 0x74, - 0xc6, 0x71, 0x9a, 0x3d, 0xe7, 0x42, 0xb8, 0x67, 0xdc, 0xbe, 0x0d, 0xad, 0x18, 0x97, 0x55, 0x12, - 0xb6, 0xf0, 0x4c, 0xb4, 0x0f, 0x93, 0xf8, 0x25, 0x3d, 0xe8, 0xaf, 0xd6, 0x03, 0xda, 0x0e, 0xbd, - 0xae, 0x86, 0xb2, 0x1d, 0x7a, 0x5b, 0x37, 0xc1, 0x88, 0x4f, 0x4f, 0x05, 0x97, 0xb2, 0x6c, 0x31, - 0x05, 0xbd, 0xd2, 0x04, 0x9d, 0xdf, 0x01, 0xc0, 0xf3, 0xfd, 0x40, 0x2b, 0x70, 0xce, 0xa1, 0xc3, - 0xdc, 0xd3, 0x6c, 0x37, 0x8e, 0x32, 0xbe, 0xc8, 0xec, 0x35, 0xd0, 0x03, 0x9f, 0x44, 0x64, 0x30, - 0x3d, 0xf0, 0xf1, 0x70, 0x67, 0x69, 0x3c, 0x4f, 0x48, 0x42, 0x3d, 0x26, 0x01, 0x12, 0xa5, 0xef, - 0xa7, 0x74, 0x62, 0x14, 0xa5, 0xef, 0xa7, 0xf6, 0x6d, 0xe8, 0x88, 0xc8, 0x4d, 0xc4, 0x79, 0x9c, - 0xe1, 0xe1, 0x9a, 0x74, 0x38, 0xc8, 0x51, 0x13, 0xe1, 0xfc, 0xaf, 0x06, 0xc6, 0x73, 0x3e, 0x3b, - 0xe1, 0xe9, 0x4b, 0xbb, 0xbc, 0x0b, 0x26, 0x2d, 0x3c, 0x0d, 0x7c, 0xb5, 0x51, 0x9b, 0xe0, 0x7d, - 0x7f, 0xe5, 0x56, 0x37, 0xc1, 0x08, 0xb9, 0x8b, 0xc2, 0x97, 0x76, 0xa6, 0x20, 0x94, 0x8d, 0x3b, - 0x9b, 0xfa, 0xdc, 0xf5, 0xc9, 0x1d, 0x99, 0xcc, 0x70, 0x67, 0x7b, 0xdc, 0xf5, 0xf1, 0x6c, 0xa1, - 0x2b, 0xb2, 0xe9, 0x3c, 0xf1, 0xdd, 0x8c, 0x93, 0x1b, 0x6a, 0xa2, 0xe1, 0x88, 0xec, 0x98, 0x30, - 0xf6, 0x3d, 0x78, 0xcb, 0x0b, 0xe7, 0x02, 0x7d, 0x60, 0x10, 0x9d, 0xc6, 0xd3, 0x38, 0x0a, 0xaf, - 0x48, 0xbe, 0x26, 0xbb, 0xae, 0x08, 0xfb, 0xd1, 0x69, 0x7c, 0x18, 0x85, 0x57, 0xf6, 0x47, 0xb0, - 0x76, 0x1a, 0xa7, 0x1e, 0x9f, 0x16, 0x47, 0x5e, 0x23, 0xc6, 0x2e, 0x61, 0x9f, 0xca, 0x73, 0x3b, - 0xff, 0xa8, 0x43, 0x8b, 0xc6, 0xf6, 0x23, 0x68, 0xcf, 0xe8, 0xda, 0xf9, 0x1b, 0xbf, 0x89, 0x7a, - 0x20, 0xda, 0x96, 0x94, 0x87, 0x18, 0x46, 0x59, 0x7a, 0xc5, 0x72, 0x36, 0x9c, 0x91, 0xb9, 0x27, - 0x21, 0xcf, 0x84, 0xb2, 0x9b, 0xca, 0x8c, 0x89, 0x24, 0xa8, 0x19, 0x8a, 0x6d, 0x59, 0xf8, 0x8d, - 0x65, 0xe1, 0xdb, 0xeb, 0x60, 0x7a, 0xe7, 0xdc, 0xbb, 0x10, 0xf3, 0x99, 0x52, 0x4d, 0x01, 0xaf, - 0x3f, 0x81, 0x6e, 0xf5, 0x1c, 0x18, 0xd5, 0x2e, 0xf8, 0x15, 0xa9, 0xa7, 0xc9, 0x70, 0x68, 0x6f, - 0x40, 0x8b, 0xfc, 0x00, 0x29, 0xa7, 0xb3, 0x0d, 0x78, 0x1c, 0x39, 0x85, 0x49, 0xc2, 0x97, 0xfa, - 0x4f, 0x35, 0x5c, 0xa7, 0x7a, 0xba, 0xea, 0x3a, 0xd6, 0xab, 0xd7, 0x91, 0x53, 0x2a, 0xeb, 0x38, - 0x31, 0xb4, 0x0f, 0x02, 0x8f, 0x47, 0x82, 0x62, 0xdf, 0x5c, 0xf0, 0xe2, 0xcd, 0xe2, 0x18, 0xaf, - 0x32, 0x73, 0x17, 0xa3, 0xd8, 0xe7, 0x82, 0xd6, 0x69, 0xb2, 0x02, 0x46, 0x1a, 0x5f, 0x24, 0x41, - 0x7a, 0x35, 0x91, 0x42, 0x68, 0xb0, 0x02, 0xc6, 0xe0, 0xc2, 0x23, 0xdc, 0xcc, 0xcf, 0xe3, 0x98, - 0x02, 0x9d, 0xbf, 0x6d, 0x40, 0xf7, 0x5b, 0x9e, 0xc6, 0x47, 0x69, 0x9c, 0xc4, 0xc2, 0x0d, 0xed, - 0x9d, 0xba, 0x38, 0xa5, 0xda, 0x36, 0xf0, 0xb4, 0x55, 0xb6, 0xad, 0x71, 0x21, 0x5f, 0xa9, 0x8e, - 0xaa, 0xc0, 0x1d, 0x30, 0xa4, 0x3a, 0x57, 0xc8, 0x4c, 0x51, 0x90, 0x47, 0x2a, 0x90, 0xce, 0x5a, - 0x97, 0x87, 0xa2, 0xd8, 0xb7, 0x00, 0x66, 0xee, 0xe2, 0x80, 0xbb, 0x82, 0xef, 0xfb, 0xf9, 0xab, - 0x2a, 0x31, 0x4a, 0x1a, 0x93, 0x45, 0x34, 0x11, 0x64, 0xf4, 0x52, 0x1a, 0x04, 0xdb, 0xef, 0x83, - 0x35, 0x73, 0x17, 0xf8, 0xbc, 0xf7, 0x7d, 0x65, 0xf4, 0x25, 0xc2, 0xfe, 0x00, 0x1a, 0xd9, 0x22, - 0x22, 0x5f, 0x89, 0xa1, 0x14, 0xf3, 0xa4, 0xc9, 0x22, 0x52, 0x8e, 0x80, 0x21, 0x2d, 0xd7, 0xa0, - 0x59, 0x6a, 0xb0, 0x0f, 0x0d, 0x2f, 0xf0, 0x29, 0x96, 0x5a, 0x0c, 0x87, 0xf6, 0x1d, 0x68, 0x87, - 0x52, 0x5b, 0x14, 0x2f, 0x3b, 0xdb, 0x1d, 0xe9, 0x66, 0x08, 0xc5, 0x72, 0xda, 0xfa, 0xef, 0xc1, - 0xf5, 0x25, 0x71, 0x55, 0xed, 0xa3, 0x27, 0x57, 0xbf, 0x51, 0xb5, 0x8f, 0x66, 0xd5, 0x26, 0xfe, - 0xb3, 0x01, 0xd7, 0x95, 0x91, 0x9e, 0x07, 0xc9, 0x38, 0xc3, 0x47, 0x3b, 0x80, 0x36, 0xf9, 0x4a, - 0x65, 0x1f, 0x4d, 0x96, 0x83, 0xf6, 0xef, 0x82, 0x41, 0x8f, 0x33, 0x7f, 0x3f, 0xb7, 0x4b, 0xe1, - 0x17, 0xd3, 0xe5, 0x7b, 0x52, 0x9a, 0x53, 0xec, 0xf6, 0xe7, 0xd0, 0xfa, 0x8e, 0xa7, 0xb1, 0xf4, - 0xfd, 0x9d, 0xed, 0x5b, 0xab, 0xe6, 0xa1, 0x09, 0xa8, 0x69, 0x92, 0xf9, 0xb7, 0xa8, 0xa3, 0x8f, - 0xd0, 0xdb, 0xcf, 0xe2, 0x4b, 0xee, 0x0f, 0xda, 0x74, 0xa2, 0xaa, 0x19, 0xe5, 0xa4, 0x5c, 0x29, - 0xe6, 0x4a, 0xa5, 0x58, 0xaf, 0x51, 0xca, 0x1e, 0x74, 0x2a, 0x52, 0x58, 0xa1, 0x90, 0xdb, 0xf5, - 0x07, 0x6b, 0x15, 0x7e, 0xa8, 0xfa, 0xee, 0xf7, 0x00, 0x4a, 0x99, 0xfc, 0xa6, 0xde, 0xc3, 0xf9, - 0x63, 0x0d, 0xae, 0xef, 0xc6, 0x51, 0xc4, 0x29, 0x27, 0x94, 0x1a, 0x2e, 0x1f, 0x91, 0xf6, 0xca, - 0x47, 0xf4, 0x09, 0xb4, 0x04, 0x32, 0xab, 0xd5, 0xdf, 0x5e, 0xa1, 0x32, 0x26, 0x39, 0xd0, 0x4b, - 0xce, 0xdc, 0xc5, 0x34, 0xe1, 0x91, 0x1f, 0x44, 0x67, 0xb9, 0x97, 0x9c, 0xb9, 0x8b, 0x23, 0x89, - 0x71, 0xfe, 0x59, 0x03, 0x43, 0xbe, 0xbf, 0x5a, 0x48, 0xd2, 0xea, 0x21, 0xe9, 0x7d, 0xb0, 0x92, - 0x94, 0xfb, 0x81, 0x97, 0xef, 0x6a, 0xb1, 0x12, 0x41, 0x49, 0x1f, 0x06, 0x02, 0x5a, 0xde, 0x64, - 0x12, 0x40, 0xac, 0x48, 0x5c, 0x4f, 0xe6, 0xb5, 0x0d, 0x26, 0x01, 0x0c, 0x64, 0x52, 0x87, 0xa4, - 0x3b, 0x93, 0x29, 0x08, 0x13, 0x72, 0x0a, 0xf2, 0x14, 0x86, 0x2c, 0x22, 0x99, 0x88, 0xa0, 0xf8, - 0xf3, 0x0e, 0xb4, 0x91, 0x09, 0x1d, 0x13, 0xc8, 0x0c, 0x00, 0xc1, 0x89, 0x70, 0xfe, 0x4e, 0x87, - 0xee, 0x5e, 0x90, 0x72, 0x2f, 0xe3, 0xfe, 0xd0, 0x3f, 0xa3, 0xe5, 0x79, 0x94, 0x05, 0xd9, 0x95, - 0x0a, 0xb5, 0x0a, 0x2a, 0x32, 0x21, 0xbd, 0x5e, 0x19, 0x48, 0x25, 0x35, 0xa8, 0x98, 0x91, 0x80, - 0xbd, 0x0d, 0x20, 0x73, 0x44, 0x2a, 0x68, 0x9a, 0xaf, 0x2e, 0x68, 0x2c, 0x62, 0xc3, 0x21, 0x4a, - 0x4e, 0xce, 0x09, 0x64, 0x18, 0x36, 0xa8, 0xda, 0x99, 0xe3, 0x43, 0xa0, 0xd4, 0xea, 0x84, 0x87, - 0x64, 0xe8, 0x94, 0x5a, 0x9d, 0xf0, 0xb0, 0x48, 0x68, 0xdb, 0xf2, 0x38, 0x38, 0xb6, 0x3f, 0x04, - 0x3d, 0x4e, 0x48, 0x2a, 0x6a, 0xc3, 0xea, 0xc5, 0xb6, 0x0e, 0x13, 0xa6, 0xc7, 0x09, 0x9a, 0x87, - 0xcc, 0xde, 0x07, 0x96, 0x7a, 0x1c, 0xe8, 0xc4, 0x28, 0x97, 0x64, 0x8a, 0xe2, 0xdc, 0x04, 0xfd, - 0x30, 0xb1, 0xdb, 0xd0, 0x18, 0x0f, 0x27, 0xfd, 0x6b, 0x38, 0xd8, 0x1b, 0x1e, 0xf4, 0x35, 0xe7, - 0x7b, 0x1d, 0xac, 0xe7, 0xf3, 0xcc, 0x45, 0x63, 0x13, 0xaf, 0xd3, 0xf6, 0xbb, 0x60, 0x8a, 0xcc, - 0x4d, 0x29, 0x10, 0x48, 0xb7, 0xd4, 0x26, 0x78, 0x22, 0xec, 0x8f, 0xa1, 0xc5, 0xfd, 0x33, 0x9e, - 0x7b, 0x8b, 0xfe, 0xf2, 0x39, 0x99, 0x24, 0xdb, 0x9b, 0x60, 0x08, 0xef, 0x9c, 0xcf, 0xdc, 0x41, - 0xb3, 0x64, 0x1c, 0x13, 0x46, 0xe6, 0x1f, 0x4c, 0xd1, 0xed, 0x8f, 0xa0, 0x85, 0x92, 0x16, 0x2a, - 0xd3, 0xa5, 0xdc, 0x18, 0x85, 0xaa, 0xd8, 0x24, 0xd1, 0x7e, 0x00, 0x6d, 0x3f, 0x8d, 0x93, 0x69, - 0x9c, 0x90, 0xcc, 0xd6, 0xb6, 0x6f, 0x90, 0xd1, 0xe7, 0xb7, 0xd9, 0xda, 0x4b, 0xe3, 0xe4, 0x30, - 0x61, 0x86, 0x4f, 0xbf, 0x58, 0xd4, 0x10, 0xbb, 0xd4, 0xaf, 0xf4, 0x12, 0x16, 0x62, 0x64, 0x11, - 0xbb, 0x09, 0xe6, 0x8c, 0x67, 0xae, 0xef, 0x66, 0xae, 0x72, 0x16, 0x5d, 0xf9, 0x86, 0x24, 0x8e, - 0x15, 0x54, 0xe7, 0x21, 0x18, 0x72, 0x69, 0xdb, 0x84, 0xe6, 0xe8, 0x70, 0x34, 0x94, 0x02, 0xdd, - 0x39, 0x38, 0xe8, 0x6b, 0x88, 0xda, 0xdb, 0x99, 0xec, 0xf4, 0x75, 0x1c, 0x4d, 0x7e, 0x7e, 0x34, - 0xec, 0x37, 0x9c, 0x7f, 0xd3, 0xc0, 0xcc, 0xd7, 0xb1, 0xbf, 0x04, 0xc0, 0x57, 0x32, 0x3d, 0x0f, - 0xa2, 0x22, 0xa6, 0xbe, 0x57, 0xdd, 0x69, 0xeb, 0x28, 0xe5, 0xfe, 0x57, 0x48, 0x95, 0xde, 0x95, - 0x1e, 0x15, 0xc1, 0xeb, 0x63, 0x58, 0xab, 0x13, 0x57, 0x24, 0x17, 0xf7, 0xab, 0x6e, 0x66, 0x6d, - 0xfb, 0x47, 0xb5, 0xa5, 0x71, 0x26, 0x19, 0x6a, 0xc5, 0xe3, 0x3c, 0x00, 0x33, 0x47, 0xdb, 0x1d, - 0x68, 0xef, 0x0d, 0x9f, 0xec, 0x1c, 0x1f, 0xa0, 0x91, 0x00, 0x18, 0xe3, 0xfd, 0xd1, 0xd3, 0x83, - 0xa1, 0xbc, 0xd6, 0xc1, 0xfe, 0x78, 0xd2, 0xd7, 0x9d, 0xbf, 0xd4, 0xc0, 0xcc, 0x43, 0x98, 0xfd, - 0x09, 0xc6, 0x1e, 0x8a, 0x94, 0xca, 0x35, 0x51, 0x2d, 0x5a, 0xc9, 0xa4, 0x59, 0x4e, 0x47, 0xa3, - 0x0f, 0x22, 0x9f, 0x2f, 0xf2, 0xa0, 0x46, 0x40, 0x35, 0x8f, 0x6f, 0xd4, 0x4a, 0x49, 0x2c, 0x49, - 0xe2, 0x88, 0xab, 0x1c, 0x85, 0xc6, 0x64, 0x83, 0x41, 0xe4, 0xd1, 0x9b, 0x6f, 0x29, 0x1b, 0x44, - 0x78, 0x22, 0x9c, 0xbf, 0xd2, 0xc1, 0x2c, 0xf2, 0x96, 0xfb, 0x60, 0xcd, 0x72, 0x2b, 0x50, 0xfe, - 0xb0, 0x57, 0x33, 0x0d, 0x56, 0xd2, 0xed, 0x9b, 0xa0, 0x5f, 0x5c, 0x2a, 0x8b, 0x34, 0x90, 0xeb, - 0xd9, 0x0b, 0xa6, 0x5f, 0x5c, 0x96, 0x0e, 0xb5, 0xf5, 0x46, 0x87, 0x7a, 0x17, 0xae, 0x7b, 0x21, - 0x77, 0xa3, 0x69, 0xe9, 0x0f, 0xe5, 0xcb, 0x5e, 0x23, 0xf4, 0x51, 0xe1, 0x14, 0x95, 0xb6, 0xda, - 0xa5, 0xb6, 0xee, 0x40, 0xcb, 0xe7, 0x61, 0xe6, 0x56, 0x4b, 0xf9, 0xc3, 0xd4, 0xf5, 0x42, 0xbe, - 0x87, 0x68, 0x26, 0xa9, 0x68, 0x9c, 0x79, 0x52, 0x55, 0x35, 0xce, 0x5c, 0x0f, 0xac, 0xa0, 0x96, - 0x62, 0x86, 0x8a, 0x98, 0x9d, 0x4f, 0xa1, 0xf1, 0xec, 0xc5, 0x58, 0xdd, 0x55, 0x7b, 0xe9, 0xae, - 0xb9, 0xb0, 0xf5, 0x52, 0xd8, 0xce, 0xff, 0x37, 0xa0, 0xad, 0xdc, 0x1b, 0x9e, 0x7b, 0x5e, 0x54, - 0x2a, 0x38, 0xac, 0xa7, 0x28, 0x85, 0x9f, 0xac, 0xb6, 0x7d, 0x1a, 0x6f, 0x6e, 0xfb, 0xd8, 0x5f, - 0x42, 0x37, 0x91, 0xb4, 0xaa, 0x67, 0x7d, 0xa7, 0x3a, 0x47, 0xfd, 0xd2, 0xbc, 0x4e, 0x52, 0x02, - 0x68, 0x0c, 0x54, 0x13, 0x67, 0xee, 0x19, 0xa9, 0xa8, 0xcb, 0xda, 0x08, 0x4f, 0xdc, 0xb3, 0x57, - 0xf8, 0xd7, 0x5f, 0xc3, 0x4d, 0x62, 0x45, 0x16, 0x27, 0x83, 0x2e, 0xb9, 0x3e, 0x74, 0xad, 0x55, - 0xaf, 0xd7, 0xab, 0x7b, 0xbd, 0xf7, 0xc0, 0xf2, 0xe2, 0xd9, 0x2c, 0x20, 0xda, 0x9a, 0xaa, 0x25, - 0x08, 0x31, 0x11, 0xce, 0x9f, 0x69, 0xd0, 0x56, 0xb7, 0x7d, 0xe9, 0x4d, 0x3d, 0xde, 0x1f, 0xed, - 0xb0, 0x9f, 0xf7, 0x35, 0xf4, 0x19, 0xfb, 0xa3, 0x49, 0x5f, 0xb7, 0x2d, 0x68, 0x3d, 0x39, 0x38, - 0xdc, 0x99, 0xf4, 0x1b, 0xf8, 0xce, 0x1e, 0x1f, 0x1e, 0x1e, 0xf4, 0x9b, 0x76, 0x17, 0xcc, 0xbd, - 0x9d, 0xc9, 0x70, 0xb2, 0xff, 0x7c, 0xd8, 0x6f, 0x21, 0xef, 0xd3, 0xe1, 0x61, 0xdf, 0xc0, 0xc1, - 0xf1, 0xfe, 0x5e, 0xbf, 0x8d, 0xf4, 0xa3, 0x9d, 0xf1, 0xf8, 0x9b, 0x43, 0xb6, 0xd7, 0x37, 0xe9, - 0xad, 0x4e, 0xd8, 0xfe, 0xe8, 0x69, 0xdf, 0xc2, 0xf1, 0xe1, 0xe3, 0xaf, 0x87, 0xbb, 0x93, 0x3e, - 0x38, 0x9f, 0x42, 0xa7, 0x22, 0x41, 0x9c, 0xcd, 0x86, 0x4f, 0xfa, 0xd7, 0x70, 0xcb, 0x17, 0x3b, - 0x07, 0xc7, 0xf8, 0xb4, 0xd7, 0x00, 0x68, 0x38, 0x3d, 0xd8, 0x19, 0x3d, 0xed, 0xeb, 0xce, 0xcf, - 0xc0, 0x3c, 0x0e, 0xfc, 0xc7, 0x61, 0xec, 0x5d, 0xa0, 0x61, 0x9c, 0xb8, 0x82, 0xab, 0x34, 0x86, - 0xc6, 0x18, 0x4e, 0xc9, 0x28, 0x85, 0xd2, 0xbd, 0x82, 0x50, 0x56, 0xd1, 0x7c, 0x36, 0xa5, 0x56, - 0x61, 0x43, 0x06, 0x8f, 0x68, 0x3e, 0x3b, 0x0e, 0x7c, 0xe1, 0x8c, 0xa0, 0x7d, 0x1c, 0xf8, 0x47, - 0xae, 0x77, 0x81, 0x5e, 0xf8, 0x04, 0x97, 0x9e, 0x8a, 0xe0, 0x3b, 0xae, 0x82, 0x8c, 0x45, 0x98, - 0x71, 0xf0, 0x1d, 0xb7, 0x3f, 0x02, 0x83, 0x80, 0x3c, 0x65, 0x25, 0x33, 0xcf, 0x8f, 0xc3, 0x14, - 0xcd, 0xf9, 0x73, 0xad, 0xb8, 0x16, 0xf5, 0x82, 0x6e, 0x43, 0x33, 0x71, 0xbd, 0x0b, 0xe5, 0x83, - 0x3a, 0x6a, 0x0e, 0xee, 0xc7, 0x88, 0x60, 0xdf, 0x05, 0x53, 0xd9, 0x4e, 0xbe, 0x70, 0xa7, 0x62, - 0x64, 0xac, 0x20, 0xd6, 0xb5, 0xda, 0xa8, 0x6b, 0x15, 0x6f, 0x2e, 0x92, 0x30, 0xa0, 0xb2, 0xbe, - 0x81, 0xbe, 0x4a, 0x42, 0xce, 0xe7, 0x00, 0x65, 0xfb, 0x6d, 0x85, 0x4b, 0xbe, 0x01, 0x2d, 0x37, - 0x0c, 0x94, 0xc0, 0x2c, 0x26, 0x01, 0x67, 0x04, 0x9d, 0x4a, 0xd3, 0x0e, 0xc5, 0xe7, 0x86, 0xe1, - 0xf4, 0x82, 0x5f, 0x09, 0x9a, 0x6b, 0xb2, 0xb6, 0x1b, 0x86, 0xcf, 0xf8, 0x95, 0xc0, 0x70, 0x28, - 0xfb, 0x7d, 0xfa, 0x52, 0xab, 0x88, 0xa6, 0x32, 0x49, 0x74, 0x7e, 0x02, 0x86, 0xec, 0x1f, 0x55, - 0x2c, 0x5d, 0x7b, 0x65, 0x42, 0xf0, 0x85, 0x3a, 0x33, 0x75, 0x9b, 0xec, 0xfb, 0xaa, 0xaf, 0x28, - 0x64, 0x17, 0x53, 0x2b, 0x93, 0x6c, 0xc9, 0xa4, 0x5a, 0x8a, 0xc4, 0xec, 0xec, 0x81, 0xf9, 0xda, - 0x4e, 0xad, 0x12, 0x80, 0x5e, 0x0a, 0x60, 0x45, 0xef, 0xd6, 0xf9, 0x05, 0x40, 0xd9, 0x7f, 0x54, - 0x0f, 0x4f, 0xae, 0x82, 0x0f, 0xef, 0x1e, 0x16, 0xea, 0x41, 0xe8, 0xa7, 0x3c, 0xaa, 0xdd, 0xba, - 0xec, 0x58, 0x16, 0x74, 0x7b, 0x03, 0x9a, 0xd4, 0x56, 0x6d, 0x94, 0x8e, 0xb1, 0xe8, 0xa9, 0x12, - 0xc5, 0x59, 0x40, 0x4f, 0xe6, 0x19, 0x8c, 0xff, 0xe1, 0x9c, 0x8b, 0xd7, 0xa6, 0xb5, 0xb7, 0x64, - 0x7c, 0x26, 0x87, 0x9d, 0x37, 0x88, 0x2b, 0x18, 0x34, 0x82, 0xd3, 0x80, 0x87, 0x7e, 0x7e, 0x1b, - 0x05, 0xa1, 0x92, 0x65, 0xce, 0xd2, 0x94, 0xfd, 0x32, 0x02, 0x9c, 0x3f, 0xd1, 0x01, 0xe4, 0xd6, - 0x58, 0x99, 0xd7, 0x73, 0x66, 0x6d, 0x39, 0x67, 0xb6, 0xa1, 0x59, 0x74, 0xcc, 0x2d, 0x46, 0xe3, - 0xd2, 0x9f, 0xab, 0x3c, 0x5a, 0x86, 0xcd, 0xf7, 0xc1, 0xca, 0xe2, 0x0b, 0x1e, 0x05, 0xdf, 0x51, - 0xf7, 0x07, 0x37, 0x2c, 0x11, 0xd5, 0xfe, 0x71, 0xab, 0xde, 0x3f, 0x2e, 0x9a, 0x6c, 0x86, 0x5c, - 0x4d, 0x36, 0xd9, 0x56, 0xf4, 0x0b, 0xf1, 0x9a, 0xf3, 0x44, 0xf0, 0x34, 0xcb, 0x73, 0x72, 0x09, - 0x15, 0x59, 0xaa, 0xa5, 0x78, 0x31, 0x4b, 0xbd, 0x0d, 0x9d, 0x28, 0x9e, 0x7a, 0x71, 0x74, 0x1a, - 0x06, 0x5e, 0xa6, 0xfa, 0xc5, 0x10, 0xc5, 0xbb, 0x0a, 0xe3, 0x7c, 0x09, 0xdd, 0x5c, 0xfe, 0xd4, - 0x96, 0xbb, 0x57, 0x64, 0x82, 0x5a, 0xa9, 0xdb, 0x52, 0x4c, 0x8f, 0xf5, 0x81, 0x96, 0xe7, 0x82, - 0xce, 0xff, 0x35, 0xf2, 0xc9, 0xaa, 0x49, 0xf5, 0x7a, 0x19, 0xd6, 0x53, 0x75, 0xfd, 0xd7, 0x4a, - 0xd5, 0x7f, 0x0a, 0x96, 0x4f, 0xf9, 0x6a, 0x70, 0x99, 0xc7, 0xad, 0xf5, 0xe5, 0xdc, 0x54, 0x65, - 0xb4, 0xc1, 0x25, 0x67, 0x25, 0xf3, 0x1b, 0xf4, 0x50, 0x48, 0xbb, 0xb5, 0x4a, 0xda, 0xc6, 0x6f, - 0x28, 0xed, 0x0f, 0xa0, 0x1b, 0xc5, 0xd1, 0x34, 0x9a, 0x87, 0x21, 0xd6, 0x68, 0x4a, 0xdc, 0x9d, - 0x28, 0x8e, 0x46, 0x0a, 0x65, 0xdf, 0x83, 0xb7, 0xaa, 0x2c, 0xf2, 0x51, 0x77, 0x64, 0x1f, 0xaf, - 0xc2, 0x47, 0x4f, 0x7f, 0x13, 0xfa, 0xf1, 0xc9, 0x2f, 0xb8, 0x97, 0x91, 0xc4, 0xa6, 0xf4, 0x9a, - 0xbb, 0x32, 0x7b, 0x91, 0x78, 0x14, 0xd1, 0x08, 0xdf, 0xf5, 0x92, 0x9a, 0x7b, 0x2f, 0xa9, 0xf9, - 0x0b, 0xb0, 0x0a, 0x29, 0x55, 0x72, 0x63, 0x0b, 0x5a, 0xfb, 0xa3, 0xbd, 0xe1, 0xef, 0xf7, 0x35, - 0x8c, 0x85, 0x6c, 0xf8, 0x62, 0xc8, 0xc6, 0xc3, 0xbe, 0x8e, 0x71, 0x6a, 0x6f, 0x78, 0x30, 0x9c, - 0x0c, 0xfb, 0x8d, 0xaf, 0x9b, 0x66, 0xbb, 0x6f, 0x52, 0x97, 0x2a, 0x0c, 0xbc, 0x20, 0x73, 0xc6, - 0x00, 0x65, 0xc2, 0x8f, 0x5e, 0xb9, 0x3c, 0x9c, 0x54, 0xb9, 0x99, 0xe5, 0xc7, 0xda, 0x2c, 0x1e, - 0xa4, 0xfe, 0xaa, 0xb2, 0x42, 0xd2, 0x9d, 0x63, 0x30, 0x9f, 0xbb, 0xc9, 0x4b, 0x89, 0x73, 0xb7, - 0xe8, 0xe9, 0xcc, 0x55, 0xe3, 0x55, 0x25, 0x39, 0x77, 0xa0, 0xad, 0x02, 0x83, 0xf2, 0x2d, 0xb5, - 0xa0, 0x91, 0xd3, 0x9c, 0x7f, 0xd0, 0xe0, 0xc6, 0xf3, 0xf8, 0x92, 0x17, 0x79, 0xde, 0x91, 0x7b, - 0x15, 0xc6, 0xae, 0xff, 0x06, 0x4b, 0xfd, 0x31, 0x80, 0x88, 0xe7, 0xd4, 0x41, 0x2d, 0xfa, 0xbd, - 0x96, 0xc4, 0x3c, 0x55, 0x1f, 0x9c, 0xb8, 0xc8, 0x88, 0xa8, 0xc2, 0x29, 0xc2, 0x48, 0xfa, 0x11, - 0x18, 0xd9, 0x22, 0x2a, 0xdb, 0xcb, 0xad, 0x8c, 0x7a, 0x28, 0xf7, 0xe1, 0x2d, 0xbe, 0x48, 0xa8, - 0xec, 0x9a, 0x16, 0x5d, 0x4e, 0x99, 0x27, 0xf7, 0x73, 0xc2, 0xae, 0xc2, 0x3b, 0xbb, 0x60, 0x4d, - 0x16, 0xd4, 0x5f, 0x98, 0x8b, 0x5a, 0x9a, 0xa3, 0xbd, 0x26, 0xcd, 0xd1, 0x97, 0xd2, 0x9c, 0xff, - 0xd1, 0xa0, 0x53, 0xc9, 0x56, 0xed, 0x0f, 0xa0, 0x99, 0x2d, 0xa2, 0xfa, 0x47, 0x9c, 0x7c, 0x13, - 0x46, 0x24, 0xb4, 0xde, 0x99, 0xbb, 0x98, 0xba, 0x42, 0x04, 0x67, 0x11, 0xf7, 0xd5, 0x92, 0x9d, - 0x99, 0xbb, 0xd8, 0x51, 0x28, 0xfb, 0x00, 0xae, 0x4b, 0xe7, 0x9c, 0x5f, 0x22, 0xaf, 0x2c, 0x3f, - 0x5c, 0xca, 0x8e, 0x65, 0x0f, 0x26, 0xbf, 0x92, 0x2a, 0x97, 0xd6, 0xce, 0x6a, 0xc8, 0xf5, 0x1d, - 0x78, 0x7b, 0x05, 0xdb, 0x0f, 0xea, 0xba, 0xdd, 0x86, 0xde, 0x64, 0x11, 0x4d, 0x82, 0x19, 0x17, - 0x99, 0x3b, 0x4b, 0x28, 0x4d, 0x54, 0xc1, 0xb5, 0xc9, 0xf4, 0x4c, 0x38, 0x1f, 0x43, 0xf7, 0x88, - 0xf3, 0x94, 0x71, 0x91, 0xc4, 0x91, 0x4c, 0x91, 0x04, 0x5d, 0x5a, 0x45, 0x72, 0x05, 0x39, 0x7f, - 0x00, 0x16, 0xd6, 0x46, 0x8f, 0xdd, 0xcc, 0x3b, 0xff, 0x21, 0xb5, 0xd3, 0xc7, 0xd0, 0x4e, 0xa4, - 0x4d, 0xa9, 0x72, 0xa6, 0x4b, 0x11, 0x5d, 0xd9, 0x19, 0xcb, 0x89, 0xce, 0xa7, 0xf0, 0xf6, 0x78, - 0x7e, 0x22, 0xbc, 0x34, 0x48, 0x28, 0xfa, 0xa9, 0x68, 0xb7, 0x0e, 0x66, 0x92, 0xf2, 0xd3, 0x60, - 0xa1, 0xbe, 0xaf, 0x75, 0x59, 0x01, 0x3b, 0x9f, 0xc3, 0x8d, 0xfa, 0x14, 0x75, 0x85, 0xf7, 0xa1, - 0x71, 0x71, 0x29, 0xaa, 0x0d, 0xa7, 0x67, 0x2f, 0xe8, 0xa3, 0x09, 0xa2, 0x1d, 0x06, 0x8d, 0xd1, - 0x7c, 0x56, 0xfd, 0xf0, 0xdb, 0x94, 0x1f, 0x7e, 0x6b, 0x2d, 0x1b, 0x7d, 0xa9, 0x65, 0xf3, 0x3e, - 0x58, 0xa7, 0x71, 0xfa, 0x47, 0x6e, 0xea, 0x73, 0x5f, 0xc5, 0xb3, 0x12, 0xe1, 0x7c, 0x0b, 0x9d, - 0xdc, 0x04, 0xf6, 0x7d, 0xea, 0x53, 0x93, 0x0d, 0xee, 0xfb, 0x35, 0x93, 0x94, 0xed, 0x13, 0x1e, - 0xf9, 0xfb, 0xb9, 0xed, 0x48, 0xa0, 0xbe, 0xb3, 0x6a, 0x2f, 0xe6, 0x3b, 0x3b, 0x4f, 0xa0, 0x9b, - 0xd7, 0x4a, 0x58, 0x0b, 0x93, 0x55, 0x87, 0x01, 0x8f, 0x2a, 0x16, 0x6f, 0x4a, 0xc4, 0x44, 0xbc, - 0xe6, 0x33, 0x8c, 0xb3, 0x05, 0x86, 0x7a, 0x32, 0x36, 0x34, 0xbd, 0xd8, 0x97, 0xcf, 0xba, 0xc5, - 0x68, 0x8c, 0xe2, 0x98, 0x89, 0xb3, 0x3c, 0xf1, 0x99, 0x89, 0x33, 0xe7, 0x9f, 0x74, 0xe8, 0x3d, - 0x76, 0xbd, 0x8b, 0x79, 0x92, 0xeb, 0xa2, 0x52, 0xf0, 0x6a, 0xb5, 0x82, 0xb7, 0x5a, 0xdc, 0xea, - 0xb5, 0xe2, 0xb6, 0x76, 0xa0, 0x46, 0x3d, 0x5b, 0x79, 0x07, 0xda, 0xf3, 0x28, 0x58, 0xe4, 0xbe, - 0xc0, 0x62, 0x06, 0x82, 0x13, 0x61, 0x6f, 0x40, 0x07, 0xdd, 0x45, 0x10, 0x51, 0x99, 0x4b, 0x02, - 0xb1, 0x58, 0x15, 0x85, 0xfe, 0xc7, 0xf5, 0x3c, 0x2e, 0x04, 0xe6, 0x9c, 0xaa, 0x54, 0xb2, 0x24, - 0xe6, 0x19, 0xbf, 0x22, 0xf7, 0xc4, 0xbd, 0x94, 0x67, 0xd3, 0xb2, 0x64, 0xb5, 0x24, 0x06, 0xc9, - 0x1f, 0x42, 0x4f, 0x70, 0x21, 0x82, 0x38, 0x9a, 0x52, 0xc0, 0x53, 0x0d, 0x95, 0xae, 0x42, 0x4e, - 0x10, 0x87, 0x0a, 0x77, 0xa3, 0x38, 0xba, 0x9a, 0xc5, 0x73, 0xa1, 0x62, 0x58, 0x89, 0x58, 0xca, - 0xb4, 0x60, 0x39, 0xd3, 0x72, 0x32, 0xe8, 0x0d, 0x17, 0x09, 0x7d, 0xcc, 0x7b, 0x63, 0xd6, 0x56, - 0x11, 0xab, 0x5e, 0x13, 0x6b, 0x45, 0x40, 0xf2, 0x4b, 0x48, 0x2e, 0x20, 0xcc, 0xe3, 0xe2, 0x74, - 0xe6, 0x66, 0xb9, 0xe0, 0x24, 0xe4, 0xfc, 0x85, 0x0e, 0x96, 0x54, 0x19, 0x5e, 0xf3, 0x13, 0x95, - 0x92, 0x69, 0x65, 0x33, 0xa5, 0x20, 0x6e, 0x3d, 0xe3, 0x57, 0x94, 0x4a, 0xc8, 0x4c, 0x6d, 0x55, - 0x3b, 0x51, 0xc5, 0x14, 0x59, 0x48, 0x50, 0x4c, 0x79, 0x0f, 0x2c, 0xe9, 0x6a, 0x11, 0xaf, 0x3e, - 0x41, 0x11, 0xe2, 0x38, 0xa0, 0xaf, 0x7c, 0x19, 0x4f, 0x67, 0x4a, 0x5b, 0x34, 0xae, 0xa7, 0x6c, - 0x3d, 0x95, 0x44, 0x38, 0xe7, 0xd0, 0x56, 0xbb, 0x63, 0x4c, 0x3d, 0x1e, 0x3d, 0x1b, 0x1d, 0x7e, - 0x33, 0xea, 0x5f, 0x2b, 0xda, 0x4f, 0x5a, 0x19, 0x75, 0xf5, 0x6a, 0xd4, 0x6d, 0x20, 0x7e, 0xf7, - 0xf0, 0x78, 0x34, 0xe9, 0x37, 0xed, 0x1e, 0x58, 0x34, 0x9c, 0xb2, 0xe1, 0x8b, 0x7e, 0x8b, 0x6a, - 0xc8, 0xdd, 0xaf, 0x86, 0xcf, 0x77, 0xfa, 0x46, 0xd1, 0xbc, 0x6a, 0x3b, 0x7f, 0xaa, 0xc1, 0x5b, - 0xf2, 0xca, 0xd5, 0x8a, 0xab, 0xfa, 0x9f, 0x90, 0xa6, 0xfc, 0x4f, 0xc8, 0x6f, 0xb7, 0xc8, 0xda, - 0xfe, 0x17, 0x0d, 0x9a, 0xe8, 0x1c, 0xed, 0xfb, 0x60, 0x7d, 0xc5, 0xdd, 0x34, 0x3b, 0xe1, 0x6e, - 0x66, 0xd7, 0x1c, 0xe1, 0x7a, 0x0d, 0x72, 0xae, 0x3d, 0xd2, 0xec, 0x2d, 0xf9, 0x5d, 0x37, 0xff, - 0x5c, 0xdd, 0xcb, 0x5d, 0x2c, 0xb9, 0xe0, 0x65, 0xfe, 0x4d, 0xe2, 0xff, 0x3a, 0x0e, 0xa2, 0x5d, - 0xf9, 0xb1, 0xd3, 0x5e, 0x76, 0xc9, 0xcb, 0x33, 0xec, 0x07, 0x60, 0xec, 0x0b, 0xf4, 0xfd, 0x2f, - 0xb3, 0x52, 0x1e, 0x52, 0x0d, 0x0b, 0xce, 0xb5, 0xed, 0xbf, 0x6f, 0x40, 0xf3, 0x5b, 0x9e, 0xc6, - 0xf6, 0x4f, 0xa0, 0xad, 0xba, 0xfc, 0x76, 0xa5, 0x9b, 0xbf, 0x4e, 0x99, 0xea, 0x52, 0xfb, 0x9f, - 0x76, 0xe9, 0xcb, 0x54, 0xa6, 0x6c, 0x40, 0xd9, 0xe5, 0x47, 0x88, 0x97, 0x0e, 0xf5, 0x05, 0xf4, - 0xc7, 0x59, 0xca, 0xdd, 0x59, 0x85, 0xbd, 0x2e, 0xa8, 0x55, 0xdd, 0x2c, 0x92, 0xd7, 0x7d, 0x30, - 0x64, 0x80, 0x5d, 0x9a, 0xb0, 0xdc, 0x98, 0x22, 0xe6, 0xbb, 0xd0, 0x19, 0x9f, 0xc7, 0xf3, 0xd0, - 0x1f, 0xf3, 0xf4, 0x92, 0xdb, 0x95, 0xef, 0x76, 0xeb, 0x95, 0xb1, 0x73, 0xcd, 0xde, 0x04, 0x90, - 0xae, 0xfd, 0x18, 0xed, 0xa4, 0x8d, 0xb4, 0xd1, 0x7c, 0x26, 0x17, 0xad, 0xf8, 0x7c, 0xc9, 0x59, - 0x89, 0xb3, 0xaf, 0xe3, 0xfc, 0x0c, 0x7a, 0xbb, 0x64, 0x33, 0x87, 0xe9, 0xce, 0x49, 0x9c, 0x66, - 0xf6, 0xf2, 0xb7, 0xbb, 0xf5, 0x65, 0x84, 0x73, 0xcd, 0x7e, 0x04, 0xe6, 0x24, 0xbd, 0x92, 0xfc, - 0x6f, 0xa9, 0xf4, 0xa4, 0xdc, 0x6f, 0xc5, 0x2d, 0xb7, 0xff, 0xa3, 0x01, 0xc6, 0x37, 0x71, 0x7a, - 0xc1, 0x53, 0xac, 0x5a, 0xa8, 0x83, 0xa8, 0xcc, 0xa8, 0xe8, 0x26, 0xae, 0xda, 0xe8, 0x23, 0xb0, - 0x48, 0x28, 0x13, 0x57, 0x5c, 0x48, 0x55, 0xd1, 0xbf, 0x91, 0xa4, 0x5c, 0x64, 0x15, 0x44, 0x7a, - 0x5d, 0x93, 0x8a, 0x2a, 0x1a, 0xaa, 0xb5, 0xb6, 0xde, 0x7a, 0x5b, 0xc6, 0xdd, 0x31, 0x9a, 0xe6, - 0x23, 0x0d, 0x9d, 0xd1, 0x58, 0xde, 0x14, 0x99, 0xca, 0x7f, 0x61, 0xac, 0xaf, 0xe5, 0x88, 0x62, - 0xe5, 0x87, 0x60, 0xc8, 0x14, 0x58, 0x5e, 0xb3, 0x56, 0xfd, 0xae, 0xf7, 0xab, 0x28, 0x35, 0xe1, - 0x13, 0x30, 0xe4, 0x2b, 0x97, 0x13, 0x6a, 0x41, 0x4b, 0x9e, 0x5a, 0x06, 0x3e, 0xc9, 0x2a, 0xfd, - 0xb2, 0x64, 0xad, 0xf9, 0xe8, 0x25, 0xd6, 0x07, 0xd0, 0x67, 0xdc, 0xe3, 0x41, 0x25, 0x39, 0xb6, - 0xf3, 0x4b, 0xad, 0x78, 0x7d, 0x5f, 0x40, 0xaf, 0x96, 0x48, 0xdb, 0x03, 0x12, 0xf4, 0x8a, 0xdc, - 0xfa, 0x25, 0x9b, 0xff, 0x1c, 0x2c, 0x95, 0xc7, 0x9c, 0x70, 0x9b, 0x3a, 0x88, 0x2b, 0x32, 0xa1, - 0xf5, 0x4a, 0x22, 0x83, 0x16, 0xfc, 0xb8, 0xff, 0xaf, 0xdf, 0xdf, 0xd2, 0xfe, 0xfd, 0xfb, 0x5b, - 0xda, 0x7f, 0x7d, 0x7f, 0x4b, 0xfb, 0xe5, 0x7f, 0xdf, 0xba, 0x76, 0x62, 0xd0, 0x7f, 0xdf, 0x3e, - 0xfb, 0x55, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x30, 0xd2, 0x28, 0x3f, 0x27, 0x00, 0x00, + // 4108 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x3a, 0x3b, 0x70, 0x1c, 0x57, + 0x72, 0x98, 0xd9, 0xdf, 0x4c, 0xef, 0x2e, 0xb8, 0x1a, 0xf1, 0xa8, 0x15, 0xa4, 0x23, 0xa1, 0xd1, + 0x0f, 0x22, 0x8f, 0x20, 0x05, 0xc9, 0xe5, 0x93, 0xaa, 0x1c, 0x80, 0xc0, 0x92, 0x82, 0x08, 0x2e, + 0x70, 0x6f, 0x17, 0x94, 0x4f, 0x81, 0xb7, 0x1e, 0x66, 0x1e, 0x80, 0x39, 0xcc, 0xce, 0x8c, 0xe7, + 0xcd, 0xc2, 0x0b, 0x65, 0x2e, 0x97, 0x1d, 0xd9, 0x91, 0x93, 0x0b, 0x5c, 0xb6, 0x63, 0x27, 0xae, + 0x72, 0x74, 0x65, 0xa7, 0x0e, 0x5c, 0x8e, 0x9c, 0x3b, 0xb0, 0x4b, 0x76, 0xe6, 0xd0, 0x55, 0x8e, + 0x5d, 0xdd, 0xef, 0xcd, 0x67, 0x97, 0x4b, 0xf2, 0x74, 0x55, 0x17, 0xed, 0xeb, 0xee, 0xf7, 0xed, + 0x7f, 0xf7, 0x2c, 0x58, 0xc9, 0xe9, 0x76, 0x92, 0xc6, 0x59, 0xec, 0x98, 0xc9, 0xe9, 0x86, 0xcd, + 0x93, 0x40, 0x81, 0x1b, 0x1f, 0x9f, 0x07, 0xd9, 0xc5, 0xec, 0x74, 0xdb, 0x8b, 0xa7, 0x0f, 0xfc, + 0xf3, 0x94, 0x27, 0x17, 0xf7, 0x83, 0xf8, 0xc1, 0x29, 0xf7, 0xcf, 0x45, 0xfa, 0x20, 0x39, 0x7d, + 0x90, 0xaf, 0x73, 0x37, 0xa0, 0x7e, 0x18, 0xc8, 0xcc, 0x71, 0xa0, 0x3e, 0x0b, 0x7c, 0xd9, 0x37, + 0x36, 0x6b, 0x5b, 0x4d, 0x46, 0x63, 0xf7, 0x19, 0xd8, 0x63, 0x2e, 0x2f, 0x9f, 0xf3, 0x70, 0x26, + 0x9c, 0x1e, 0xd4, 0xae, 0x78, 0xd8, 0x37, 0x36, 0x8d, 0xad, 0x0e, 0xc3, 0xa1, 0xb3, 0x0d, 0xd6, + 0x15, 0x0f, 0x27, 0xd9, 0x75, 0x22, 0xfa, 0xe6, 0xa6, 0xb1, 0xb5, 0xbe, 0xf3, 0xe6, 0x76, 0x72, + 0xba, 0x7d, 0x1c, 0xcb, 0x2c, 0x88, 0xce, 0xb7, 0x9f, 0xf3, 0x70, 0x7c, 0x9d, 0x08, 0xd6, 0xba, + 0x52, 0x03, 0xf7, 0x08, 0xda, 0xa3, 0xd4, 0x7b, 0x3c, 0x8b, 0xbc, 0x2c, 0x88, 0x23, 0x3c, 0x31, + 0xe2, 0x53, 0x41, 0x3b, 0xda, 0x8c, 0xc6, 0x88, 0xe3, 0xe9, 0xb9, 0xec, 0xd7, 0x36, 0x6b, 0x88, + 0xc3, 0xb1, 0xd3, 0x87, 0x56, 0x20, 0xf7, 0xe2, 0x59, 0x94, 0xf5, 0xeb, 0x9b, 0xc6, 0x96, 0xc5, + 0x72, 0xd0, 0xfd, 0x9b, 0x1a, 0x34, 0x7e, 0x36, 0x13, 0xe9, 0x35, 0xad, 0xcb, 0xb2, 0x34, 0xdf, + 0x0b, 0xc7, 0xce, 0x4d, 0x68, 0x84, 0x3c, 0x3a, 0x97, 0x7d, 0x93, 0x36, 0x53, 0x80, 0xf3, 0x0e, + 0xd8, 0xfc, 0x2c, 0x13, 0xe9, 0x64, 0x16, 0xf8, 0xfd, 0xda, 0xa6, 0xb1, 0xd5, 0x64, 0x16, 0x21, + 0x4e, 0x02, 0xdf, 0x79, 0x1b, 0x2c, 0x3f, 0x9e, 0x78, 0xd5, 0xb3, 0xfc, 0x98, 0xce, 0x72, 0xde, + 0x07, 0x6b, 0x16, 0xf8, 0x93, 0x30, 0x90, 0x59, 0xbf, 0xb1, 0x69, 0x6c, 0xb5, 0x77, 0x2c, 0x7c, + 0x2c, 0xf2, 0x8e, 0xb5, 0x66, 0x81, 0x4f, 0x4c, 0xbc, 0x0b, 0x96, 0x4c, 0xbd, 0xc9, 0xd9, 0x2c, + 0xf2, 0xfa, 0x4d, 0x9a, 0x74, 0x03, 0x27, 0x55, 0x5e, 0xcd, 0x5a, 0x52, 0x01, 0xf8, 0xac, 0x54, + 0x5c, 0x89, 0x54, 0x8a, 0x7e, 0x4b, 0x1d, 0xa5, 0x41, 0xe7, 0x21, 0xb4, 0xcf, 0xb8, 0x27, 0xb2, + 0x49, 0xc2, 0x53, 0x3e, 0xed, 0x5b, 0xe5, 0x46, 0x8f, 0x11, 0x7d, 0x8c, 0x58, 0xc9, 0xe0, 0xac, + 0x00, 0x9c, 0xcf, 0xa0, 0x4b, 0x90, 0x9c, 0x9c, 0x05, 0x61, 0x26, 0xd2, 0xbe, 0x4d, 0x6b, 0xd6, + 0x69, 0x0d, 0x61, 0xc6, 0xa9, 0x10, 0xac, 0xa3, 0x26, 0x29, 0x8c, 0xf3, 0x63, 0x00, 0x31, 0x4f, + 0x78, 0xe4, 0x4f, 0x78, 0x18, 0xf6, 0x81, 0xee, 0x60, 0x2b, 0xcc, 0x6e, 0x18, 0x3a, 0x6f, 0xe1, + 0xfd, 0xb8, 0x3f, 0xc9, 0x64, 0xbf, 0xbb, 0x69, 0x6c, 0xd5, 0x59, 0x13, 0xc1, 0xb1, 0x44, 0xbe, + 0x7a, 0xdc, 0xbb, 0x10, 0xfd, 0xf5, 0x4d, 0x63, 0xab, 0xc1, 0x14, 0x80, 0xd8, 0xb3, 0x20, 0x95, + 0x59, 0xff, 0x86, 0xc2, 0x12, 0xe0, 0xee, 0x80, 0x4d, 0xda, 0x43, 0xdc, 0xf9, 0x10, 0x9a, 0x57, + 0x08, 0x28, 0x25, 0x6b, 0xef, 0x74, 0xf1, 0x7a, 0x85, 0x82, 0x31, 0x4d, 0x74, 0x6f, 0x83, 0x75, + 0xc8, 0xa3, 0xf3, 0x5c, 0x2b, 0x51, 0x6c, 0xb4, 0xc0, 0x66, 0x34, 0x76, 0x7f, 0x69, 0x42, 0x93, + 0x09, 0x39, 0x0b, 0x33, 0xe7, 0x63, 0x00, 0x14, 0xca, 0x94, 0x67, 0x69, 0x30, 0xd7, 0xbb, 0x96, + 0x62, 0xb1, 0x67, 0x81, 0xff, 0x8c, 0x48, 0xce, 0x43, 0xe8, 0xd0, 0xee, 0xf9, 0x54, 0xb3, 0xbc, + 0x40, 0x71, 0x3f, 0xd6, 0xa6, 0x29, 0x7a, 0xc5, 0x2d, 0x68, 0x92, 0x1e, 0x28, 0x5d, 0xec, 0x32, + 0x0d, 0x39, 0x1f, 0xc2, 0x7a, 0x10, 0x65, 0x28, 0x27, 0x2f, 0x9b, 0xf8, 0x42, 0xe6, 0x8a, 0xd2, + 0x2d, 0xb0, 0xfb, 0x42, 0x66, 0xce, 0xa7, 0xa0, 0x98, 0x9d, 0x1f, 0xd8, 0xa0, 0x03, 0xd7, 0x0b, + 0x21, 0x4a, 0x75, 0x22, 0xcd, 0xd1, 0x27, 0xde, 0x87, 0x36, 0xbe, 0x2f, 0x5f, 0xd1, 0xa4, 0x15, + 0x1d, 0x7a, 0x8d, 0x66, 0x07, 0x03, 0x9c, 0xa0, 0xa7, 0x23, 0x6b, 0x50, 0x19, 0x95, 0xf2, 0xd0, + 0xd8, 0x1d, 0x40, 0xe3, 0x28, 0xf5, 0x45, 0xba, 0xd2, 0x1e, 0x1c, 0xa8, 0xfb, 0x42, 0x7a, 0x64, + 0xaa, 0x16, 0xa3, 0x71, 0x69, 0x23, 0xb5, 0x8a, 0x8d, 0xb8, 0x7f, 0x6d, 0x40, 0x7b, 0x14, 0xa7, + 0xd9, 0x33, 0x21, 0x25, 0x3f, 0x17, 0xce, 0x1d, 0x68, 0xc4, 0xb8, 0xad, 0xe6, 0xb0, 0x8d, 0x77, + 0xa2, 0x73, 0x98, 0xc2, 0x2f, 0xc9, 0xc1, 0x7c, 0xb9, 0x1c, 0x50, 0x77, 0xc8, 0xba, 0x6a, 0x5a, + 0x77, 0xc8, 0xb6, 0x6e, 0x41, 0x33, 0x3e, 0x3b, 0x93, 0x42, 0xf1, 0xb2, 0xc1, 0x34, 0xf4, 0x52, + 0x15, 0x74, 0x7f, 0x07, 0x00, 0xef, 0xf7, 0x03, 0xb5, 0xc0, 0xbd, 0x80, 0x36, 0xe3, 0x67, 0xd9, + 0x5e, 0x1c, 0x65, 0x62, 0x9e, 0x39, 0xeb, 0x60, 0x06, 0x3e, 0xb1, 0xa8, 0xc9, 0xcc, 0xc0, 0xc7, + 0xcb, 0x9d, 0xa7, 0xf1, 0x2c, 0x21, 0x0e, 0x75, 0x99, 0x02, 0x88, 0x95, 0xbe, 0x9f, 0xd2, 0x8d, + 0x91, 0x95, 0xbe, 0x9f, 0x3a, 0x77, 0xa0, 0x2d, 0x23, 0x9e, 0xc8, 0x8b, 0x38, 0xc3, 0xcb, 0xd5, + 0xe9, 0x72, 0x90, 0xa3, 0xc6, 0xd2, 0xfd, 0x1f, 0x03, 0x9a, 0xcf, 0xc4, 0xf4, 0x54, 0xa4, 0x2f, + 0x9c, 0xf2, 0x36, 0x58, 0xb4, 0xf1, 0x24, 0xf0, 0xf5, 0x41, 0x2d, 0x82, 0x0f, 0xfc, 0x95, 0x47, + 0xdd, 0x82, 0x66, 0x28, 0x38, 0x32, 0x5f, 0xe9, 0x99, 0x86, 0x90, 0x37, 0x7c, 0x3a, 0xf1, 0x05, + 0xf7, 0xc9, 0x1d, 0x59, 0xac, 0xc9, 0xa7, 0xfb, 0x82, 0xfb, 0x78, 0xb7, 0x90, 0xcb, 0x6c, 0x32, + 0x4b, 0x7c, 0x9e, 0x09, 0x72, 0x43, 0x75, 0x54, 0x1c, 0x99, 0x9d, 0x10, 0xc6, 0xb9, 0x0b, 0x6f, + 0x78, 0xe1, 0x4c, 0xa2, 0x0f, 0x0c, 0xa2, 0xb3, 0x78, 0x12, 0x47, 0xe1, 0x35, 0xf1, 0xd7, 0x62, + 0x37, 0x34, 0xe1, 0x20, 0x3a, 0x8b, 0x8f, 0xa2, 0xf0, 0xda, 0xf9, 0x00, 0xd6, 0xcf, 0xe2, 0xd4, + 0x13, 0x93, 0xe2, 0xca, 0xeb, 0x34, 0xb1, 0x43, 0xd8, 0x27, 0xea, 0xde, 0xee, 0xaf, 0x4c, 0x68, + 0xd0, 0xd8, 0x79, 0x08, 0xad, 0x29, 0x3d, 0x3b, 0xb7, 0xf1, 0x5b, 0x28, 0x07, 0xa2, 0x6d, 0x2b, + 0x7e, 0xc8, 0x41, 0x94, 0xa5, 0xd7, 0x2c, 0x9f, 0x86, 0x2b, 0x32, 0x7e, 0x1a, 0x8a, 0x4c, 0x6a, + 0xbd, 0xa9, 0xac, 0x18, 0x2b, 0x82, 0x5e, 0xa1, 0xa7, 0x2d, 0x33, 0xbf, 0xb6, 0xcc, 0x7c, 0x67, + 0x03, 0x2c, 0xef, 0x42, 0x78, 0x97, 0x72, 0x36, 0xd5, 0xa2, 0x29, 0xe0, 0x8d, 0xc7, 0xd0, 0xa9, + 0xde, 0x03, 0xa3, 0xda, 0xa5, 0xb8, 0x26, 0xf1, 0xd4, 0x19, 0x0e, 0x9d, 0x4d, 0x68, 0x90, 0x1f, + 0x20, 0xe1, 0xb4, 0x77, 0x00, 0xaf, 0xa3, 0x96, 0x30, 0x45, 0xf8, 0xd2, 0xfc, 0xa9, 0x81, 0xfb, + 0x54, 0x6f, 0x57, 0xdd, 0xc7, 0x7e, 0xf9, 0x3e, 0x6a, 0x49, 0x65, 0x1f, 0x37, 0x86, 0xd6, 0x61, + 0xe0, 0x89, 0x48, 0x52, 0xec, 0x9b, 0x49, 0x51, 0xd8, 0x2c, 0x8e, 0xf1, 0x29, 0x53, 0x3e, 0x1f, + 0xc6, 0xbe, 0x90, 0xb4, 0x4f, 0x9d, 0x15, 0x30, 0xd2, 0xc4, 0x3c, 0x09, 0xd2, 0xeb, 0xb1, 0x62, + 0x42, 0x8d, 0x15, 0x30, 0x06, 0x17, 0x11, 0xe1, 0x61, 0x7e, 0x1e, 0xc7, 0x34, 0xe8, 0xfe, 0x6d, + 0x0d, 0x3a, 0xdf, 0x8a, 0x34, 0x3e, 0x4e, 0xe3, 0x24, 0x96, 0x3c, 0x74, 0x76, 0x17, 0xd9, 0xa9, + 0xc4, 0xb6, 0x89, 0xb7, 0xad, 0x4e, 0xdb, 0x1e, 0x15, 0xfc, 0x55, 0xe2, 0xa8, 0x32, 0xdc, 0x85, + 0xa6, 0x12, 0xe7, 0x0a, 0x9e, 0x69, 0x0a, 0xce, 0x51, 0x02, 0xa4, 0xbb, 0x2e, 0xf2, 0x43, 0x53, + 0x9c, 0xdb, 0x00, 0x53, 0x3e, 0x3f, 0x14, 0x5c, 0x8a, 0x03, 0x3f, 0xb7, 0xaa, 0x12, 0xa3, 0xb9, + 0x31, 0x9e, 0x47, 0x63, 0x49, 0x4a, 0xaf, 0xb8, 0x41, 0xb0, 0xf3, 0x2e, 0xd8, 0x53, 0x3e, 0x47, + 0xf3, 0x3e, 0xf0, 0xb5, 0xd2, 0x97, 0x08, 0xe7, 0x3d, 0xa8, 0x65, 0xf3, 0x88, 0x7c, 0x25, 0x86, + 0x52, 0xcc, 0x93, 0xc6, 0xf3, 0x48, 0x3b, 0x02, 0x86, 0xb4, 0x5c, 0x82, 0x56, 0x29, 0xc1, 0x1e, + 0xd4, 0xbc, 0xc0, 0xa7, 0x58, 0x6a, 0x33, 0x1c, 0x3a, 0x1f, 0x42, 0x2b, 0x54, 0xd2, 0xa2, 0x78, + 0xd9, 0xde, 0x69, 0x2b, 0x37, 0x43, 0x28, 0x96, 0xd3, 0x36, 0x7e, 0x0f, 0x6e, 0x2c, 0xb1, 0xab, + 0xaa, 0x1f, 0x5d, 0xb5, 0xfb, 0xcd, 0xaa, 0x7e, 0xd4, 0xab, 0x3a, 0xf1, 0x1f, 0x35, 0xb8, 0xa1, + 0x95, 0xf4, 0x22, 0x48, 0x46, 0x19, 0x1a, 0x6d, 0x1f, 0x5a, 0xe4, 0x2b, 0xb5, 0x7e, 0xd4, 0x59, + 0x0e, 0x3a, 0xbf, 0x0b, 0x4d, 0x32, 0xce, 0xdc, 0x7e, 0xee, 0x94, 0xcc, 0x2f, 0x96, 0x2b, 0x7b, + 0xd2, 0x92, 0xd3, 0xd3, 0x9d, 0xcf, 0xa1, 0xf1, 0x9d, 0x48, 0x63, 0xe5, 0xfb, 0xdb, 0x3b, 0xb7, + 0x57, 0xad, 0x43, 0x15, 0xd0, 0xcb, 0xd4, 0xe4, 0xdf, 0xa2, 0x8c, 0x3e, 0x40, 0x6f, 0x3f, 0x8d, + 0xaf, 0x84, 0xdf, 0x6f, 0xd1, 0x8d, 0xaa, 0x6a, 0x94, 0x93, 0x72, 0xa1, 0x58, 0x2b, 0x85, 0x62, + 0xbf, 0x42, 0x28, 0xfb, 0xd0, 0xae, 0x70, 0x61, 0x85, 0x40, 0xee, 0x2c, 0x1a, 0xac, 0x5d, 0xf8, + 0xa1, 0xaa, 0xdd, 0xef, 0x03, 0x94, 0x3c, 0xf9, 0x4d, 0xbd, 0x87, 0xfb, 0xc7, 0x06, 0xdc, 0xd8, + 0x8b, 0xa3, 0x48, 0x50, 0x4e, 0xa8, 0x24, 0x5c, 0x1a, 0x91, 0xf1, 0x52, 0x23, 0xfa, 0x04, 0x1a, + 0x12, 0x27, 0xeb, 0xdd, 0xdf, 0x5c, 0x21, 0x32, 0xa6, 0x66, 0xa0, 0x97, 0x9c, 0xf2, 0xf9, 0x24, + 0x11, 0x91, 0x1f, 0x44, 0xe7, 0xb9, 0x97, 0x9c, 0xf2, 0xf9, 0xb1, 0xc2, 0xb8, 0xbf, 0x32, 0x00, + 0xbe, 0x12, 0x3c, 0xcc, 0x2e, 0xd0, 0xdb, 0xa3, 0xdc, 0x0e, 0x22, 0x99, 0xf1, 0xc8, 0xcb, 0x33, + 0xf2, 0x02, 0x46, 0xcf, 0xb4, 0x8b, 0x71, 0xc9, 0x54, 0x9e, 0x69, 0x57, 0xc7, 0x25, 0x3c, 0x6f, + 0x26, 0x75, 0xb4, 0xd2, 0x10, 0xaa, 0x35, 0x31, 0x8d, 0x54, 0xc3, 0x66, 0x3a, 0x2e, 0xf4, 0xa1, + 0xf5, 0x5c, 0xa4, 0x32, 0x88, 0x23, 0x52, 0x0a, 0x9b, 0xe5, 0x20, 0xee, 0x73, 0x92, 0x64, 0xc1, + 0x54, 0x45, 0xaa, 0x1a, 0xd3, 0x10, 0xde, 0xe7, 0x90, 0xcb, 0x6c, 0xe0, 0x5d, 0xc4, 0x64, 0xb6, + 0x35, 0x56, 0xc0, 0xee, 0x3f, 0x19, 0xd0, 0x54, 0xae, 0x63, 0x21, 0x9a, 0x1a, 0x8b, 0xd1, 0xf4, + 0x5d, 0xb0, 0x93, 0x54, 0xf8, 0x81, 0x97, 0x33, 0xcc, 0x66, 0x25, 0x82, 0xf2, 0x55, 0x8c, 0x61, + 0x74, 0x7d, 0x8b, 0x29, 0x00, 0xb1, 0x32, 0xe1, 0x9e, 0xd0, 0x47, 0x2a, 0x00, 0xef, 0xa8, 0xd4, + 0x8f, 0xd4, 0xce, 0x62, 0x1a, 0xc2, 0x5a, 0x82, 0xf2, 0x13, 0x8a, 0xa0, 0x36, 0x91, 0x2c, 0x44, + 0x50, 0xe8, 0x7c, 0x0b, 0x5a, 0x38, 0x09, 0x7d, 0x2a, 0xa8, 0xe4, 0x05, 0xc1, 0xb1, 0x74, 0xff, + 0xce, 0x84, 0xce, 0x7e, 0x90, 0x0a, 0x2f, 0x13, 0xfe, 0xc0, 0x3f, 0xa7, 0xed, 0x45, 0x94, 0x05, + 0xd9, 0xb5, 0xce, 0x12, 0x34, 0x54, 0x24, 0x71, 0xe6, 0x62, 0x51, 0xa3, 0xf4, 0xab, 0x46, 0x75, + 0x98, 0x02, 0x9c, 0x1d, 0x00, 0x95, 0xde, 0x52, 0x2d, 0x56, 0x7f, 0x79, 0x2d, 0x66, 0xd3, 0x34, + 0x1c, 0x22, 0xe7, 0xd4, 0x9a, 0x40, 0x65, 0x10, 0x4d, 0x2a, 0xd4, 0x66, 0x68, 0xc3, 0x94, 0x15, + 0x9e, 0x8a, 0x90, 0x44, 0x42, 0x59, 0xe1, 0xa9, 0x08, 0x8b, 0x5c, 0xbc, 0xa5, 0xae, 0x83, 0x63, + 0xe7, 0x7d, 0x30, 0xe3, 0x84, 0xb8, 0xa2, 0x0f, 0xac, 0x3e, 0x6c, 0xfb, 0x28, 0x61, 0x66, 0x9c, + 0xa0, 0x66, 0xab, 0xc2, 0xa3, 0x6f, 0x6b, 0xbb, 0x46, 0xff, 0x4b, 0x69, 0x30, 0xd3, 0x14, 0xf7, + 0x16, 0x98, 0x47, 0x89, 0xd3, 0x82, 0xda, 0x68, 0x30, 0xee, 0xad, 0xe1, 0x60, 0x7f, 0x70, 0xd8, + 0x33, 0xdc, 0xef, 0x4d, 0xb0, 0x9f, 0xcd, 0x32, 0x8e, 0x76, 0x22, 0x5f, 0x25, 0xed, 0xb7, 0xc1, + 0x92, 0x19, 0x4f, 0x29, 0x86, 0x29, 0x8f, 0xda, 0x22, 0x78, 0x2c, 0x9d, 0x8f, 0xa0, 0x21, 0xfc, + 0x73, 0x91, 0x3b, 0xba, 0xde, 0xf2, 0x3d, 0x99, 0x22, 0x3b, 0x5b, 0xd0, 0x94, 0xde, 0x85, 0x98, + 0xf2, 0x7e, 0xbd, 0x9c, 0x38, 0x22, 0x8c, 0x4a, 0x9d, 0x98, 0xa6, 0x3b, 0x1f, 0x40, 0x03, 0x39, + 0x2d, 0x75, 0x92, 0x4e, 0x69, 0x3d, 0x32, 0x55, 0x4f, 0x53, 0x44, 0xe7, 0x3e, 0xb4, 0xfc, 0x34, + 0x4e, 0x26, 0x71, 0x42, 0x3c, 0x5b, 0xdf, 0xb9, 0x49, 0xf6, 0x9a, 0xbf, 0x66, 0x7b, 0x3f, 0x8d, + 0x93, 0xa3, 0x84, 0x35, 0x7d, 0xfa, 0xc5, 0x7a, 0x8c, 0xa6, 0x2b, 0xf9, 0x2a, 0x07, 0x67, 0x23, + 0x46, 0xd5, 0xdf, 0x5b, 0x60, 0x4d, 0x45, 0xc6, 0x7d, 0x9e, 0x71, 0xed, 0xe7, 0x3a, 0xca, 0xfc, + 0x15, 0x8e, 0x15, 0x54, 0xf7, 0x01, 0x34, 0xd5, 0xd6, 0x8e, 0x05, 0xf5, 0xe1, 0xd1, 0x70, 0xa0, + 0x18, 0xba, 0x7b, 0x78, 0xd8, 0x33, 0x10, 0xb5, 0xbf, 0x3b, 0xde, 0xed, 0x99, 0x38, 0x1a, 0xff, + 0xfc, 0x78, 0xd0, 0xab, 0xb9, 0xff, 0x6a, 0x80, 0x95, 0xef, 0xe3, 0x7c, 0x09, 0x80, 0x56, 0x32, + 0xb9, 0x08, 0xa2, 0x22, 0x1d, 0x78, 0xa7, 0x7a, 0xd2, 0xf6, 0x71, 0x2a, 0xfc, 0xaf, 0x90, 0xaa, + 0x02, 0x03, 0x19, 0x15, 0xc1, 0x1b, 0x23, 0x58, 0x5f, 0x24, 0xae, 0xc8, 0x8b, 0xee, 0x55, 0x3d, + 0xe4, 0xfa, 0xce, 0x8f, 0x16, 0xb6, 0xc6, 0x95, 0xa4, 0xa8, 0x15, 0x67, 0x79, 0x1f, 0xac, 0x1c, + 0xed, 0xb4, 0xa1, 0xb5, 0x3f, 0x78, 0xbc, 0x7b, 0x72, 0x88, 0x4a, 0x02, 0xd0, 0x1c, 0x1d, 0x0c, + 0x9f, 0x1c, 0x0e, 0xd4, 0xb3, 0x0e, 0x0f, 0x46, 0xe3, 0x9e, 0xe9, 0xfe, 0xa5, 0x01, 0x56, 0x1e, + 0x7d, 0x9d, 0x4f, 0x30, 0x6c, 0x52, 0x90, 0xd7, 0x5e, 0x95, 0xca, 0xe8, 0x4a, 0x11, 0xc0, 0x72, + 0x3a, 0x2a, 0x7d, 0x10, 0xf9, 0x62, 0x9e, 0xc7, 0x63, 0x02, 0xaa, 0x25, 0x48, 0x6d, 0xa1, 0x0a, + 0xc6, 0x6a, 0x2a, 0x8e, 0x84, 0x4e, 0xaf, 0x68, 0x4c, 0x3a, 0x18, 0x44, 0x1e, 0xd9, 0x7c, 0x43, + 0xeb, 0x20, 0xc2, 0x63, 0xe9, 0xfe, 0x95, 0x09, 0x56, 0x91, 0x72, 0xdd, 0x03, 0x7b, 0x9a, 0x6b, + 0x81, 0x76, 0xe5, 0xdd, 0x05, 0xd5, 0x60, 0x25, 0xdd, 0xb9, 0x05, 0xe6, 0xe5, 0x95, 0xd6, 0xc8, + 0x26, 0xce, 0x7a, 0xfa, 0x9c, 0x99, 0x97, 0x57, 0x65, 0x2c, 0x68, 0xbc, 0x36, 0x16, 0x7c, 0x0c, + 0x37, 0xbc, 0x50, 0xf0, 0x68, 0x52, 0xfa, 0x43, 0x65, 0xd9, 0xeb, 0x84, 0x3e, 0x2e, 0x9c, 0xa2, + 0x96, 0x56, 0xab, 0x94, 0xd6, 0x87, 0xd0, 0xf0, 0x45, 0x98, 0xf1, 0x6a, 0x17, 0xe2, 0x28, 0xe5, + 0x5e, 0x28, 0xf6, 0x11, 0xcd, 0x14, 0x15, 0x95, 0x33, 0xcf, 0x07, 0xab, 0xca, 0x99, 0xcb, 0x81, + 0x15, 0xd4, 0x92, 0xcd, 0x50, 0x61, 0xb3, 0xfb, 0x29, 0xd4, 0x9e, 0x3e, 0x1f, 0xe9, 0xb7, 0x1a, + 0x2f, 0xbc, 0x35, 0x67, 0xb6, 0x59, 0x32, 0xdb, 0xfd, 0xbf, 0x1a, 0xb4, 0xb4, 0x7b, 0xc3, 0x7b, + 0xcf, 0x8a, 0x22, 0x0b, 0x87, 0x8b, 0xd9, 0x55, 0xe1, 0x27, 0xab, 0x1d, 0xab, 0xda, 0xeb, 0x3b, + 0x56, 0xce, 0x97, 0xd0, 0x49, 0x14, 0xad, 0xea, 0x59, 0xdf, 0xaa, 0xae, 0xd1, 0xbf, 0xb4, 0xae, + 0x9d, 0x94, 0x00, 0x2a, 0x03, 0x95, 0xf3, 0x19, 0x3f, 0x27, 0x11, 0x75, 0x58, 0x0b, 0xe1, 0x31, + 0x3f, 0x7f, 0x89, 0x7f, 0xfd, 0x35, 0xdc, 0x24, 0x16, 0x93, 0x71, 0xd2, 0xef, 0x90, 0xeb, 0x43, + 0xd7, 0x5a, 0xf5, 0x7a, 0xdd, 0x45, 0xaf, 0xf7, 0x0e, 0xd8, 0x5e, 0x3c, 0x9d, 0x06, 0x44, 0x5b, + 0xd7, 0x65, 0x10, 0x21, 0xc6, 0xd2, 0xfd, 0x33, 0x03, 0x5a, 0xfa, 0xb5, 0x2f, 0xd8, 0xd4, 0xa3, + 0x83, 0xe1, 0x2e, 0xfb, 0x79, 0xcf, 0x40, 0x9f, 0x71, 0x30, 0x1c, 0xf7, 0x4c, 0xc7, 0x86, 0xc6, + 0xe3, 0xc3, 0xa3, 0xdd, 0x71, 0xaf, 0x86, 0x76, 0xf6, 0xe8, 0xe8, 0xe8, 0xb0, 0x57, 0x77, 0x3a, + 0x60, 0xed, 0xef, 0x8e, 0x07, 0xe3, 0x83, 0x67, 0x83, 0x5e, 0x03, 0xe7, 0x3e, 0x19, 0x1c, 0xf5, + 0x9a, 0x38, 0x38, 0x39, 0xd8, 0xef, 0xb5, 0x90, 0x7e, 0xbc, 0x3b, 0x1a, 0x7d, 0x73, 0xc4, 0xf6, + 0x7b, 0x16, 0xd9, 0xea, 0x98, 0x1d, 0x0c, 0x9f, 0xf4, 0x6c, 0x1c, 0x1f, 0x3d, 0xfa, 0x7a, 0xb0, + 0x37, 0xee, 0x81, 0xfb, 0x29, 0xb4, 0x2b, 0x1c, 0xc4, 0xd5, 0x6c, 0xf0, 0xb8, 0xb7, 0x86, 0x47, + 0x3e, 0xdf, 0x3d, 0x3c, 0x41, 0xd3, 0x5e, 0x07, 0xa0, 0xe1, 0xe4, 0x70, 0x77, 0xf8, 0xa4, 0x67, + 0xba, 0x3f, 0x03, 0xeb, 0x24, 0xf0, 0x1f, 0x85, 0xb1, 0x77, 0x89, 0x8a, 0x71, 0xca, 0xa5, 0xd0, + 0x19, 0x18, 0x8d, 0x31, 0x9c, 0x92, 0x52, 0x4a, 0x2d, 0x7b, 0x0d, 0x21, 0xaf, 0xa2, 0xd9, 0x74, + 0x42, 0x5d, 0xce, 0x9a, 0x0a, 0x1e, 0xd1, 0x6c, 0x7a, 0x12, 0xf8, 0xd2, 0x1d, 0x42, 0xeb, 0x24, + 0xf0, 0x8f, 0xb9, 0x77, 0x89, 0x5e, 0xf8, 0x14, 0xb7, 0x9e, 0xc8, 0xe0, 0x3b, 0xa1, 0x83, 0x8c, + 0x4d, 0x98, 0x51, 0xf0, 0x9d, 0x70, 0x3e, 0x80, 0x26, 0x01, 0x79, 0xb6, 0x4d, 0x6a, 0x9e, 0x5f, + 0x87, 0x69, 0x9a, 0xfb, 0xe7, 0x46, 0xf1, 0x2c, 0x6a, 0x63, 0xdd, 0x81, 0x7a, 0xc2, 0xbd, 0x4b, + 0xed, 0x83, 0xda, 0x7a, 0x0d, 0x9e, 0xc7, 0x88, 0xe0, 0x7c, 0x0c, 0x96, 0xd6, 0x9d, 0x7c, 0xe3, + 0x76, 0x45, 0xc9, 0x58, 0x41, 0x5c, 0x94, 0x6a, 0x6d, 0x51, 0xaa, 0xf8, 0x72, 0x99, 0x84, 0x01, + 0x75, 0x24, 0x6a, 0xe8, 0xab, 0x14, 0xe4, 0x7e, 0x0e, 0x50, 0x76, 0x0e, 0x57, 0xb8, 0xe4, 0x9b, + 0xd0, 0xe0, 0x61, 0xa0, 0x19, 0x66, 0x33, 0x05, 0xb8, 0x43, 0x68, 0x57, 0xfa, 0x8d, 0xc8, 0x3e, + 0x1e, 0x86, 0x93, 0x4b, 0x71, 0x2d, 0x69, 0xad, 0xc5, 0x5a, 0x3c, 0x0c, 0x9f, 0x8a, 0x6b, 0x89, + 0xe1, 0x50, 0xb5, 0x2a, 0xcd, 0xa5, 0x2e, 0x17, 0x2d, 0x65, 0x8a, 0xe8, 0xfe, 0x04, 0x9a, 0xaa, + 0xf5, 0x55, 0xd1, 0x74, 0xe3, 0xa5, 0x09, 0xc1, 0x17, 0xfa, 0xce, 0xd4, 0x28, 0x73, 0xee, 0xe9, + 0x96, 0xa8, 0x54, 0x0d, 0x58, 0xa3, 0xac, 0x0f, 0xd4, 0x24, 0xdd, 0x0d, 0xa5, 0xc9, 0xee, 0x3e, + 0x58, 0xaf, 0x6c, 0x32, 0x6b, 0x06, 0x98, 0x25, 0x03, 0x56, 0xb4, 0x9d, 0xdd, 0x5f, 0x00, 0x94, + 0xad, 0x53, 0x6d, 0x78, 0x6a, 0x17, 0x34, 0xbc, 0xbb, 0x60, 0x79, 0x17, 0x41, 0xe8, 0xa7, 0x22, + 0x5a, 0x78, 0x75, 0xd9, 0x6c, 0x2d, 0xe8, 0xce, 0x26, 0xd4, 0xa9, 0x23, 0x5c, 0x2b, 0x1d, 0x63, + 0xd1, 0x0e, 0x26, 0x8a, 0x3b, 0x87, 0xae, 0xca, 0x33, 0x98, 0xf8, 0xc3, 0x99, 0x90, 0xaf, 0x4c, + 0x6b, 0x6f, 0xab, 0xf8, 0x4c, 0x0e, 0x3b, 0xef, 0x6d, 0x57, 0x30, 0xa8, 0x04, 0x67, 0x81, 0x08, + 0xfd, 0xfc, 0x35, 0x1a, 0x42, 0x21, 0xab, 0x9c, 0xa5, 0xae, 0x5a, 0x7d, 0x04, 0xb8, 0x7f, 0x62, + 0x02, 0xa8, 0xa3, 0x87, 0xb1, 0x2f, 0x16, 0x73, 0x66, 0x63, 0x39, 0x67, 0x76, 0xa0, 0x5e, 0x34, + 0xfb, 0x6d, 0x46, 0xe3, 0xd2, 0x9f, 0xeb, 0x3c, 0x5a, 0x85, 0xcd, 0x77, 0xc1, 0xce, 0xe2, 0x4b, + 0x11, 0x05, 0xdf, 0x51, 0xe3, 0x0a, 0x0f, 0x2c, 0x11, 0xd5, 0xd6, 0x77, 0x63, 0xb1, 0xf5, 0x5d, + 0xf4, 0x07, 0x9b, 0x6a, 0x37, 0xd5, 0x1f, 0x5c, 0xd1, 0xea, 0xc4, 0x67, 0xce, 0x12, 0x29, 0xd2, + 0x2c, 0xcf, 0xc9, 0x15, 0x54, 0x64, 0xa9, 0xb6, 0x9e, 0x8b, 0x59, 0xea, 0x1d, 0x68, 0x47, 0xf1, + 0xc4, 0x8b, 0xa3, 0xb3, 0x30, 0xf0, 0x32, 0xdd, 0xea, 0x86, 0x28, 0xde, 0xd3, 0x18, 0xf7, 0x4b, + 0xe8, 0xe4, 0xfc, 0xa7, 0x8e, 0xe2, 0xdd, 0x22, 0x13, 0x34, 0x4a, 0xd9, 0x96, 0x6c, 0x7a, 0x64, + 0xf6, 0x8d, 0x3c, 0x17, 0x74, 0xff, 0xb7, 0x96, 0x2f, 0xd6, 0xfd, 0xb5, 0x57, 0xf3, 0x70, 0x31, + 0x55, 0x37, 0x7f, 0xad, 0x54, 0xfd, 0xa7, 0x60, 0xfb, 0x94, 0xaf, 0x06, 0x57, 0x79, 0xdc, 0xda, + 0x58, 0xce, 0x4d, 0x75, 0x46, 0x1b, 0x5c, 0x09, 0x56, 0x4e, 0x7e, 0x8d, 0x1c, 0x0a, 0x6e, 0x37, + 0x56, 0x71, 0xbb, 0xf9, 0x1b, 0x72, 0xfb, 0x3d, 0xe8, 0x44, 0x71, 0x34, 0x89, 0x66, 0x61, 0x88, + 0x35, 0x9a, 0x66, 0x77, 0x3b, 0x8a, 0xa3, 0xa1, 0x46, 0x39, 0x77, 0xe1, 0x8d, 0xea, 0x14, 0x65, + 0xd4, 0x6d, 0xd5, 0x82, 0xac, 0xcc, 0x23, 0xd3, 0xdf, 0x82, 0x5e, 0x7c, 0xfa, 0x0b, 0xe1, 0x65, + 0xc4, 0xb1, 0x09, 0x59, 0x73, 0x47, 0x65, 0x2f, 0x0a, 0x8f, 0x2c, 0x1a, 0xa2, 0x5d, 0x2f, 0x89, + 0xb9, 0xfb, 0x82, 0x98, 0xbf, 0x00, 0xbb, 0xe0, 0x52, 0x25, 0x37, 0xb6, 0xa1, 0x71, 0x30, 0xdc, + 0x1f, 0xfc, 0x7e, 0xcf, 0xc0, 0x58, 0xc8, 0x06, 0xcf, 0x07, 0x6c, 0x34, 0xe8, 0x99, 0x18, 0xa7, + 0xf6, 0x07, 0x87, 0x83, 0xf1, 0xa0, 0x57, 0xfb, 0xba, 0x6e, 0xb5, 0x7a, 0x16, 0x35, 0xd8, 0xc2, + 0xc0, 0x0b, 0x32, 0x77, 0x04, 0x50, 0x26, 0xfc, 0xe8, 0x95, 0xcb, 0xcb, 0xe9, 0xea, 0x39, 0xcb, + 0xaf, 0xb5, 0x55, 0x18, 0xa4, 0xf9, 0xb2, 0xb2, 0x42, 0xd1, 0xdd, 0x13, 0xb0, 0x9e, 0xf1, 0xe4, + 0x85, 0xc4, 0xb9, 0x53, 0xb4, 0xa3, 0x66, 0xba, 0x67, 0xac, 0x93, 0x9c, 0x0f, 0xa1, 0xa5, 0x03, + 0x83, 0xf6, 0x2d, 0x0b, 0x41, 0x23, 0xa7, 0xb9, 0xff, 0x60, 0xc0, 0xcd, 0x67, 0xf1, 0x95, 0x28, + 0xf2, 0xbc, 0x63, 0x7e, 0x1d, 0xc6, 0xdc, 0x7f, 0x8d, 0xa6, 0xfe, 0x18, 0x40, 0xc6, 0x33, 0x6a, + 0xfe, 0x16, 0xad, 0x6a, 0x5b, 0x61, 0x9e, 0xe8, 0x6f, 0x65, 0x42, 0x66, 0x44, 0xd4, 0xe1, 0x14, + 0x61, 0x24, 0xfd, 0x08, 0x9a, 0xd9, 0x3c, 0x2a, 0x3b, 0xe3, 0x8d, 0x8c, 0xda, 0x3f, 0xf7, 0xe0, + 0x0d, 0x31, 0x4f, 0xa8, 0xec, 0x9a, 0x14, 0x0d, 0x5a, 0x95, 0x27, 0xf7, 0x72, 0xc2, 0x9e, 0xc6, + 0xbb, 0x7b, 0x60, 0x8f, 0xe7, 0x91, 0x6e, 0x2a, 0x54, 0xd3, 0x1c, 0xe3, 0x15, 0x69, 0x8e, 0xb9, + 0x94, 0xe6, 0xfc, 0xb7, 0x01, 0xed, 0x4a, 0xb6, 0xea, 0xbc, 0x07, 0xf5, 0x6c, 0x1e, 0x2d, 0x7e, + 0x7f, 0xca, 0x0f, 0x61, 0x44, 0x42, 0xed, 0x9d, 0xf2, 0xf9, 0x84, 0x4b, 0x19, 0x9c, 0x47, 0xc2, + 0xd7, 0x5b, 0xb6, 0xa7, 0x7c, 0xbe, 0xab, 0x51, 0xce, 0x21, 0xdc, 0x50, 0xce, 0x39, 0x7f, 0x44, + 0x5e, 0x59, 0xbe, 0xbf, 0x94, 0x1d, 0xab, 0xf6, 0x51, 0xfe, 0x24, 0x5d, 0x2e, 0xad, 0x9f, 0x2f, + 0x20, 0x37, 0x76, 0xe1, 0xcd, 0x15, 0xd3, 0x7e, 0x50, 0xc3, 0xf0, 0x0e, 0x74, 0xc7, 0xf3, 0x68, + 0x1c, 0x4c, 0x85, 0xcc, 0xf8, 0x34, 0xa1, 0x34, 0x51, 0x07, 0xd7, 0x3a, 0x33, 0x33, 0xe9, 0x7e, + 0x04, 0x9d, 0x63, 0x21, 0x52, 0x26, 0x64, 0x12, 0x47, 0x2a, 0x45, 0x92, 0xaa, 0x79, 0xa3, 0x22, + 0xb9, 0x86, 0xdc, 0x3f, 0x00, 0x1b, 0x6b, 0xa3, 0x47, 0x3c, 0xf3, 0x2e, 0x7e, 0x48, 0xed, 0xf4, + 0x11, 0xb4, 0x12, 0xa5, 0x53, 0xba, 0x9c, 0xe9, 0x50, 0x44, 0xd7, 0x7a, 0xc6, 0x72, 0xa2, 0xfb, + 0x29, 0xbc, 0x39, 0x9a, 0x9d, 0x4a, 0x2f, 0x0d, 0x12, 0x8a, 0x7e, 0x3a, 0xda, 0x6d, 0x80, 0x95, + 0xa4, 0xe2, 0x2c, 0x98, 0xeb, 0x4f, 0x83, 0x1d, 0x56, 0xc0, 0xee, 0xe7, 0x70, 0x73, 0x71, 0x89, + 0x7e, 0xc2, 0xbb, 0x50, 0xbb, 0xbc, 0x92, 0xd5, 0x5e, 0xd9, 0xd3, 0xe7, 0xf4, 0xbd, 0x07, 0xd1, + 0x2e, 0x83, 0xda, 0x70, 0x36, 0xad, 0x7e, 0xb3, 0xae, 0xab, 0x6f, 0xd6, 0x0b, 0x2d, 0x1b, 0x73, + 0xa9, 0x65, 0xf3, 0x2e, 0xd8, 0x67, 0x71, 0xfa, 0x47, 0x3c, 0xf5, 0x85, 0xaf, 0xe3, 0x59, 0x89, + 0x70, 0xbf, 0x85, 0x76, 0xae, 0x02, 0x07, 0x3e, 0xb5, 0xd8, 0x49, 0x07, 0x0f, 0xfc, 0x05, 0x95, + 0x54, 0xed, 0x13, 0x11, 0xf9, 0x07, 0xb9, 0xee, 0x28, 0x60, 0xf1, 0x64, 0xdd, 0x19, 0xcd, 0x4f, + 0x76, 0x1f, 0x43, 0x27, 0xaf, 0x95, 0xb0, 0x16, 0x26, 0xad, 0x0e, 0x03, 0x11, 0x55, 0x34, 0xde, + 0x52, 0x88, 0xb1, 0x7c, 0xc5, 0x17, 0x24, 0x77, 0x3b, 0xef, 0xca, 0xa1, 0x67, 0xf6, 0x62, 0x5f, + 0x99, 0x75, 0x83, 0xd1, 0x18, 0xd9, 0x31, 0x95, 0xe7, 0x79, 0xe2, 0x33, 0x95, 0xe7, 0xee, 0x3f, + 0x9a, 0xd0, 0x7d, 0xc4, 0xbd, 0xcb, 0x59, 0x92, 0xcb, 0xa2, 0x52, 0xf0, 0x1a, 0x0b, 0x05, 0x6f, + 0xb5, 0xb8, 0x35, 0x17, 0x8a, 0xdb, 0x85, 0x0b, 0xd5, 0x16, 0xb3, 0x95, 0xb7, 0xa0, 0x35, 0x8b, + 0x82, 0x79, 0xee, 0x0b, 0x6c, 0xd6, 0x44, 0x70, 0x2c, 0x9d, 0x4d, 0x68, 0xa3, 0xbb, 0x08, 0x22, + 0x2a, 0x73, 0x75, 0x57, 0xb0, 0x8a, 0x42, 0xff, 0xc3, 0x3d, 0x4f, 0x48, 0x89, 0x39, 0xa7, 0x2e, + 0x95, 0x6c, 0x85, 0x79, 0x2a, 0xae, 0xc9, 0x3d, 0x09, 0x2f, 0x15, 0xd9, 0xa4, 0x2c, 0x59, 0x6d, + 0x85, 0x41, 0xf2, 0xfb, 0xd0, 0x95, 0x42, 0xca, 0x20, 0x8e, 0x26, 0x14, 0xf0, 0x74, 0x43, 0xa5, + 0xa3, 0x91, 0x63, 0xc4, 0xa1, 0xc0, 0x79, 0x14, 0x47, 0xd7, 0xd3, 0x78, 0x26, 0x75, 0x0c, 0x2b, + 0x11, 0x4b, 0x99, 0x16, 0x2c, 0x67, 0x5a, 0x6e, 0x06, 0xdd, 0xc1, 0x3c, 0xa1, 0xef, 0x90, 0xaf, + 0xcd, 0xda, 0x2a, 0x6c, 0x35, 0x17, 0xd8, 0x5a, 0x61, 0x90, 0xfa, 0x88, 0x93, 0x33, 0x08, 0xf3, + 0xb8, 0x38, 0x9d, 0xf2, 0x2c, 0x67, 0x9c, 0x82, 0xdc, 0xbf, 0x30, 0xc1, 0x56, 0x22, 0xc3, 0x67, + 0x7e, 0xa2, 0x53, 0x32, 0xa3, 0x6c, 0xa6, 0x14, 0xc4, 0xed, 0xa7, 0xe2, 0x9a, 0x52, 0x09, 0x95, + 0xa9, 0xad, 0x6a, 0x27, 0xea, 0x98, 0xa2, 0x0a, 0x09, 0x8a, 0x29, 0xef, 0x80, 0xad, 0x5c, 0x2d, + 0xe2, 0xf5, 0xd7, 0x33, 0x42, 0x9c, 0x04, 0xf4, 0x81, 0x32, 0x13, 0xe9, 0x54, 0x4b, 0x8b, 0xc6, + 0x8b, 0x29, 0x5b, 0x57, 0x27, 0x11, 0xee, 0x05, 0xb4, 0xf4, 0xe9, 0x18, 0x53, 0x4f, 0x86, 0x4f, + 0x87, 0x47, 0xdf, 0x0c, 0x7b, 0x6b, 0x45, 0xfb, 0xc9, 0x28, 0xa3, 0xae, 0x59, 0x8d, 0xba, 0x35, + 0xc4, 0xef, 0x1d, 0x9d, 0x0c, 0xc7, 0xbd, 0xba, 0xd3, 0x05, 0x9b, 0x86, 0x13, 0x36, 0x78, 0xde, + 0x6b, 0x50, 0x0d, 0xb9, 0xf7, 0xd5, 0xe0, 0xd9, 0x6e, 0xaf, 0x59, 0x34, 0xaf, 0x5a, 0xee, 0x9f, + 0x1a, 0xf0, 0x86, 0x7a, 0x72, 0xb5, 0xe2, 0xaa, 0xfe, 0x9d, 0xa5, 0xae, 0xfe, 0xce, 0xf2, 0xdb, + 0x2d, 0xb2, 0x76, 0xfe, 0xd9, 0x80, 0x3a, 0x3a, 0x47, 0xe7, 0x3e, 0xd8, 0x5f, 0x09, 0x9e, 0x66, + 0xa7, 0x82, 0x67, 0xce, 0x82, 0x23, 0xdc, 0xa0, 0x3c, 0xb2, 0x6c, 0xba, 0xbb, 0x6b, 0x0f, 0x0d, + 0x67, 0x5b, 0x7d, 0x94, 0xce, 0xbf, 0xb5, 0x77, 0x73, 0x27, 0x4b, 0x4e, 0x78, 0x63, 0x61, 0xbd, + 0xbb, 0xb6, 0x45, 0xf3, 0xbf, 0x8e, 0x83, 0x68, 0x4f, 0x7d, 0xa9, 0x75, 0x96, 0x9d, 0xf2, 0xf2, + 0x0a, 0xe7, 0x3e, 0x34, 0x0f, 0x24, 0x7a, 0xff, 0x17, 0xa7, 0x52, 0x26, 0x52, 0x0d, 0x0c, 0xee, + 0xda, 0xce, 0xdf, 0xd7, 0xa0, 0xfe, 0xad, 0x48, 0x63, 0xe7, 0x27, 0xd0, 0xd2, 0x9f, 0x28, 0x9c, + 0xca, 0xa7, 0x88, 0x0d, 0xca, 0x55, 0x97, 0xbe, 0x5d, 0xd0, 0x29, 0x3d, 0x95, 0xcc, 0x94, 0x2d, + 0x28, 0xa7, 0xfc, 0x82, 0xf2, 0xc2, 0xa5, 0xbe, 0x80, 0xde, 0x28, 0x4b, 0x05, 0x9f, 0x56, 0xa6, + 0x2f, 0xb2, 0x6a, 0x55, 0x3f, 0x8b, 0xf8, 0x75, 0x0f, 0x9a, 0x2a, 0xc4, 0x2e, 0x2d, 0x58, 0x6e, + 0x4d, 0xd1, 0xe4, 0x8f, 0xa1, 0x3d, 0xba, 0x88, 0x67, 0xa1, 0x3f, 0x12, 0xe9, 0x95, 0x70, 0x2a, + 0x1f, 0x1d, 0x37, 0x2a, 0x63, 0x77, 0xcd, 0xd9, 0x02, 0x50, 0xce, 0xfd, 0x04, 0x35, 0xa5, 0x85, + 0xb4, 0xe1, 0x6c, 0xaa, 0x36, 0xad, 0x78, 0x7d, 0x35, 0xb3, 0x12, 0x69, 0x5f, 0x35, 0xf3, 0x33, + 0xe8, 0xee, 0x91, 0xd6, 0x1c, 0xa5, 0xbb, 0xa7, 0x71, 0x9a, 0x39, 0xcb, 0x1f, 0x1e, 0x37, 0x96, + 0x11, 0xee, 0x9a, 0xf3, 0x10, 0xac, 0x71, 0x7a, 0xad, 0xe6, 0xbf, 0xa1, 0x13, 0x94, 0xf2, 0xbc, + 0x15, 0xaf, 0xdc, 0xf9, 0xf7, 0x1a, 0x34, 0xbf, 0x89, 0xd3, 0x4b, 0x91, 0x62, 0xdd, 0x42, 0x3d, + 0x44, 0xad, 0x46, 0x45, 0x3f, 0x71, 0xd5, 0x41, 0x1f, 0x80, 0x4d, 0x4c, 0x19, 0x73, 0x79, 0xa9, + 0x44, 0x45, 0x7f, 0xa5, 0x52, 0x7c, 0x51, 0x75, 0x10, 0xc9, 0x75, 0x5d, 0x09, 0xaa, 0x68, 0xa9, + 0x2e, 0x34, 0xf6, 0x36, 0x5a, 0x2a, 0xf2, 0x8e, 0x50, 0x35, 0x1f, 0x1a, 0xe8, 0x8e, 0x46, 0xea, + 0xa5, 0x38, 0xa9, 0xfc, 0x0b, 0x89, 0xd2, 0xfc, 0xf2, 0x3f, 0x1b, 0xee, 0x9a, 0xf3, 0x00, 0x9a, + 0x2a, 0x09, 0x56, 0xcf, 0x5c, 0xa8, 0x7f, 0x37, 0x7a, 0x55, 0x94, 0x5e, 0xf0, 0x09, 0x34, 0x95, + 0x9d, 0xab, 0x05, 0x0b, 0x61, 0x4b, 0xdd, 0x5a, 0x85, 0x3e, 0x35, 0x55, 0x79, 0x66, 0x35, 0x75, + 0xc1, 0x4b, 0x2f, 0x4d, 0xbd, 0x0f, 0x3d, 0x26, 0x3c, 0x11, 0x54, 0xd2, 0x63, 0x27, 0x7f, 0xd4, + 0x0a, 0xeb, 0xfb, 0x02, 0xba, 0x0b, 0xa9, 0xb4, 0xd3, 0x27, 0x46, 0xaf, 0xc8, 0xae, 0x5f, 0xd0, + 0xf9, 0xcf, 0xc1, 0xd6, 0x99, 0xcc, 0xa9, 0x70, 0xa8, 0x87, 0xb8, 0x22, 0x17, 0xda, 0xa8, 0xa4, + 0x32, 0xa8, 0xc1, 0x8f, 0x7a, 0xff, 0xf2, 0xfd, 0x6d, 0xe3, 0xdf, 0xbe, 0xbf, 0x6d, 0xfc, 0xe7, + 0xf7, 0xb7, 0x8d, 0x5f, 0xfe, 0xd7, 0xed, 0xb5, 0xd3, 0x26, 0xfd, 0x71, 0xef, 0xb3, 0xff, 0x0f, + 0x00, 0x00, 0xff, 0xff, 0x18, 0x36, 0x96, 0x3c, 0xfc, 0x27, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4725,7 +4827,7 @@ func (c *raftClient) Heartbeat(ctx context.Context, in *api.Payload, opts ...grp } type Raft_HeartbeatClient interface { - Recv() (*api.Payload, error) + Recv() (*HealthInfo, error) grpc.ClientStream } @@ -4733,8 +4835,8 @@ type raftHeartbeatClient struct { grpc.ClientStream } -func (x *raftHeartbeatClient) Recv() (*api.Payload, error) { - m := new(api.Payload) +func (x *raftHeartbeatClient) Recv() (*HealthInfo, error) { + m := new(HealthInfo) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -4831,7 +4933,7 @@ func _Raft_Heartbeat_Handler(srv interface{}, stream grpc.ServerStream) error { } type Raft_HeartbeatServer interface { - Send(*api.Payload) error + Send(*HealthInfo) error grpc.ServerStream } @@ -4839,7 +4941,7 @@ type raftHeartbeatServer struct { grpc.ServerStream } -func (x *raftHeartbeatServer) Send(m *api.Payload) error { +func (x *raftHeartbeatServer) Send(m *HealthInfo) error { return x.ServerStream.SendMsg(m) } @@ -7058,6 +7160,78 @@ func (m *ConnectionState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *HealthInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HealthInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HealthInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.LastEcho != 0 { + i = encodeVarintPb(dAtA, i, uint64(m.LastEcho)) + i-- + dAtA[i] = 0x38 + } + if m.Uptime != 0 { + i = encodeVarintPb(dAtA, i, uint64(m.Uptime)) + i-- + dAtA[i] = 0x30 + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintPb(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x2a + } + if len(m.Group) > 0 { + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintPb(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x22 + } + if len(m.Status) > 0 { + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintPb(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x1a + } + if len(m.Addr) > 0 { + i -= len(m.Addr) + copy(dAtA[i:], m.Addr) + i = encodeVarintPb(dAtA, i, uint64(len(m.Addr))) + i-- + dAtA[i] = 0x12 + } + if len(m.Instance) > 0 { + i -= len(m.Instance) + copy(dAtA[i:], m.Instance) + i = encodeVarintPb(dAtA, i, uint64(len(m.Instance))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Tablet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9970,6 +10144,44 @@ func (m *ConnectionState) Size() (n int) { return n } +func (m *HealthInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Instance) + if l > 0 { + n += 1 + l + sovPb(uint64(l)) + } + l = len(m.Addr) + if l > 0 { + n += 1 + l + sovPb(uint64(l)) + } + l = len(m.Status) + if l > 0 { + n += 1 + l + sovPb(uint64(l)) + } + l = len(m.Group) + if l > 0 { + n += 1 + l + sovPb(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovPb(uint64(l)) + } + if m.Uptime != 0 { + n += 1 + sovPb(uint64(m.Uptime)) + } + if m.LastEcho != 0 { + n += 1 + sovPb(uint64(m.LastEcho)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *Tablet) Size() (n int) { if m == nil { return 0 @@ -14527,6 +14739,258 @@ func (m *ConnectionState) Unmarshal(dAtA []byte) error { } return nil } +func (m *HealthInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HealthInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HealthInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Instance", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + 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 ErrInvalidLengthPb + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPb + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Instance = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + 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 ErrInvalidLengthPb + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPb + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + 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 ErrInvalidLengthPb + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPb + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + 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 ErrInvalidLengthPb + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPb + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + 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 ErrInvalidLengthPb + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPb + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Uptime", wireType) + } + m.Uptime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Uptime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastEcho", wireType) + } + m.LastEcho = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPb + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastEcho |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipPb(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthPb + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthPb + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Tablet) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/worker/groups.go b/worker/groups.go index 6038764aa1d..e53f5c2664e 100644 --- a/worker/groups.go +++ b/worker/groups.go @@ -586,6 +586,11 @@ func KnownGroups() []uint32 { return groups().KnownGroups() } +// GroupId returns the group to which this worker belongs to. +func GroupId() uint32 { + return groups().groupId() +} + func (g *groupi) triggerMembershipSync() { // It's ok if we miss the trigger, periodic membership sync runs every minute. select { diff --git a/x/config.go b/x/config.go index 9f6c9b17f1e..4f7110abb81 100644 --- a/x/config.go +++ b/x/config.go @@ -74,6 +74,8 @@ type WorkerOptions struct { // ProposedGroupId will be used if there's a file in the p directory called group_id with the // proposed group ID for this server. ProposedGroupId uint32 + // StartTime is the start time of the alpha + StartTime time.Time } // WorkerConfig stores the global instance of the worker package's options.