// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v3.9.1
// source: relay.proto

package types

import (
	reflect "reflect"
	sync "sync"

	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type RelayOrderStatus int32

const (
	RelayOrderStatus_init       RelayOrderStatus = 0
	RelayOrderStatus_pending    RelayOrderStatus = 1
	RelayOrderStatus_locking    RelayOrderStatus = 2
	RelayOrderStatus_confirming RelayOrderStatus = 3
	RelayOrderStatus_finished   RelayOrderStatus = 4
	RelayOrderStatus_canceled   RelayOrderStatus = 5
	RelayOrderStatus_timeout    RelayOrderStatus = 6 // TODO: may not needed?
)

// Enum value maps for RelayOrderStatus.
var (
	RelayOrderStatus_name = map[int32]string{
		0: "init",
		1: "pending",
		2: "locking",
		3: "confirming",
		4: "finished",
		5: "canceled",
		6: "timeout",
	}
	RelayOrderStatus_value = map[string]int32{
		"init":       0,
		"pending":    1,
		"locking":    2,
		"confirming": 3,
		"finished":   4,
		"canceled":   5,
		"timeout":    6,
	}
)

func (x RelayOrderStatus) Enum() *RelayOrderStatus {
	p := new(RelayOrderStatus)
	*p = x
	return p
}

func (x RelayOrderStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RelayOrderStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_relay_proto_enumTypes[0].Descriptor()
}

func (RelayOrderStatus) Type() protoreflect.EnumType {
	return &file_relay_proto_enumTypes[0]
}

func (x RelayOrderStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RelayOrderStatus.Descriptor instead.
func (RelayOrderStatus) EnumDescriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{0}
}

type RelayAction struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Value:
	//	*RelayAction_Create
	//	*RelayAction_Accept
	//	*RelayAction_Revoke
	//	*RelayAction_ConfirmTx
	//	*RelayAction_Verify
	//	*RelayAction_VerifyCli
	//	*RelayAction_BtcHeaders
	Value isRelayAction_Value `protobuf_oneof:"value"`
	Ty    int32               `protobuf:"varint,10,opt,name=ty,proto3" json:"ty,omitempty"`
}

func (x *RelayAction) Reset() {
	*x = RelayAction{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayAction) ProtoMessage() {}

func (x *RelayAction) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayAction.ProtoReflect.Descriptor instead.
func (*RelayAction) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{0}
}

func (m *RelayAction) GetValue() isRelayAction_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (x *RelayAction) GetCreate() *RelayCreate {
	if x, ok := x.GetValue().(*RelayAction_Create); ok {
		return x.Create
	}
	return nil
}

func (x *RelayAction) GetAccept() *RelayAccept {
	if x, ok := x.GetValue().(*RelayAction_Accept); ok {
		return x.Accept
	}
	return nil
}

func (x *RelayAction) GetRevoke() *RelayRevoke {
	if x, ok := x.GetValue().(*RelayAction_Revoke); ok {
		return x.Revoke
	}
	return nil
}

func (x *RelayAction) GetConfirmTx() *RelayConfirmTx {
	if x, ok := x.GetValue().(*RelayAction_ConfirmTx); ok {
		return x.ConfirmTx
	}
	return nil
}

func (x *RelayAction) GetVerify() *RelayVerify {
	if x, ok := x.GetValue().(*RelayAction_Verify); ok {
		return x.Verify
	}
	return nil
}

func (x *RelayAction) GetVerifyCli() *RelayVerifyCli {
	if x, ok := x.GetValue().(*RelayAction_VerifyCli); ok {
		return x.VerifyCli
	}
	return nil
}

func (x *RelayAction) GetBtcHeaders() *BtcHeaders {
	if x, ok := x.GetValue().(*RelayAction_BtcHeaders); ok {
		return x.BtcHeaders
	}
	return nil
}

func (x *RelayAction) GetTy() int32 {
	if x != nil {
		return x.Ty
	}
	return 0
}

type isRelayAction_Value interface {
	isRelayAction_Value()
}

type RelayAction_Create struct {
	Create *RelayCreate `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
}

type RelayAction_Accept struct {
	Accept *RelayAccept `protobuf:"bytes,2,opt,name=accept,proto3,oneof"`
}

type RelayAction_Revoke struct {
	Revoke *RelayRevoke `protobuf:"bytes,3,opt,name=revoke,proto3,oneof"`
}

type RelayAction_ConfirmTx struct {
	ConfirmTx *RelayConfirmTx `protobuf:"bytes,4,opt,name=confirmTx,proto3,oneof"`
}

type RelayAction_Verify struct {
	Verify *RelayVerify `protobuf:"bytes,5,opt,name=verify,proto3,oneof"`
}

type RelayAction_VerifyCli struct {
	VerifyCli *RelayVerifyCli `protobuf:"bytes,6,opt,name=verifyCli,proto3,oneof"`
}

type RelayAction_BtcHeaders struct {
	BtcHeaders *BtcHeaders `protobuf:"bytes,7,opt,name=btcHeaders,proto3,oneof"`
}

func (*RelayAction_Create) isRelayAction_Value() {}

func (*RelayAction_Accept) isRelayAction_Value() {}

func (*RelayAction_Revoke) isRelayAction_Value() {}

func (*RelayAction_ConfirmTx) isRelayAction_Value() {}

func (*RelayAction_Verify) isRelayAction_Value() {}

func (*RelayAction_VerifyCli) isRelayAction_Value() {}

func (*RelayAction_BtcHeaders) isRelayAction_Value() {}

type RelayOrder struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id              string           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Status          RelayOrderStatus `protobuf:"varint,2,opt,name=status,proto3,enum=types.RelayOrderStatus" json:"status,omitempty"`
	PreStatus       RelayOrderStatus `protobuf:"varint,3,opt,name=preStatus,proto3,enum=types.RelayOrderStatus" json:"preStatus,omitempty"`
	LocalCoinAmount uint64           `protobuf:"varint,4,opt,name=localCoinAmount,proto3" json:"localCoinAmount,omitempty"`
	CreaterAddr     string           `protobuf:"bytes,5,opt,name=createrAddr,proto3" json:"createrAddr,omitempty"`
	Operation       uint32           `protobuf:"varint,6,opt,name=operation,proto3" json:"operation,omitempty"`
	XCoin           string           `protobuf:"bytes,7,opt,name=xCoin,proto3" json:"xCoin,omitempty"`
	XAmount         uint64           `protobuf:"varint,8,opt,name=xAmount,proto3" json:"xAmount,omitempty"`
	XAddr           string           `protobuf:"bytes,9,opt,name=xAddr,proto3" json:"xAddr,omitempty"`
	XTxHash         string           `protobuf:"bytes,10,opt,name=xTxHash,proto3" json:"xTxHash,omitempty"`
	CreateTime      int64            `protobuf:"varint,11,opt,name=createTime,proto3" json:"createTime,omitempty"`
	AcceptAddr      string           `protobuf:"bytes,12,opt,name=acceptAddr,proto3" json:"acceptAddr,omitempty"`
	AcceptTime      int64            `protobuf:"varint,13,opt,name=acceptTime,proto3" json:"acceptTime,omitempty"`
	ConfirmTime     int64            `protobuf:"varint,14,opt,name=confirmTime,proto3" json:"confirmTime,omitempty"`
	FinishTime      int64            `protobuf:"varint,15,opt,name=finishTime,proto3" json:"finishTime,omitempty"`
	FinishTxHash    string           `protobuf:"bytes,16,opt,name=finishTxHash,proto3" json:"finishTxHash,omitempty"`
	Height          int64            `protobuf:"varint,17,opt,name=height,proto3" json:"height,omitempty"`
	XHeight         uint64           `protobuf:"varint,18,opt,name=XHeight,proto3" json:"XHeight,omitempty"`
	XBlockWaits     uint32           `protobuf:"varint,19,opt,name=xBlockWaits,proto3" json:"xBlockWaits,omitempty"`
	LocalCoinSymbol string           `protobuf:"bytes,20,opt,name=localCoinSymbol,proto3" json:"localCoinSymbol,omitempty"`
	LocalCoinExec   string           `protobuf:"bytes,21,opt,name=localCoinExec,proto3" json:"localCoinExec,omitempty"`
}

func (x *RelayOrder) Reset() {
	*x = RelayOrder{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayOrder) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayOrder) ProtoMessage() {}

func (x *RelayOrder) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayOrder.ProtoReflect.Descriptor instead.
func (*RelayOrder) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{1}
}

func (x *RelayOrder) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *RelayOrder) GetStatus() RelayOrderStatus {
	if x != nil {
		return x.Status
	}
	return RelayOrderStatus_init
}

func (x *RelayOrder) GetPreStatus() RelayOrderStatus {
	if x != nil {
		return x.PreStatus
	}
	return RelayOrderStatus_init
}

func (x *RelayOrder) GetLocalCoinAmount() uint64 {
	if x != nil {
		return x.LocalCoinAmount
	}
	return 0
}

func (x *RelayOrder) GetCreaterAddr() string {
	if x != nil {
		return x.CreaterAddr
	}
	return ""
}

func (x *RelayOrder) GetOperation() uint32 {
	if x != nil {
		return x.Operation
	}
	return 0
}

func (x *RelayOrder) GetXCoin() string {
	if x != nil {
		return x.XCoin
	}
	return ""
}

func (x *RelayOrder) GetXAmount() uint64 {
	if x != nil {
		return x.XAmount
	}
	return 0
}

func (x *RelayOrder) GetXAddr() string {
	if x != nil {
		return x.XAddr
	}
	return ""
}

func (x *RelayOrder) GetXTxHash() string {
	if x != nil {
		return x.XTxHash
	}
	return ""
}

func (x *RelayOrder) GetCreateTime() int64 {
	if x != nil {
		return x.CreateTime
	}
	return 0
}

func (x *RelayOrder) GetAcceptAddr() string {
	if x != nil {
		return x.AcceptAddr
	}
	return ""
}

func (x *RelayOrder) GetAcceptTime() int64 {
	if x != nil {
		return x.AcceptTime
	}
	return 0
}

func (x *RelayOrder) GetConfirmTime() int64 {
	if x != nil {
		return x.ConfirmTime
	}
	return 0
}

func (x *RelayOrder) GetFinishTime() int64 {
	if x != nil {
		return x.FinishTime
	}
	return 0
}

func (x *RelayOrder) GetFinishTxHash() string {
	if x != nil {
		return x.FinishTxHash
	}
	return ""
}

func (x *RelayOrder) GetHeight() int64 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *RelayOrder) GetXHeight() uint64 {
	if x != nil {
		return x.XHeight
	}
	return 0
}

func (x *RelayOrder) GetXBlockWaits() uint32 {
	if x != nil {
		return x.XBlockWaits
	}
	return 0
}

func (x *RelayOrder) GetLocalCoinSymbol() string {
	if x != nil {
		return x.LocalCoinSymbol
	}
	return ""
}

func (x *RelayOrder) GetLocalCoinExec() string {
	if x != nil {
		return x.LocalCoinExec
	}
	return ""
}

type RelayCreate struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Operation       uint32 `protobuf:"varint,1,opt,name=operation,proto3" json:"operation,omitempty"` // 0: buy, 1: sell
	XCoin           string `protobuf:"bytes,2,opt,name=xCoin,proto3" json:"xCoin,omitempty"`          // outside cross coin BTC, ETH...
	XAmount         uint64 `protobuf:"varint,3,opt,name=xAmount,proto3" json:"xAmount,omitempty"`
	XAddr           string `protobuf:"bytes,4,opt,name=xAddr,proto3" json:"xAddr,omitempty"`
	LocalCoinAmount uint64 `protobuf:"varint,5,opt,name=localCoinAmount,proto3" json:"localCoinAmount,omitempty"`
	XBlockWaits     uint32 `protobuf:"varint,6,opt,name=xBlockWaits,proto3" json:"xBlockWaits,omitempty"` // the coin blocks to wait
	LocalCoinSymbol string `protobuf:"bytes,7,opt,name=localCoinSymbol,proto3" json:"localCoinSymbol,omitempty"`
	LocalCoinExec   string `protobuf:"bytes,8,opt,name=localCoinExec,proto3" json:"localCoinExec,omitempty"`
}

func (x *RelayCreate) Reset() {
	*x = RelayCreate{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayCreate) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayCreate) ProtoMessage() {}

func (x *RelayCreate) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayCreate.ProtoReflect.Descriptor instead.
func (*RelayCreate) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{2}
}

func (x *RelayCreate) GetOperation() uint32 {
	if x != nil {
		return x.Operation
	}
	return 0
}

func (x *RelayCreate) GetXCoin() string {
	if x != nil {
		return x.XCoin
	}
	return ""
}

func (x *RelayCreate) GetXAmount() uint64 {
	if x != nil {
		return x.XAmount
	}
	return 0
}

func (x *RelayCreate) GetXAddr() string {
	if x != nil {
		return x.XAddr
	}
	return ""
}

func (x *RelayCreate) GetLocalCoinAmount() uint64 {
	if x != nil {
		return x.LocalCoinAmount
	}
	return 0
}

func (x *RelayCreate) GetXBlockWaits() uint32 {
	if x != nil {
		return x.XBlockWaits
	}
	return 0
}

func (x *RelayCreate) GetLocalCoinSymbol() string {
	if x != nil {
		return x.LocalCoinSymbol
	}
	return ""
}

func (x *RelayCreate) GetLocalCoinExec() string {
	if x != nil {
		return x.LocalCoinExec
	}
	return ""
}

type RelayAccept struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId     string `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	XAddr       string `protobuf:"bytes,2,opt,name=xAddr,proto3" json:"xAddr,omitempty"` // for sell coin case needed
	XBlockWaits uint32 `protobuf:"varint,3,opt,name=xBlockWaits,proto3" json:"xBlockWaits,omitempty"`
}

func (x *RelayAccept) Reset() {
	*x = RelayAccept{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayAccept) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayAccept) ProtoMessage() {}

func (x *RelayAccept) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayAccept.ProtoReflect.Descriptor instead.
func (*RelayAccept) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{3}
}

func (x *RelayAccept) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *RelayAccept) GetXAddr() string {
	if x != nil {
		return x.XAddr
	}
	return ""
}

func (x *RelayAccept) GetXBlockWaits() uint32 {
	if x != nil {
		return x.XBlockWaits
	}
	return 0
}

type RelayRevoke struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId string `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	Target  uint32 `protobuf:"varint,2,opt,name=target,proto3" json:"target,omitempty"` // 0:create , 1: accept
	Action  uint32 `protobuf:"varint,3,opt,name=action,proto3" json:"action,omitempty"` // 0: unlock, 1: cancel (only for creator)
}

func (x *RelayRevoke) Reset() {
	*x = RelayRevoke{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayRevoke) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayRevoke) ProtoMessage() {}

func (x *RelayRevoke) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayRevoke.ProtoReflect.Descriptor instead.
func (*RelayRevoke) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{4}
}

func (x *RelayRevoke) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *RelayRevoke) GetTarget() uint32 {
	if x != nil {
		return x.Target
	}
	return 0
}

func (x *RelayRevoke) GetAction() uint32 {
	if x != nil {
		return x.Action
	}
	return 0
}

//客户只用交易hash提交， 验证需要的其他信息由relayd提供
type RelayConfirmTx struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId string `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	TxHash  string `protobuf:"bytes,2,opt,name=txHash,proto3" json:"txHash,omitempty"`
}

func (x *RelayConfirmTx) Reset() {
	*x = RelayConfirmTx{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayConfirmTx) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayConfirmTx) ProtoMessage() {}

func (x *RelayConfirmTx) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayConfirmTx.ProtoReflect.Descriptor instead.
func (*RelayConfirmTx) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{5}
}

func (x *RelayConfirmTx) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *RelayConfirmTx) GetTxHash() string {
	if x != nil {
		return x.TxHash
	}
	return ""
}

// relayd提供验证信息
type RelayVerify struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId string          `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	Tx      *BtcTransaction `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"`
	Spv     *BtcSpv         `protobuf:"bytes,3,opt,name=spv,proto3" json:"spv,omitempty"`
}

func (x *RelayVerify) Reset() {
	*x = RelayVerify{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayVerify) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayVerify) ProtoMessage() {}

func (x *RelayVerify) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayVerify.ProtoReflect.Descriptor instead.
func (*RelayVerify) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{6}
}

func (x *RelayVerify) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *RelayVerify) GetTx() *BtcTransaction {
	if x != nil {
		return x.Tx
	}
	return nil
}

func (x *RelayVerify) GetSpv() *BtcSpv {
	if x != nil {
		return x.Spv
	}
	return nil
}

type RelayVerifyCli struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId    string `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	RawTx      string `protobuf:"bytes,2,opt,name=rawTx,proto3" json:"rawTx,omitempty"`
	TxIndex    uint32 `protobuf:"varint,3,opt,name=txIndex,proto3" json:"txIndex,omitempty"`
	MerkBranch string `protobuf:"bytes,4,opt,name=merkBranch,proto3" json:"merkBranch,omitempty"`
	BlockHash  string `protobuf:"bytes,5,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
}

func (x *RelayVerifyCli) Reset() {
	*x = RelayVerifyCli{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayVerifyCli) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayVerifyCli) ProtoMessage() {}

func (x *RelayVerifyCli) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayVerifyCli.ProtoReflect.Descriptor instead.
func (*RelayVerifyCli) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{7}
}

func (x *RelayVerifyCli) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *RelayVerifyCli) GetRawTx() string {
	if x != nil {
		return x.RawTx
	}
	return ""
}

func (x *RelayVerifyCli) GetTxIndex() uint32 {
	if x != nil {
		return x.TxIndex
	}
	return 0
}

func (x *RelayVerifyCli) GetMerkBranch() string {
	if x != nil {
		return x.MerkBranch
	}
	return ""
}

func (x *RelayVerifyCli) GetBlockHash() string {
	if x != nil {
		return x.BlockHash
	}
	return ""
}

type BtcHeader struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hash          string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
	Confirmations uint64 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"`
	Height        uint64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"`
	Version       uint32 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
	MerkleRoot    string `protobuf:"bytes,5,opt,name=merkleRoot,proto3" json:"merkleRoot,omitempty"`
	Time          int64  `protobuf:"varint,6,opt,name=time,proto3" json:"time,omitempty"`
	Nonce         uint64 `protobuf:"varint,7,opt,name=nonce,proto3" json:"nonce,omitempty"`
	Bits          int64  `protobuf:"varint,8,opt,name=bits,proto3" json:"bits,omitempty"`
	Difficulty    int64  `protobuf:"varint,9,opt,name=difficulty,proto3" json:"difficulty,omitempty"`
	PreviousHash  string `protobuf:"bytes,10,opt,name=previousHash,proto3" json:"previousHash,omitempty"`
	NextHash      string `protobuf:"bytes,11,opt,name=nextHash,proto3" json:"nextHash,omitempty"`
	IsReset       bool   `protobuf:"varint,12,opt,name=isReset,proto3" json:"isReset,omitempty"` // 0: nomal btc headers sync (default), 1: set the base
}

func (x *BtcHeader) Reset() {
	*x = BtcHeader{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BtcHeader) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BtcHeader) ProtoMessage() {}

func (x *BtcHeader) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BtcHeader.ProtoReflect.Descriptor instead.
func (*BtcHeader) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{8}
}

func (x *BtcHeader) GetHash() string {
	if x != nil {
		return x.Hash
	}
	return ""
}

func (x *BtcHeader) GetConfirmations() uint64 {
	if x != nil {
		return x.Confirmations
	}
	return 0
}

func (x *BtcHeader) GetHeight() uint64 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *BtcHeader) GetVersion() uint32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *BtcHeader) GetMerkleRoot() string {
	if x != nil {
		return x.MerkleRoot
	}
	return ""
}

func (x *BtcHeader) GetTime() int64 {
	if x != nil {
		return x.Time
	}
	return 0
}

func (x *BtcHeader) GetNonce() uint64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

func (x *BtcHeader) GetBits() int64 {
	if x != nil {
		return x.Bits
	}
	return 0
}

func (x *BtcHeader) GetDifficulty() int64 {
	if x != nil {
		return x.Difficulty
	}
	return 0
}

func (x *BtcHeader) GetPreviousHash() string {
	if x != nil {
		return x.PreviousHash
	}
	return ""
}

func (x *BtcHeader) GetNextHash() string {
	if x != nil {
		return x.NextHash
	}
	return ""
}

func (x *BtcHeader) GetIsReset() bool {
	if x != nil {
		return x.IsReset
	}
	return false
}

type BtcHeaders struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BtcHeader []*BtcHeader `protobuf:"bytes,1,rep,name=btcHeader,proto3" json:"btcHeader,omitempty"`
}

func (x *BtcHeaders) Reset() {
	*x = BtcHeaders{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BtcHeaders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BtcHeaders) ProtoMessage() {}

func (x *BtcHeaders) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BtcHeaders.ProtoReflect.Descriptor instead.
func (*BtcHeaders) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{9}
}

func (x *BtcHeaders) GetBtcHeader() []*BtcHeader {
	if x != nil {
		return x.BtcHeader
	}
	return nil
}

type BtcTransaction struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hash          string  `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` // txhash
	BlockHeight   uint64  `protobuf:"varint,2,opt,name=blockHeight,proto3" json:"blockHeight,omitempty"`
	Vin           []*Vin  `protobuf:"bytes,3,rep,name=vin,proto3" json:"vin,omitempty"`
	Vout          []*Vout `protobuf:"bytes,4,rep,name=vout,proto3" json:"vout,omitempty"`
	Time          int64   `protobuf:"varint,5,opt,name=time,proto3" json:"time,omitempty"`
	Confirmations uint64  `protobuf:"varint,6,opt,name=confirmations,proto3" json:"confirmations,omitempty"`
}

func (x *BtcTransaction) Reset() {
	*x = BtcTransaction{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BtcTransaction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BtcTransaction) ProtoMessage() {}

func (x *BtcTransaction) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[10]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BtcTransaction.ProtoReflect.Descriptor instead.
func (*BtcTransaction) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{10}
}

func (x *BtcTransaction) GetHash() string {
	if x != nil {
		return x.Hash
	}
	return ""
}

func (x *BtcTransaction) GetBlockHeight() uint64 {
	if x != nil {
		return x.BlockHeight
	}
	return 0
}

func (x *BtcTransaction) GetVin() []*Vin {
	if x != nil {
		return x.Vin
	}
	return nil
}

func (x *BtcTransaction) GetVout() []*Vout {
	if x != nil {
		return x.Vout
	}
	return nil
}

func (x *BtcTransaction) GetTime() int64 {
	if x != nil {
		return x.Time
	}
	return 0
}

func (x *BtcTransaction) GetConfirmations() uint64 {
	if x != nil {
		return x.Confirmations
	}
	return 0
}

type Vin struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
	Value   uint64 `protobuf:"varint,2,opt,name=Value,proto3" json:"Value,omitempty"`
}

func (x *Vin) Reset() {
	*x = Vin{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vin) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vin) ProtoMessage() {}

func (x *Vin) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[11]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vin.ProtoReflect.Descriptor instead.
func (*Vin) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{11}
}

func (x *Vin) GetAddress() string {
	if x != nil {
		return x.Address
	}
	return ""
}

func (x *Vin) GetValue() uint64 {
	if x != nil {
		return x.Value
	}
	return 0
}

type Vout struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Coinbase bool   `protobuf:"varint,1,opt,name=coinbase,proto3" json:"coinbase,omitempty"`
	Address  string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
	Value    uint64 `protobuf:"varint,3,opt,name=Value,proto3" json:"Value,omitempty"`
}

func (x *Vout) Reset() {
	*x = Vout{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vout) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vout) ProtoMessage() {}

func (x *Vout) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[12]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vout.ProtoReflect.Descriptor instead.
func (*Vout) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{12}
}

func (x *Vout) GetCoinbase() bool {
	if x != nil {
		return x.Coinbase
	}
	return false
}

func (x *Vout) GetAddress() string {
	if x != nil {
		return x.Address
	}
	return ""
}

func (x *Vout) GetValue() uint64 {
	if x != nil {
		return x.Value
	}
	return 0
}

type BtcSpv struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hash        string   `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` // txhash
	Time        int64    `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"`
	Height      uint64   `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"`
	BlockHash   string   `protobuf:"bytes,4,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
	TxIndex     uint32   `protobuf:"varint,5,opt,name=txIndex,proto3" json:"txIndex,omitempty"`
	BranchProof [][]byte `protobuf:"bytes,6,rep,name=branchProof,proto3" json:"branchProof,omitempty"`
}

func (x *BtcSpv) Reset() {
	*x = BtcSpv{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BtcSpv) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BtcSpv) ProtoMessage() {}

func (x *BtcSpv) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BtcSpv.ProtoReflect.Descriptor instead.
func (*BtcSpv) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{13}
}

func (x *BtcSpv) GetHash() string {
	if x != nil {
		return x.Hash
	}
	return ""
}

func (x *BtcSpv) GetTime() int64 {
	if x != nil {
		return x.Time
	}
	return 0
}

func (x *BtcSpv) GetHeight() uint64 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *BtcSpv) GetBlockHash() string {
	if x != nil {
		return x.BlockHash
	}
	return ""
}

func (x *BtcSpv) GetTxIndex() uint32 {
	if x != nil {
		return x.TxIndex
	}
	return 0
}

func (x *BtcSpv) GetBranchProof() [][]byte {
	if x != nil {
		return x.BranchProof
	}
	return nil
}

type RelayLastRcvBtcHeader struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Header     *BtcHeader `protobuf:"bytes,1,opt,name=Header,proto3" json:"Header,omitempty"`
	BaseHeight uint64     `protobuf:"varint,2,opt,name=baseHeight,proto3" json:"baseHeight,omitempty"`
}

func (x *RelayLastRcvBtcHeader) Reset() {
	*x = RelayLastRcvBtcHeader{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RelayLastRcvBtcHeader) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RelayLastRcvBtcHeader) ProtoMessage() {}

func (x *RelayLastRcvBtcHeader) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RelayLastRcvBtcHeader.ProtoReflect.Descriptor instead.
func (*RelayLastRcvBtcHeader) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{14}
}

func (x *RelayLastRcvBtcHeader) GetHeader() *BtcHeader {
	if x != nil {
		return x.Header
	}
	return nil
}

func (x *RelayLastRcvBtcHeader) GetBaseHeight() uint64 {
	if x != nil {
		return x.BaseHeight
	}
	return 0
}

type ReceiptRelayRcvBTCHeaders struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Headers        []*BtcHeader `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
	LastHeight     uint64       `protobuf:"varint,2,opt,name=lastHeight,proto3" json:"lastHeight,omitempty"` // last height is the last btc Tx's last height
	NewHeight      uint64       `protobuf:"varint,3,opt,name=newHeight,proto3" json:"newHeight,omitempty"`
	LastBaseHeight uint64       `protobuf:"varint,4,opt,name=lastBaseHeight,proto3" json:"lastBaseHeight,omitempty"` // last base height means ever base height
	NewBaseHeight  uint64       `protobuf:"varint,5,opt,name=newBaseHeight,proto3" json:"newBaseHeight,omitempty"`
}

func (x *ReceiptRelayRcvBTCHeaders) Reset() {
	*x = ReceiptRelayRcvBTCHeaders{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReceiptRelayRcvBTCHeaders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReceiptRelayRcvBTCHeaders) ProtoMessage() {}

func (x *ReceiptRelayRcvBTCHeaders) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[15]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReceiptRelayRcvBTCHeaders.ProtoReflect.Descriptor instead.
func (*ReceiptRelayRcvBTCHeaders) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{15}
}

func (x *ReceiptRelayRcvBTCHeaders) GetHeaders() []*BtcHeader {
	if x != nil {
		return x.Headers
	}
	return nil
}

func (x *ReceiptRelayRcvBTCHeaders) GetLastHeight() uint64 {
	if x != nil {
		return x.LastHeight
	}
	return 0
}

func (x *ReceiptRelayRcvBTCHeaders) GetNewHeight() uint64 {
	if x != nil {
		return x.NewHeight
	}
	return 0
}

func (x *ReceiptRelayRcvBTCHeaders) GetLastBaseHeight() uint64 {
	if x != nil {
		return x.LastBaseHeight
	}
	return 0
}

func (x *ReceiptRelayRcvBTCHeaders) GetNewBaseHeight() uint64 {
	if x != nil {
		return x.NewBaseHeight
	}
	return 0
}

type ReceiptRelayLog struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	OrderId         string `protobuf:"bytes,1,opt,name=orderId,proto3" json:"orderId,omitempty"`
	CurStatus       string `protobuf:"bytes,2,opt,name=curStatus,proto3" json:"curStatus,omitempty"`
	PreStatus       string `protobuf:"bytes,3,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
	LocalCoinAmount string `protobuf:"bytes,4,opt,name=localCoinAmount,proto3" json:"localCoinAmount,omitempty"`
	CreaterAddr     string `protobuf:"bytes,5,opt,name=createrAddr,proto3" json:"createrAddr,omitempty"`
	CoinOperation   uint32 `protobuf:"varint,6,opt,name=coinOperation,proto3" json:"coinOperation,omitempty"`
	XCoin           string `protobuf:"bytes,7,opt,name=xCoin,proto3" json:"xCoin,omitempty"`
	XAmount         string `protobuf:"bytes,8,opt,name=xAmount,proto3" json:"xAmount,omitempty"`
	XAddr           string `protobuf:"bytes,9,opt,name=xAddr,proto3" json:"xAddr,omitempty"`
	XTxHash         string `protobuf:"bytes,10,opt,name=xTxHash,proto3" json:"xTxHash,omitempty"`
	CreateTime      int64  `protobuf:"varint,11,opt,name=createTime,proto3" json:"createTime,omitempty"`
	AcceptAddr      string `protobuf:"bytes,12,opt,name=acceptAddr,proto3" json:"acceptAddr,omitempty"`
	AcceptTime      int64  `protobuf:"varint,13,opt,name=acceptTime,proto3" json:"acceptTime,omitempty"`
	ConfirmTime     int64  `protobuf:"varint,14,opt,name=confirmTime,proto3" json:"confirmTime,omitempty"`
	FinishTime      int64  `protobuf:"varint,15,opt,name=finishTime,proto3" json:"finishTime,omitempty"`
	FinishTxHash    string `protobuf:"bytes,16,opt,name=finishTxHash,proto3" json:"finishTxHash,omitempty"`
	XHeight         uint64 `protobuf:"varint,17,opt,name=xHeight,proto3" json:"xHeight,omitempty"`
	XBlockWaits     uint32 `protobuf:"varint,18,opt,name=xBlockWaits,proto3" json:"xBlockWaits,omitempty"`
	LocalCoinSymbol string `protobuf:"bytes,19,opt,name=localCoinSymbol,proto3" json:"localCoinSymbol,omitempty"`
	LocalCoinExec   string `protobuf:"bytes,20,opt,name=localCoinExec,proto3" json:"localCoinExec,omitempty"`
}

func (x *ReceiptRelayLog) Reset() {
	*x = ReceiptRelayLog{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReceiptRelayLog) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReceiptRelayLog) ProtoMessage() {}

func (x *ReceiptRelayLog) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[16]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReceiptRelayLog.ProtoReflect.Descriptor instead.
func (*ReceiptRelayLog) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{16}
}

func (x *ReceiptRelayLog) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

func (x *ReceiptRelayLog) GetCurStatus() string {
	if x != nil {
		return x.CurStatus
	}
	return ""
}

func (x *ReceiptRelayLog) GetPreStatus() string {
	if x != nil {
		return x.PreStatus
	}
	return ""
}

func (x *ReceiptRelayLog) GetLocalCoinAmount() string {
	if x != nil {
		return x.LocalCoinAmount
	}
	return ""
}

func (x *ReceiptRelayLog) GetCreaterAddr() string {
	if x != nil {
		return x.CreaterAddr
	}
	return ""
}

func (x *ReceiptRelayLog) GetCoinOperation() uint32 {
	if x != nil {
		return x.CoinOperation
	}
	return 0
}

func (x *ReceiptRelayLog) GetXCoin() string {
	if x != nil {
		return x.XCoin
	}
	return ""
}

func (x *ReceiptRelayLog) GetXAmount() string {
	if x != nil {
		return x.XAmount
	}
	return ""
}

func (x *ReceiptRelayLog) GetXAddr() string {
	if x != nil {
		return x.XAddr
	}
	return ""
}

func (x *ReceiptRelayLog) GetXTxHash() string {
	if x != nil {
		return x.XTxHash
	}
	return ""
}

func (x *ReceiptRelayLog) GetCreateTime() int64 {
	if x != nil {
		return x.CreateTime
	}
	return 0
}

func (x *ReceiptRelayLog) GetAcceptAddr() string {
	if x != nil {
		return x.AcceptAddr
	}
	return ""
}

func (x *ReceiptRelayLog) GetAcceptTime() int64 {
	if x != nil {
		return x.AcceptTime
	}
	return 0
}

func (x *ReceiptRelayLog) GetConfirmTime() int64 {
	if x != nil {
		return x.ConfirmTime
	}
	return 0
}

func (x *ReceiptRelayLog) GetFinishTime() int64 {
	if x != nil {
		return x.FinishTime
	}
	return 0
}

func (x *ReceiptRelayLog) GetFinishTxHash() string {
	if x != nil {
		return x.FinishTxHash
	}
	return ""
}

func (x *ReceiptRelayLog) GetXHeight() uint64 {
	if x != nil {
		return x.XHeight
	}
	return 0
}

func (x *ReceiptRelayLog) GetXBlockWaits() uint32 {
	if x != nil {
		return x.XBlockWaits
	}
	return 0
}

func (x *ReceiptRelayLog) GetLocalCoinSymbol() string {
	if x != nil {
		return x.LocalCoinSymbol
	}
	return ""
}

func (x *ReceiptRelayLog) GetLocalCoinExec() string {
	if x != nil {
		return x.LocalCoinExec
	}
	return ""
}

type ReqRelayAddrCoins struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Addr       string           `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
	Status     RelayOrderStatus `protobuf:"varint,2,opt,name=status,proto3,enum=types.RelayOrderStatus" json:"status,omitempty"`
	Coins      []string         `protobuf:"bytes,3,rep,name=coins,proto3" json:"coins,omitempty"`
	PageNumber int32            `protobuf:"varint,4,opt,name=pageNumber,proto3" json:"pageNumber,omitempty"`
	PageSize   int32            `protobuf:"varint,5,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
}

func (x *ReqRelayAddrCoins) Reset() {
	*x = ReqRelayAddrCoins{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqRelayAddrCoins) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqRelayAddrCoins) ProtoMessage() {}

func (x *ReqRelayAddrCoins) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[17]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqRelayAddrCoins.ProtoReflect.Descriptor instead.
func (*ReqRelayAddrCoins) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{17}
}

func (x *ReqRelayAddrCoins) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *ReqRelayAddrCoins) GetStatus() RelayOrderStatus {
	if x != nil {
		return x.Status
	}
	return RelayOrderStatus_init
}

func (x *ReqRelayAddrCoins) GetCoins() []string {
	if x != nil {
		return x.Coins
	}
	return nil
}

func (x *ReqRelayAddrCoins) GetPageNumber() int32 {
	if x != nil {
		return x.PageNumber
	}
	return 0
}

func (x *ReqRelayAddrCoins) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

type ReplyRelayOrders struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Relayorders []*RelayOrder `protobuf:"bytes,1,rep,name=relayorders,proto3" json:"relayorders,omitempty"`
}

func (x *ReplyRelayOrders) Reset() {
	*x = ReplyRelayOrders{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReplyRelayOrders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReplyRelayOrders) ProtoMessage() {}

func (x *ReplyRelayOrders) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[18]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReplyRelayOrders.ProtoReflect.Descriptor instead.
func (*ReplyRelayOrders) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{18}
}

func (x *ReplyRelayOrders) GetRelayorders() []*RelayOrder {
	if x != nil {
		return x.Relayorders
	}
	return nil
}

type QueryRelayOrderParam struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Status  RelayOrderStatus `protobuf:"varint,1,opt,name=status,proto3,enum=types.RelayOrderStatus" json:"status,omitempty"`
	OrderId string           `protobuf:"bytes,2,opt,name=orderId,proto3" json:"orderId,omitempty"`
}

func (x *QueryRelayOrderParam) Reset() {
	*x = QueryRelayOrderParam{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *QueryRelayOrderParam) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QueryRelayOrderParam) ProtoMessage() {}

func (x *QueryRelayOrderParam) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[19]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QueryRelayOrderParam.ProtoReflect.Descriptor instead.
func (*QueryRelayOrderParam) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{19}
}

func (x *QueryRelayOrderParam) GetStatus() RelayOrderStatus {
	if x != nil {
		return x.Status
	}
	return RelayOrderStatus_init
}

func (x *QueryRelayOrderParam) GetOrderId() string {
	if x != nil {
		return x.OrderId
	}
	return ""
}

type QueryRelayOrderResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Orders []*RelayOrder `protobuf:"bytes,1,rep,name=orders,proto3" json:"orders,omitempty"`
}

func (x *QueryRelayOrderResult) Reset() {
	*x = QueryRelayOrderResult{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *QueryRelayOrderResult) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QueryRelayOrderResult) ProtoMessage() {}

func (x *QueryRelayOrderResult) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[20]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QueryRelayOrderResult.ProtoReflect.Descriptor instead.
func (*QueryRelayOrderResult) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{20}
}

func (x *QueryRelayOrderResult) GetOrders() []*RelayOrder {
	if x != nil {
		return x.Orders
	}
	return nil
}

type ReqRelayBtcHeaderHeightList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ReqHeight int64 `protobuf:"varint,1,opt,name=reqHeight,proto3" json:"reqHeight,omitempty"`
	Counts    int32 `protobuf:"varint,2,opt,name=counts,proto3" json:"counts,omitempty"`
	Direction int32 `protobuf:"varint,3,opt,name=direction,proto3" json:"direction,omitempty"` // 0: desc, 1: asc
}

func (x *ReqRelayBtcHeaderHeightList) Reset() {
	*x = ReqRelayBtcHeaderHeightList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqRelayBtcHeaderHeightList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqRelayBtcHeaderHeightList) ProtoMessage() {}

func (x *ReqRelayBtcHeaderHeightList) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[21]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqRelayBtcHeaderHeightList.ProtoReflect.Descriptor instead.
func (*ReqRelayBtcHeaderHeightList) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{21}
}

func (x *ReqRelayBtcHeaderHeightList) GetReqHeight() int64 {
	if x != nil {
		return x.ReqHeight
	}
	return 0
}

func (x *ReqRelayBtcHeaderHeightList) GetCounts() int32 {
	if x != nil {
		return x.Counts
	}
	return 0
}

func (x *ReqRelayBtcHeaderHeightList) GetDirection() int32 {
	if x != nil {
		return x.Direction
	}
	return 0
}

type ReplyRelayBtcHeadHeightList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Heights []int64 `protobuf:"varint,1,rep,packed,name=heights,proto3" json:"heights,omitempty"`
}

func (x *ReplyRelayBtcHeadHeightList) Reset() {
	*x = ReplyRelayBtcHeadHeightList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReplyRelayBtcHeadHeightList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReplyRelayBtcHeadHeightList) ProtoMessage() {}

func (x *ReplyRelayBtcHeadHeightList) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[22]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReplyRelayBtcHeadHeightList.ProtoReflect.Descriptor instead.
func (*ReplyRelayBtcHeadHeightList) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{22}
}

func (x *ReplyRelayBtcHeadHeightList) GetHeights() []int64 {
	if x != nil {
		return x.Heights
	}
	return nil
}

type ReqRelayQryBTCHeadHeight struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BaseHeight int64 `protobuf:"varint,1,opt,name=baseHeight,proto3" json:"baseHeight,omitempty"` // from the baseHeight begin, if any
}

func (x *ReqRelayQryBTCHeadHeight) Reset() {
	*x = ReqRelayQryBTCHeadHeight{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqRelayQryBTCHeadHeight) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqRelayQryBTCHeadHeight) ProtoMessage() {}

func (x *ReqRelayQryBTCHeadHeight) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[23]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqRelayQryBTCHeadHeight.ProtoReflect.Descriptor instead.
func (*ReqRelayQryBTCHeadHeight) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{23}
}

func (x *ReqRelayQryBTCHeadHeight) GetBaseHeight() int64 {
	if x != nil {
		return x.BaseHeight
	}
	return 0
}

type ReplayRelayQryBTCHeadHeight struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	CurHeight  int64 `protobuf:"varint,1,opt,name=curHeight,proto3" json:"curHeight,omitempty"`   // current height in chain
	BaseHeight int64 `protobuf:"varint,2,opt,name=baseHeight,proto3" json:"baseHeight,omitempty"` // base height means the the 1st head record in chain db
}

func (x *ReplayRelayQryBTCHeadHeight) Reset() {
	*x = ReplayRelayQryBTCHeadHeight{}
	if protoimpl.UnsafeEnabled {
		mi := &file_relay_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReplayRelayQryBTCHeadHeight) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReplayRelayQryBTCHeadHeight) ProtoMessage() {}

func (x *ReplayRelayQryBTCHeadHeight) ProtoReflect() protoreflect.Message {
	mi := &file_relay_proto_msgTypes[24]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReplayRelayQryBTCHeadHeight.ProtoReflect.Descriptor instead.
func (*ReplayRelayQryBTCHeadHeight) Descriptor() ([]byte, []int) {
	return file_relay_proto_rawDescGZIP(), []int{24}
}

func (x *ReplayRelayQryBTCHeadHeight) GetCurHeight() int64 {
	if x != nil {
		return x.CurHeight
	}
	return 0
}

func (x *ReplayRelayQryBTCHeadHeight) GetBaseHeight() int64 {
	if x != nil {
		return x.BaseHeight
	}
	return 0
}

var File_relay_proto protoreflect.FileDescriptor

var file_relay_proto_rawDesc = []byte{
	0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61,
	0x74, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
	0x12, 0x2c, 0x0a, 0x06, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65,
	0x76, 0x6f, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x35,
	0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x78, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x72, 0x6d, 0x54, 0x78, 0x12, 0x2c, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72,
	0x69, 0x66, 0x79, 0x12, 0x35, 0x0a, 0x09, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6c, 0x69,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6c, 0x69, 0x48, 0x00, 0x52,
	0x09, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6c, 0x69, 0x12, 0x33, 0x0a, 0x0a, 0x62, 0x74,
	0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
	0x73, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12,
	0x0e, 0x0a, 0x02, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x74, 0x79, 0x42,
	0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb8, 0x05, 0x0a, 0x0a, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x53,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74,
	0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x70, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
	0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75,
	0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43,
	0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6f,
	0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09,
	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x43, 0x6f,
	0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12,
	0x18, 0x0a, 0x07, 0x78, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04,
	0x52, 0x07, 0x78, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x41, 0x64,
	0x64, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x78, 0x41, 0x64, 0x64, 0x72, 0x12,
	0x18, 0x0a, 0x07, 0x78, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x78, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x63,
	0x65, 0x70, 0x74, 0x41, 0x64, 0x64, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61,
	0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x63,
	0x65, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61,
	0x63, 0x63, 0x65, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x72, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66,
	0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66,
	0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12,
	0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x58, 0x48, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x58, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x12, 0x20, 0x0a, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x73,
	0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61,
	0x69, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e,
	0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f,
	0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x24, 0x0a,
	0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x18, 0x15,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x45,
	0x78, 0x65, 0x63, 0x22, 0x8d, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x78, 0x41, 0x6d, 0x6f, 0x75,
	0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x78, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x41, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x78, 0x41, 0x64, 0x64, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
	0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04,
	0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x20, 0x0a, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x73,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61,
	0x69, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e,
	0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f,
	0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x24, 0x0a,
	0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x18, 0x08,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x45,
	0x78, 0x65, 0x63, 0x22, 0x5f, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x63, 0x65,
	0x70, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05,
	0x78, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x78, 0x41, 0x64,
	0x64, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74,
	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57,
	0x61, 0x69, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x76,
	0x6f, 0x6b, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a,
	0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74,
	0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a,
	0x0e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x78, 0x12,
	0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48,
	0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73,
	0x68, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79,
	0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x02, 0x74, 0x78,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42,
	0x74, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x74,
	0x78, 0x12, 0x1f, 0x0a, 0x03, 0x73, 0x70, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x74, 0x63, 0x53, 0x70, 0x76, 0x52, 0x03, 0x73,
	0x70, 0x76, 0x22, 0x98, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x56, 0x65, 0x72, 0x69,
	0x66, 0x79, 0x43, 0x6c, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12,
	0x14, 0x0a, 0x05, 0x72, 0x61, 0x77, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
	0x72, 0x61, 0x77, 0x54, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
	0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x6b, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x72, 0x6b, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12,
	0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0xcf, 0x02,
	0x0a, 0x09, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x68,
	0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12,
	0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a,
	0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x6b, 0x6c,
	0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x72,
	0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e,
	0x6f, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63,
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x04, 0x62, 0x69, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75,
	0x6c, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69,
	0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75,
	0x73, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x65,
	0x76, 0x69, 0x6f, 0x75, 0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x78,
	0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x78,
	0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x52, 0x65, 0x73, 0x65, 0x74,
	0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65, 0x73, 0x65, 0x74, 0x22,
	0x3c, 0x0a, 0x0a, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a,
	0x09, 0x62, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x52, 0x09, 0x62, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xbf, 0x01,
	0x0a, 0x0e, 0x42, 0x74, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x68, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x76, 0x69, 0x6e, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x69, 0x6e, 0x52,
	0x03, 0x76, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x04, 0x76, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x6f, 0x75, 0x74, 0x52,
	0x04, 0x76, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04,
	0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22,
	0x35, 0x0a, 0x03, 0x56, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
	0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
	0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
	0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x52, 0x0a, 0x04, 0x56, 0x6f, 0x75, 0x74, 0x12, 0x1a,
	0x0a, 0x08, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x08, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64,
	0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64,
	0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x04, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x06, 0x42,
	0x74, 0x63, 0x53, 0x70, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a,
	0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61,
	0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48,
	0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a,
	0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x06, 0x20, 0x03,
	0x28, 0x0c, 0x52, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22,
	0x61, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x63, 0x76, 0x42,
	0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x52, 0x63, 0x76, 0x42, 0x54, 0x43, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
	0x12, 0x2a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
	0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
	0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09,
	0x6e, 0x65, 0x77, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52,
	0x09, 0x6e, 0x65, 0x77, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61,
	0x73, 0x74, 0x42, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x04, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x42, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x42, 0x61,
	0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x8b, 0x05, 0x0a, 0x0f, 0x52, 0x65, 0x63,
	0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07,
	0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f,
	0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x53, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x75, 0x72, 0x53, 0x74,
	0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74,
	0x75, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41,
	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x63,
	0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b,
	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x24,
	0x0a, 0x0d, 0x63, 0x6f, 0x69, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x69, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x78, 0x41,
	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x78, 0x41, 0x6d,
	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x41, 0x64, 0x64, 0x72, 0x18, 0x09, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x78, 0x41, 0x64, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x78, 0x54,
	0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x78, 0x54, 0x78,
	0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69,
	0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
	0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x64,
	0x64, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
	0x41, 0x64, 0x64, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x54, 0x69,
	0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
	0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54,
	0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x72, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68,
	0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69,
	0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68,
	0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x69,
	0x6e, 0x69, 0x73, 0x68, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x78, 0x48,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x78, 0x48, 0x65,
	0x69, 0x67, 0x68, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x61,
	0x69, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x78, 0x42, 0x6c, 0x6f, 0x63,
	0x6b, 0x57, 0x61, 0x69, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43,
	0x6f, 0x69, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
	0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x65,
	0x63, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f,
	0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x22, 0xaa, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04,
	0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72,
	0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72,
	0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e,
	0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x67,
	0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
	0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
	0x69, 0x7a, 0x65, 0x22, 0x47, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x6c, 0x61,
	0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79,
	0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52,
	0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x22, 0x61, 0x0a, 0x14,
	0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x50,
	0x61, 0x72, 0x61, 0x6d, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x22,
	0x42, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64,
	0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65,
	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x06, 0x6f, 0x72, 0x64,
	0x65, 0x72, 0x73, 0x22, 0x71, 0x0a, 0x1b, 0x52, 0x65, 0x71, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42,
	0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x71, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74,
	0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x72,
	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x37, 0x0a, 0x1b, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x42, 0x74, 0x63, 0x48, 0x65, 0x61, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x22,
	0x3a, 0x0a, 0x18, 0x52, 0x65, 0x71, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x51, 0x72, 0x79, 0x42, 0x54,
	0x43, 0x48, 0x65, 0x61, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62,
	0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x0a, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x5b, 0x0a, 0x1b, 0x52,
	0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x51, 0x72, 0x79, 0x42, 0x54, 0x43,
	0x48, 0x65, 0x61, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x75,
	0x72, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63,
	0x75, 0x72, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x73, 0x65,
	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x61,
	0x73, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2a, 0x6f, 0x0a, 0x10, 0x52, 0x65, 0x6c, 0x61,
	0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04,
	0x69, 0x6e, 0x69, 0x74, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e,
	0x67, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x10, 0x02,
	0x12, 0x0e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x03,
	0x12, 0x0c, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0c,
	0x0a, 0x08, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07,
	0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_relay_proto_rawDescOnce sync.Once
	file_relay_proto_rawDescData = file_relay_proto_rawDesc
)

func file_relay_proto_rawDescGZIP() []byte {
	file_relay_proto_rawDescOnce.Do(func() {
		file_relay_proto_rawDescData = protoimpl.X.CompressGZIP(file_relay_proto_rawDescData)
	})
	return file_relay_proto_rawDescData
}

var file_relay_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_relay_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
var file_relay_proto_goTypes = []interface{}{
	(RelayOrderStatus)(0),               // 0: types.RelayOrderStatus
	(*RelayAction)(nil),                 // 1: types.RelayAction
	(*RelayOrder)(nil),                  // 2: types.RelayOrder
	(*RelayCreate)(nil),                 // 3: types.RelayCreate
	(*RelayAccept)(nil),                 // 4: types.RelayAccept
	(*RelayRevoke)(nil),                 // 5: types.RelayRevoke
	(*RelayConfirmTx)(nil),              // 6: types.RelayConfirmTx
	(*RelayVerify)(nil),                 // 7: types.RelayVerify
	(*RelayVerifyCli)(nil),              // 8: types.RelayVerifyCli
	(*BtcHeader)(nil),                   // 9: types.BtcHeader
	(*BtcHeaders)(nil),                  // 10: types.BtcHeaders
	(*BtcTransaction)(nil),              // 11: types.BtcTransaction
	(*Vin)(nil),                         // 12: types.Vin
	(*Vout)(nil),                        // 13: types.Vout
	(*BtcSpv)(nil),                      // 14: types.BtcSpv
	(*RelayLastRcvBtcHeader)(nil),       // 15: types.RelayLastRcvBtcHeader
	(*ReceiptRelayRcvBTCHeaders)(nil),   // 16: types.ReceiptRelayRcvBTCHeaders
	(*ReceiptRelayLog)(nil),             // 17: types.ReceiptRelayLog
	(*ReqRelayAddrCoins)(nil),           // 18: types.ReqRelayAddrCoins
	(*ReplyRelayOrders)(nil),            // 19: types.ReplyRelayOrders
	(*QueryRelayOrderParam)(nil),        // 20: types.QueryRelayOrderParam
	(*QueryRelayOrderResult)(nil),       // 21: types.QueryRelayOrderResult
	(*ReqRelayBtcHeaderHeightList)(nil), // 22: types.ReqRelayBtcHeaderHeightList
	(*ReplyRelayBtcHeadHeightList)(nil), // 23: types.ReplyRelayBtcHeadHeightList
	(*ReqRelayQryBTCHeadHeight)(nil),    // 24: types.ReqRelayQryBTCHeadHeight
	(*ReplayRelayQryBTCHeadHeight)(nil), // 25: types.ReplayRelayQryBTCHeadHeight
}
var file_relay_proto_depIdxs = []int32{
	3,  // 0: types.RelayAction.create:type_name -> types.RelayCreate
	4,  // 1: types.RelayAction.accept:type_name -> types.RelayAccept
	5,  // 2: types.RelayAction.revoke:type_name -> types.RelayRevoke
	6,  // 3: types.RelayAction.confirmTx:type_name -> types.RelayConfirmTx
	7,  // 4: types.RelayAction.verify:type_name -> types.RelayVerify
	8,  // 5: types.RelayAction.verifyCli:type_name -> types.RelayVerifyCli
	10, // 6: types.RelayAction.btcHeaders:type_name -> types.BtcHeaders
	0,  // 7: types.RelayOrder.status:type_name -> types.RelayOrderStatus
	0,  // 8: types.RelayOrder.preStatus:type_name -> types.RelayOrderStatus
	11, // 9: types.RelayVerify.tx:type_name -> types.BtcTransaction
	14, // 10: types.RelayVerify.spv:type_name -> types.BtcSpv
	9,  // 11: types.BtcHeaders.btcHeader:type_name -> types.BtcHeader
	12, // 12: types.BtcTransaction.vin:type_name -> types.Vin
	13, // 13: types.BtcTransaction.vout:type_name -> types.Vout
	9,  // 14: types.RelayLastRcvBtcHeader.Header:type_name -> types.BtcHeader
	9,  // 15: types.ReceiptRelayRcvBTCHeaders.headers:type_name -> types.BtcHeader
	0,  // 16: types.ReqRelayAddrCoins.status:type_name -> types.RelayOrderStatus
	2,  // 17: types.ReplyRelayOrders.relayorders:type_name -> types.RelayOrder
	0,  // 18: types.QueryRelayOrderParam.status:type_name -> types.RelayOrderStatus
	2,  // 19: types.QueryRelayOrderResult.orders:type_name -> types.RelayOrder
	20, // [20:20] is the sub-list for method output_type
	20, // [20:20] is the sub-list for method input_type
	20, // [20:20] is the sub-list for extension type_name
	20, // [20:20] is the sub-list for extension extendee
	0,  // [0:20] is the sub-list for field type_name
}

func init() { file_relay_proto_init() }
func file_relay_proto_init() {
	if File_relay_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_relay_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayAction); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayOrder); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayCreate); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayAccept); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayRevoke); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayConfirmTx); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayVerify); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayVerifyCli); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BtcHeader); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BtcHeaders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BtcTransaction); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vin); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vout); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BtcSpv); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayLastRcvBtcHeader); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReceiptRelayRcvBTCHeaders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReceiptRelayLog); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqRelayAddrCoins); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplyRelayOrders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*QueryRelayOrderParam); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*QueryRelayOrderResult); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqRelayBtcHeaderHeightList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplyRelayBtcHeadHeightList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqRelayQryBTCHeadHeight); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_relay_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplayRelayQryBTCHeadHeight); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_relay_proto_msgTypes[0].OneofWrappers = []interface{}{
		(*RelayAction_Create)(nil),
		(*RelayAction_Accept)(nil),
		(*RelayAction_Revoke)(nil),
		(*RelayAction_ConfirmTx)(nil),
		(*RelayAction_Verify)(nil),
		(*RelayAction_VerifyCli)(nil),
		(*RelayAction_BtcHeaders)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_relay_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   25,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_relay_proto_goTypes,
		DependencyIndexes: file_relay_proto_depIdxs,
		EnumInfos:         file_relay_proto_enumTypes,
		MessageInfos:      file_relay_proto_msgTypes,
	}.Build()
	File_relay_proto = out.File
	file_relay_proto_rawDesc = nil
	file_relay_proto_goTypes = nil
	file_relay_proto_depIdxs = nil
}
