Merge pull request #42 from tendermint/collapse_info

Flatten ResponseInfo
This commit is contained in:
Ethan Buchman 2017-01-12 15:20:59 -05:00 committed by GitHub
commit 2e414ebe6b
19 changed files with 234 additions and 309 deletions

View File

@ -25,7 +25,7 @@ type Client interface {
FlushSync() error FlushSync() error
EchoSync(msg string) (res types.Result) EchoSync(msg string) (res types.Result)
InfoSync() (types.Result, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) InfoSync() (resInfo types.ResponseInfo, err error)
SetOptionSync(key string, value string) (res types.Result) SetOptionSync(key string, value string) (res types.Result)
AppendTxSync(tx []byte) (res types.Result) AppendTxSync(tx []byte) (res types.Result)
CheckTxSync(tx []byte) (res types.Result) CheckTxSync(tx []byte) (res types.Result)
@ -38,7 +38,7 @@ type Client interface {
InitChainSync(validators []*types.Validator) (err error) InitChainSync(validators []*types.Validator) (err error)
BeginBlockSync(hash []byte, header *types.Header) (err error) BeginBlockSync(hash []byte, header *types.Header) (err error)
EndBlockSync(height uint64) (changedValidators []*types.Validator, err error) EndBlockSync(height uint64) (resEndBlock types.ResponseEndBlock, err error)
} }
//---------------------------------------- //----------------------------------------

View File

@ -262,13 +262,16 @@ func (cli *grpcClient) FlushSync() error {
return nil return nil
} }
func (cli *grpcClient) InfoSync() (types.Result, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (cli *grpcClient) InfoSync() (resInfo types.ResponseInfo, err error) {
reqres := cli.InfoAsync() reqres := cli.InfoAsync()
if res := cli.checkErrGetResult(); res.IsErr() { if err = cli.Error(); err != nil {
return res, nil, nil, nil return resInfo, err
}
if resInfo_ := reqres.Response.GetInfo(); resInfo_ != nil {
return *resInfo_, nil
} else {
return resInfo, nil
} }
resp := reqres.Response.GetInfo()
return types.NewResultOK([]byte(resp.Info), LOG), resp.TmspInfo, resp.LastBlock, resp.Config
} }
func (cli *grpcClient) SetOptionSync(key string, value string) (res types.Result) { func (cli *grpcClient) SetOptionSync(key string, value string) (res types.Result) {
@ -326,10 +329,14 @@ func (cli *grpcClient) BeginBlockSync(hash []byte, header *types.Header) (err er
return cli.Error() return cli.Error()
} }
func (cli *grpcClient) EndBlockSync(height uint64) (validators []*types.Validator, err error) { func (cli *grpcClient) EndBlockSync(height uint64) (resEndBlock types.ResponseEndBlock, err error) {
reqres := cli.EndBlockAsync(height) reqres := cli.EndBlockAsync(height)
if err := cli.Error(); err != nil { if err := cli.Error(); err != nil {
return nil, err return resEndBlock, err
}
if resEndBlock_ := reqres.Response.GetEndBlock(); resEndBlock_ != nil {
return *resEndBlock_, nil
} else {
return resEndBlock, nil
} }
return reqres.Response.GetEndBlock().Diffs, nil
} }

View File

@ -51,11 +51,11 @@ func (app *localClient) EchoAsync(msg string) *ReqRes {
func (app *localClient) InfoAsync() *ReqRes { func (app *localClient) InfoAsync() *ReqRes {
app.mtx.Lock() app.mtx.Lock()
info, tmspInfo, blockInfo, configInfo := app.Application.Info() resInfo := app.Application.Info()
app.mtx.Unlock() app.mtx.Unlock()
return app.callback( return app.callback(
types.ToRequestInfo(), types.ToRequestInfo(),
types.ToResponseInfo(info, tmspInfo, blockInfo, configInfo), types.ToResponseInfo(resInfo),
) )
} }
@ -136,14 +136,14 @@ func (app *localClient) BeginBlockAsync(hash []byte, header *types.Header) *ReqR
func (app *localClient) EndBlockAsync(height uint64) *ReqRes { func (app *localClient) EndBlockAsync(height uint64) *ReqRes {
app.mtx.Lock() app.mtx.Lock()
var validators []*types.Validator var resEndBlock types.ResponseEndBlock
if bcApp, ok := app.Application.(types.BlockchainAware); ok { if bcApp, ok := app.Application.(types.BlockchainAware); ok {
validators = bcApp.EndBlock(height) resEndBlock = bcApp.EndBlock(height)
} }
app.mtx.Unlock() app.mtx.Unlock()
return app.callback( return app.callback(
types.ToRequestEndBlock(height), types.ToRequestEndBlock(height),
types.ToResponseEndBlock(validators), types.ToResponseEndBlock(resEndBlock),
) )
} }
@ -157,11 +157,11 @@ func (app *localClient) EchoSync(msg string) (res types.Result) {
return types.OK.SetData([]byte(msg)) return types.OK.SetData([]byte(msg))
} }
func (app *localClient) InfoSync() (types.Result, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *localClient) InfoSync() (resInfo types.ResponseInfo, err error) {
app.mtx.Lock() app.mtx.Lock()
defer app.mtx.Unlock() defer app.mtx.Unlock()
info, tmspInfo, blockInfo, configInfo := app.Application.Info() resInfo = app.Application.Info()
return types.OK.SetData([]byte(info)), tmspInfo, blockInfo, configInfo return resInfo, nil
} }
func (app *localClient) SetOptionSync(key string, value string) (res types.Result) { func (app *localClient) SetOptionSync(key string, value string) (res types.Result) {
@ -217,13 +217,13 @@ func (app *localClient) BeginBlockSync(hash []byte, header *types.Header) (err e
return nil return nil
} }
func (app *localClient) EndBlockSync(height uint64) (changedValidators []*types.Validator, err error) { func (app *localClient) EndBlockSync(height uint64) (resEndBlock types.ResponseEndBlock, err error) {
app.mtx.Lock() app.mtx.Lock()
if bcApp, ok := app.Application.(types.BlockchainAware); ok { if bcApp, ok := app.Application.(types.BlockchainAware); ok {
changedValidators = bcApp.EndBlock(height) resEndBlock = bcApp.EndBlock(height)
} }
app.mtx.Unlock() app.mtx.Unlock()
return changedValidators, nil return resEndBlock, nil
} }
//------------------------------------------------------- //-------------------------------------------------------

View File

@ -292,14 +292,17 @@ func (cli *socketClient) FlushSync() error {
return cli.Error() return cli.Error()
} }
func (cli *socketClient) InfoSync() (types.Result, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (cli *socketClient) InfoSync() (resInfo types.ResponseInfo, err error) {
reqres := cli.queueRequest(types.ToRequestInfo()) reqres := cli.queueRequest(types.ToRequestInfo())
cli.FlushSync() cli.FlushSync()
if err := cli.Error(); err != nil { if err := cli.Error(); err != nil {
return types.ErrInternalError.SetLog(err.Error()), nil, nil, nil return resInfo, err
}
if resInfo_ := reqres.Response.GetInfo(); resInfo_ != nil {
return *resInfo_, nil
} else {
return resInfo, nil
} }
resp := reqres.Response.GetInfo()
return types.Result{Code: OK, Data: []byte(resp.Info), Log: LOG}, resp.TmspInfo, resp.LastBlock, resp.Config
} }
func (cli *socketClient) SetOptionSync(key string, value string) (res types.Result) { func (cli *socketClient) SetOptionSync(key string, value string) (res types.Result) {
@ -370,13 +373,17 @@ func (cli *socketClient) BeginBlockSync(hash []byte, header *types.Header) (err
return nil return nil
} }
func (cli *socketClient) EndBlockSync(height uint64) (validators []*types.Validator, err error) { func (cli *socketClient) EndBlockSync(height uint64) (resEndBlock types.ResponseEndBlock, err error) {
reqres := cli.queueRequest(types.ToRequestEndBlock(height)) reqres := cli.queueRequest(types.ToRequestEndBlock(height))
cli.FlushSync() cli.FlushSync()
if err := cli.Error(); err != nil { if err := cli.Error(); err != nil {
return nil, err return resEndBlock, err
}
if resEndBlock_ := reqres.Response.GetEndBlock(); resEndBlock_ != nil {
return *resEndBlock_, nil
} else {
return resEndBlock, nil
} }
return reqres.Response.GetEndBlock().Diffs, nil
} }
//---------------------------------------- //----------------------------------------

View File

@ -17,7 +17,7 @@ func main() {
app := counter.NewCounterApplication(*serialPtr) app := counter.NewCounterApplication(*serialPtr)
// Start the listener // Start the listener
_, err := server.NewServer(*addrPtr, *tmspPtr, app) srv, err := server.NewServer(*addrPtr, *tmspPtr, app)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
@ -25,6 +25,7 @@ func main() {
// Wait forever // Wait forever
TrapSignal(func() { TrapSignal(func() {
// Cleanup // Cleanup
srv.Stop()
}) })
} }

View File

@ -25,7 +25,7 @@ func main() {
} }
// Start the listener // Start the listener
_, err := server.NewServer(*addrPtr, *tmspPtr, app) srv, err := server.NewServer(*addrPtr, *tmspPtr, app)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
@ -33,6 +33,7 @@ func main() {
// Wait forever // Wait forever
TrapSignal(func() { TrapSignal(func() {
// Cleanup // Cleanup
srv.Stop()
}) })
} }

View File

@ -228,8 +228,11 @@ func cmdEcho(c *cli.Context) error {
// Get some info from the application // Get some info from the application
func cmdInfo(c *cli.Context) error { func cmdInfo(c *cli.Context) error {
res, _, _, _ := client.InfoSync() resInfo, err := client.InfoSync()
rsp := newResponse(res, string(res.Data), false) if err != nil {
return err
}
rsp := newResponse(types.Result{}, string(resInfo.Data), false)
printResponse(c, rsp) printResponse(c, rsp)
return nil return nil
} }

View File

@ -15,7 +15,7 @@ func main() {
flag.Parse() flag.Parse()
// Start the listener // Start the listener
_, err := server.NewServer(*addrPtr, *tmspPtr, NewChainAwareApplication()) srv, err := server.NewServer(*addrPtr, *tmspPtr, NewChainAwareApplication())
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
@ -23,6 +23,7 @@ func main() {
// Wait forever // Wait forever
TrapSignal(func() { TrapSignal(func() {
// Cleanup // Cleanup
srv.Stop()
}) })
} }
@ -36,8 +37,8 @@ func NewChainAwareApplication() *ChainAwareApplication {
return &ChainAwareApplication{} return &ChainAwareApplication{}
} }
func (app *ChainAwareApplication) Info() (string, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *ChainAwareApplication) Info() types.ResponseInfo {
return "nil", nil, nil, nil return types.ResponseInfo{}
} }
func (app *ChainAwareApplication) SetOption(key string, value string) (log string) { func (app *ChainAwareApplication) SetOption(key string, value string) (log string) {
@ -65,9 +66,9 @@ func (app *ChainAwareApplication) BeginBlock(hash []byte, header *types.Header)
return return
} }
func (app *ChainAwareApplication) EndBlock(height uint64) []*types.Validator { func (app *ChainAwareApplication) EndBlock(height uint64) (resEndBlock types.ResponseEndBlock) {
app.endCount += 1 app.endCount += 1
return nil return
} }
func (app *ChainAwareApplication) InitChain(vals []*types.Validator) { func (app *ChainAwareApplication) InitChain(vals []*types.Validator) {

View File

@ -16,10 +16,11 @@ func TestChainAware(t *testing.T) {
app := NewChainAwareApplication() app := NewChainAwareApplication()
// Start the listener // Start the listener
_, err := server.NewServer("unix://test.sock", "socket", app) srv, err := server.NewServer("unix://test.sock", "socket", app)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer srv.Stop()
// Connect to the socket // Connect to the socket
client, err := tmspcli.NewSocketClient("unix://test.sock", false) client, err := tmspcli.NewSocketClient("unix://test.sock", false)

View File

@ -17,8 +17,8 @@ func NewCounterApplication(serial bool) *CounterApplication {
return &CounterApplication{serial: serial} return &CounterApplication{serial: serial}
} }
func (app *CounterApplication) Info() (string, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *CounterApplication) Info() types.ResponseInfo {
return Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount), nil, nil, nil return types.ResponseInfo{Data: Fmt("{\"hashes\":%v,\"txs\":%v}", app.hashCount, app.txCount)}
} }
func (app *CounterApplication) SetOption(key string, value string) (log string) { func (app *CounterApplication) SetOption(key string, value string) (log string) {

View File

@ -19,8 +19,8 @@ func NewDummyApplication() *DummyApplication {
return &DummyApplication{state: state} return &DummyApplication{state: state}
} }
func (app *DummyApplication) Info() (string, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *DummyApplication) Info() (resInfo types.ResponseInfo) {
return Fmt("{\"size\":%v}", app.state.Size()), nil, nil, nil return types.ResponseInfo{Data: Fmt("{\"size\":%v}", app.state.Size())}
} }
func (app *DummyApplication) SetOption(key string, value string) (log string) { func (app *DummyApplication) SetOption(key string, value string) (log string) {

View File

@ -72,9 +72,9 @@ func TestPersistentDummyInfo(t *testing.T) {
dummy := NewPersistentDummyApplication(dir) dummy := NewPersistentDummyApplication(dir)
height := uint64(0) height := uint64(0)
_, _, lastBlockInfo, _ := dummy.Info() resInfo := dummy.Info()
if lastBlockInfo.BlockHeight != height { if resInfo.LastBlockHeight != height {
t.Fatalf("expected height of %d, got %d", height, lastBlockInfo.BlockHeight) t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight)
} }
// make and apply block // make and apply block
@ -87,9 +87,9 @@ func TestPersistentDummyInfo(t *testing.T) {
dummy.EndBlock(height) dummy.EndBlock(height)
dummy.Commit() dummy.Commit()
_, _, lastBlockInfo, _ = dummy.Info() resInfo = dummy.Info()
if lastBlockInfo.BlockHeight != height { if resInfo.LastBlockHeight != height {
t.Fatalf("expected height of %d, got %d", height, lastBlockInfo.BlockHeight) t.Fatalf("expected height of %d, got %d", height, resInfo.LastBlockHeight)
} }
} }
@ -179,10 +179,10 @@ func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff [
t.Fatal(r) t.Fatal(r)
} }
} }
diff2 := dummyChain.EndBlock(height) resEndBlock := dummyChain.EndBlock(height)
dummy.Commit() dummy.Commit()
valsEqual(t, diff, diff2) valsEqual(t, diff, resEndBlock.Diffs)
} }

View File

@ -38,7 +38,7 @@ func NewPersistentDummyApplication(dbDir string) *PersistentDummyApplication {
stateTree := merkle.NewIAVLTree(0, db) stateTree := merkle.NewIAVLTree(0, db)
stateTree.Load(lastBlock.AppHash) stateTree.Load(lastBlock.AppHash)
log.Notice("Loaded state", "block", lastBlock.BlockHeight, "root", stateTree.Hash()) log.Notice("Loaded state", "block", lastBlock.Height, "root", stateTree.Hash())
return &PersistentDummyApplication{ return &PersistentDummyApplication{
app: &DummyApplication{state: stateTree}, app: &DummyApplication{state: stateTree},
@ -46,10 +46,12 @@ func NewPersistentDummyApplication(dbDir string) *PersistentDummyApplication {
} }
} }
func (app *PersistentDummyApplication) Info() (string, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *PersistentDummyApplication) Info() (resInfo types.ResponseInfo) {
s, _, _, _ := app.app.Info() resInfo = app.app.Info()
lastBlock := LoadLastBlock(app.db) lastBlock := LoadLastBlock(app.db)
return s, nil, &lastBlock, nil resInfo.LastBlockHeight = lastBlock.Height
resInfo.LastBlockAppHash = lastBlock.AppHash
return resInfo
} }
func (app *PersistentDummyApplication) SetOption(key string, value string) (log string) { func (app *PersistentDummyApplication) SetOption(key string, value string) (log string) {
@ -79,9 +81,9 @@ func (app *PersistentDummyApplication) Commit() types.Result {
appHash := app.app.state.Save() appHash := app.app.state.Save()
log.Info("Saved state", "root", appHash) log.Info("Saved state", "root", appHash)
lastBlock := types.LastBlockInfo{ lastBlock := LastBlockInfo{
BlockHeight: app.blockHeader.Height, Height: app.blockHeader.Height,
AppHash: appHash, // this hash will be in the next block header AppHash: appHash, // this hash will be in the next block header
} }
SaveLastBlock(app.db, lastBlock) SaveLastBlock(app.db, lastBlock)
return types.NewResultOK(appHash, "") return types.NewResultOK(appHash, "")
@ -111,8 +113,8 @@ func (app *PersistentDummyApplication) BeginBlock(hash []byte, header *types.Hea
} }
// Update the validator set // Update the validator set
func (app *PersistentDummyApplication) EndBlock(height uint64) (diffs []*types.Validator) { func (app *PersistentDummyApplication) EndBlock(height uint64) (resEndBlock types.ResponseEndBlock) {
return app.changes return types.ResponseEndBlock{Diffs: app.changes}
} }
//----------------------------------------- //-----------------------------------------
@ -120,8 +122,13 @@ func (app *PersistentDummyApplication) EndBlock(height uint64) (diffs []*types.V
var lastBlockKey = []byte("lastblock") var lastBlockKey = []byte("lastblock")
type LastBlockInfo struct {
Height uint64
AppHash []byte
}
// Get the last block from the db // Get the last block from the db
func LoadLastBlock(db dbm.DB) (lastBlock types.LastBlockInfo) { func LoadLastBlock(db dbm.DB) (lastBlock LastBlockInfo) {
buf := db.Get(lastBlockKey) buf := db.Get(lastBlockKey)
if len(buf) != 0 { if len(buf) != 0 {
r, n, err := bytes.NewReader(buf), new(int), new(error) r, n, err := bytes.NewReader(buf), new(int), new(error)
@ -136,8 +143,8 @@ func LoadLastBlock(db dbm.DB) (lastBlock types.LastBlockInfo) {
return lastBlock return lastBlock
} }
func SaveLastBlock(db dbm.DB, lastBlock types.LastBlockInfo) { func SaveLastBlock(db dbm.DB, lastBlock LastBlockInfo) {
log.Notice("Saving block", "height", lastBlock.BlockHeight, "root", lastBlock.AppHash) log.Notice("Saving block", "height", lastBlock.Height, "root", lastBlock.AppHash)
buf, n, err := new(bytes.Buffer), new(int), new(error) buf, n, err := new(bytes.Buffer), new(int), new(error)
wire.WriteBinary(lastBlock, buf, n, err) wire.WriteBinary(lastBlock, buf, n, err)
if *err != nil { if *err != nil {

View File

@ -11,8 +11,8 @@ func NewNilApplication() *NilApplication {
return &NilApplication{} return &NilApplication{}
} }
func (app *NilApplication) Info() (string, *types.TMSPInfo, *types.LastBlockInfo, *types.ConfigInfo) { func (app *NilApplication) Info() (resInfo types.ResponseInfo) {
return "nil", nil, nil, nil return
} }
func (app *NilApplication) SetOption(key string, value string) (log string) { func (app *NilApplication) SetOption(key string, value string) (log string) {

View File

@ -168,7 +168,8 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types
case *types.Request_Flush: case *types.Request_Flush:
responses <- types.ToResponseFlush() responses <- types.ToResponseFlush()
case *types.Request_Info: case *types.Request_Info:
responses <- types.ToResponseInfo(s.app.Info()) resInfo := s.app.Info()
responses <- types.ToResponseInfo(resInfo)
case *types.Request_SetOption: case *types.Request_SetOption:
so := r.SetOption so := r.SetOption
logStr := s.app.SetOption(so.Key, so.Value) logStr := s.app.SetOption(so.Key, so.Value)
@ -197,10 +198,10 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types
responses <- types.ToResponseBeginBlock() responses <- types.ToResponseBeginBlock()
case *types.Request_EndBlock: case *types.Request_EndBlock:
if app, ok := s.app.(types.BlockchainAware); ok { if app, ok := s.app.(types.BlockchainAware); ok {
validators := app.EndBlock(r.EndBlock.Height) resEndBlock := app.EndBlock(r.EndBlock.Height)
responses <- types.ToResponseEndBlock(validators) responses <- types.ToResponseEndBlock(resEndBlock)
} else { } else {
responses <- types.ToResponseEndBlock(nil) responses <- types.ToResponseEndBlock(types.ResponseEndBlock{})
} }
default: default:
responses <- types.ToResponseException("Unknown request") responses <- types.ToResponseException("Unknown request")

View File

@ -8,7 +8,7 @@ import (
type Application interface { type Application interface {
// Return application info // Return application info
Info() (string, *TMSPInfo, *LastBlockInfo, *ConfigInfo) Info() ResponseInfo
// Set application option (e.g. mode=mempool, mode=consensus) // Set application option (e.g. mode=mempool, mode=consensus)
SetOption(key string, value string) (log string) SetOption(key string, value string) (log string)
@ -38,7 +38,7 @@ type BlockchainAware interface {
// Signals the end of a block // Signals the end of a block
// diffs: changed validators from app to TendermintCore // diffs: changed validators from app to TendermintCore
EndBlock(height uint64) (diffs []*Validator) EndBlock(height uint64) ResponseEndBlock
} }
//------------------------------------ //------------------------------------
@ -59,8 +59,8 @@ func (app *GRPCApplication) Flush(ctx context.Context, req *RequestFlush) (*Resp
} }
func (app *GRPCApplication) Info(ctx context.Context, req *RequestInfo) (*ResponseInfo, error) { func (app *GRPCApplication) Info(ctx context.Context, req *RequestInfo) (*ResponseInfo, error) {
info, tmspInfo, blockInfo, configInfo := app.app.Info() resInfo := app.app.Info()
return &ResponseInfo{info, tmspInfo, blockInfo, configInfo}, nil return &resInfo, nil
} }
func (app *GRPCApplication) SetOption(ctx context.Context, req *RequestSetOption) (*ResponseSetOption, error) { func (app *GRPCApplication) SetOption(ctx context.Context, req *RequestSetOption) (*ResponseSetOption, error) {
@ -103,8 +103,8 @@ func (app *GRPCApplication) BeginBlock(ctx context.Context, req *RequestBeginBlo
func (app *GRPCApplication) EndBlock(ctx context.Context, req *RequestEndBlock) (*ResponseEndBlock, error) { func (app *GRPCApplication) EndBlock(ctx context.Context, req *RequestEndBlock) (*ResponseEndBlock, error) {
if chainAware, ok := app.app.(BlockchainAware); ok { if chainAware, ok := app.app.(BlockchainAware); ok {
diffs := chainAware.EndBlock(req.Height) resEndBlock := chainAware.EndBlock(req.Height)
return &ResponseEndBlock{diffs}, nil return &resEndBlock, nil
} }
return &ResponseEndBlock{}, nil return &ResponseEndBlock{}, nil
} }

View File

@ -93,9 +93,9 @@ func ToResponseFlush() *Response {
} }
} }
func ToResponseInfo(info string, tmspInfo *TMSPInfo, blockInfo *LastBlockInfo, configInfo *ConfigInfo) *Response { func ToResponseInfo(resInfo ResponseInfo) *Response {
return &Response{ return &Response{
Value: &Response_Info{&ResponseInfo{info, tmspInfo, blockInfo, configInfo}}, Value: &Response_Info{&resInfo},
} }
} }
@ -141,9 +141,9 @@ func ToResponseBeginBlock() *Response {
} }
} }
func ToResponseEndBlock(validators []*Validator) *Response { func ToResponseEndBlock(resEndBlock ResponseEndBlock) *Response {
return &Response{ return &Response{
Value: &Response_EndBlock{&ResponseEndBlock{validators}}, Value: &Response_EndBlock{&resEndBlock},
} }
} }

View File

@ -34,9 +34,6 @@ It has these top-level messages:
ResponseInitChain ResponseInitChain
ResponseBeginBlock ResponseBeginBlock
ResponseEndBlock ResponseEndBlock
TMSPInfo
LastBlockInfo
ConfigInfo
Header Header
BlockID BlockID
PartSetHeader PartSetHeader
@ -1270,10 +1267,10 @@ func (*ResponseFlush) ProtoMessage() {}
func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (*ResponseFlush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
type ResponseInfo struct { type ResponseInfo struct {
Info string `protobuf:"bytes,1,opt,name=info" json:"info,omitempty"` Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
TmspInfo *TMSPInfo `protobuf:"bytes,2,opt,name=tmsp_info,json=tmspInfo" json:"tmsp_info,omitempty"` Version string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
LastBlock *LastBlockInfo `protobuf:"bytes,3,opt,name=last_block,json=lastBlock" json:"last_block,omitempty"` LastBlockHeight uint64 `protobuf:"varint,3,opt,name=last_block_height,json=lastBlockHeight" json:"last_block_height,omitempty"`
Config *ConfigInfo `protobuf:"bytes,4,opt,name=config" json:"config,omitempty"` LastBlockAppHash []byte `protobuf:"bytes,4,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"`
} }
func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} }
@ -1281,30 +1278,30 @@ func (m *ResponseInfo) String() string { return proto.CompactTextStri
func (*ResponseInfo) ProtoMessage() {} func (*ResponseInfo) ProtoMessage() {}
func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (*ResponseInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (m *ResponseInfo) GetInfo() string { func (m *ResponseInfo) GetData() string {
if m != nil { if m != nil {
return m.Info return m.Data
} }
return "" return ""
} }
func (m *ResponseInfo) GetTmspInfo() *TMSPInfo { func (m *ResponseInfo) GetVersion() string {
if m != nil { if m != nil {
return m.TmspInfo return m.Version
} }
return nil return ""
} }
func (m *ResponseInfo) GetLastBlock() *LastBlockInfo { func (m *ResponseInfo) GetLastBlockHeight() uint64 {
if m != nil { if m != nil {
return m.LastBlock return m.LastBlockHeight
} }
return nil return 0
} }
func (m *ResponseInfo) GetConfig() *ConfigInfo { func (m *ResponseInfo) GetLastBlockAppHash() []byte {
if m != nil { if m != nil {
return m.Config return m.LastBlockAppHash
} }
return nil return nil
} }
@ -1485,78 +1482,6 @@ func (m *ResponseEndBlock) GetDiffs() []*Validator {
return nil return nil
} }
type TMSPInfo struct {
Version string `protobuf:"bytes,1,opt,name=Version" json:"Version,omitempty"`
}
func (m *TMSPInfo) Reset() { *m = TMSPInfo{} }
func (m *TMSPInfo) String() string { return proto.CompactTextString(m) }
func (*TMSPInfo) ProtoMessage() {}
func (*TMSPInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *TMSPInfo) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
type LastBlockInfo struct {
BlockHeight uint64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight" json:"block_height,omitempty"`
AppHash []byte `protobuf:"bytes,2,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"`
}
func (m *LastBlockInfo) Reset() { *m = LastBlockInfo{} }
func (m *LastBlockInfo) String() string { return proto.CompactTextString(m) }
func (*LastBlockInfo) ProtoMessage() {}
func (*LastBlockInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *LastBlockInfo) GetBlockHeight() uint64 {
if m != nil {
return m.BlockHeight
}
return 0
}
func (m *LastBlockInfo) GetAppHash() []byte {
if m != nil {
return m.AppHash
}
return nil
}
type ConfigInfo struct {
MaxBlockSizeBytes uint64 `protobuf:"varint,1,opt,name=max_block_size_bytes,json=maxBlockSizeBytes" json:"max_block_size_bytes,omitempty"`
MaxBlockSizeTxs uint64 `protobuf:"varint,2,opt,name=max_block_size_txs,json=maxBlockSizeTxs" json:"max_block_size_txs,omitempty"`
MaxTxSize uint64 `protobuf:"varint,3,opt,name=max_tx_size,json=maxTxSize" json:"max_tx_size,omitempty"`
}
func (m *ConfigInfo) Reset() { *m = ConfigInfo{} }
func (m *ConfigInfo) String() string { return proto.CompactTextString(m) }
func (*ConfigInfo) ProtoMessage() {}
func (*ConfigInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (m *ConfigInfo) GetMaxBlockSizeBytes() uint64 {
if m != nil {
return m.MaxBlockSizeBytes
}
return 0
}
func (m *ConfigInfo) GetMaxBlockSizeTxs() uint64 {
if m != nil {
return m.MaxBlockSizeTxs
}
return 0
}
func (m *ConfigInfo) GetMaxTxSize() uint64 {
if m != nil {
return m.MaxTxSize
}
return 0
}
type Header struct { type Header struct {
ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"`
Height uint64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` Height uint64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"`
@ -1572,7 +1497,7 @@ type Header struct {
func (m *Header) Reset() { *m = Header{} } func (m *Header) Reset() { *m = Header{} }
func (m *Header) String() string { return proto.CompactTextString(m) } func (m *Header) String() string { return proto.CompactTextString(m) }
func (*Header) ProtoMessage() {} func (*Header) ProtoMessage() {}
func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (*Header) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *Header) GetChainId() string { func (m *Header) GetChainId() string {
if m != nil { if m != nil {
@ -1645,7 +1570,7 @@ type BlockID struct {
func (m *BlockID) Reset() { *m = BlockID{} } func (m *BlockID) Reset() { *m = BlockID{} }
func (m *BlockID) String() string { return proto.CompactTextString(m) } func (m *BlockID) String() string { return proto.CompactTextString(m) }
func (*BlockID) ProtoMessage() {} func (*BlockID) ProtoMessage() {}
func (*BlockID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (*BlockID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *BlockID) GetHash() []byte { func (m *BlockID) GetHash() []byte {
if m != nil { if m != nil {
@ -1669,7 +1594,7 @@ type PartSetHeader struct {
func (m *PartSetHeader) Reset() { *m = PartSetHeader{} } func (m *PartSetHeader) Reset() { *m = PartSetHeader{} }
func (m *PartSetHeader) String() string { return proto.CompactTextString(m) } func (m *PartSetHeader) String() string { return proto.CompactTextString(m) }
func (*PartSetHeader) ProtoMessage() {} func (*PartSetHeader) ProtoMessage() {}
func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (*PartSetHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (m *PartSetHeader) GetTotal() uint64 { func (m *PartSetHeader) GetTotal() uint64 {
if m != nil { if m != nil {
@ -1693,7 +1618,7 @@ type Validator struct {
func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) Reset() { *m = Validator{} }
func (m *Validator) String() string { return proto.CompactTextString(m) } func (m *Validator) String() string { return proto.CompactTextString(m) }
func (*Validator) ProtoMessage() {} func (*Validator) ProtoMessage() {}
func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (*Validator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (m *Validator) GetPubKey() []byte { func (m *Validator) GetPubKey() []byte {
if m != nil { if m != nil {
@ -1735,9 +1660,6 @@ func init() {
proto.RegisterType((*ResponseInitChain)(nil), "types.ResponseInitChain") proto.RegisterType((*ResponseInitChain)(nil), "types.ResponseInitChain")
proto.RegisterType((*ResponseBeginBlock)(nil), "types.ResponseBeginBlock") proto.RegisterType((*ResponseBeginBlock)(nil), "types.ResponseBeginBlock")
proto.RegisterType((*ResponseEndBlock)(nil), "types.ResponseEndBlock") proto.RegisterType((*ResponseEndBlock)(nil), "types.ResponseEndBlock")
proto.RegisterType((*TMSPInfo)(nil), "types.TMSPInfo")
proto.RegisterType((*LastBlockInfo)(nil), "types.LastBlockInfo")
proto.RegisterType((*ConfigInfo)(nil), "types.ConfigInfo")
proto.RegisterType((*Header)(nil), "types.Header") proto.RegisterType((*Header)(nil), "types.Header")
proto.RegisterType((*BlockID)(nil), "types.BlockID") proto.RegisterType((*BlockID)(nil), "types.BlockID")
proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader") proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader")
@ -2151,116 +2073,109 @@ var _TMSPApplication_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) } func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 1774 bytes of a gzipped FileDescriptorProto // 1654 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x73, 0xdb, 0xc8, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x58, 0x49, 0x73, 0x1b, 0xc7,
0x11, 0x16, 0x24, 0x3e, 0x9b, 0x12, 0x35, 0x6a, 0x51, 0x12, 0xcd, 0xa4, 0x52, 0x5e, 0x64, 0x37, 0x15, 0xc6, 0x60, 0xc7, 0x03, 0x09, 0x34, 0x1f, 0x41, 0x12, 0x44, 0x72, 0x50, 0x26, 0x71, 0x4c,
0x2b, 0x79, 0x5d, 0x76, 0x4a, 0xae, 0xdd, 0xb2, 0xb3, 0xa9, 0x54, 0x59, 0xb6, 0xd6, 0x54, 0x6d, 0x29, 0x8e, 0x94, 0xa2, 0xcb, 0x2e, 0x31, 0x4e, 0xa5, 0x8a, 0x94, 0x68, 0x02, 0xe5, 0x92, 0xc4,
0x6c, 0x2b, 0xb0, 0xd6, 0x87, 0x3c, 0x8a, 0x05, 0x11, 0x43, 0x12, 0x11, 0x09, 0xc0, 0xc0, 0xc0, 0x8c, 0x68, 0x1f, 0xb2, 0x14, 0x6a, 0x88, 0x69, 0x00, 0x13, 0x02, 0x33, 0xa3, 0x59, 0x68, 0x32,
0x4b, 0xf9, 0x1f, 0x6c, 0xfe, 0x48, 0xae, 0xb9, 0xe4, 0x92, 0x6b, 0x4e, 0x79, 0x3f, 0x7e, 0xd1, 0xff, 0xc0, 0xbf, 0x20, 0x3f, 0x21, 0xbf, 0x20, 0x97, 0x5c, 0x73, 0xca, 0xbe, 0xfc, 0x22, 0xd7,
0x56, 0xcf, 0x0c, 0x9e, 0x02, 0x7d, 0xf2, 0x85, 0xc5, 0xe9, 0xd7, 0xcc, 0x74, 0x7f, 0xfd, 0xcd, 0xeb, 0xee, 0x59, 0x39, 0xf0, 0x49, 0x17, 0xd4, 0xf4, 0xdb, 0xba, 0xfb, 0xf5, 0xf7, 0xbe, 0x7e,
0x60, 0x60, 0x47, 0x5c, 0x07, 0x3c, 0xba, 0x2f, 0x7f, 0xef, 0x05, 0xa1, 0x2f, 0x7c, 0xac, 0xcb, 0x0d, 0xd8, 0x09, 0xef, 0x3d, 0x1e, 0x3c, 0x13, 0xbf, 0x4f, 0x3d, 0xdf, 0x0d, 0x5d, 0x6c, 0x88,
0x81, 0xf9, 0xd7, 0x1a, 0x34, 0x2d, 0xfe, 0x26, 0xe6, 0x91, 0xc0, 0x43, 0xa8, 0xf1, 0xf1, 0xcc, 0x81, 0xfe, 0xd7, 0x3a, 0xb4, 0x0c, 0xfe, 0x2e, 0xe2, 0x41, 0x88, 0x47, 0x50, 0xe7, 0xb3, 0xa5,
0xef, 0x1b, 0xb7, 0x8d, 0xc3, 0xce, 0x31, 0xde, 0x53, 0xe6, 0x5a, 0x7b, 0x3a, 0x9e, 0xf9, 0xc3, 0x3b, 0xd4, 0x1e, 0x69, 0x47, 0xdd, 0x63, 0x7c, 0x2a, 0xcd, 0x95, 0xf6, 0x7c, 0xb6, 0x74, 0xc7,
0x35, 0x4b, 0x5a, 0xe0, 0x67, 0x50, 0x9f, 0xcc, 0xe3, 0x68, 0xd6, 0x5f, 0x97, 0xa6, 0xbb, 0x45, 0x15, 0x43, 0x58, 0xe0, 0x4f, 0xa0, 0x31, 0x5f, 0x45, 0xc1, 0x72, 0x58, 0x15, 0xa6, 0xbb, 0x79,
0xd3, 0xaf, 0x48, 0x35, 0x5c, 0xb3, 0x94, 0x0d, 0x85, 0x75, 0xbd, 0x89, 0xdf, 0xdf, 0xa8, 0x0a, 0xd3, 0xcf, 0x49, 0x35, 0xae, 0x18, 0xd2, 0x86, 0xc2, 0xda, 0xce, 0xdc, 0x1d, 0xd6, 0xca, 0xc2,
0x7b, 0xe6, 0x4d, 0x64, 0x58, 0xb2, 0xc0, 0x87, 0x00, 0x11, 0x17, 0x23, 0x3f, 0x10, 0xae, 0xef, 0x4e, 0x9c, 0xb9, 0x08, 0x4b, 0x16, 0xf8, 0x1c, 0x20, 0xe0, 0xe1, 0xd4, 0xf5, 0x42, 0xdb, 0x75,
0xf5, 0x6b, 0xd2, 0xfe, 0xa0, 0x68, 0xff, 0x8a, 0x8b, 0x97, 0x52, 0x3d, 0x5c, 0xb3, 0xda, 0x51, 0x86, 0x75, 0x61, 0x7f, 0x90, 0xb7, 0x7f, 0xcb, 0xc3, 0x37, 0x42, 0x3d, 0xae, 0x18, 0x9d, 0x20,
0x32, 0xc0, 0xcf, 0xa1, 0x6d, 0x07, 0x01, 0xf7, 0x9c, 0x91, 0x58, 0xf6, 0xeb, 0xd2, 0x71, 0xbf, 0x1e, 0xe0, 0x27, 0xd0, 0x31, 0x3d, 0x8f, 0x3b, 0xd6, 0x34, 0xbc, 0x1b, 0x36, 0x84, 0xe3, 0x7e,
0xe8, 0xf8, 0x58, 0xaa, 0x2f, 0x96, 0xc3, 0x35, 0xab, 0x65, 0xeb, 0xff, 0x78, 0x0c, 0xad, 0xf1, 0xde, 0xf1, 0x54, 0xa8, 0xaf, 0xee, 0xc6, 0x15, 0xa3, 0x6d, 0xaa, 0x6f, 0x3c, 0x86, 0xf6, 0x6c,
0x8c, 0x8f, 0xaf, 0xc8, 0xab, 0x21, 0xbd, 0xf6, 0x8a, 0x5e, 0x4f, 0x48, 0x2b, 0x9d, 0x9a, 0x63, 0xc9, 0x67, 0x37, 0xe4, 0xd5, 0x14, 0x5e, 0x7b, 0x79, 0xaf, 0x17, 0xa4, 0x15, 0x4e, 0xad, 0x99,
0xf5, 0x17, 0xef, 0x41, 0x63, 0xec, 0x2f, 0x16, 0xae, 0xe8, 0x37, 0xa5, 0x47, 0xaf, 0xe4, 0x21, 0xfc, 0xc4, 0xa7, 0xd0, 0x9c, 0xb9, 0xeb, 0xb5, 0x1d, 0x0e, 0x5b, 0xc2, 0x63, 0x50, 0xf0, 0x10,
0x75, 0xc3, 0x35, 0x4b, 0x5b, 0x51, 0xae, 0xde, 0xc4, 0x3c, 0xbc, 0xee, 0xb7, 0xaa, 0x72, 0xf5, 0xba, 0x71, 0xc5, 0x50, 0x56, 0x94, 0xab, 0x77, 0x11, 0xf7, 0xef, 0x87, 0xed, 0xb2, 0x5c, 0xfd,
0x2b, 0x52, 0x51, 0xae, 0xa4, 0x0d, 0x65, 0xc0, 0xf5, 0x5c, 0x31, 0x1a, 0xcf, 0x6c, 0xd7, 0xeb, 0x8a, 0x54, 0x94, 0x2b, 0x61, 0x43, 0x19, 0xb0, 0x1d, 0x3b, 0x9c, 0xce, 0x96, 0xa6, 0xed, 0x0c,
0xb7, 0xab, 0x32, 0x70, 0xe6, 0xb9, 0xe2, 0x09, 0xa9, 0x29, 0x03, 0x6e, 0x32, 0xc0, 0x2f, 0xa1, 0x3b, 0x65, 0x19, 0x98, 0x38, 0x76, 0xf8, 0x82, 0xd4, 0x94, 0x01, 0x3b, 0x1e, 0xe0, 0x67, 0xd0,
0x73, 0xc9, 0xa7, 0xae, 0x37, 0xba, 0x9c, 0xfb, 0xe3, 0xab, 0x3e, 0x48, 0xd7, 0x7e, 0xd1, 0xf5, 0xbd, 0xe6, 0x0b, 0xdb, 0x99, 0x5e, 0xaf, 0xdc, 0xd9, 0xcd, 0x10, 0x84, 0xeb, 0x30, 0xef, 0x7a,
0x84, 0x0c, 0x4e, 0x48, 0x3f, 0x5c, 0xb3, 0xe0, 0x32, 0x1d, 0x51, 0xfa, 0x28, 0x77, 0xca, 0xb5, 0x46, 0x06, 0x67, 0xa4, 0x1f, 0x57, 0x0c, 0xb8, 0x4e, 0x46, 0x94, 0x3e, 0xca, 0x9d, 0x74, 0xed,
0x53, 0x95, 0xbe, 0x53, 0xcf, 0x49, 0x1c, 0x5b, 0x5c, 0xff, 0x3f, 0x69, 0x42, 0xfd, 0xad, 0x3d, 0x96, 0xa5, 0xef, 0xdc, 0xb1, 0x62, 0xc7, 0x36, 0x57, 0xdf, 0x67, 0x2d, 0x68, 0xdc, 0x9a, 0xab,
0x8f, 0xb9, 0xf9, 0x29, 0x74, 0x72, 0x30, 0xc1, 0x3e, 0x34, 0x17, 0x3c, 0x8a, 0xec, 0x29, 0x97, 0x88, 0xeb, 0x1f, 0x42, 0x37, 0x03, 0x13, 0x1c, 0x42, 0x6b, 0xcd, 0x83, 0xc0, 0x5c, 0x70, 0x81,
0x58, 0x6a, 0x5b, 0xc9, 0xd0, 0xec, 0xc2, 0x66, 0x1e, 0x24, 0xe6, 0x56, 0xea, 0x48, 0x40, 0x30, 0xa5, 0x8e, 0x11, 0x0f, 0xf5, 0x1e, 0x6c, 0x65, 0x41, 0xa2, 0x6f, 0x27, 0x8e, 0x04, 0x04, 0xfd,
0x7f, 0x06, 0xac, 0x5c, 0x67, 0x64, 0xb0, 0x71, 0xc5, 0xaf, 0x75, 0x20, 0xfa, 0x8b, 0x3d, 0x3d, 0xe7, 0xc0, 0x8a, 0xe7, 0x8c, 0x0c, 0x6a, 0x37, 0xfc, 0x5e, 0x05, 0xa2, 0x4f, 0x1c, 0xa8, 0x69,
0xad, 0x44, 0x5f, 0xdb, 0xd2, 0x6b, 0xf8, 0x08, 0xb6, 0x4b, 0xa5, 0xc6, 0x2e, 0xac, 0x8b, 0xa5, 0x05, 0xfa, 0x3a, 0x86, 0x5a, 0xc3, 0x0f, 0xa0, 0x5f, 0x38, 0x6a, 0xec, 0x41, 0x35, 0xbc, 0x13,
0xf4, 0xdc, 0xb4, 0xd6, 0xc5, 0xd2, 0xbc, 0x0d, 0xdd, 0x62, 0x5d, 0x6f, 0x58, 0x7c, 0x9c, 0xae, 0x9e, 0x5b, 0x46, 0x35, 0xbc, 0xd3, 0x1f, 0x41, 0x2f, 0x7f, 0xae, 0x0f, 0x2c, 0x7e, 0x94, 0xac,
0x4f, 0x16, 0x86, 0xa6, 0x52, 0xc5, 0x53, 0x26, 0x6a, 0x60, 0x6e, 0xc3, 0x56, 0xa1, 0xda, 0xe6, 0x4f, 0x1c, 0x0c, 0x4d, 0x25, 0x0f, 0x4f, 0x9a, 0xc8, 0x81, 0xde, 0x87, 0xed, 0xdc, 0x69, 0xeb,
0xd3, 0x74, 0xdd, 0x69, 0x75, 0xf0, 0xa7, 0x00, 0x6f, 0xed, 0xb9, 0xeb, 0xd8, 0xc2, 0x0f, 0xa3, 0x2f, 0x93, 0x75, 0x27, 0xa7, 0x83, 0x3f, 0x03, 0xb8, 0x35, 0x57, 0xb6, 0x65, 0x86, 0xae, 0x1f,
0xbe, 0x71, 0x7b, 0xe3, 0xb0, 0x73, 0xcc, 0x74, 0x52, 0x5f, 0x27, 0x0a, 0x2b, 0x67, 0x63, 0xbe, 0x0c, 0xb5, 0x47, 0xb5, 0xa3, 0xee, 0x31, 0x53, 0x49, 0xfd, 0x2a, 0x56, 0x18, 0x19, 0x1b, 0xfd,
0x80, 0x9d, 0x1b, 0x85, 0x42, 0x84, 0xda, 0xcc, 0x8e, 0x66, 0x7a, 0x01, 0xf2, 0x3f, 0x7e, 0x02, 0x35, 0xec, 0x3c, 0x38, 0x28, 0x44, 0xa8, 0x2f, 0xcd, 0x60, 0xa9, 0x16, 0x20, 0xbe, 0xf1, 0x03,
0x8d, 0x19, 0xb7, 0x1d, 0x1e, 0xea, 0xfe, 0xdb, 0xd2, 0x61, 0x87, 0x52, 0x68, 0x69, 0xa5, 0x79, 0x68, 0x2e, 0xb9, 0x69, 0x71, 0x5f, 0xd5, 0xdf, 0xb6, 0x0a, 0x3b, 0x16, 0x42, 0x43, 0x29, 0xf5,
0x94, 0x66, 0x24, 0xa9, 0x1e, 0xee, 0x93, 0xa7, 0x3b, 0x9d, 0x09, 0x19, 0xaf, 0x66, 0xe9, 0x91, 0xc7, 0x49, 0x46, 0xe2, 0xd3, 0xc3, 0x7d, 0xf2, 0xb4, 0x17, 0xcb, 0x50, 0xc4, 0xab, 0x1b, 0x6a,
0xf9, 0x5d, 0x1d, 0x5a, 0x16, 0x8f, 0x02, 0xdf, 0x8b, 0x38, 0x3e, 0x84, 0x36, 0x5f, 0x8e, 0xb9, 0xa4, 0x7f, 0xd3, 0x80, 0xb6, 0xc1, 0x03, 0xcf, 0x75, 0x02, 0x8e, 0xcf, 0xa1, 0xc3, 0xef, 0x66,
0xea, 0x42, 0xa3, 0x04, 0x24, 0x65, 0x73, 0x9a, 0xe8, 0x09, 0x84, 0xa9, 0x31, 0x1e, 0x69, 0x06, 0x5c, 0x56, 0xa1, 0x56, 0x00, 0x92, 0xb4, 0x39, 0x8f, 0xf5, 0x04, 0xc2, 0xc4, 0x18, 0x1f, 0x2b,
0x29, 0xd3, 0x82, 0x76, 0xca, 0x53, 0xc8, 0xdd, 0x84, 0x42, 0x36, 0x4a, 0x5d, 0xa4, 0x6c, 0x4b, 0x06, 0x29, 0xd2, 0x82, 0x72, 0xca, 0x52, 0xc8, 0x47, 0x31, 0x85, 0xd4, 0x0a, 0x55, 0x24, 0x6d,
0x1c, 0x72, 0xa4, 0x39, 0xa4, 0x56, 0x19, 0xb8, 0x40, 0x22, 0x8f, 0x0a, 0x24, 0x52, 0xaf, 0x5c, 0x0b, 0x1c, 0xf2, 0x58, 0x71, 0x48, 0xbd, 0x34, 0x70, 0x8e, 0x44, 0x4e, 0x72, 0x24, 0xd2, 0x28,
0xfe, 0x0a, 0x16, 0xf9, 0x22, 0xcf, 0x22, 0x8d, 0x52, 0xf3, 0x29, 0xcf, 0x4a, 0x1a, 0x79, 0x90, 0x5d, 0xfe, 0x06, 0x16, 0xf9, 0x34, 0xcb, 0x22, 0xcd, 0x42, 0xf1, 0x49, 0xcf, 0x52, 0x1a, 0xf9,
0xa3, 0x91, 0x66, 0xa9, 0x7b, 0x94, 0x5b, 0x05, 0x8f, 0xdc, 0x4f, 0x79, 0xa4, 0x55, 0x62, 0x1e, 0x38, 0x43, 0x23, 0xad, 0x42, 0xf5, 0x48, 0xb7, 0x12, 0x1e, 0x79, 0x96, 0xf0, 0x48, 0xbb, 0xc0,
0xed, 0x52, 0x26, 0x92, 0xbb, 0x09, 0x16, 0xdb, 0x95, 0x19, 0x2b, 0x31, 0xc9, 0xa3, 0x02, 0x93, 0x3c, 0xca, 0xa5, 0x48, 0x24, 0x1f, 0xc5, 0x58, 0xec, 0x94, 0x66, 0xac, 0xc0, 0x24, 0x27, 0x39,
0x40, 0x65, 0x1a, 0x56, 0x50, 0xc9, 0xcf, 0x8b, 0x54, 0xa2, 0xf8, 0xe0, 0x56, 0xc9, 0x77, 0x25, 0x26, 0x81, 0xd2, 0x34, 0x6c, 0xa0, 0x92, 0x5f, 0xe4, 0xa9, 0x44, 0xf2, 0xc1, 0x61, 0xc1, 0x77,
0x97, 0x7c, 0x91, 0xe7, 0x92, 0xcd, 0xca, 0x24, 0xbe, 0x9f, 0x4c, 0x8e, 0xa8, 0x0d, 0x4a, 0x30, 0x23, 0x97, 0x7c, 0x9a, 0xe5, 0x92, 0xad, 0xd2, 0x24, 0x7e, 0x37, 0x99, 0x3c, 0xa6, 0x32, 0x28,
0xa3, 0x46, 0xe4, 0x61, 0xe8, 0x87, 0x9a, 0x07, 0xd4, 0xc0, 0x3c, 0xa4, 0x76, 0xcd, 0xc0, 0xf5, 0xc0, 0x8c, 0x0a, 0x91, 0xfb, 0xbe, 0xeb, 0x2b, 0x1e, 0x90, 0x03, 0xfd, 0x88, 0xca, 0x35, 0x05,
0x1e, 0xe2, 0x91, 0x2d, 0x9b, 0x83, 0x96, 0xf9, 0x27, 0x23, 0xf3, 0x25, 0xfc, 0x50, 0xa3, 0x49, 0xd7, 0x77, 0x10, 0x8f, 0x28, 0xd9, 0x0c, 0xb4, 0xf4, 0x3f, 0x6a, 0xa9, 0x2f, 0xe1, 0x87, 0x0a,
0x88, 0x29, 0x47, 0x85, 0xa5, 0xbb, 0xd0, 0x16, 0x8b, 0x28, 0x18, 0x49, 0x85, 0x02, 0xf5, 0xb6, 0xcd, 0x32, 0x43, 0x53, 0x39, 0x8a, 0x6f, 0x8a, 0x77, 0xcb, 0xfd, 0x80, 0x80, 0x24, 0xb9, 0x26,
0xde, 0xcb, 0xc5, 0xf3, 0x57, 0xe7, 0xe4, 0x67, 0xb5, 0xc8, 0x42, 0x46, 0x78, 0x00, 0x30, 0xb7, 0x1e, 0xe2, 0x13, 0xd8, 0x59, 0x99, 0x41, 0x28, 0xb7, 0x39, 0x55, 0x35, 0x55, 0x13, 0x35, 0xd5,
0x23, 0xa1, 0xb7, 0x5e, 0xc4, 0xf5, 0x2f, 0xed, 0x48, 0xc8, 0x7d, 0x4a, 0x9f, 0xf6, 0x3c, 0x19, 0x27, 0x85, 0xdc, 0x9f, 0x10, 0xe3, 0x4f, 0x61, 0x37, 0x63, 0x6b, 0x7a, 0xde, 0x54, 0x54, 0x74,
0xe2, 0x11, 0xc1, 0xc0, 0x9b, 0xb8, 0x53, 0x8d, 0xed, 0x1d, 0xed, 0xf0, 0x44, 0x0a, 0xa5, 0xb5, 0x5d, 0x54, 0x34, 0x4b, 0xac, 0x4f, 0x3d, 0x6f, 0x6c, 0x06, 0x4b, 0xfd, 0x83, 0x74, 0xff, 0x39,
0x36, 0x30, 0x3f, 0xc9, 0x12, 0x53, 0xa0, 0xc7, 0xb9, 0x3f, 0x4d, 0xe8, 0x71, 0xee, 0x4f, 0xcd, 0x16, 0x5c, 0xb9, 0x8b, 0x98, 0x05, 0x57, 0xee, 0x42, 0xff, 0x1d, 0x71, 0x4e, 0x1e, 0x94, 0xf8,
0xdf, 0x11, 0x19, 0x15, 0xd1, 0x8a, 0x3f, 0x86, 0xda, 0xd8, 0x77, 0x54, 0x56, 0xba, 0xe9, 0x1e, 0x43, 0xa8, 0xcf, 0x5c, 0x4b, 0x6e, 0xbe, 0x77, 0xdc, 0x57, 0x69, 0x7f, 0xe1, 0x5a, 0xfc, 0xea,
0x9e, 0xf8, 0x0e, 0xbf, 0xb8, 0x0e, 0xb8, 0x25, 0x95, 0x94, 0x01, 0xc7, 0x16, 0xb6, 0xdc, 0xe8, 0xde, 0xe3, 0x86, 0x50, 0x26, 0x1b, 0xad, 0x4a, 0x46, 0x11, 0x1b, 0x55, 0xe1, 0x6b, 0x69, 0xf8,
0xa6, 0x25, 0xff, 0x27, 0xe1, 0x37, 0xb2, 0xf0, 0xbf, 0x25, 0x56, 0x29, 0xa0, 0xfa, 0x43, 0x46, 0xdf, 0x12, 0x79, 0xe4, 0xc0, 0xfb, 0x3e, 0xa3, 0xff, 0x3a, 0x3d, 0x0e, 0x49, 0xb4, 0xef, 0x31,
0xff, 0x75, 0x56, 0x27, 0xc5, 0xc0, 0x1f, 0x30, 0xf6, 0x6f, 0x88, 0xfe, 0xf3, 0xcd, 0xf5, 0x21, 0xf6, 0x6f, 0x88, 0xe5, 0xb3, 0x35, 0xf4, 0x3e, 0x83, 0xef, 0xa6, 0x87, 0x93, 0x54, 0x8f, 0x3e,
0x83, 0xef, 0x66, 0xc5, 0x49, 0xdb, 0xca, 0xec, 0x01, 0xde, 0xec, 0x17, 0x75, 0xca, 0x15, 0x3b, 0x00, 0x7c, 0x58, 0x16, 0xf2, 0x32, 0xcb, 0x03, 0x1e, 0x7f, 0x0c, 0x0d, 0xcb, 0x9e, 0xcf, 0x83,
0x01, 0x7f, 0x02, 0x75, 0xc7, 0x9d, 0x4c, 0xa2, 0x7e, 0x6d, 0xc5, 0x41, 0xa1, 0xd4, 0xe6, 0xc7, 0x61, 0x7d, 0xc3, 0x7d, 0x20, 0xd5, 0xfa, 0x9f, 0xaa, 0xd0, 0x94, 0x6c, 0x8e, 0x87, 0x44, 0x2e,
0xd0, 0x4a, 0x90, 0x47, 0x68, 0x7f, 0xcd, 0xc3, 0x28, 0x61, 0xe9, 0xb6, 0x95, 0x0c, 0xcd, 0xe7, 0xa6, 0xed, 0x4c, 0x6d, 0x2b, 0x06, 0xb5, 0x18, 0x4f, 0xac, 0x0c, 0x9b, 0x57, 0xb3, 0x6c, 0x4e,
0xb0, 0x55, 0x00, 0x1c, 0x7e, 0x04, 0x9b, 0x12, 0x95, 0xa3, 0x02, 0xfb, 0x77, 0xa4, 0x6c, 0x28, 0x5b, 0x09, 0xed, 0x35, 0x57, 0x78, 0x14, 0xdf, 0x78, 0x00, 0x2d, 0x27, 0x5a, 0x4f, 0xc3, 0xbb,
0x45, 0x78, 0x0b, 0x88, 0xd0, 0x46, 0xf2, 0xb0, 0x51, 0x5b, 0x6d, 0xda, 0x41, 0x30, 0xb4, 0xa3, 0x40, 0x00, 0xaf, 0x6e, 0x34, 0x9d, 0x68, 0x7d, 0x75, 0x17, 0xe0, 0x31, 0x6c, 0x67, 0xd0, 0x69,
0x99, 0xf9, 0x07, 0x03, 0x20, 0xc3, 0x23, 0xde, 0x87, 0xde, 0xc2, 0x5e, 0x2a, 0x98, 0x8f, 0x22, 0x5b, 0x8a, 0x32, 0x7b, 0x6a, 0x69, 0x62, 0xdd, 0x93, 0x97, 0x46, 0x37, 0xc1, 0xe9, 0xc4, 0xc2,
0xf7, 0x1d, 0x1f, 0x5d, 0x5e, 0x0b, 0x1e, 0xe9, 0xa0, 0x3b, 0x0b, 0x7b, 0x29, 0x27, 0x7e, 0xe5, 0x23, 0x10, 0xb0, 0x9d, 0x4a, 0x66, 0x92, 0x70, 0x6e, 0x8a, 0xbc, 0xf5, 0x48, 0xae, 0xa8, 0x8b,
0xbe, 0xe3, 0x27, 0xa4, 0xc0, 0xcf, 0x00, 0x4b, 0x0e, 0x62, 0x19, 0xc9, 0x49, 0x6a, 0xd6, 0x76, 0xae, 0xaa, 0xef, 0x41, 0x87, 0x32, 0x29, 0x4d, 0x5a, 0xc2, 0xa4, 0x4d, 0x02, 0xa1, 0xfc, 0x10,
0xde, 0xfc, 0x62, 0x19, 0xe1, 0x8f, 0xa0, 0x43, 0xc6, 0x62, 0x29, 0x2d, 0x65, 0x8a, 0x6b, 0x56, 0xfa, 0xe9, 0xf5, 0x27, 0x4d, 0xda, 0x32, 0x4a, 0x2a, 0x16, 0x86, 0x87, 0xd0, 0x4e, 0xca, 0xa6,
0x7b, 0x61, 0x2f, 0x2f, 0x96, 0x64, 0x62, 0xfe, 0x71, 0x1d, 0x1a, 0xea, 0xa0, 0xa3, 0x25, 0x4b, 0x23, 0x2c, 0x5a, 0xa6, 0xaa, 0x96, 0x09, 0xb4, 0xd4, 0x12, 0x4b, 0xaf, 0xca, 0x27, 0xd0, 0xf0,
0x7a, 0x1b, 0xb9, 0x4e, 0x92, 0x01, 0x39, 0x3e, 0x73, 0x72, 0x07, 0xdd, 0x7a, 0xfe, 0xa0, 0xa3, 0x4c, 0x3f, 0x0c, 0xd4, 0x95, 0x14, 0x93, 0xe6, 0xa5, 0xe9, 0x53, 0x8b, 0xa1, 0x2e, 0x4c, 0x69,
0x62, 0x0a, 0x77, 0x91, 0x84, 0x95, 0xff, 0xf1, 0x00, 0x9a, 0x5e, 0xbc, 0x90, 0x6b, 0xaa, 0x29, 0xa2, 0x9f, 0xc0, 0x76, 0x4e, 0x4e, 0xa4, 0x13, 0xba, 0xa1, 0xb9, 0x52, 0x97, 0xa5, 0x1c, 0x24,
0x63, 0x2f, 0x5e, 0xd0, 0x52, 0x8e, 0x61, 0x2b, 0x6b, 0x68, 0x9a, 0x44, 0x9d, 0x26, 0x5d, 0x5d, 0xd3, 0x54, 0xd3, 0x69, 0xf4, 0x13, 0xe8, 0x24, 0x67, 0x48, 0xc7, 0xe2, 0x45, 0xd7, 0x5f, 0xf0,
0x1c, 0x95, 0xde, 0xa7, 0x56, 0x27, 0xed, 0xe6, 0x33, 0x07, 0x0f, 0x81, 0x49, 0x1f, 0x45, 0xda, 0xb8, 0x6b, 0x50, 0x23, 0x0a, 0xe7, 0xb9, 0x5f, 0xab, 0x5b, 0xbb, 0x6e, 0xc8, 0xc1, 0x93, 0xbf,
0x2a, 0x9d, 0x0d, 0x99, 0xce, 0x2e, 0xc9, 0x35, 0xab, 0xd3, 0x29, 0xfe, 0x03, 0x68, 0x13, 0x96, 0x68, 0xd0, 0x7d, 0x25, 0x59, 0x8a, 0xd0, 0x88, 0x7d, 0xe8, 0xbe, 0x8e, 0x56, 0x2b, 0x25, 0x62,
0x94, 0x49, 0x53, 0x9a, 0xb4, 0x48, 0x20, 0x95, 0x9f, 0xc2, 0x76, 0x76, 0x33, 0x50, 0x26, 0x2d, 0x15, 0x6c, 0x43, 0x9d, 0xc8, 0x8d, 0x69, 0xd8, 0x81, 0x86, 0x20, 0x2f, 0x56, 0x25, 0x21, 0xb1,
0x15, 0x25, 0x13, 0x4b, 0xc3, 0x7c, 0xd9, 0xda, 0xc5, 0xb2, 0x9d, 0x41, 0x53, 0x2f, 0xb1, 0xf2, 0x16, 0xab, 0xe1, 0x36, 0x74, 0x12, 0x9a, 0x60, 0x75, 0x1a, 0x26, 0xac, 0xc9, 0x1a, 0xb8, 0x05,
0x16, 0x71, 0x07, 0xea, 0x81, 0x1d, 0x8a, 0x48, 0x13, 0x5b, 0xc2, 0x54, 0xe7, 0x76, 0x48, 0xb7, 0xed, 0x98, 0x1d, 0xd8, 0x0e, 0x76, 0xa1, 0xa5, 0x8a, 0x99, 0x21, 0x02, 0x34, 0xe5, 0x41, 0xb1,
0x2f, 0x7d, 0x97, 0x50, 0x26, 0xe6, 0x23, 0xd8, 0x2a, 0xc8, 0x89, 0x8f, 0x85, 0x2f, 0xec, 0xb9, 0x5d, 0x8a, 0x2c, 0xea, 0x90, 0x0d, 0x28, 0x40, 0x82, 0x6c, 0xb6, 0x87, 0x3d, 0x80, 0x14, 0xd3,
0x2e, 0xba, 0x1a, 0xa4, 0xd3, 0xac, 0x67, 0xd3, 0x98, 0x8f, 0xa0, 0x9d, 0xa2, 0x98, 0xca, 0x12, 0x6c, 0x9f, 0x02, 0xc6, 0x68, 0x66, 0x07, 0x4f, 0xfe, 0xdc, 0x80, 0x76, 0x5c, 0x47, 0xd8, 0x84,
0xc4, 0x97, 0x5f, 0xf3, 0xe4, 0x42, 0xa5, 0x47, 0x14, 0x2e, 0xf0, 0xbf, 0xd5, 0x17, 0x9a, 0x9a, 0xea, 0x9b, 0x2f, 0x58, 0x05, 0x77, 0x60, 0x7b, 0xe2, 0x84, 0xdc, 0x77, 0xcc, 0xd5, 0x39, 0xd1,
0xa5, 0x06, 0x77, 0xfe, 0x62, 0x40, 0xe7, 0xb9, 0x22, 0x70, 0xea, 0x47, 0xdc, 0x86, 0xce, 0x8b, 0x34, 0xd3, 0x48, 0x74, 0xee, 0xcc, 0x5c, 0xcb, 0x76, 0x16, 0x52, 0x54, 0xa5, 0x40, 0x67, 0xa6,
0x78, 0x3e, 0xd7, 0x22, 0xb6, 0x86, 0x2d, 0xa8, 0x11, 0xef, 0x33, 0x03, 0xdb, 0x50, 0x97, 0xbc, 0xf5, 0xda, 0x75, 0x66, 0x9c, 0xd5, 0x90, 0xc1, 0xd6, 0x97, 0x8e, 0x19, 0x85, 0x4b, 0xd7, 0xb7,
0xce, 0xd6, 0x49, 0x48, 0x30, 0x65, 0x1b, 0xb8, 0x05, 0xed, 0x94, 0x28, 0x59, 0x8d, 0x86, 0xe9, 0xff, 0xc0, 0x2d, 0x56, 0xc7, 0x3d, 0xd8, 0x99, 0x38, 0x41, 0x34, 0x9f, 0xdb, 0x33, 0x9b, 0x3b,
0x81, 0xc2, 0xea, 0xb8, 0x09, 0xad, 0x84, 0x1f, 0xd9, 0x0e, 0x76, 0xa0, 0xa9, 0xe9, 0x8c, 0x21, 0xe1, 0xe7, 0x91, 0x63, 0x05, 0xac, 0x81, 0x08, 0xbd, 0x2f, 0x9d, 0x1b, 0xc7, 0xfd, 0xda, 0x51,
0x02, 0x34, 0x54, 0xa1, 0xd8, 0x2e, 0x45, 0x96, 0x4c, 0xc4, 0x7a, 0x14, 0x20, 0xed, 0x6d, 0xb6, 0xbd, 0x0d, 0x6b, 0xe2, 0x10, 0x06, 0x67, 0x66, 0xc0, 0x5f, 0x46, 0xde, 0xca, 0x9e, 0x99, 0x21,
0x87, 0x5d, 0x80, 0xac, 0xab, 0xd9, 0x3e, 0x05, 0x4c, 0xfa, 0x99, 0x1d, 0xdc, 0xf9, 0x73, 0x1d, 0x3f, 0xb5, 0x2c, 0x9f, 0x07, 0x01, 0xe3, 0x14, 0x84, 0x34, 0xf9, 0xb9, 0xe7, 0xb1, 0x43, 0x2e,
0x5a, 0x09, 0x93, 0x60, 0x03, 0xd6, 0x5f, 0x7e, 0xcd, 0xd6, 0x70, 0x07, 0xb6, 0xce, 0x3c, 0xc1, 0x3e, 0xe7, 0x01, 0x5b, 0xe0, 0x21, 0xec, 0x3d, 0xd0, 0x88, 0x99, 0x97, 0xf8, 0x7d, 0x18, 0x16,
0x43, 0xcf, 0x9e, 0x9f, 0xd2, 0x09, 0xc6, 0x0c, 0x12, 0x9d, 0x7a, 0x63, 0xdf, 0x71, 0xbd, 0xa9, 0x55, 0x17, 0x66, 0x70, 0xe9, 0xdb, 0x33, 0xce, 0x6c, 0x1c, 0x00, 0x93, 0x5a, 0x01, 0xdd, 0x89,
0x12, 0xad, 0x53, 0xa0, 0x13, 0xdb, 0x79, 0xe1, 0x7b, 0x63, 0xce, 0x36, 0x90, 0xc1, 0xe6, 0x37, 0xe3, 0x45, 0x21, 0xfb, 0x7d, 0x3c, 0xbf, 0x92, 0xbe, 0x89, 0x42, 0x12, 0xdf, 0x14, 0xc4, 0x97,
0x9e, 0x1d, 0x8b, 0x99, 0x1f, 0xba, 0xef, 0xb8, 0xc3, 0x6a, 0xb8, 0x07, 0x3b, 0x67, 0x5e, 0x14, 0x02, 0x1e, 0x6c, 0x85, 0x07, 0xb0, 0x9b, 0x11, 0xbf, 0xa5, 0xfd, 0x51, 0x76, 0xd6, 0xe9, 0x7a,
0x4f, 0x26, 0xee, 0xd8, 0xe5, 0x9e, 0xf8, 0x2a, 0xf6, 0x9c, 0x88, 0xd5, 0x11, 0xa1, 0xfb, 0x8d, 0xa5, 0xc2, 0x5e, 0x38, 0x66, 0x18, 0xf9, 0x9c, 0x39, 0xb8, 0x0f, 0x48, 0x1a, 0x95, 0x92, 0x78,
0x77, 0xe5, 0xf9, 0xdf, 0x7a, 0xfa, 0xda, 0xc7, 0x1a, 0xd8, 0x87, 0xde, 0x89, 0x1d, 0xf1, 0xa7, 0xe3, 0x6e, 0x3c, 0x83, 0x92, 0xab, 0x19, 0xbc, 0xa2, 0x78, 0x15, 0x2d, 0x6c, 0x87, 0xbd, 0xc3,
0x71, 0x30, 0x77, 0xc7, 0xb6, 0xe0, 0x8f, 0x1d, 0x27, 0xe4, 0x51, 0xc4, 0x38, 0x05, 0x21, 0x4d, 0x3d, 0x60, 0x17, 0xee, 0xad, 0x92, 0x9e, 0x3b, 0xa1, 0x1d, 0xde, 0xb3, 0xbf, 0x69, 0x38, 0x80,
0x71, 0xee, 0x49, 0xe2, 0x50, 0x88, 0xcf, 0x79, 0xc4, 0xa6, 0x78, 0x0b, 0xf6, 0x6e, 0x68, 0xe4, 0x7e, 0x2a, 0xbe, 0xf0, 0xdd, 0xc8, 0x63, 0x7f, 0xd7, 0xf0, 0x00, 0x30, 0x95, 0x5e, 0xfa, 0xae,
0xcc, 0x33, 0xfc, 0x21, 0xf4, 0xcb, 0xaa, 0x67, 0x76, 0x74, 0x1e, 0xba, 0x63, 0xce, 0x5c, 0xec, 0xe7, 0x06, 0xe6, 0x8a, 0xfd, 0x43, 0xc3, 0x7d, 0xd8, 0xb9, 0x70, 0x6f, 0x93, 0x53, 0x90, 0x0e,
0x01, 0x53, 0x5a, 0x09, 0xdd, 0x33, 0x2f, 0x88, 0x05, 0xfb, 0x7d, 0x32, 0xbf, 0x96, 0xbe, 0x8c, 0xff, 0x8c, 0x1d, 0x12, 0xf9, 0x2b, 0xbe, 0xbe, 0xe6, 0x3e, 0xfb, 0x97, 0x86, 0x87, 0x30, 0xc8,
0x05, 0x89, 0xaf, 0x4a, 0xe2, 0x73, 0x09, 0x0f, 0x36, 0xc7, 0x03, 0xd8, 0xcd, 0x89, 0x5f, 0xd1, 0x2a, 0x92, 0x58, 0xff, 0xd6, 0xd4, 0x8a, 0x12, 0xd5, 0x57, 0x6e, 0xc8, 0xd9, 0x7f, 0x62, 0xb1,
0xfe, 0x28, 0x3b, 0x8b, 0x6c, 0xbd, 0x4a, 0xe1, 0x4e, 0x3d, 0x5b, 0xc4, 0x21, 0x67, 0x1e, 0xee, 0xca, 0x83, 0x0a, 0xf4, 0x5f, 0x0d, 0x77, 0xa1, 0x97, 0x8a, 0x85, 0xed, 0xff, 0x34, 0x1c, 0xc1,
0x03, 0x92, 0x46, 0xa7, 0x24, 0xd9, 0xb8, 0x9f, 0xcc, 0xa0, 0xe5, 0x7a, 0x86, 0xa0, 0x2c, 0x9e, 0x5e, 0x4e, 0x68, 0x3b, 0x8b, 0x4b, 0xaa, 0x38, 0xf6, 0x7f, 0xed, 0xf8, 0x9b, 0x06, 0xf4, 0xaf,
0xc7, 0x53, 0xd7, 0x63, 0x6f, 0x70, 0x0f, 0xd8, 0x33, 0xff, 0xad, 0x96, 0x9e, 0x7a, 0xc2, 0x15, 0x5e, 0xbd, 0xbd, 0x3c, 0xf5, 0xe4, 0x04, 0x74, 0xc5, 0x3e, 0x93, 0x75, 0x86, 0x25, 0x0f, 0xdf,
0xd7, 0xec, 0x6f, 0x06, 0xf6, 0x60, 0x3b, 0x13, 0x3f, 0x0b, 0xfd, 0x38, 0x60, 0x7f, 0x37, 0xf0, 0x51, 0x59, 0x2b, 0x8b, 0xc7, 0xaa, 0x1c, 0xb1, 0xec, 0xfd, 0x3b, 0x2a, 0xed, 0x68, 0x69, 0x12,
0x00, 0x30, 0x93, 0x9e, 0x87, 0x7e, 0xe0, 0x47, 0xf6, 0x9c, 0xfd, 0xc3, 0xc0, 0x7d, 0xd8, 0x79, 0xd9, 0x6d, 0x3c, 0x7c, 0x06, 0x8f, 0xca, 0xda, 0x5a, 0xfc, 0x65, 0xa6, 0xbc, 0x71, 0xd3, 0x63,
0xe6, 0xbf, 0x4d, 0xab, 0xa0, 0x1c, 0xfe, 0x99, 0x38, 0xa4, 0xf2, 0xe7, 0x7c, 0x71, 0xc9, 0x43, 0x78, 0xb4, 0xb1, 0xc1, 0xc5, 0xcf, 0x52, 0x02, 0xc0, 0x0d, 0x4f, 0xe2, 0xd1, 0xa6, 0x26, 0x17,
0xf6, 0x2f, 0x03, 0x6f, 0x41, 0x2f, 0xaf, 0x48, 0x63, 0xfd, 0xdb, 0xd0, 0x2b, 0x4a, 0x55, 0xaf, 0x9f, 0x27, 0x7c, 0x81, 0xe5, 0x0f, 0xe3, 0xd1, 0x86, 0x46, 0x97, 0x72, 0x23, 0x2f, 0xf6, 0xb2,
0x7d, 0xc1, 0xd9, 0x7f, 0x12, 0xb1, 0xce, 0x83, 0x0e, 0xf4, 0x5f, 0x03, 0x77, 0xa1, 0x9b, 0x89, 0xf7, 0xee, 0xa8, 0xb4, 0x77, 0xc5, 0x4f, 0x62, 0x42, 0xc2, 0xd2, 0x37, 0xf5, 0xa8, 0xbc, 0x43,
0xa5, 0xed, 0xff, 0x0c, 0x1c, 0xc0, 0x5e, 0x41, 0xe8, 0x7a, 0xd3, 0x73, 0xea, 0x38, 0xf6, 0x7f, 0xa6, 0x0c, 0xa5, 0xaf, 0xae, 0x4d, 0x8f, 0xe5, 0xd1, 0xc6, 0xde, 0x17, 0x4f, 0xb3, 0x0c, 0x87,
0xe3, 0xf8, 0xbb, 0x3a, 0x6c, 0xd3, 0x11, 0xf3, 0x38, 0x50, 0x13, 0xd0, 0x25, 0xe3, 0xbe, 0xea, 0x1b, 0x9f, 0xcc, 0xa3, 0xcd, 0x1d, 0x30, 0x25, 0x39, 0x7d, 0x62, 0x95, 0x3f, 0x9c, 0x47, 0x9b,
0x33, 0xac, 0x78, 0x13, 0x18, 0x54, 0xdd, 0xf2, 0xf1, 0x58, 0xb7, 0x23, 0x56, 0x3d, 0x0d, 0x0c, 0x9a, 0xe0, 0xeb, 0xa6, 0xf8, 0x43, 0xe6, 0xe3, 0x6f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xa7,
0x2a, 0x2f, 0xfb, 0x34, 0x89, 0xba, 0x88, 0xdd, 0x7c, 0x21, 0x18, 0x54, 0xdd, 0xf8, 0xf1, 0x17, 0x82, 0x8b, 0xa5, 0x11, 0x00, 0x00,
0xb9, 0xf6, 0xc6, 0x55, 0xef, 0x04, 0x83, 0x95, 0x77, 0x7f, 0xfc, 0x32, 0x23, 0x00, 0x5c, 0xf1,
0x5a, 0x30, 0x58, 0x75, 0xff, 0xc7, 0x87, 0x29, 0x5f, 0x60, 0xf5, 0x9b, 0xc1, 0x60, 0xc5, 0x37,
0x00, 0xe5, 0x46, 0x5d, 0x6d, 0xaa, 0x9e, 0x02, 0x06, 0x95, 0xd7, 0x7a, 0xfc, 0x3c, 0x21, 0x24,
0xac, 0x7c, 0x6e, 0x18, 0x54, 0x7f, 0x3c, 0x50, 0x86, 0xb2, 0x0f, 0xd2, 0x55, 0xef, 0x08, 0x83,
0x95, 0x9f, 0x05, 0xf8, 0x38, 0xcf, 0x70, 0xb8, 0xf2, 0x35, 0x61, 0xb0, 0xfa, 0xe3, 0x80, 0x92,
0x9c, 0x7d, 0x7d, 0x56, 0xbf, 0x29, 0x0c, 0x56, 0x7d, 0x1f, 0x5c, 0x36, 0xe4, 0x5b, 0xd5, 0x83,
0xef, 0x03, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xa9, 0x42, 0xf7, 0xc0, 0x12, 0x00, 0x00,
} }

View File

@ -165,11 +165,10 @@ message ResponseFlush{
} }
message ResponseInfo { message ResponseInfo {
string info = 1; // backwards compatible string data = 1;
string version = 2;
TMSPInfo tmsp_info = 2; uint64 last_block_height = 3;
LastBlockInfo last_block = 3; bytes last_block_app_hash = 4;
ConfigInfo config = 4;
} }
message ResponseSetOption{ message ResponseSetOption{
@ -211,24 +210,6 @@ message ResponseEndBlock{
repeated Validator diffs = 4; repeated Validator diffs = 4;
} }
//----------------------------------------
// Info types
message TMSPInfo {
string Version = 1;
}
message LastBlockInfo {
uint64 block_height = 1;
bytes app_hash = 2;
}
message ConfigInfo {
uint64 max_block_size_bytes = 1;
uint64 max_block_size_txs = 2;
uint64 max_tx_size = 3;
}
//---------------------------------------- //----------------------------------------
// Blockchain Types // Blockchain Types