Commit fac9d130 authored by harrylee's avatar harrylee

add get broker info command

parent 4652fb73
Pipeline #8377 failed with stages
in 0 seconds
...@@ -30,6 +30,7 @@ func Cmd() *cobra.Command { ...@@ -30,6 +30,7 @@ func Cmd() *cobra.Command {
InterchainSetRawTxCmd(), InterchainSetRawTxCmd(),
Init_Broker(), Init_Broker(),
QueryStorageCmd(), QueryStorageCmd(),
GetBrokerInfoCmd(),
) )
return cmd return cmd
} }
...@@ -314,3 +315,78 @@ func ParseStorage(res interface{}) (interface{}, error) { ...@@ -314,3 +315,78 @@ func ParseStorage(res interface{}) (interface{}, error) {
} }
return nil, fmt.Errorf("unknow storage type!") return nil, fmt.Errorf("unknow storage type!")
} }
func GetBrokerInfoCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "get",
Short: "get broker info",
Run: getBrokerInfo,
}
GetBrokerInfoFlags(cmd)
return cmd
}
func GetBrokerInfoFlags(cmd *cobra.Command) {
//cmd.Flags().StringP("key", "k", "", "get storage key, such as \"key\"")
//err := cmd.MarkFlagRequired("key")
//if err != nil {
// fmt.Printf("MarkFlagRequired get key Error: %v", err)
// return
//}
}
func getBrokerInfo(cmd *cobra.Command, args []string) {
paraName, _ := cmd.Flags().GetString("paraName")
rpcLaddr, err := cmd.Flags().GetString("rpc_laddr")
if err != nil {
fmt.Printf("getStorage get rpc addr Error: %v", err)
return
}
brokerInfo, err := GetBrokerInfo(paraName, rpcLaddr)
if err != nil {
fmt.Println("QueryStorageBykey Error: %v", err)
return
}
fmt.Println(fmt.Sprintf("%s:%s:%s",brokerInfo.GetBxhId(),brokerInfo.GetAppChainId(),brokerInfo.GetServiceId()))
return
}
func GetBrokerInfo(prefix, rpcLaddr string) (*brokerty.BrokerInfo, error) {
params := &rpctypes.Query4Jrpc{
Execer: types.GetExecName(brokerty.BrokerX, prefix),
FuncName: brokerty.FuncNameGetBrokerInfo,
Payload: nil,
}
var res json.RawMessage
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.SetResultCb(ParseBrokerInfo)
data, err := ctx.RunResult()
if err != nil {
return nil, err
}
return data.(*brokerty.BrokerInfo), nil
}
// 回调解析函数
func ParseBrokerInfo(res interface{}) (interface{}, error) {
raw, ok := res.(*json.RawMessage)
if !ok {
return nil, fmt.Errorf("res is not json rawMessage type!")
}
js, err := NewJson(*raw)
if err != nil {
return nil, err
}
bxhId, _ := js.Get("bxhId").String()
appChainId, _ := js.Get("appChainId").String()
broker := &brokerty.BrokerInfo{
BxhId: bxhId,
AppChainId: appChainId,
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
return broker, nil
}
...@@ -57,6 +57,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error) ...@@ -57,6 +57,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
if b.fromaddr != getManagerAddr(b.api.GetConfig(), b.statedb, brokerAdmin, DefaultManagerAddr) { if b.fromaddr != getManagerAddr(b.api.GetConfig(), b.statedb, brokerAdmin, DefaultManagerAddr) {
return nil, fmt.Errorf("the addr %s is not admin", b.fromaddr) return nil, fmt.Errorf("the addr %s is not admin", b.fromaddr)
} }
brokerInfo := &brokertypes.BrokerInfo{AppChainId: payload.GetAppChainId(), BxhId: payload.GetBxhId(), ServiceId: b.api.GetConfig().GetTitle() + delimiter + "broker"}
m := make(map[string]uint64) m := make(map[string]uint64)
//初始化map,填充一些默认值,防止序列化后为nil //初始化map,填充一些默认值,防止序列化后为nil
m["broker"] = 0 m["broker"] = 0
...@@ -70,7 +71,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error) ...@@ -70,7 +71,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
kvsets = append(kvsets, &types.KeyValue{Key: calDstRollBackMetaKey(), Value: types.Encode(meta)}) kvsets = append(kvsets, &types.KeyValue{Key: calDstRollBackMetaKey(), Value: types.Encode(meta)})
receipt := &types.Receipt{Ty: types.ExecOk} receipt := &types.Receipt{Ty: types.ExecOk}
receipt.KV = append(receipt.KV, kvsets...) receipt.KV = append(receipt.KV, kvsets...)
receipt.KV = append(receipt.KV, &types.KeyValue{Key: BxhIDKey(), Value: types.Encode(payload)}) receipt.KV = append(receipt.KV, &types.KeyValue{Key: BxhIDKey(), Value: types.Encode(brokerInfo)})
receipt.Ty = brokertypes.TyInitLog receipt.Ty = brokertypes.TyInitLog
return receipt, nil return receipt, nil
} }
...@@ -89,7 +90,7 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) { ...@@ -89,7 +90,7 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) { func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) {
//FIXME 权限检查 //FIXME 权限检查
currentServiceID,err:= b.genFullServiceID(payload.DstServiceID) currentServiceID, err := b.genFullServiceID(payload.DstServiceID)
if err != nil { if err != nil {
return nil, fmt.Errorf("can't get current service ID!") return nil, fmt.Errorf("can't get current service ID!")
} }
...@@ -103,7 +104,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt ...@@ -103,7 +104,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
payload.DstServiceID = currentServiceID payload.DstServiceID = currentServiceID
idx := meta.Meta[inServicePair] idx := meta.Meta[inServicePair]
if payload.SequenceNum != idx+1 { if payload.SequenceNum != idx+1 {
return nil, fmt.Errorf("Req_Inner incorrect index,key %s expect %d,but get %d",inServicePair, idx+1,payload.SequenceNum) return nil, fmt.Errorf("Req_Inner incorrect index,key %s expect %d,but get %d", inServicePair, idx+1, payload.SequenceNum)
} }
meta.Meta[inServicePair] = idx + 1 meta.Meta[inServicePair] = idx + 1
kvset := b.GetMetaKVSet(payload.ReqType, meta) kvset := b.GetMetaKVSet(payload.ReqType, meta)
...@@ -118,7 +119,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt ...@@ -118,7 +119,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
} }
idx := meta.Meta[outServicePair] idx := meta.Meta[outServicePair]
if payload.SequenceNum != idx+1 { if payload.SequenceNum != idx+1 {
return nil, fmt.Errorf("Req_Callback incorrect index,key %s expect %d,but get %d",outServicePair, idx+1,payload.SequenceNum) return nil, fmt.Errorf("Req_Callback incorrect index,key %s expect %d,but get %d", outServicePair, idx+1, payload.SequenceNum)
} }
meta.Meta[outServicePair] = idx + 1 meta.Meta[outServicePair] = idx + 1
kvset := b.GetMetaKVSet(payload.ReqType, meta) kvset := b.GetMetaKVSet(payload.ReqType, meta)
...@@ -133,7 +134,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt ...@@ -133,7 +134,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
} }
idx := meta.Meta[inServicePair] idx := meta.Meta[inServicePair]
if payload.SequenceNum < idx+1 { if payload.SequenceNum < idx+1 {
return nil, fmt.Errorf("Req_DstRollback incorrect index,key %s expect %d,but get %d",inServicePair, idx+1,payload.SequenceNum) return nil, fmt.Errorf("Req_DstRollback incorrect index,key %s expect %d,but get %d", inServicePair, idx+1, payload.SequenceNum)
} }
meta.Meta[inServicePair] = payload.SequenceNum meta.Meta[inServicePair] = payload.SequenceNum
kvset := b.GetMetaKVSet(payload.ReqType, meta) kvset := b.GetMetaKVSet(payload.ReqType, meta)
......
...@@ -124,6 +124,8 @@ message BrokerInfo { ...@@ -124,6 +124,8 @@ message BrokerInfo {
string bxhId =1; string bxhId =1;
//应用链ID //应用链ID
string appChainId = 2; string appChainId = 2;
//服务ID
string serviceId = 3;
} }
......
...@@ -25,6 +25,13 @@ const ( ...@@ -25,6 +25,13 @@ const (
NameAuditAction = "Audit" NameAuditAction = "Audit"
NameUpdateIndexAction = "UpdateIndex" NameUpdateIndexAction = "UpdateIndex"
NameEmitInterchainEventAction = "EmitInterchainEvent" NameEmitInterchainEventAction = "EmitInterchainEvent"
FuncNameGetBrokerInfo = "GetBrokerInfo"
FuncNameQueryOutMessage = "QueryOutMessage"
FuncNameQueryInMessage = "QueryInMessage"
FuncNameQueryCallBackMeta = "QueryCallBackMeta"
FuncNameQueryOutterMeta = "QueryOutterMeta"
FuncNameQueryInnerMeta = "QueryInnerMeta"
) )
// 请求类型 // 请求类型
......
...@@ -923,7 +923,9 @@ type BrokerInfo struct { ...@@ -923,7 +923,9 @@ type BrokerInfo struct {
//跨链协议版本ID //跨链协议版本ID
BxhId string `protobuf:"bytes,1,opt,name=bxhId,proto3" json:"bxhId,omitempty"` BxhId string `protobuf:"bytes,1,opt,name=bxhId,proto3" json:"bxhId,omitempty"`
//应用链ID //应用链ID
AppChainId string `protobuf:"bytes,2,opt,name=appChainId,proto3" json:"appChainId,omitempty"` AppChainId string `protobuf:"bytes,2,opt,name=appChainId,proto3" json:"appChainId,omitempty"`
//服务ID
ServiceId string `protobuf:"bytes,3,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -968,6 +970,13 @@ func (m *BrokerInfo) GetAppChainId() string { ...@@ -968,6 +970,13 @@ func (m *BrokerInfo) GetAppChainId() string {
return "" return ""
} }
func (m *BrokerInfo) GetServiceId() string {
if m != nil {
return m.ServiceId
}
return ""
}
type Meta struct { type Meta struct {
Meta map[string]uint64 `protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` Meta map[string]uint64 `protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -1074,52 +1083,53 @@ func init() { ...@@ -1074,52 +1083,53 @@ func init() {
} }
var fileDescriptor_f209535e190f2bed = []byte{ var fileDescriptor_f209535e190f2bed = []byte{
// 710 bytes of a gzipped FileDescriptorProto // 723 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xdd, 0x4e, 0xdb, 0x4a, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x5f, 0x4f, 0xdb, 0x48,
0x10, 0x8e, 0x1d, 0x3b, 0x24, 0x93, 0x40, 0x38, 0x0b, 0x07, 0x59, 0xe7, 0xe2, 0x94, 0xae, 0xb8, 0x10, 0x8f, 0x1d, 0x3b, 0x24, 0x93, 0x40, 0xb8, 0x85, 0x43, 0xd6, 0xe9, 0x74, 0xc7, 0xad, 0x78,
0xa0, 0xad, 0x14, 0x24, 0x90, 0xda, 0xaa, 0xea, 0x4d, 0x42, 0x91, 0x92, 0x0a, 0x28, 0xdd, 0xb6, 0xe0, 0x5a, 0x29, 0x48, 0x20, 0xb5, 0x55, 0xd5, 0x97, 0x84, 0x22, 0x25, 0x15, 0x50, 0xba, 0x6d,
0x52, 0xdb, 0x3b, 0xc7, 0x19, 0xc2, 0x96, 0xc4, 0x36, 0xeb, 0x35, 0x22, 0x8f, 0xd2, 0x37, 0xe9, 0xa5, 0xb6, 0x4f, 0x75, 0x9c, 0x21, 0x6c, 0x49, 0x6c, 0xb3, 0x5e, 0x23, 0xf2, 0x51, 0xfa, 0x4d,
0x55, 0x5f, 0xa4, 0x2f, 0x53, 0xed, 0x0f, 0x89, 0x13, 0xa8, 0xaa, 0x22, 0xd4, 0x1b, 0xd8, 0xf9, 0xfa, 0xd4, 0x2f, 0xd2, 0x2f, 0x53, 0xed, 0x1f, 0x12, 0x27, 0x50, 0x55, 0x45, 0xa8, 0x2f, 0xc9,
0x66, 0x76, 0x67, 0xf2, 0xcd, 0x7c, 0x63, 0x68, 0xf4, 0x45, 0x72, 0x8e, 0xa2, 0x95, 0x8a, 0x44, 0xce, 0x6f, 0x66, 0x76, 0xc6, 0x33, 0xf3, 0x9b, 0x85, 0x46, 0x5f, 0x24, 0xe7, 0x28, 0x5a, 0xa9,
0x26, 0xc4, 0x97, 0x93, 0x14, 0x33, 0xfa, 0xcd, 0x85, 0x46, 0x47, 0xe3, 0xed, 0x48, 0xf2, 0x24, 0x48, 0x64, 0x42, 0x7c, 0x39, 0x49, 0x31, 0xa3, 0x5f, 0x5c, 0x68, 0x74, 0x34, 0xde, 0x8e, 0x24,
0x26, 0x0f, 0xc1, 0xe3, 0x31, 0x97, 0x81, 0xb3, 0xe9, 0x6c, 0xd7, 0x77, 0xeb, 0x2d, 0x1d, 0xd6, 0x4f, 0x62, 0xf2, 0x1f, 0x78, 0x3c, 0xe6, 0x32, 0x70, 0x36, 0x9d, 0xed, 0xfa, 0x6e, 0xbd, 0xa5,
0xea, 0xc5, 0x5c, 0x76, 0x4b, 0x4c, 0xbb, 0x48, 0x07, 0x9a, 0x02, 0x87, 0x3c, 0x93, 0x28, 0x0e, 0xcd, 0x5a, 0xbd, 0x98, 0xcb, 0x6e, 0x89, 0x69, 0x15, 0xe9, 0x40, 0x53, 0xe0, 0x90, 0x67, 0x12,
0xae, 0x30, 0x92, 0x89, 0x08, 0x5c, 0x1d, 0xbd, 0x61, 0xa3, 0xd9, 0xbc, 0xb7, 0x5b, 0x62, 0x8b, 0xc5, 0xc1, 0x15, 0x46, 0x32, 0x11, 0x81, 0xab, 0xad, 0x37, 0xac, 0x35, 0x9b, 0xd7, 0x76, 0x4b,
0x17, 0xc8, 0x16, 0xf8, 0x61, 0x3e, 0xe0, 0x32, 0x28, 0xeb, 0x9b, 0x0d, 0x7b, 0xb3, 0xad, 0xb0, 0x6c, 0xd1, 0x81, 0x6c, 0x81, 0x1f, 0xe6, 0x03, 0x2e, 0x83, 0xb2, 0xf6, 0x6c, 0x58, 0xcf, 0xb6,
0x6e, 0x89, 0x19, 0x27, 0x79, 0x0d, 0x6b, 0x38, 0xe6, 0xb2, 0x17, 0x4b, 0x14, 0xd1, 0x59, 0xc8, 0xc2, 0xba, 0x25, 0x66, 0x94, 0xe4, 0x05, 0xac, 0xe1, 0x98, 0xcb, 0x5e, 0x2c, 0x51, 0x44, 0x67,
0xe3, 0x83, 0x4b, 0x8c, 0x65, 0xe0, 0xcd, 0x65, 0x5b, 0xf0, 0x76, 0x4b, 0xec, 0xb6, 0x4b, 0xe4, 0x21, 0x8f, 0x0f, 0x2e, 0x31, 0x96, 0x81, 0x37, 0x17, 0x6d, 0x41, 0xdb, 0x2d, 0xb1, 0xdb, 0x9c,
0x29, 0xd4, 0xf3, 0x74, 0x10, 0x4a, 0xec, 0xc5, 0x03, 0xbc, 0x0a, 0x7c, 0xfd, 0x06, 0xb1, 0x6f, 0xc8, 0x23, 0xa8, 0xe7, 0xe9, 0x20, 0x94, 0xd8, 0x8b, 0x07, 0x78, 0x15, 0xf8, 0xfa, 0x0e, 0x62,
0x7c, 0x98, 0x79, 0xba, 0x25, 0x56, 0x0c, 0x24, 0x2b, 0xe0, 0xca, 0x49, 0x50, 0xd9, 0x74, 0xb6, 0xef, 0x78, 0x3b, 0xd3, 0x74, 0x4b, 0xac, 0x68, 0x48, 0x56, 0xc0, 0x95, 0x93, 0xa0, 0xb2, 0xe9,
0x7d, 0xe6, 0xca, 0x49, 0x67, 0x09, 0xfc, 0xcb, 0x70, 0x94, 0x23, 0x7d, 0x09, 0x9e, 0xa2, 0x85, 0x6c, 0xfb, 0xcc, 0x95, 0x93, 0xce, 0x12, 0xf8, 0x97, 0xe1, 0x28, 0x47, 0xfa, 0x0c, 0x3c, 0x55,
0xac, 0x83, 0xdf, 0xbf, 0x3a, 0xeb, 0x0d, 0x34, 0x65, 0x35, 0x66, 0x0c, 0xf2, 0x3f, 0x40, 0x98, 0x16, 0xb2, 0x0e, 0x7e, 0xff, 0xea, 0xac, 0x37, 0xd0, 0x25, 0xab, 0x31, 0x23, 0x90, 0x7f, 0x00,
0xa6, 0xfb, 0x2a, 0x7f, 0x6f, 0xa0, 0xf9, 0xa9, 0xb1, 0x02, 0x42, 0xf7, 0xa0, 0xb9, 0x40, 0x13, 0xc2, 0x34, 0xdd, 0x57, 0xf1, 0x7b, 0x03, 0x5d, 0x9f, 0x1a, 0x2b, 0x20, 0x74, 0x0f, 0x9a, 0x0b,
0xd9, 0x84, 0x3a, 0x9a, 0xe3, 0x71, 0x38, 0x46, 0xfb, 0x5c, 0x11, 0xa2, 0x6d, 0xf0, 0x35, 0x43, 0x65, 0x22, 0x9b, 0x50, 0x47, 0x73, 0x3c, 0x0e, 0xc7, 0x68, 0xaf, 0x2b, 0x42, 0xb4, 0x0d, 0xbe,
0xbf, 0x0f, 0x25, 0x1b, 0x50, 0xc9, 0x64, 0x28, 0xf3, 0xcc, 0xe6, 0xb6, 0x16, 0xdd, 0x81, 0xc6, 0xae, 0xd0, 0xcf, 0x4d, 0xc9, 0x06, 0x54, 0x32, 0x19, 0xca, 0x3c, 0xb3, 0xb1, 0xad, 0x44, 0x77,
0x49, 0x32, 0x1a, 0xf1, 0x78, 0x68, 0x68, 0x79, 0x00, 0xde, 0x18, 0x65, 0xb8, 0xd0, 0xef, 0x23, 0xa0, 0x71, 0x92, 0x8c, 0x46, 0x3c, 0x1e, 0x9a, 0xb2, 0xfc, 0x0b, 0xde, 0x18, 0x65, 0xb8, 0xd0,
0x94, 0x21, 0xd3, 0x0e, 0xfa, 0xdd, 0x81, 0x7a, 0x81, 0x1e, 0x95, 0x3a, 0xc3, 0x8b, 0x1c, 0xe3, 0xef, 0x23, 0x94, 0x21, 0xd3, 0x0a, 0xfa, 0xd5, 0x81, 0x7a, 0xa1, 0x3c, 0x2a, 0x74, 0x86, 0x17,
0x08, 0x8f, 0xf3, 0xb1, 0xbe, 0xe7, 0xb1, 0x22, 0x44, 0x28, 0x34, 0x06, 0x99, 0x7c, 0x87, 0xe2, 0x39, 0xc6, 0x11, 0x1e, 0xe7, 0x63, 0xed, 0xe7, 0xb1, 0x22, 0x44, 0x28, 0x34, 0x06, 0x99, 0x7c,
0x92, 0x47, 0xd8, 0x7b, 0x65, 0x0b, 0x98, 0xc3, 0x54, 0x4c, 0x26, 0xa2, 0x59, 0x4c, 0xd9, 0xc4, 0x8d, 0xe2, 0x92, 0x47, 0xd8, 0x7b, 0x6e, 0x13, 0x98, 0xc3, 0x94, 0x4d, 0x26, 0xa2, 0x99, 0x4d,
0x14, 0x31, 0x12, 0xc0, 0x92, 0xc0, 0x8b, 0xf7, 0x93, 0x14, 0x75, 0xc7, 0x3d, 0x76, 0x6d, 0x92, 0xd9, 0xd8, 0x14, 0x31, 0x12, 0xc0, 0x92, 0xc0, 0x8b, 0x37, 0x93, 0x14, 0x75, 0xc7, 0x3d, 0x76,
0x27, 0x50, 0x15, 0x98, 0xa5, 0x49, 0x9c, 0xa1, 0x6d, 0x64, 0x73, 0x3a, 0x7a, 0x06, 0x66, 0xd3, 0x2d, 0x92, 0x87, 0x50, 0x15, 0x98, 0xa5, 0x49, 0x9c, 0xa1, 0x6d, 0x64, 0x73, 0x3a, 0x7a, 0x06,
0x00, 0xfa, 0xc3, 0x81, 0xe6, 0xe2, 0x30, 0xac, 0x83, 0xcf, 0xf5, 0x18, 0x98, 0xf2, 0x8d, 0x71, 0x66, 0x53, 0x03, 0xfa, 0xcd, 0x81, 0xe6, 0xe2, 0x30, 0xac, 0x83, 0xcf, 0xf5, 0x18, 0x98, 0xf4,
0x6f, 0x85, 0x13, 0xf0, 0xe4, 0xac, 0x6a, 0x7d, 0x56, 0xd8, 0x69, 0x1e, 0x47, 0xba, 0xdc, 0x1a, 0x8d, 0x70, 0x6f, 0x89, 0x13, 0xf0, 0xe4, 0x2c, 0x6b, 0x7d, 0x56, 0xd8, 0x69, 0x1e, 0x47, 0x3a,
0xd3, 0x67, 0x85, 0x85, 0x62, 0x98, 0xe9, 0xe1, 0xaa, 0x31, 0x7d, 0x56, 0x7d, 0x53, 0xff, 0xa3, 0xdd, 0x1a, 0xd3, 0x67, 0x85, 0x85, 0x62, 0x98, 0xe9, 0xe1, 0xaa, 0x31, 0x7d, 0x56, 0x7d, 0x53,
0x7e, 0xb0, 0x64, 0xfa, 0x66, 0xac, 0x6b, 0x5c, 0xf4, 0x83, 0xea, 0x0c, 0x17, 0x7d, 0xfa, 0xd5, 0xff, 0x51, 0x3f, 0x58, 0x32, 0x7d, 0x33, 0xd2, 0x35, 0x2e, 0xfa, 0x41, 0x75, 0x86, 0x8b, 0x3e,
0x85, 0x55, 0x86, 0x11, 0xf2, 0x54, 0x1a, 0x1d, 0x1f, 0x26, 0xc3, 0xdb, 0x14, 0xea, 0xdc, 0x59, 0xfd, 0xec, 0xc2, 0x2a, 0xc3, 0x08, 0x79, 0x2a, 0x0d, 0x8f, 0x0f, 0x93, 0xe1, 0x6d, 0x0c, 0x75,
0xa1, 0xee, 0x1d, 0x14, 0x5a, 0xbe, 0x07, 0x85, 0x7a, 0x7f, 0xa6, 0x50, 0xff, 0xa6, 0x42, 0x25, 0xee, 0xcc, 0x50, 0xf7, 0x0e, 0x0c, 0x2d, 0xdf, 0x03, 0x43, 0xbd, 0x5f, 0x63, 0xa8, 0x7f, 0x93,
0xac, 0xbf, 0xcd, 0x51, 0x4c, 0xfe, 0x6a, 0xf7, 0x69, 0x1b, 0xd6, 0x74, 0xc2, 0xfd, 0x69, 0xc2, 0xa1, 0x12, 0xd6, 0x5f, 0xe5, 0x28, 0x26, 0xbf, 0xb5, 0xfb, 0xb4, 0x0d, 0x6b, 0x3a, 0xe0, 0xfe,
0x43, 0x9e, 0x49, 0xf2, 0x18, 0xbc, 0x11, 0xcf, 0xd4, 0x62, 0x2d, 0xff, 0x9a, 0x1a, 0xa6, 0x63, 0x34, 0xe0, 0x21, 0xcf, 0x24, 0x79, 0x00, 0xde, 0x88, 0x67, 0x6a, 0xb1, 0x96, 0x7f, 0x5c, 0x1a,
0x68, 0x13, 0x96, 0x75, 0xe1, 0xc7, 0x7c, 0x74, 0x12, 0x8a, 0x70, 0x4c, 0xff, 0x81, 0xa6, 0x06, 0xa6, 0x6d, 0x68, 0x13, 0x96, 0x75, 0xe2, 0xc7, 0x7c, 0x74, 0x12, 0x8a, 0x70, 0x4c, 0xff, 0x80,
0xde, 0xe4, 0x52, 0xa2, 0x50, 0xea, 0xa4, 0xab, 0xb0, 0x62, 0x7f, 0x5c, 0x6c, 0x91, 0x8f, 0x53, 0xa6, 0x06, 0x5e, 0xe6, 0x52, 0xa2, 0x50, 0xec, 0xa4, 0xab, 0xb0, 0x62, 0x3f, 0x2e, 0xb6, 0xc8,
0xe4, 0x08, 0xb3, 0x2c, 0x1c, 0x22, 0xd9, 0x82, 0x65, 0x1e, 0xdb, 0xca, 0x4e, 0x42, 0x2e, 0xec, 0xbb, 0x29, 0x72, 0x84, 0x59, 0x16, 0x0e, 0x91, 0x6c, 0xc1, 0x32, 0x8f, 0x6d, 0x66, 0x27, 0x21,
0xa2, 0x98, 0x07, 0x17, 0x15, 0xed, 0xde, 0x50, 0x34, 0xfd, 0x34, 0x4b, 0x7f, 0xdf, 0x4f, 0x77, 0x17, 0x76, 0x51, 0xcc, 0x83, 0x8b, 0x8c, 0x76, 0x6f, 0x30, 0x9a, 0xbe, 0x9f, 0x85, 0xbf, 0xef,
0x00, 0xcc, 0xdc, 0xf6, 0xe2, 0xd3, 0xe4, 0x8e, 0xbb, 0xf4, 0x0b, 0x78, 0x8a, 0x00, 0xf2, 0x68, 0xab, 0x3f, 0x02, 0x98, 0xb9, 0xed, 0xc5, 0xa7, 0xc9, 0xdd, 0x76, 0x29, 0xf9, 0x1b, 0x6a, 0x99,
0xba, 0xcb, 0x14, 0xc5, 0xff, 0x16, 0x76, 0x99, 0xfe, 0x73, 0x10, 0x4b, 0x31, 0x31, 0x5b, 0xed, 0x2d, 0xff, 0xc0, 0xb6, 0x64, 0x06, 0xd0, 0x4f, 0xe0, 0xa9, 0xf2, 0x90, 0xff, 0xa7, 0x9b, 0x4e,
0xbf, 0x67, 0x50, 0x9b, 0x42, 0x64, 0x15, 0xca, 0xe7, 0x38, 0xb1, 0x39, 0xd5, 0x51, 0xd5, 0xa1, 0x35, 0xe0, 0xcf, 0xc2, 0xa6, 0xd3, 0x3f, 0x07, 0xb1, 0x14, 0x13, 0xb3, 0xf3, 0xfe, 0x7a, 0x0c,
0x47, 0xc8, 0x56, 0x6c, 0x8c, 0x17, 0xee, 0x73, 0x87, 0x52, 0xa8, 0x5e, 0xef, 0x98, 0xc2, 0x8e, 0xb5, 0x29, 0x44, 0x56, 0xa1, 0x7c, 0x8e, 0x13, 0x9b, 0x91, 0x3a, 0xaa, 0x2c, 0xf5, 0x80, 0xd9,
0x75, 0xf4, 0xf0, 0x59, 0x6b, 0xb7, 0x0a, 0x15, 0xf3, 0xad, 0xed, 0xc0, 0xe7, 0x6a, 0xab, 0xb5, 0xef, 0x31, 0xc2, 0x53, 0xf7, 0x89, 0x43, 0x29, 0x54, 0xaf, 0x37, 0x50, 0x61, 0x03, 0x3b, 0x7a,
0xa3, 0xeb, 0xe8, 0x57, 0xf4, 0x87, 0x77, 0xef, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x8f, 0x34, 0xad, 0xb4, 0x5b, 0x85, 0x8a, 0x79, 0x89, 0x3b, 0xf0, 0xa1, 0xda, 0x6a, 0xed, 0xe8, 0x3c,
0x2d, 0x0d, 0x88, 0x07, 0x00, 0x00, 0xfa, 0x15, 0xfd, 0x2c, 0xef, 0x7d, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xbd, 0xc5, 0xb3, 0x5e, 0xa6,
0x07, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment