diff --git a/adaptor/PCM-AI/PCM-HANWUJI/rpc/etc/pcmhanwuji.yaml b/adaptor/PCM-AI/PCM-HANWUJI/rpc/etc/pcmhanwuji.yaml index 40826d1..8c32d25 100644 --- a/adaptor/PCM-AI/PCM-HANWUJI/rpc/etc/pcmhanwuji.yaml +++ b/adaptor/PCM-AI/PCM-HANWUJI/rpc/etc/pcmhanwuji.yaml @@ -2,7 +2,9 @@ NacosConfig: DataId: pcm-hanwuji-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 diff --git a/adaptor/PCM-AI/PCM-MODELARTS/rpc/etc/pcmmodelarts.yaml b/adaptor/PCM-AI/PCM-MODELARTS/rpc/etc/pcmmodelarts.yaml index e2ea0bb..c98d29e 100644 --- a/adaptor/PCM-AI/PCM-MODELARTS/rpc/etc/pcmmodelarts.yaml +++ b/adaptor/PCM-AI/PCM-MODELARTS/rpc/etc/pcmmodelarts.yaml @@ -2,7 +2,9 @@ NacosConfig: DataId: pcm-modelarts-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 diff --git a/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/logic/cronlogic.go b/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/logic/cronlogic.go new file mode 100644 index 0000000..1a6c5ae --- /dev/null +++ b/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/logic/cronlogic.go @@ -0,0 +1,130 @@ +package logic + +import ( + "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/svc" + "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/modelarts" + "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" + "context" + "github.com/zeromicro/go-zero/core/logx" + "time" +) + +func InitCron(svc *svc.ServiceContext) { + submitJobLogic := NewCreateTrainingJobLogic(context.Background(), svc) + listLogic := NewGetListTrainingJobsLogic(context.Background(), svc) + svc.Cron.AddFunc("*/5 * * * * ?", func() { + syncInfoReq := pcmcoreclient.SyncInfoReq{ + Kind: "ai", + ServiceName: "modelArts", + } + // 查询core端分发下来的任务列表 + infoList, err := queryCoreInfoList(svc) + if err != nil { + logx.Error(err) + return + } + // 提交任务 + submitJob(infoList, submitJobLogic) + // 查询运行中的任务列表同步信息 + listReq := modelarts.ListTrainingJobsreq{ + ProjectId: "0a62ffb0d48026c12fbfc011b8d23f0b", + Limit: 10, + OffSet: 0, + } + listJob, err := listLogic.GetListTrainingJobs(&listReq) + if err != nil { + logx.Error(err) + return + } + for index, _ := range infoList.AiInfoList { + for _, job := range listJob.Items { + if job.Metadata.Name == infoList.AiInfoList[index].Name { + infoList.AiInfoList[index].ProjectId = job.ProjectId + infoList.AiInfoList[index].JobId = job.Metadata.Id + createTime := time.Unix(int64(job.Metadata.CreateTime)/1000, 0) + infoList.AiInfoList[index].CreateTime = time.Time.String(createTime) + if job.Status.StartTime != 0 { + startTime := time.Unix(int64(job.Status.StartTime)/1000, 0) + infoList.AiInfoList[index].StartTime = time.Time.String(startTime) + } + infoList.AiInfoList[index].RunningTime = int64(job.Status.Duration) / 1000 + if job.Status.Phase == "Running" { + infoList.AiInfoList[index].Status = "Running" + } + if job.Status.Phase == "Completed" { + infoList.AiInfoList[index].Status = "Completed" + } + if job.Status.Phase == "Creating" { + infoList.AiInfoList[index].Status = "Creating" + } + if job.Status.Phase == "Pending" { + infoList.AiInfoList[index].Status = "Pending" + } + if job.Status.Phase == "Terminated" { + infoList.AiInfoList[index].Status = "Terminated" + } + if job.Status.Phase == "Terminating" { + infoList.AiInfoList[index].Status = "Terminating" + } + if job.Status.Phase == "Abnormal" { + infoList.AiInfoList[index].Status = "Abnormal" + } + + } + } + } + // 同步信息到core端 + if len(infoList.AiInfoList) != 0 { + syncInfoReq.AiInfoList = infoList.AiInfoList + svc.PcmCoreRpc.SyncInfo(context.Background(), &syncInfoReq) + } + }) +} + +func submitJob(infoList *pcmcoreclient.InfoListResp, submitJobLogic *CreateTrainingJobLogic) { + for index, _ := range infoList.AiInfoList { + if infoList.AiInfoList[index].Status == "Saved" { + submitReq := modelarts.CreateTrainingJobReq{ + Kind: "job", + ProjectId: "0a62ffb0d48026c12fbfc011b8d23f0b", + Metadata: &modelarts.MetadataS{ + Name: infoList.AiInfoList[index].Name, + WorkspaceId: "0", + Description: "This is a ModelArts Demo Job", + }, + Algorithm: &modelarts.Algorithms{ + Command: "echo hello;sleep 100;echo hello;sleep 100;echo hello", + Engine: &modelarts.EngineCreateTraining{ + ImageUrl: "jcce/nginx:v1", + }, + }, + Spec: &modelarts.SpecsC{ + Resource: &modelarts.ResourceCreateTraining{ + FlavorId: "modelarts.p3.large.public.free", + NodeCount: 1, + }, + }, + } + jobResult, _ := submitJobLogic.CreateTrainingJob(&submitReq) + if jobResult.Code == 200 { + infoList.AiInfoList[index].Status = jobResult.Status.Phase + infoList.AiInfoList[index].ProjectId = jobResult.Metadata.Id + } else { + infoList.AiInfoList[index].Result = "Failed" + infoList.AiInfoList[index].Result = jobResult.Msg + } + } + } +} + +func queryCoreInfoList(svc *svc.ServiceContext) (*pcmcoreclient.InfoListResp, error) { + infoReq := pcmcoreclient.InfoListReq{ + Kind: "ai", + ServiceName: "modelArts", + } + infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) + if err != nil { + return nil, err + } + return infoList, nil +} diff --git a/adaptor/PCM-AI/PCM-MODELARTS/rpc/pcmmodelarts.go b/adaptor/PCM-AI/PCM-MODELARTS/rpc/pcmmodelarts.go index b07a930..dadaf51 100644 --- a/adaptor/PCM-AI/PCM-MODELARTS/rpc/pcmmodelarts.go +++ b/adaptor/PCM-AI/PCM-MODELARTS/rpc/pcmmodelarts.go @@ -6,10 +6,8 @@ import ( "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/server" "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/internal/svc" "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/modelarts" - "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" commonConfig "PCM/common/config" "PCM/common/interceptor/rpcserver" - "context" "flag" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/logx" @@ -17,36 +15,12 @@ import ( "github.com/zeromicro/go-zero/zrpc" "google.golang.org/grpc" "google.golang.org/grpc/reflection" - "time" ) var configFile = flag.String("f", "adaptor/PCM-AI/PCM-MODELARTS/rpc/etc/pcmmodelarts.yaml", "the config file") func main() { - //flag.Parse() - // - //var c config.Config - //conf.MustLoad(*configFile, &c) - //// start log component - //logx.MustSetup(c.LogConf) - //ctx := svc.NewServiceContext(c) - //ctx.Cron.Start() - //s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) { - // modelarts.RegisterModelArtsServer(grpcServer, server.NewModelArtsServer(ctx)) - // - // if c.Mode == service.DevMode || c.Mode == service.TestMode { - // reflection.Register(grpcServer) - // } - //}) - // - ////rpc log - //s.AddUnaryInterceptors(rpcserver.LoggerInterceptor) - //defer s.Stop() - //logx.Infof("Starting rpc server at %s...\n", c.ListenOn) - //initCron(ctx) - //s.Start() - //-------------- flag.Parse() var bootstrapConfig commonConfig.BootstrapConfig @@ -88,126 +62,6 @@ func main() { defer s.Stop() logx.Infof("Starting rpc server at %s...\n", c.ListenOn) - initCron(ctx) + logic.InitCron(ctx) s.Start() } - -func initCron(svc *svc.ServiceContext) { - submitJobLogic := logic.NewCreateTrainingJobLogic(context.Background(), svc) - listLogic := logic.NewGetListTrainingJobsLogic(context.Background(), svc) - svc.Cron.AddFunc("*/5 * * * * ?", func() { - syncInfoReq := pcmcoreclient.SyncInfoReq{ - Kind: "ai", - ServiceName: "modelArts", - } - // 查询core端分发下来的任务列表 - infoList, err := queryCoreInfoList(svc) - if err != nil { - logx.Error(err) - return - } - // 提交任务 - submitJob(infoList, submitJobLogic) - // 查询运行中的任务列表同步信息 - listReq := modelarts.ListTrainingJobsreq{ - ProjectId: "0a62ffb0d48026c12fbfc011b8d23f0b", - Limit: 10, - OffSet: 0, - } - listJob, err := listLogic.GetListTrainingJobs(&listReq) - if err != nil { - logx.Error(err) - return - } - for index, _ := range infoList.AiInfoList { - for _, job := range listJob.Items { - if job.Metadata.Name == infoList.AiInfoList[index].Name { - infoList.AiInfoList[index].ProjectId = job.ProjectId - infoList.AiInfoList[index].JobId = job.Metadata.Id - createTime := time.Unix(int64(job.Metadata.CreateTime)/1000, 0) - infoList.AiInfoList[index].CreateTime = time.Time.String(createTime) - if job.Status.StartTime != 0 { - startTime := time.Unix(int64(job.Status.StartTime)/1000, 0) - infoList.AiInfoList[index].StartTime = time.Time.String(startTime) - } - infoList.AiInfoList[index].RunningTime = int64(job.Status.Duration) / 1000 - if job.Status.Phase == "Running" { - infoList.AiInfoList[index].Status = "Running" - } - if job.Status.Phase == "Completed" { - infoList.AiInfoList[index].Status = "Completed" - } - if job.Status.Phase == "Creating" { - infoList.AiInfoList[index].Status = "Creating" - } - if job.Status.Phase == "Pending" { - infoList.AiInfoList[index].Status = "Pending" - } - if job.Status.Phase == "Terminated" { - infoList.AiInfoList[index].Status = "Terminated" - } - if job.Status.Phase == "Terminating" { - infoList.AiInfoList[index].Status = "Terminating" - } - if job.Status.Phase == "Abnormal" { - infoList.AiInfoList[index].Status = "Abnormal" - } - - } - } - } - // 同步信息到core端 - if len(infoList.AiInfoList) != 0 { - syncInfoReq.AiInfoList = infoList.AiInfoList - svc.PcmCoreRpc.SyncInfo(context.Background(), &syncInfoReq) - } - }) -} - -func submitJob(infoList *pcmcoreclient.InfoListResp, submitJobLogic *logic.CreateTrainingJobLogic) { - for index, _ := range infoList.AiInfoList { - if infoList.AiInfoList[index].Status == "Saved" { - submitReq := modelarts.CreateTrainingJobReq{ - Kind: "job", - ProjectId: "0a62ffb0d48026c12fbfc011b8d23f0b", - Metadata: &modelarts.MetadataS{ - Name: infoList.AiInfoList[index].Name, - WorkspaceId: "0", - Description: "This is a ModelArts Demo Job", - }, - Algorithm: &modelarts.Algorithms{ - Command: "echo hello;sleep 100;echo hello;sleep 100;echo hello", - Engine: &modelarts.EngineCreateTraining{ - ImageUrl: "jcce/nginx:v1", - }, - }, - Spec: &modelarts.SpecsC{ - Resource: &modelarts.ResourceCreateTraining{ - FlavorId: "modelarts.p3.large.public.free", - NodeCount: 1, - }, - }, - } - jobResult, _ := submitJobLogic.CreateTrainingJob(&submitReq) - if jobResult.Code == 200 { - infoList.AiInfoList[index].Status = jobResult.Status.Phase - infoList.AiInfoList[index].ProjectId = jobResult.Metadata.Id - } else { - infoList.AiInfoList[index].Result = "Failed" - infoList.AiInfoList[index].Result = jobResult.Msg - } - } - } -} - -func queryCoreInfoList(svc *svc.ServiceContext) (*pcmcoreclient.InfoListResp, error) { - infoReq := pcmcoreclient.InfoListReq{ - Kind: "ai", - ServiceName: "modelArts", - } - infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) - if err != nil { - return nil, err - } - return infoList, nil -} diff --git a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml index 574d1a9..7445cc4 100644 --- a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml +++ b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml @@ -1,19 +1,16 @@ -Name: octopus.rpc -ListenOn: 0.0.0.0:2009 - -#Hosts: -# - 127.0.0.1:2379 -#Key: octopus.rpc -#User: root -#Pass: - -Username: "c2net2@pcl.ac.cn" -Password: "c2net123" -HanwujiUrl: "http://192.168.242.41:8001/" -SuiyuanUrl: "http://192.168.242.41:8000/" -SailingsiUrl: "http://192.168.242.41:8002/" -OctopusResouceSpec: "openaiserver/v1/resourcemanage/resourcespec?resourcePool=common-pool" -OctopusTokenUrl: "openaiserver/v1/authmanage/token" -CambriconMLU290: 256 #TOpsAtFp16 -EnflameT20: 128 #TOpsAtFp16 +NacosConfig: + DataId: pcm-octopus-rpc.yaml + Group: DEFAULT_GROUP + ServerConfigs: + - IpAddr: 10.101.15.7 + Port: 8848 +# - IpAddr: nacos-headless +# Port: 8848 + ClientConfig: + NamespaceId: test_octopus + TimeoutMs: 5000 + NotLoadCacheAtStart: true + LogDir: + CacheDir: + LogLevel: debug diff --git a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/common/tokenService.go b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/common/tokenService.go index ff10b85..655c9c3 100644 --- a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/common/tokenService.go +++ b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/common/tokenService.go @@ -28,14 +28,14 @@ func generateTokenMap() map[string]TokenTimePair { var tokenMap = make(map[string]TokenTimePair) octopusConfig := config.Cfg login := Login{ - Username: octopusConfig.OctopusConfig.Username, - Password: octopusConfig.OctopusConfig.Password, + Username: octopusConfig.Username, + Password: octopusConfig.Password, } jsonStr, _ := json.Marshal(login) urlMap := map[string]string{ - Hanwuji: octopusConfig.OctopusConfig.HanwujiUrl + octopusConfig.OctopusTokenUrl, - Suiyuan: octopusConfig.OctopusConfig.SuiyuanUrl + octopusConfig.OctopusTokenUrl, - Sailingsi: octopusConfig.OctopusConfig.SailingsiUrl + octopusConfig.OctopusTokenUrl, + Hanwuji: octopusConfig.HanwujiUrl + octopusConfig.OctopusTokenUrl, + Suiyuan: octopusConfig.SuiyuanUrl + octopusConfig.OctopusTokenUrl, + Sailingsi: octopusConfig.SailingsiUrl + octopusConfig.OctopusTokenUrl, } for k, v := range urlMap { token, expiredAt := generateToken(jsonStr, v) diff --git a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/config/config.go b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/config/config.go index 70bed31..25e1434 100644 --- a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/config/config.go +++ b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/config/config.go @@ -1,21 +1,45 @@ package config import ( + commonConfig "PCM/common/config" "flag" "github.com/zeromicro/go-zero/core/conf" + "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/zrpc" ) type Config struct { zrpc.RpcServerConf OctopusConfig + LogConf logx.LogConf } -var configFile = flag.String("o", "adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml", "the config file") +var configFile = flag.String("f", "adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml", "the config file") + var Cfg = getConfig() func getConfig() Config { + var bootstrapConfig commonConfig.BootstrapConfig + conf.MustLoad(*configFile, &bootstrapConfig) + + //解析业务配置 var c Config - conf.MustLoad(*configFile, &c) + nacosConfig := bootstrapConfig.NacosConfig + + serviceConfigContent := nacosConfig.InitConfig(func(data string) { + err := conf.LoadFromYamlBytes([]byte(data), &c) + if err != nil { + panic(err) + } + }) + err := conf.LoadFromYamlBytes([]byte(serviceConfigContent), &c) + if err != nil { + panic(err) + } + // start log component + logx.MustSetup(c.LogConf) + // 注册到nacos + nacosConfig.Discovery(&c.RpcServerConf) + return c } diff --git a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/logic/getcomputingpowerlogic.go b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/logic/getcomputingpowerlogic.go index 59ef8b9..e864380 100644 --- a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/logic/getcomputingpowerlogic.go +++ b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/logic/getcomputingpowerlogic.go @@ -32,9 +32,9 @@ func (l *GetComputingPowerLogic) GetComputingPower(in *octopus.ResourceReq) (*oc octopusConfig := config.Cfg urlMap := map[string]string{ - common.Hanwuji: octopusConfig.OctopusConfig.HanwujiUrl + octopusConfig.OctopusResouceSpec, - common.Suiyuan: octopusConfig.OctopusConfig.SuiyuanUrl + octopusConfig.OctopusResouceSpec, - common.Sailingsi: octopusConfig.OctopusConfig.SailingsiUrl + octopusConfig.OctopusResouceSpec, + common.Hanwuji: octopusConfig.HanwujiUrl + octopusConfig.OctopusResouceSpec, + common.Suiyuan: octopusConfig.SuiyuanUrl + octopusConfig.OctopusResouceSpec, + common.Sailingsi: octopusConfig.SailingsiUrl + octopusConfig.OctopusResouceSpec, } var computingPowerInTops int32 diff --git a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/octopus.go b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/octopus.go index b18f6f5..6db4106 100644 --- a/adaptor/PCM-AI/PCM-OCTOPUS/rpc/octopus.go +++ b/adaptor/PCM-AI/PCM-OCTOPUS/rpc/octopus.go @@ -3,27 +3,23 @@ package main import ( "PCM/common/interceptor/rpcserver" "flag" - "fmt" + "github.com/zeromicro/go-zero/core/logx" "PCM/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/config" "PCM/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/server" "PCM/adaptor/PCM-AI/PCM-OCTOPUS/rpc/internal/svc" "PCM/adaptor/PCM-AI/PCM-OCTOPUS/rpc/octopus" - "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/service" "github.com/zeromicro/go-zero/zrpc" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) -var configFile = flag.String("f", "adaptor/PCM-AI/PCM-OCTOPUS/rpc/etc/octopus.yaml", "the config file") - func main() { flag.Parse() - var c config.Config - conf.MustLoad(*configFile, &c) + c := config.Cfg ctx := svc.NewServiceContext(c) s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) { @@ -38,8 +34,7 @@ func main() { s.AddUnaryInterceptors(rpcserver.LoggerInterceptor) defer s.Stop() - - fmt.Printf("Starting rpc server at %s...\n", c.ListenOn) + logx.Infof("Starting rpc server at %s...\n", c.ListenOn) s.Start() } diff --git a/adaptor/PCM-CORE/api/desc/core/pcm-core.api b/adaptor/PCM-CORE/api/desc/core/pcm-core.api index e22107d..49845f2 100644 --- a/adaptor/PCM-CORE/api/desc/core/pcm-core.api +++ b/adaptor/PCM-CORE/api/desc/core/pcm-core.api @@ -259,3 +259,9 @@ type ( Ydyl bool `json:"ydyl"` } ) + +type ( + cpResp { + POpsAtFp16 float32 `json:"pOpsAtFp16"` + } +) diff --git a/adaptor/PCM-CORE/api/desc/pcm.api b/adaptor/PCM-CORE/api/desc/pcm.api index e0927e1..ceab439 100644 --- a/adaptor/PCM-CORE/api/desc/pcm.api +++ b/adaptor/PCM-CORE/api/desc/pcm.api @@ -40,6 +40,9 @@ service pcm { // @handler syncInfoHandler // get /core/syncInfo (syncInfoReq) returns (syncInfoResp) + + @handler getComputingPowerHandler + get /core/getComputingPower returns (cpResp) } //hpc二级接口 diff --git a/adaptor/PCM-CORE/api/etc/pcm.yaml b/adaptor/PCM-CORE/api/etc/pcm.yaml index 3869a1a..7fa3003 100644 --- a/adaptor/PCM-CORE/api/etc/pcm.yaml +++ b/adaptor/PCM-CORE/api/etc/pcm.yaml @@ -2,12 +2,14 @@ NacosConfig: DataId: pcm-core-api.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 ClientConfig: - NamespaceId: test + NamespaceId: test_octopus TimeoutMs: 5000 NotLoadCacheAtStart: true LogDir: diff --git a/adaptor/PCM-CORE/api/internal/handler/core/getcomputingpowerhandler.go b/adaptor/PCM-CORE/api/internal/handler/core/getcomputingpowerhandler.go new file mode 100644 index 0000000..4f6a50c --- /dev/null +++ b/adaptor/PCM-CORE/api/internal/handler/core/getcomputingpowerhandler.go @@ -0,0 +1,21 @@ +package core + +import ( + "net/http" + + "PCM/adaptor/PCM-CORE/api/internal/logic/core" + "PCM/adaptor/PCM-CORE/api/internal/svc" + "github.com/zeromicro/go-zero/rest/httpx" +) + +func GetComputingPowerHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + l := core.NewGetComputingPowerLogic(r.Context(), svcCtx) + resp, err := l.GetComputingPower() + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/adaptor/PCM-CORE/api/internal/handler/routes.go b/adaptor/PCM-CORE/api/internal/handler/routes.go index 141cca5..c72d5b2 100644 --- a/adaptor/PCM-CORE/api/internal/handler/routes.go +++ b/adaptor/PCM-CORE/api/internal/handler/routes.go @@ -45,6 +45,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/core/listRegion", Handler: core.ListRegionHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/core/getComputingPower", + Handler: core.GetComputingPowerHandler(serverCtx), + }, }, rest.WithPrefix("/pcm/v1"), ) diff --git a/adaptor/PCM-CORE/api/internal/logic/core/getcomputingpowerlogic.go b/adaptor/PCM-CORE/api/internal/logic/core/getcomputingpowerlogic.go new file mode 100644 index 0000000..738afbe --- /dev/null +++ b/adaptor/PCM-CORE/api/internal/logic/core/getcomputingpowerlogic.go @@ -0,0 +1,35 @@ +package core + +import ( + "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC" + "context" + + "PCM/adaptor/PCM-CORE/api/internal/svc" + "PCM/adaptor/PCM-CORE/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetComputingPowerLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetComputingPowerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetComputingPowerLogic { + return &GetComputingPowerLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetComputingPowerLogic) GetComputingPower() (resp *types.CpResp, err error) { + + apiResp := types.CpResp{} + req := &hpcAC.ResourceReq{} + cpResp, err := l.svcCtx.ACRpc.GetComputingPower(l.ctx, req) + + apiResp.POpsAtFp16 = cpResp.POpsAtFp16 + return &apiResp, nil +} diff --git a/adaptor/PCM-CORE/api/internal/logic/core/listcenterlogic.go b/adaptor/PCM-CORE/api/internal/logic/core/listcenterlogic.go index aef88fb..200231e 100644 --- a/adaptor/PCM-CORE/api/internal/logic/core/listcenterlogic.go +++ b/adaptor/PCM-CORE/api/internal/logic/core/listcenterlogic.go @@ -29,7 +29,7 @@ func (l *ListCenterLogic) ListCenter() (*types.ListCenterResp, error) { //var centersModel []model.ComputeCenter var resp types.ListCenterResp - centersModel, _ = l.svcCtx.CenterOverviewModel.FindAll(l.ctx) + l.svcCtx.DbEngin.Raw("select cc.*, ac.cluster_num, ac.node_num, ac.cpu_num, ac.gpu_num, ac.managed_flops, ac.unmanaged_flops, ac.managed_storage, ac.unmanaged_storage, hc.cluster_num, c.node_num, hc.cpu_num, hc.gpu_num, hc.managed_flops, hc.unmanaged_flops, hc.managed_storage, hc.unmanaged_storage, c.cluster_num, c.node_num, c.cpu_num, c.gpu_num, c.managed_flops, c.unmanaged_flops, c.managed_storage, c.unmanaged_storage, ct.edwc, ct.ydyl\nfrom compute_center cc\nleft join ai_center ac on cc.id = ac.id\nleft join hpc_center hc on cc.id = hc.id\nleft join cloud_center c on cc.id = c.id\nleft join center_tag ct on cc.id = ct.id").Scan(¢ersModel) var centerModelV = *centersModel diff --git a/adaptor/PCM-CORE/api/internal/logic/core/scheduletasklogic.go b/adaptor/PCM-CORE/api/internal/logic/core/scheduletasklogic.go index d9fdc28..9719e57 100644 --- a/adaptor/PCM-CORE/api/internal/logic/core/scheduletasklogic.go +++ b/adaptor/PCM-CORE/api/internal/logic/core/scheduletasklogic.go @@ -1,14 +1,10 @@ package core import ( - "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/modelartsclient" "PCM/adaptor/PCM-CORE/api/internal/svc" "PCM/adaptor/PCM-CORE/api/internal/types" "PCM/adaptor/PCM-CORE/model" - "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient" - "PCM/common/tool" "context" - "database/sql" "encoding/json" "github.com/zeromicro/go-zero/core/logx" appv1 "k8s.io/api/apps/v1" @@ -58,12 +54,12 @@ func (l *ScheduleTaskLogic) ScheduleTask(req *types.ScheduleTaskReq) (resp *type } // save the task in mysql and return id - result, err := l.svcCtx.TaskModel.Insert(l.ctx, &task) - if err != nil { - return nil, err + tx := l.svcCtx.DbEngin.Create(&task) + + if tx.Error != nil { + return nil, tx.Error } - id, _ := result.LastInsertId() - req.TaskId = id + req.TaskId = task.Id reqMessage, err := json.Marshal(req) if err != nil { return nil, err @@ -81,7 +77,7 @@ func (l *ScheduleTaskLogic) ScheduleTask(req *types.ScheduleTaskReq) (resp *type } func (l *ScheduleTaskLogic) checkSubmitReq(req *types.ScheduleTaskReq) string { - var rows *sql.Rows + //var rows *sql.Rows switch req.ServiceName { case "kubeNative": //bytes, err := json.Marshal(req.Metadata) @@ -100,20 +96,20 @@ func (l *ScheduleTaskLogic) checkSubmitReq(req *types.ScheduleTaskReq) string { // } // } //} - case "modelArts": - var modelArtsReq modelartsclient.CreateTrainingJobReq - tool.Convert(req.Metadata, &modelArtsReq) - rows, _ = l.svcCtx.Db.Query("select id from ai where project_id = ? and name = ?", modelArtsReq.ProjectId, modelArtsReq.Metadata.Name) - if rows != nil && rows.Next() { - return "data already exists." - } - case "ac": - var acReq *hpcacclient.SubmitJobReq - tool.Convert(req.Metadata, &acReq) - rows, _ = l.svcCtx.Db.Query("select id from hpc where name = ?", acReq.Appname) - if rows != nil && rows.Next() { - return "data already exists." - } + //case "modelArts": + // var modelArtsReq modelartsclient.CreateTrainingJobReq + // tool.Convert(req.Metadata, &modelArtsReq) + // rows, _ = l.svcCtx.Db.Query("select id from ai where project_id = ? and name = ?", modelArtsReq.ProjectId, modelArtsReq.Metadata.Name) + // if rows != nil && rows.Next() { + // return "data already exists." + // } + //case "ac": + // var acReq *hpcacclient.SubmitJobReq + // tool.Convert(req.Metadata, &acReq) + // rows, _ = l.svcCtx.Db.Query("select id from hpc where name = ?", acReq.Appname) + // if rows != nil && rows.Next() { + // return "data already exists." + // } } return "" diff --git a/adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go b/adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go index 76072b6..423306f 100644 --- a/adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go +++ b/adaptor/PCM-CORE/api/internal/logic/core/tasklistlogic.go @@ -27,45 +27,18 @@ func NewTaskListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *TaskList func (l *TaskListLogic) TaskList() (resp *types.TaskListResp, err error) { resp = &types.TaskListResp{} // 查询总运行时长 - runningTimeRows, err := l.svcCtx.Db.Query("select sum(running_time)/3600 as running_time from (select sum(running_time) as running_time from hpc union all select sum(running_time) as running_time from cloud union all select sum(running_time) as running_time from ai) runtime") - if err != nil { - logx.Error(err) - return nil, err - } - for runningTimeRows.Next() { - runningTimeRows.Scan(&resp.Data.TotalRunTime) + tx := l.svcCtx.DbEngin.Raw("select sum(running_time)/3600 as total_run_time from (select sum(running_time) as running_time from hpc union all select sum(running_time) as running_time from cloud union all select sum(running_time) as running_time from ai) runtime").Scan(&resp.Data.TotalRunTime) + if tx.Error != nil { + } // 查询任务数据 var tasks []model.Task - err = l.svcCtx.SqlConn.QueryRows(&tasks, "select * from task where deleted_flag = 0") - if err != nil { + tx = l.svcCtx.DbEngin.Find(&tasks) + if tx.Error != nil { logx.Error(err) - return nil, err - } - // 查询超算数据 - var hpcInfos []model.Hpc - err = l.svcCtx.SqlConn.QueryRows(&hpcInfos, "select * from hpc where deleted_flag = 0") - if err != nil { - logx.Error(err) - return nil, err - } - // 查询智算数据 - var aiInfos []model.Ai - err = l.svcCtx.SqlConn.QueryRows(&aiInfos, "select * from ai where deleted_flag = 0") - if err != nil { - logx.Error(err) - return nil, err - } - // 查询云算数据 - var cloudInfos []model.Cloud - err = l.svcCtx.SqlConn.QueryRows(&cloudInfos, "select * from cloud where deleted_flag = 0") - - if err != nil { - logx.Error(err) - return nil, err + return nil, tx.Error } for _, task := range tasks { - resp.Data.Tasks = append(resp.Data.Tasks, types.Task{ ServiceName: task.ServiceName, Name: task.Name, @@ -75,13 +48,11 @@ func (l *TaskListLogic) TaskList() (resp *types.TaskListResp, err error) { }) } // 运行卡时数 - rows, err := l.svcCtx.Db.Query("select SUM(running_time * card_count)/3600 from hpc where deleted_flag = 0") - if err != nil { - return nil, err - } - for rows.Next() { - rows.Scan(&resp.Data.CardTime) + tx = l.svcCtx.DbEngin.Model(&model.Hpc{}).Select("(CASE WHEN SUM(running_time * card_count)/3600 IS NULL THEN 0 ELSE SUM(running_time * card_count)/3600 END )as cardTime").Find(&resp.Data.CardTime) + if tx.Error != nil { + return nil, tx.Error } + // 运行任务合计数 resp.Data.TotalCount = len(tasks) resp.Code = 200 diff --git a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleAi.go b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleAi.go index 9e35c1a..124b223 100644 --- a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleAi.go +++ b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleAi.go @@ -3,7 +3,7 @@ package kq import ( "PCM/adaptor/PCM-CORE/api/internal/svc" "PCM/adaptor/PCM-CORE/api/internal/types" - "PCM/common/param" + "PCM/adaptor/PCM-CORE/model" "PCM/common/tool" "context" "encoding/json" @@ -30,13 +30,13 @@ func (l *ScheduleAiMq) Consume(_, val string) error { // 接受消息 var req *types.ScheduleTaskReq json.Unmarshal([]byte(val), &req) - var aiBaseList []param.AiBase - tool.Convert(req.Metadata, &aiBaseList) - for index, _ := range aiBaseList { - aiBaseList[index].TaskId = req.TaskId - aiBaseList[index].Status = "Saved" + var aiList []model.Ai + tool.Convert(req.Metadata, &aiList) + for index, _ := range aiList { + aiList[index].TaskId = req.TaskId + aiList[index].Status = "Saved" // 解析超算信息以yaml形式存储到数据库中 - jsonBytes, err := json.Marshal(aiBaseList[index]) + jsonBytes, err := json.Marshal(aiList[index]) if err != nil { return err } @@ -44,12 +44,12 @@ func (l *ScheduleAiMq) Consume(_, val string) error { if err != nil { return err } - aiBaseList[index].YamlString = string(bytes) + aiList[index].YamlString = string(bytes) } // 存储数据 - _, err := l.svcCtx.Db.NamedExec("insert into ai (task_id,service_name,name,status,project_id) values (:task_id,:service_name,:name,:status,:project_id)", aiBaseList) - if err != nil { - return err + tx := l.svcCtx.DbEngin.Create(aiList) + if tx.Error != nil { + return tx.Error } return nil } diff --git a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleCloud.go b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleCloud.go index 4f0039d..86bea99 100644 --- a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleCloud.go +++ b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleCloud.go @@ -7,6 +7,7 @@ import ( "PCM/common/tool" "context" "encoding/json" + "github.com/zeromicro/go-zero/core/logx" ) /* @@ -26,17 +27,11 @@ func NewScheduleCloudMq(ctx context.Context, svcCtx *svc.ServiceContext) *Schedu } func (l *ScheduleCloudMq) Consume(_, val string) error { - var req *types.ScheduleTaskReq json.Unmarshal([]byte(val), &req) // 构建提交作业到云算的结构体 var yamlArray []interface{} - bytes, err := json.Marshal(req.Metadata) - - json.Unmarshal(bytes, &yamlArray) - if err != nil { - return err - } + tool.Convert(req.Metadata, &yamlArray) var clouds []model.Cloud for _, yaml := range yamlArray { bytes, err := json.Marshal(yaml) @@ -49,9 +44,10 @@ func (l *ScheduleCloudMq) Consume(_, val string) error { } // 存储数据 - _, err = l.svcCtx.Db.NamedExec("insert into cloud (task_id,kind,namespace,name,api_version,status,service_name,yaml_string) values (:task_id,:kind,:namespace,:name,:api_version,:status,:service_name,:yaml_string)", clouds) - if err != nil { - return err + tx := l.svcCtx.DbEngin.Create(&clouds) + if tx.Error != nil { + logx.Error(tx.Error) + return tx.Error } return nil diff --git a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go index bb412bb..a4a756f 100644 --- a/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go +++ b/adaptor/PCM-CORE/api/internal/mqs/kq/ScheduleHpc.go @@ -3,7 +3,7 @@ package kq import ( "PCM/adaptor/PCM-CORE/api/internal/svc" "PCM/adaptor/PCM-CORE/api/internal/types" - "PCM/common/param" + "PCM/adaptor/PCM-CORE/model" "PCM/common/tool" "context" "encoding/json" @@ -30,13 +30,13 @@ func (l *ScheduleHpcMq) Consume(_, val string) error { // 接受消息 var req *types.ScheduleTaskReq json.Unmarshal([]byte(val), &req) - var hpcBaseList []param.HpcBase - tool.Convert(req.Metadata, &hpcBaseList) - for index, _ := range hpcBaseList { - hpcBaseList[index].TaskId = req.TaskId - hpcBaseList[index].Status = "Saved" + var hpcList []model.Hpc + tool.Convert(req.Metadata, &hpcList) + for index, _ := range hpcList { + hpcList[index].TaskId = req.TaskId + hpcList[index].Status = "Saved" // 解析超算信息以yaml形式存储到数据库中 - jsonBytes, err := json.Marshal(hpcBaseList[index]) + jsonBytes, err := json.Marshal(hpcList[index]) if err != nil { return err } @@ -44,12 +44,12 @@ func (l *ScheduleHpcMq) Consume(_, val string) error { if err != nil { return err } - hpcBaseList[index].YamlString = string(bytes) + hpcList[index].YamlString = string(bytes) } // 存储数据 - _, err := l.svcCtx.Db.NamedExec("insert into hpc (task_id,service_name,card_count,name,work_dir,wall_time,status) values (:task_id,:service_name,:card_count,:name,:work_dir,:wall_time,:status)", hpcBaseList) - if err != nil { - return err + tx := l.svcCtx.DbEngin.Create(hpcList) + if tx.Error != nil { + return tx.Error } return nil } diff --git a/adaptor/PCM-CORE/api/internal/svc/servicecontext.go b/adaptor/PCM-CORE/api/internal/svc/servicecontext.go index 478b6cf..98aafb3 100644 --- a/adaptor/PCM-CORE/api/internal/svc/servicecontext.go +++ b/adaptor/PCM-CORE/api/internal/svc/servicecontext.go @@ -3,14 +3,11 @@ package svc import ( "PCM/adaptor/PCM-AI/PCM-MODELARTS/rpc/modelartsclient" "PCM/adaptor/PCM-CORE/api/internal/config" - "PCM/adaptor/PCM-CORE/model" "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient" "PCM/adaptor/PCM-HPC/PCM-TH/rpc/hpcthclient" "github.com/go-redis/redis/v8" - sql "github.com/jmoiron/sqlx" "github.com/robfig/cron/v3" "github.com/zeromicro/go-queue/kq" - "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/zrpc" "gorm.io/driver/mysql" "gorm.io/gorm" @@ -19,14 +16,10 @@ import ( type ServiceContext struct { Config config.Config - ScheduleHpcClient *kq.Pusher RedisClient *redis.Client + ScheduleHpcClient *kq.Pusher ScheduleCloudClient *kq.Pusher ScheduleAiClient *kq.Pusher - TaskModel model.TaskModel - CenterOverviewModel model.CenterOverviewModel - SqlConn sqlx.SqlConn - Db *sql.DB Cron *cron.Cron ModelArtsRpc modelartsclient.ModelArts DbEngin *gorm.DB @@ -35,8 +28,6 @@ type ServiceContext struct { } func NewServiceContext(c config.Config) *ServiceContext { - sqlConn := sqlx.NewMysql(c.DB.DataSource) - db, _ := sql.Open("mysql", c.DB.DataSource) //启动Gorm支持 dbEngin, _ := gorm.Open(mysql.Open(c.DB.DataSource), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ @@ -47,14 +38,10 @@ func NewServiceContext(c config.Config) *ServiceContext { Cron: cron.New(cron.WithSeconds()), DbEngin: dbEngin, Config: c, - Db: db, RedisClient: redis.NewClient(&redis.Options{ Addr: c.Redis.Host, Password: c.Redis.Pass, }), - SqlConn: sqlx.NewMysql(c.DB.DataSource), - TaskModel: model.NewTaskModel(sqlConn, c.Cache), - CenterOverviewModel: model.NewCenterOverviewModel(sqlConn, c.Cache), ScheduleHpcClient: kq.NewPusher(c.KqProducerConf.Brokers, c.KqProducerConf.HpcTopic), ScheduleCloudClient: kq.NewPusher(c.KqProducerConf.Brokers, c.KqProducerConf.CloudTopic), ScheduleAiClient: kq.NewPusher(c.KqProducerConf.Brokers, c.KqProducerConf.AiTopic), diff --git a/adaptor/PCM-CORE/api/internal/types/types.go b/adaptor/PCM-CORE/api/internal/types/types.go index c925f10..01a5175 100644 --- a/adaptor/PCM-CORE/api/internal/types/types.go +++ b/adaptor/PCM-CORE/api/internal/types/types.go @@ -241,6 +241,10 @@ type Center struct { Ydyl bool `json:"ydyl"` } +type CpResp struct { + POpsAtFp16 float32 `json:"pOpsAtFp16"` +} + type Job struct { SlurmVersion string `json:"slurmVersion"` Account string `json:"account"` diff --git a/adaptor/PCM-CORE/api/pcm.go b/adaptor/PCM-CORE/api/pcm.go index 52221b9..1562737 100644 --- a/adaptor/PCM-CORE/api/pcm.go +++ b/adaptor/PCM-CORE/api/pcm.go @@ -5,58 +5,19 @@ import ( "PCM/adaptor/PCM-CORE/api/internal/handler" kqMq "PCM/adaptor/PCM-CORE/api/internal/mqs/kq" "PCM/adaptor/PCM-CORE/api/internal/svc" - "PCM/adaptor/PCM-CORE/model" commonConfig "PCM/common/config" "context" "flag" - "github.com/go-redis/redis/v8" "github.com/zeromicro/go-queue/kq" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/service" - "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/rest" ) var configFile = flag.String("f", "adaptor/PCM-CORE/api/etc/pcm.yaml", "the config file") func main() { - //flag.Parse() - // - //var c config.Config - //conf.MustLoad(*configFile, &c) - // - //serviceGroup := service.NewServiceGroup() - //defer serviceGroup.Stop() - // - //server := rest.MustNewServer(c.RestConf) - // - //ctx := svc.NewServiceContext(c) - //// start log component - //logx.MustSetup(c.LogConf) - //ctx.Cron.Start() - //handler.RegisterHandlers(server, ctx) - // - //serviceGroup.Add(server) - //services := []service.Service{ - // //Listening for changes in consumption flow status - // kq.MustNewQueue(c.HpcConsumerConf, kqMq.NewScheduleHpcMq(context.Background(), ctx)), - // kq.MustNewQueue(c.CloudConsumerConf, kqMq.NewScheduleCloudMq(context.Background(), ctx)), - // kq.MustNewQueue(c.AiConsumerConf, kqMq.NewScheduleAiMq(context.Background(), ctx)), - // - // //..... - //} - //for _, mq := range services { - // serviceGroup.Add(mq) - //} - // - //// 初始化数据到缓存 - //initRedisData(ctx.SqlConn, ctx.RedisClient) - //logx.Infof("Starting server at %s:%d...\n", c.Host, c.Port) - //serviceGroup.Start() - - //---------------------- - flag.Parse() var bootstrapConfig commonConfig.BootstrapConfig @@ -104,23 +65,7 @@ func main() { serviceGroup.Add(mq) } - // 初始化数据到缓存 - initRedisData(ctx.SqlConn, ctx.RedisClient) logx.Infof("Starting server at %s:%d...\n", c.Host, c.Port) serviceGroup.Start() } - -func initRedisData(sql sqlx.SqlConn, redisClient *redis.Client) { - // 查询出字典数据列表 - var dictList []model.Dict - err := sql.QueryRows(&dictList, "select * from dict") - if err != nil { - return - } - - for _, dict := range dictList { - redisClient.Set(context.Background(), dict.DictValue, dict.DictCode, 0) - } - -} diff --git a/adaptor/PCM-CORE/model/aimodel_gen.go b/adaptor/PCM-CORE/model/aimodel_gen.go index b42e351..9da02e6 100644 --- a/adaptor/PCM-CORE/model/aimodel_gen.go +++ b/adaptor/PCM-CORE/model/aimodel_gen.go @@ -7,7 +7,6 @@ import ( "database/sql" "fmt" "strings" - "time" "github.com/zeromicro/go-zero/core/stores/builder" "github.com/zeromicro/go-zero/core/stores/sqlc" @@ -37,22 +36,22 @@ type ( } Ai struct { - Id int64 `db:"id"` // id - TaskId int64 `db:"task_id"` // 任务id - ProjectId string `db:"project_id"` // 项目id - Name string `db:"name"` // 名称 - Status string `db:"status"` // 状态 - StartTime string `db:"start_time"` // 开始时间 - RunningTime string `db:"running_time"` // 运行时间 - CreatedBy string `db:"created_by"` // 创建人 - CreatedTime time.Time `db:"created_time"` // 创建时间 - UpdatedBy string `db:"updated_by"` // 更新人 - UpdatedTime time.Time `db:"updated_time"` // 更新时间 - DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) - ServiceName string `db:"service_name"` - Result sql.NullString `db:"result"` - YamlString string `db:"yaml_string"` - JobId string `db:"job_id"` + Id int64 `db:"id"` // id + TaskId int64 `db:"task_id"` // 任务id + ProjectId string `db:"project_id"` // 项目id + Name string `db:"name"` // 名称 + Status string `db:"status"` // 状态 + StartTime string `db:"start_time"` // 开始时间 + RunningTime string `db:"running_time"` // 运行时间 + CreatedBy string `db:"created_by"` // 创建人 + CreatedTime sql.NullTime `db:"created_time"` // 创建时间 + UpdatedBy string `db:"updated_by"` // 更新人 + UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间 + DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) + ServiceName string `db:"service_name"` + Result string `db:"result"` + YamlString string `db:"yaml_string"` + JobId string `db:"job_id"` } ) diff --git a/adaptor/PCM-CORE/model/cloudmodel_gen.go b/adaptor/PCM-CORE/model/cloudmodel_gen.go index 0a665f9..2d6b5e0 100644 --- a/adaptor/PCM-CORE/model/cloudmodel_gen.go +++ b/adaptor/PCM-CORE/model/cloudmodel_gen.go @@ -7,7 +7,6 @@ import ( "database/sql" "fmt" "strings" - "time" "github.com/zeromicro/go-zero/core/stores/builder" "github.com/zeromicro/go-zero/core/stores/sqlc" @@ -37,23 +36,23 @@ type ( } Cloud struct { - Id int64 `db:"id"` // id - TaskId int64 `db:"task_id"` // 任务id - ApiVersion string `db:"api_version"` - Name string `db:"name"` // 名称 - Namespace string `db:"namespace"` // 命名空间 - Kind string `db:"kind"` // 种类 - Status string `db:"status"` // 状态 - StartTime string `db:"start_time"` // 开始时间 - RunningTime int64 `db:"running_time"` // 运行时长 - CreatedBy int64 `db:"created_by"` // 创建人 - CreatedTime time.Time `db:"created_time"` // 创建时间 - UpdatedBy int64 `db:"updated_by"` // 更新人 - UpdatedTime time.Time `db:"updated_time"` // 更新时间 - DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) - ServiceName string `db:"service_name"` - YamlString string `db:"yaml_string"` - Result sql.NullString `db:"result"` + Id int64 `db:"id"` // id + TaskId int64 `db:"task_id"` // 任务id + ApiVersion string `db:"api_version"` + Name string `db:"name"` // 名称 + Namespace string `db:"namespace"` // 命名空间 + Kind string `db:"kind"` // 种类 + Status string `db:"status"` // 状态 + StartTime string `db:"start_time"` // 开始时间 + RunningTime int64 `db:"running_time"` // 运行时长 + CreatedBy int64 `db:"created_by"` // 创建人 + CreatedTime sql.NullTime `db:"created_time"` // 创建时间 + UpdatedBy int64 `db:"updated_by"` // 更新人 + UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间 + DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) + ServiceName string `db:"service_name"` + YamlString string `db:"yaml_string"` + Result string `db:"result"` } ) diff --git a/adaptor/PCM-CORE/model/hpcmodel_gen.go b/adaptor/PCM-CORE/model/hpcmodel_gen.go index 31b12ba..68babe4 100644 --- a/adaptor/PCM-CORE/model/hpcmodel_gen.go +++ b/adaptor/PCM-CORE/model/hpcmodel_gen.go @@ -7,7 +7,6 @@ import ( "database/sql" "fmt" "strings" - "time" "github.com/zeromicro/go-zero/core/stores/builder" "github.com/zeromicro/go-zero/core/stores/sqlc" @@ -37,24 +36,24 @@ type ( } Hpc struct { - Id int64 `db:"id"` // id - TaskId sql.NullInt64 `db:"task_id"` // 任务id - JobId sql.NullString `db:"job_id"` // 作业id - ServiceName sql.NullString `db:"service_name"` // 服务名称 - Name sql.NullString `db:"name"` // 名称 - Status sql.NullString `db:"status"` // 状态 - StartTime sql.NullString `db:"start_time"` // 开始时间 - RunningTime sql.NullInt64 `db:"running_time"` // 运行时间 - CardCount sql.NullInt64 `db:"card_count"` // 卡数 - CreatedBy sql.NullInt64 `db:"created_by"` // 创建人 - CreatedTime time.Time `db:"created_time"` // 创建时间 - UpdatedBy sql.NullInt64 `db:"updated_by"` // 更新人 - UpdatedTime time.Time `db:"updated_time"` // 更新时间 - DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) - WorkDir sql.NullString `db:"work_dir"` - WallTime sql.NullString `db:"wall_time"` - Result sql.NullString `db:"result"` - YamlString sql.NullString `db:"yaml_string"` + Id int64 `db:"id"` // id + TaskId int64 `db:"task_id"` // 任务id + JobId string `db:"job_id"` // 作业id + ServiceName string `db:"service_name"` // 服务名称 + Name string `db:"name"` // 名称 + Status string `db:"status"` // 状态 + StartTime string `db:"start_time"` // 开始时间 + RunningTime int64 `db:"running_time"` // 运行时间 + CardCount int64 `db:"card_count"` // 卡数 + CreatedBy int64 `db:"created_by"` // 创建人 + CreatedTime sql.NullTime `db:"created_time"` // 创建时间 + UpdatedBy int64 `db:"updated_by"` // 更新人 + UpdatedTime sql.NullTime `db:"updated_time"` // 更新时间 + DeletedFlag int64 `db:"deleted_flag"` // 是否删除(0-否,1-是) + WorkDir string `db:"work_dir"` + WallTime string `db:"wall_time"` + Result string `db:"result"` + YamlString string `db:"yaml_string"` } ) diff --git a/adaptor/PCM-CORE/rpc/etc/pcmcore.yaml b/adaptor/PCM-CORE/rpc/etc/pcmcore.yaml index 8a5b236..730026d 100644 --- a/adaptor/PCM-CORE/rpc/etc/pcmcore.yaml +++ b/adaptor/PCM-CORE/rpc/etc/pcmcore.yaml @@ -2,7 +2,9 @@ NacosConfig: DataId: pcm-core-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 diff --git a/adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go b/adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go index 5f50545..b506251 100644 --- a/adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go +++ b/adaptor/PCM-CORE/rpc/internal/logic/infolistlogic.go @@ -4,6 +4,7 @@ import ( "PCM/adaptor/PCM-CORE/model" "PCM/adaptor/PCM-CORE/rpc/internal/svc" "PCM/adaptor/PCM-CORE/rpc/pcmCore" + "PCM/common/tool" "context" "github.com/zeromicro/go-zero/core/logx" @@ -29,59 +30,32 @@ func (l *InfoListLogic) InfoList(in *pcmCore.InfoListReq) (*pcmCore.InfoListResp // 查询云智超中的数据列表 switch in.Kind { case "hpc": - rows, err := l.svcCtx.Db.Query("select task_id,name,status,work_dir,wall_time from hpc where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName) - if err != nil { - return nil, err + var hpcModelList []model.Hpc + tx := l.svcCtx.DbEngin.Where("service_name = ? AND status NOT IN ?", in.ServiceName, []string{"Succeed", "Completed"}).Find(&hpcModelList) + if tx.Error != nil { + return nil, tx.Error } - for rows.Next() { - var hpc model.Hpc - rows.Scan(&hpc.TaskId, &hpc.Name, &hpc.Status, &hpc.WorkDir, &hpc.WallTime) - hpcInfo := pcmCore.HpcInfo{ - TaskId: hpc.TaskId.Int64, - Name: hpc.Name.String, - Status: hpc.Status.String, - WorkDir: hpc.WorkDir.String, - WallTime: hpc.WallTime.String, - } - result.HpcInfoList = append(result.HpcInfoList, &hpcInfo) - } - + var hpcInfoList []*pcmCore.HpcInfo + tool.Convert(hpcModelList, &hpcInfoList) + result.HpcInfoList = hpcInfoList case "cloud": - rows, err := l.svcCtx.Db.Query("select task_id,namespace,name,status,yaml_string from cloud where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName) - if err != nil { - return nil, err - } - for rows.Next() { - var cloud model.Cloud - rows.Scan(&cloud.TaskId, &cloud.Namespace, &cloud.Name, &cloud.Status, &cloud.YamlString) - var cloudInfo pcmCore.CloudInfo - cloudInfo = pcmCore.CloudInfo{ - TaskId: cloud.TaskId, - Namespace: cloud.Namespace, - Name: cloud.Name, - Status: cloud.Status, - YamlString: cloud.YamlString, - } - result.CloudInfoList = append(result.CloudInfoList, &cloudInfo) + var cloudModelList []model.Cloud + tx := l.svcCtx.DbEngin.Where("service_name = ? AND status NOT IN ?", in.ServiceName, []string{"Succeed", "Completed"}).Find(&cloudModelList) + if tx.Error != nil { + return nil, tx.Error } + var cloudInfoList []*pcmCore.CloudInfo + tool.Convert(cloudModelList, &cloudInfoList) + result.CloudInfoList = cloudInfoList case "ai": - rows, err := l.svcCtx.Db.Query("select task_id,name,status,project_id,job_id from ai where service_name = ? and status not in ('Succeed', 'Completed')", in.ServiceName) - if err != nil { - return nil, err - } - for rows.Next() { - var ai model.Ai - rows.Scan(&ai.TaskId, &ai.Name, &ai.Status, &ai.ProjectId, &ai.JobId) - var aiInfo pcmCore.AiInfo - aiInfo = pcmCore.AiInfo{ - TaskId: ai.TaskId, - ProjectId: ai.ProjectId, - Name: ai.Name, - Status: ai.Status, - JobId: ai.JobId, - } - result.AiInfoList = append(result.AiInfoList, &aiInfo) + var aiModelList []model.AiModel + tx := l.svcCtx.DbEngin.Where("service_name = ? AND status NOT IN ?", in.ServiceName, []string{"Succeed", "Completed"}).Find(&aiModelList) + if tx.Error != nil { + return nil, tx.Error } + var aiInfoList []*pcmCore.AiInfo + tool.Convert(aiModelList, &aiInfoList) + result.AiInfoList = aiInfoList } return &result, nil } diff --git a/adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go b/adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go index 573755f..58e2a4b 100644 --- a/adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go +++ b/adaptor/PCM-CORE/rpc/internal/logic/syncinfologic.go @@ -33,24 +33,24 @@ func NewSyncInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SyncInfo // SyncInfo Synchronous data information func (l *SyncInfoLogic) SyncInfo(in *pcmCore.SyncInfoReq) (*pcmCore.SyncInfoResp, error) { - conn, err := l.svcCtx.Db.Begin() - if err != nil { - return nil, err + db := l.svcCtx.DbEngin.Begin() + if db.Error != nil { + return nil, db.Error } switch in.Kind { case "cloud": for _, cloudInfo := range in.CloudInfoList { - _, err = conn.Exec("update cloud set status = ?,start_time = ?,running_time = ? where service_name = ? and task_id = ? and namespace = ? and name = ?", + db.Exec("update cloud set status = ?,start_time = ?,running_time = ? where service_name = ? and task_id = ? and namespace = ? and name = ?", cloudInfo.Status, cloudInfo.StartTime, cloudInfo.RunningTime, in.ServiceName, cloudInfo.TaskId, cloudInfo.Namespace, cloudInfo.Name) } case "hpc": for _, hpcInfo := range in.HpcInfoList { - _, err = conn.Exec("update hpc set status = ?,start_time = ?,running_time = ?,job_id = ? where service_name = ? and task_id = ? and name = ?", + db.Exec("update hpc set status = ?,start_time = ?,running_time = ?,job_id = ? where service_name = ? and task_id = ? and name = ?", hpcInfo.Status, hpcInfo.StartTime, hpcInfo.RunningTime, hpcInfo.JobId, in.ServiceName, hpcInfo.TaskId, hpcInfo.Name) } case "ai": for _, aiInfo := range in.AiInfoList { - _, err = conn.Exec("update ai set status = ?,start_time = ?,running_time = ?,project_id = ?,job_id = ?,created_time = ? where service_name = ? and task_id = ? and name = ?", + db.Exec("update ai set status = ?,start_time = ?,running_time = ?,project_id = ?,job_id = ?,created_time = ? where service_name = ? and task_id = ? and name = ?", aiInfo.Status, aiInfo.StartTime, aiInfo.RunningTime, aiInfo.ProjectId, aiInfo.JobId, aiInfo.CreateTime, in.ServiceName, aiInfo.TaskId, aiInfo.Name) } } @@ -58,13 +58,13 @@ func (l *SyncInfoLogic) SyncInfo(in *pcmCore.SyncInfoReq) (*pcmCore.SyncInfoResp // 执行回滚或者提交操作 defer func() { if p := recover(); p != nil { - conn.Rollback() + db.Rollback() logx.Error(p) - } else if err != nil { + } else if db.Error != nil { logx.Info("rollback") - conn.Rollback() + db.Rollback() } else { - err = conn.Commit() + db = db.Commit() logx.Info("commit success") } }() diff --git a/adaptor/PCM-CORE/rpc/internal/svc/servicecontext.go b/adaptor/PCM-CORE/rpc/internal/svc/servicecontext.go index 594985b..111a9dd 100644 --- a/adaptor/PCM-CORE/rpc/internal/svc/servicecontext.go +++ b/adaptor/PCM-CORE/rpc/internal/svc/servicecontext.go @@ -3,18 +3,27 @@ package svc import ( "PCM/adaptor/PCM-CORE/rpc/internal/config" _ "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" ) type ServiceContext struct { - Config config.Config - Db *sqlx.DB + Config config.Config + DbEngin *gorm.DB } func NewServiceContext(c config.Config) *ServiceContext { - db, _ := sqlx.Open("mysql", c.DB.DataSource) + //启动Gorm支持 + dbEngin, _ := gorm.Open(mysql.Open(c.DB.DataSource), &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `t_user` + }, + Logger: logger.Default.LogMode(logger.Info), + }) return &ServiceContext{ - Config: c, - Db: db, + Config: c, + DbEngin: dbEngin, } } diff --git a/adaptor/PCM-CORE/rpc/pcmcore.go b/adaptor/PCM-CORE/rpc/pcmcore.go index 9682c46..8ccd688 100644 --- a/adaptor/PCM-CORE/rpc/pcmcore.go +++ b/adaptor/PCM-CORE/rpc/pcmcore.go @@ -19,29 +19,6 @@ import ( var configFile = flag.String("f", "adaptor/PCM-CORE/rpc/etc/pcmcore.yaml", "the config file") func main() { - //flag.Parse() - // - //var c config.Config - //conf.MustLoad(*configFile, &c) - //ctx := svc.NewServiceContext(c) - // - //s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) { - // pcmCore.RegisterPcmCoreServer(grpcServer, server.NewPcmCoreServer(ctx)) - // - // if c.Mode == service.DevMode || c.Mode == service.TestMode { - // reflection.Register(grpcServer) - // } - //}) - // - ////rpc log - //s.AddUnaryInterceptors(rpcserver.LoggerInterceptor) - // - //defer s.Stop() - // - //fmt.Printf("Starting rpc server at %s...\n", c.ListenOn) - //s.Start() - - //------- flag.Parse() diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/etc/hpcac.yaml b/adaptor/PCM-HPC/PCM-AC/rpc/etc/hpcac.yaml index d24cc17..048ac37 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/etc/hpcac.yaml +++ b/adaptor/PCM-HPC/PCM-AC/rpc/etc/hpcac.yaml @@ -2,12 +2,14 @@ NacosConfig: DataId: pcm-ac-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 ClientConfig: - NamespaceId: test + NamespaceId: test_octopus TimeoutMs: 5000 NotLoadCacheAtStart: true LogDir: diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go b/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go index 046ac25..2187c1f 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.28.1 // protoc v3.19.4 -// source: hpcAC.proto +// source: pb/hpcAC.proto package hpcAC @@ -36,7 +36,7 @@ type JobManager struct { func (x *JobManager) Reset() { *x = JobManager{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[0] + mi := &file_pb_hpcAC_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -49,7 +49,7 @@ func (x *JobManager) String() string { func (*JobManager) ProtoMessage() {} func (x *JobManager) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[0] + mi := &file_pb_hpcAC_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -62,7 +62,7 @@ func (x *JobManager) ProtoReflect() protoreflect.Message { // Deprecated: Use JobManager.ProtoReflect.Descriptor instead. func (*JobManager) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{0} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{0} } func (x *JobManager) GetJobManagerType() string { @@ -109,7 +109,7 @@ type JobManagerReq struct { func (x *JobManagerReq) Reset() { *x = JobManagerReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[1] + mi := &file_pb_hpcAC_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -122,7 +122,7 @@ func (x *JobManagerReq) String() string { func (*JobManagerReq) ProtoMessage() {} func (x *JobManagerReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[1] + mi := &file_pb_hpcAC_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -135,7 +135,7 @@ func (x *JobManagerReq) ProtoReflect() protoreflect.Message { // Deprecated: Use JobManagerReq.ProtoReflect.Descriptor instead. func (*JobManagerReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{1} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{1} } type ListJobManagerResp struct { @@ -151,7 +151,7 @@ type ListJobManagerResp struct { func (x *ListJobManagerResp) Reset() { *x = ListJobManagerResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[2] + mi := &file_pb_hpcAC_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -164,7 +164,7 @@ func (x *ListJobManagerResp) String() string { func (*ListJobManagerResp) ProtoMessage() {} func (x *ListJobManagerResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[2] + mi := &file_pb_hpcAC_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -177,7 +177,7 @@ func (x *ListJobManagerResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobManagerResp.ProtoReflect.Descriptor instead. func (*ListJobManagerResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{2} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{2} } func (x *ListJobManagerResp) GetCode() string { @@ -271,7 +271,7 @@ type JobInitAttr struct { func (x *JobInitAttr) Reset() { *x = JobInitAttr{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[3] + mi := &file_pb_hpcAC_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -284,7 +284,7 @@ func (x *JobInitAttr) String() string { func (*JobInitAttr) ProtoMessage() {} func (x *JobInitAttr) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[3] + mi := &file_pb_hpcAC_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -297,7 +297,7 @@ func (x *JobInitAttr) ProtoReflect() protoreflect.Message { // Deprecated: Use JobInitAttr.ProtoReflect.Descriptor instead. func (*JobInitAttr) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{3} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{3} } func (x *JobInitAttr) GetAccount() string { @@ -745,7 +745,7 @@ type JobVncSessionInfo struct { func (x *JobVncSessionInfo) Reset() { *x = JobVncSessionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[4] + mi := &file_pb_hpcAC_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -758,7 +758,7 @@ func (x *JobVncSessionInfo) String() string { func (*JobVncSessionInfo) ProtoMessage() {} func (x *JobVncSessionInfo) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[4] + mi := &file_pb_hpcAC_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -771,7 +771,7 @@ func (x *JobVncSessionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use JobVncSessionInfo.ProtoReflect.Descriptor instead. func (*JobVncSessionInfo) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{4} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{4} } func (x *JobVncSessionInfo) GetArchive() string { @@ -973,7 +973,7 @@ type JobDetail struct { func (x *JobDetail) Reset() { *x = JobDetail{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[5] + mi := &file_pb_hpcAC_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -986,7 +986,7 @@ func (x *JobDetail) String() string { func (*JobDetail) ProtoMessage() {} func (x *JobDetail) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[5] + mi := &file_pb_hpcAC_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -999,7 +999,7 @@ func (x *JobDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use JobDetail.ProtoReflect.Descriptor instead. func (*JobDetail) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{5} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{5} } func (x *JobDetail) GetAppType() string { @@ -1258,7 +1258,7 @@ type JobDetailReq struct { func (x *JobDetailReq) Reset() { *x = JobDetailReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[6] + mi := &file_pb_hpcAC_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1271,7 +1271,7 @@ func (x *JobDetailReq) String() string { func (*JobDetailReq) ProtoMessage() {} func (x *JobDetailReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[6] + mi := &file_pb_hpcAC_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1284,7 +1284,7 @@ func (x *JobDetailReq) ProtoReflect() protoreflect.Message { // Deprecated: Use JobDetailReq.ProtoReflect.Descriptor instead. func (*JobDetailReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{6} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{6} } func (x *JobDetailReq) GetJobId() string { @@ -1307,7 +1307,7 @@ type GetJobDetailResp struct { func (x *GetJobDetailResp) Reset() { *x = GetJobDetailResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[7] + mi := &file_pb_hpcAC_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1320,7 +1320,7 @@ func (x *GetJobDetailResp) String() string { func (*GetJobDetailResp) ProtoMessage() {} func (x *GetJobDetailResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[7] + mi := &file_pb_hpcAC_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1333,7 +1333,7 @@ func (x *GetJobDetailResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobDetailResp.ProtoReflect.Descriptor instead. func (*GetJobDetailResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{7} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{7} } func (x *GetJobDetailResp) GetCode() string { @@ -1369,7 +1369,7 @@ type DeleteJobReq struct { func (x *DeleteJobReq) Reset() { *x = DeleteJobReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[8] + mi := &file_pb_hpcAC_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1382,7 +1382,7 @@ func (x *DeleteJobReq) String() string { func (*DeleteJobReq) ProtoMessage() {} func (x *DeleteJobReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[8] + mi := &file_pb_hpcAC_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1395,7 +1395,7 @@ func (x *DeleteJobReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteJobReq.ProtoReflect.Descriptor instead. func (*DeleteJobReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{8} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{8} } func (x *DeleteJobReq) GetStrJobInfoMap() string { @@ -1418,7 +1418,7 @@ type DeleteJobResp struct { func (x *DeleteJobResp) Reset() { *x = DeleteJobResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[9] + mi := &file_pb_hpcAC_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1431,7 +1431,7 @@ func (x *DeleteJobResp) String() string { func (*DeleteJobResp) ProtoMessage() {} func (x *DeleteJobResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[9] + mi := &file_pb_hpcAC_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1444,7 +1444,7 @@ func (x *DeleteJobResp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteJobResp.ProtoReflect.Descriptor instead. func (*DeleteJobResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{9} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{9} } func (x *DeleteJobResp) GetCode() string { @@ -1496,7 +1496,7 @@ type Job struct { func (x *Job) Reset() { *x = Job{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[10] + mi := &file_pb_hpcAC_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1509,7 +1509,7 @@ func (x *Job) String() string { func (*Job) ProtoMessage() {} func (x *Job) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[10] + mi := &file_pb_hpcAC_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1522,7 +1522,7 @@ func (x *Job) ProtoReflect() protoreflect.Message { // Deprecated: Use Job.ProtoReflect.Descriptor instead. func (*Job) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{10} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{10} } func (x *Job) GetJobId() string { @@ -1653,7 +1653,7 @@ type ListJobReq struct { func (x *ListJobReq) Reset() { *x = ListJobReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[11] + mi := &file_pb_hpcAC_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1666,7 +1666,7 @@ func (x *ListJobReq) String() string { func (*ListJobReq) ProtoMessage() {} func (x *ListJobReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[11] + mi := &file_pb_hpcAC_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1679,7 +1679,7 @@ func (x *ListJobReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobReq.ProtoReflect.Descriptor instead. func (*ListJobReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{11} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{11} } type ListJobResp struct { @@ -1696,7 +1696,7 @@ type ListJobResp struct { func (x *ListJobResp) Reset() { *x = ListJobResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[12] + mi := &file_pb_hpcAC_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1709,7 +1709,7 @@ func (x *ListJobResp) String() string { func (*ListJobResp) ProtoMessage() {} func (x *ListJobResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[12] + mi := &file_pb_hpcAC_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1722,7 +1722,7 @@ func (x *ListJobResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobResp.ProtoReflect.Descriptor instead. func (*ListJobResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{12} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{12} } func (x *ListJobResp) GetCode() uint32 { @@ -1779,7 +1779,7 @@ type ListHistoryJobReq struct { func (x *ListHistoryJobReq) Reset() { *x = ListHistoryJobReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[13] + mi := &file_pb_hpcAC_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1792,7 +1792,7 @@ func (x *ListHistoryJobReq) String() string { func (*ListHistoryJobReq) ProtoMessage() {} func (x *ListHistoryJobReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[13] + mi := &file_pb_hpcAC_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1805,7 +1805,7 @@ func (x *ListHistoryJobReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHistoryJobReq.ProtoReflect.Descriptor instead. func (*ListHistoryJobReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{13} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{13} } func (x *ListHistoryJobReq) GetStrClusterNameList() string { @@ -1933,7 +1933,7 @@ type ListHistoryJobResp struct { func (x *ListHistoryJobResp) Reset() { *x = ListHistoryJobResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[14] + mi := &file_pb_hpcAC_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1946,7 +1946,7 @@ func (x *ListHistoryJobResp) String() string { func (*ListHistoryJobResp) ProtoMessage() {} func (x *ListHistoryJobResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[14] + mi := &file_pb_hpcAC_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1959,7 +1959,7 @@ func (x *ListHistoryJobResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHistoryJobResp.ProtoReflect.Descriptor instead. func (*ListHistoryJobResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{14} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{14} } func (x *ListHistoryJobResp) GetCode() string { @@ -1995,7 +1995,7 @@ type HistoryJobData struct { func (x *HistoryJobData) Reset() { *x = HistoryJobData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[15] + mi := &file_pb_hpcAC_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2008,7 +2008,7 @@ func (x *HistoryJobData) String() string { func (*HistoryJobData) ProtoMessage() {} func (x *HistoryJobData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[15] + mi := &file_pb_hpcAC_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2021,7 +2021,7 @@ func (x *HistoryJobData) ProtoReflect() protoreflect.Message { // Deprecated: Use HistoryJobData.ProtoReflect.Descriptor instead. func (*HistoryJobData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{15} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{15} } func (x *HistoryJobData) GetTotal() int32 { @@ -2065,7 +2065,7 @@ type HistoryJobList struct { func (x *HistoryJobList) Reset() { *x = HistoryJobList{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[16] + mi := &file_pb_hpcAC_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2078,7 +2078,7 @@ func (x *HistoryJobList) String() string { func (*HistoryJobList) ProtoMessage() {} func (x *HistoryJobList) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[16] + mi := &file_pb_hpcAC_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2091,7 +2091,7 @@ func (x *HistoryJobList) ProtoReflect() protoreflect.Message { // Deprecated: Use HistoryJobList.ProtoReflect.Descriptor instead. func (*HistoryJobList) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{16} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{16} } func (x *HistoryJobList) GetAcctTime() string { @@ -2228,7 +2228,7 @@ type SubmitJobReq struct { func (x *SubmitJobReq) Reset() { *x = SubmitJobReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[17] + mi := &file_pb_hpcAC_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2241,7 +2241,7 @@ func (x *SubmitJobReq) String() string { func (*SubmitJobReq) ProtoMessage() {} func (x *SubmitJobReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[17] + mi := &file_pb_hpcAC_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2254,7 +2254,7 @@ func (x *SubmitJobReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitJobReq.ProtoReflect.Descriptor instead. func (*SubmitJobReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{17} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{17} } func (x *SubmitJobReq) GetApptype() string { @@ -2298,7 +2298,7 @@ type SubmitJobResp struct { func (x *SubmitJobResp) Reset() { *x = SubmitJobResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[18] + mi := &file_pb_hpcAC_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2311,7 +2311,7 @@ func (x *SubmitJobResp) String() string { func (*SubmitJobResp) ProtoMessage() {} func (x *SubmitJobResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[18] + mi := &file_pb_hpcAC_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2324,7 +2324,7 @@ func (x *SubmitJobResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitJobResp.ProtoReflect.Descriptor instead. func (*SubmitJobResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{18} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{18} } func (x *SubmitJobResp) GetCode() string { @@ -2376,7 +2376,7 @@ type MapAppJobInfo struct { func (x *MapAppJobInfo) Reset() { *x = MapAppJobInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[19] + mi := &file_pb_hpcAC_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2389,7 +2389,7 @@ func (x *MapAppJobInfo) String() string { func (*MapAppJobInfo) ProtoMessage() {} func (x *MapAppJobInfo) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[19] + mi := &file_pb_hpcAC_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2402,7 +2402,7 @@ func (x *MapAppJobInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MapAppJobInfo.ProtoReflect.Descriptor instead. func (*MapAppJobInfo) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{19} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{19} } func (x *MapAppJobInfo) GetGAP_CMD_FILE() string { @@ -2542,7 +2542,7 @@ type ParaStorQuotaReq struct { func (x *ParaStorQuotaReq) Reset() { *x = ParaStorQuotaReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[20] + mi := &file_pb_hpcAC_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2555,7 +2555,7 @@ func (x *ParaStorQuotaReq) String() string { func (*ParaStorQuotaReq) ProtoMessage() {} func (x *ParaStorQuotaReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[20] + mi := &file_pb_hpcAC_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2568,7 +2568,7 @@ func (x *ParaStorQuotaReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ParaStorQuotaReq.ProtoReflect.Descriptor instead. func (*ParaStorQuotaReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{20} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{20} } func (x *ParaStorQuotaReq) GetUsername() string { @@ -2591,7 +2591,7 @@ type ParaStorQuotaResp struct { func (x *ParaStorQuotaResp) Reset() { *x = ParaStorQuotaResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[21] + mi := &file_pb_hpcAC_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2604,7 +2604,7 @@ func (x *ParaStorQuotaResp) String() string { func (*ParaStorQuotaResp) ProtoMessage() {} func (x *ParaStorQuotaResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[21] + mi := &file_pb_hpcAC_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2617,7 +2617,7 @@ func (x *ParaStorQuotaResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ParaStorQuotaResp.ProtoReflect.Descriptor instead. func (*ParaStorQuotaResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{21} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{21} } func (x *ParaStorQuotaResp) GetCode() string { @@ -2655,7 +2655,7 @@ type QuotaData struct { func (x *QuotaData) Reset() { *x = QuotaData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[22] + mi := &file_pb_hpcAC_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2668,7 +2668,7 @@ func (x *QuotaData) String() string { func (*QuotaData) ProtoMessage() {} func (x *QuotaData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[22] + mi := &file_pb_hpcAC_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2681,7 +2681,7 @@ func (x *QuotaData) ProtoReflect() protoreflect.Message { // Deprecated: Use QuotaData.ProtoReflect.Descriptor instead. func (*QuotaData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{22} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{22} } func (x *QuotaData) GetUsername() string { @@ -2723,7 +2723,7 @@ type WallTimeReq struct { func (x *WallTimeReq) Reset() { *x = WallTimeReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[23] + mi := &file_pb_hpcAC_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2736,7 +2736,7 @@ func (x *WallTimeReq) String() string { func (*WallTimeReq) ProtoMessage() {} func (x *WallTimeReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[23] + mi := &file_pb_hpcAC_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2749,7 +2749,7 @@ func (x *WallTimeReq) ProtoReflect() protoreflect.Message { // Deprecated: Use WallTimeReq.ProtoReflect.Descriptor instead. func (*WallTimeReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{23} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{23} } func (x *WallTimeReq) GetUsername() string { @@ -2772,7 +2772,7 @@ type WallTimeResp struct { func (x *WallTimeResp) Reset() { *x = WallTimeResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[24] + mi := &file_pb_hpcAC_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2785,7 +2785,7 @@ func (x *WallTimeResp) String() string { func (*WallTimeResp) ProtoMessage() {} func (x *WallTimeResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[24] + mi := &file_pb_hpcAC_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2798,7 +2798,7 @@ func (x *WallTimeResp) ProtoReflect() protoreflect.Message { // Deprecated: Use WallTimeResp.ProtoReflect.Descriptor instead. func (*WallTimeResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{24} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{24} } func (x *WallTimeResp) GetCode() string { @@ -2833,7 +2833,7 @@ type QueueJobsReq struct { func (x *QueueJobsReq) Reset() { *x = QueueJobsReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[25] + mi := &file_pb_hpcAC_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2846,7 +2846,7 @@ func (x *QueueJobsReq) String() string { func (*QueueJobsReq) ProtoMessage() {} func (x *QueueJobsReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[25] + mi := &file_pb_hpcAC_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2859,7 +2859,7 @@ func (x *QueueJobsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueJobsReq.ProtoReflect.Descriptor instead. func (*QueueJobsReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{25} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{25} } func (x *QueueJobsReq) GetUserName() string { @@ -2882,7 +2882,7 @@ type QueueJobsResp struct { func (x *QueueJobsResp) Reset() { *x = QueueJobsResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[26] + mi := &file_pb_hpcAC_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2895,7 +2895,7 @@ func (x *QueueJobsResp) String() string { func (*QueueJobsResp) ProtoMessage() {} func (x *QueueJobsResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[26] + mi := &file_pb_hpcAC_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2908,7 +2908,7 @@ func (x *QueueJobsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueJobsResp.ProtoReflect.Descriptor instead. func (*QueueJobsResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{26} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{26} } func (x *QueueJobsResp) GetCode() string { @@ -2944,7 +2944,7 @@ type Queue struct { func (x *Queue) Reset() { *x = Queue{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[27] + mi := &file_pb_hpcAC_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2957,7 +2957,7 @@ func (x *Queue) String() string { func (*Queue) ProtoMessage() {} func (x *Queue) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[27] + mi := &file_pb_hpcAC_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2970,7 +2970,7 @@ func (x *Queue) ProtoReflect() protoreflect.Message { // Deprecated: Use Queue.ProtoReflect.Descriptor instead. func (*Queue) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{27} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{27} } func (x *Queue) GetName() string { @@ -2999,7 +2999,7 @@ type Metric struct { func (x *Metric) Reset() { *x = Metric{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[28] + mi := &file_pb_hpcAC_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3012,7 +3012,7 @@ func (x *Metric) String() string { func (*Metric) ProtoMessage() {} func (x *Metric) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[28] + mi := &file_pb_hpcAC_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3025,7 +3025,7 @@ func (x *Metric) ProtoReflect() protoreflect.Message { // Deprecated: Use Metric.ProtoReflect.Descriptor instead. func (*Metric) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{28} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{28} } func (x *Metric) GetMetricName() string { @@ -3051,7 +3051,7 @@ type CpuCoreReq struct { func (x *CpuCoreReq) Reset() { *x = CpuCoreReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[29] + mi := &file_pb_hpcAC_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3064,7 +3064,7 @@ func (x *CpuCoreReq) String() string { func (*CpuCoreReq) ProtoMessage() {} func (x *CpuCoreReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[29] + mi := &file_pb_hpcAC_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3077,7 +3077,7 @@ func (x *CpuCoreReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CpuCoreReq.ProtoReflect.Descriptor instead. func (*CpuCoreReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{29} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{29} } type CpuCoreResp struct { @@ -3093,7 +3093,7 @@ type CpuCoreResp struct { func (x *CpuCoreResp) Reset() { *x = CpuCoreResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[30] + mi := &file_pb_hpcAC_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3106,7 +3106,7 @@ func (x *CpuCoreResp) String() string { func (*CpuCoreResp) ProtoMessage() {} func (x *CpuCoreResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[30] + mi := &file_pb_hpcAC_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3119,7 +3119,7 @@ func (x *CpuCoreResp) ProtoReflect() protoreflect.Message { // Deprecated: Use CpuCoreResp.ProtoReflect.Descriptor instead. func (*CpuCoreResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{30} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{30} } func (x *CpuCoreResp) GetCode() string { @@ -3155,7 +3155,7 @@ type CpuCore struct { func (x *CpuCore) Reset() { *x = CpuCore{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[31] + mi := &file_pb_hpcAC_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3168,7 +3168,7 @@ func (x *CpuCore) String() string { func (*CpuCore) ProtoMessage() {} func (x *CpuCore) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[31] + mi := &file_pb_hpcAC_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3181,7 +3181,7 @@ func (x *CpuCore) ProtoReflect() protoreflect.Message { // Deprecated: Use CpuCore.ProtoReflect.Descriptor instead. func (*CpuCore) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{31} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{31} } func (x *CpuCore) GetName() string { @@ -3209,7 +3209,7 @@ type JobsReq struct { func (x *JobsReq) Reset() { *x = JobsReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[32] + mi := &file_pb_hpcAC_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3222,7 +3222,7 @@ func (x *JobsReq) String() string { func (*JobsReq) ProtoMessage() {} func (x *JobsReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[32] + mi := &file_pb_hpcAC_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3235,7 +3235,7 @@ func (x *JobsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use JobsReq.ProtoReflect.Descriptor instead. func (*JobsReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{32} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{32} } func (x *JobsReq) GetUserName() string { @@ -3258,7 +3258,7 @@ type JobsResp struct { func (x *JobsResp) Reset() { *x = JobsResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[33] + mi := &file_pb_hpcAC_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3271,7 +3271,7 @@ func (x *JobsResp) String() string { func (*JobsResp) ProtoMessage() {} func (x *JobsResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[33] + mi := &file_pb_hpcAC_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3284,7 +3284,7 @@ func (x *JobsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use JobsResp.ProtoReflect.Descriptor instead. func (*JobsResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{33} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{33} } func (x *JobsResp) GetCode() string { @@ -3320,7 +3320,7 @@ type JobCore struct { func (x *JobCore) Reset() { *x = JobCore{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[34] + mi := &file_pb_hpcAC_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3333,7 +3333,7 @@ func (x *JobCore) String() string { func (*JobCore) ProtoMessage() {} func (x *JobCore) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[34] + mi := &file_pb_hpcAC_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3346,7 +3346,7 @@ func (x *JobCore) ProtoReflect() protoreflect.Message { // Deprecated: Use JobCore.ProtoReflect.Descriptor instead. func (*JobCore) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{34} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{34} } func (x *JobCore) GetName() string { @@ -3376,7 +3376,7 @@ type HistoryJobDetailReq struct { func (x *HistoryJobDetailReq) Reset() { *x = HistoryJobDetailReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[35] + mi := &file_pb_hpcAC_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3389,7 +3389,7 @@ func (x *HistoryJobDetailReq) String() string { func (*HistoryJobDetailReq) ProtoMessage() {} func (x *HistoryJobDetailReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[35] + mi := &file_pb_hpcAC_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3402,7 +3402,7 @@ func (x *HistoryJobDetailReq) ProtoReflect() protoreflect.Message { // Deprecated: Use HistoryJobDetailReq.ProtoReflect.Descriptor instead. func (*HistoryJobDetailReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{35} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{35} } func (x *HistoryJobDetailReq) GetJobId() string { @@ -3495,7 +3495,7 @@ type HistoryJobDetail struct { func (x *HistoryJobDetail) Reset() { *x = HistoryJobDetail{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[36] + mi := &file_pb_hpcAC_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3508,7 +3508,7 @@ func (x *HistoryJobDetail) String() string { func (*HistoryJobDetail) ProtoMessage() {} func (x *HistoryJobDetail) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[36] + mi := &file_pb_hpcAC_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3521,7 +3521,7 @@ func (x *HistoryJobDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use HistoryJobDetail.ProtoReflect.Descriptor instead. func (*HistoryJobDetail) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{36} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{36} } func (x *HistoryJobDetail) GetAcctTime() string { @@ -3950,7 +3950,7 @@ type HistoryJobDetailResp struct { func (x *HistoryJobDetailResp) Reset() { *x = HistoryJobDetailResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[37] + mi := &file_pb_hpcAC_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3963,7 +3963,7 @@ func (x *HistoryJobDetailResp) String() string { func (*HistoryJobDetailResp) ProtoMessage() {} func (x *HistoryJobDetailResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[37] + mi := &file_pb_hpcAC_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3976,7 +3976,7 @@ func (x *HistoryJobDetailResp) ProtoReflect() protoreflect.Message { // Deprecated: Use HistoryJobDetailResp.ProtoReflect.Descriptor instead. func (*HistoryJobDetailResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{37} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{37} } func (x *HistoryJobDetailResp) GetCode() string { @@ -4013,7 +4013,7 @@ type FileContentResp struct { func (x *FileContentResp) Reset() { *x = FileContentResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[38] + mi := &file_pb_hpcAC_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4026,7 +4026,7 @@ func (x *FileContentResp) String() string { func (*FileContentResp) ProtoMessage() {} func (x *FileContentResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[38] + mi := &file_pb_hpcAC_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4039,7 +4039,7 @@ func (x *FileContentResp) ProtoReflect() protoreflect.Message { // Deprecated: Use FileContentResp.ProtoReflect.Descriptor instead. func (*FileContentResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{38} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{38} } func (x *FileContentResp) GetCode() string { @@ -4077,7 +4077,7 @@ type FileDataReq struct { func (x *FileDataReq) Reset() { *x = FileDataReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[39] + mi := &file_pb_hpcAC_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4090,7 +4090,7 @@ func (x *FileDataReq) String() string { func (*FileDataReq) ProtoMessage() {} func (x *FileDataReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[39] + mi := &file_pb_hpcAC_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4103,7 +4103,7 @@ func (x *FileDataReq) ProtoReflect() protoreflect.Message { // Deprecated: Use FileDataReq.ProtoReflect.Descriptor instead. func (*FileDataReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{39} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{39} } func (x *FileDataReq) GetHostName() string { @@ -4149,7 +4149,7 @@ type FileDataResp struct { func (x *FileDataResp) Reset() { *x = FileDataResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[40] + mi := &file_pb_hpcAC_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4162,7 +4162,7 @@ func (x *FileDataResp) String() string { func (*FileDataResp) ProtoMessage() {} func (x *FileDataResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[40] + mi := &file_pb_hpcAC_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4175,7 +4175,7 @@ func (x *FileDataResp) ProtoReflect() protoreflect.Message { // Deprecated: Use FileDataResp.ProtoReflect.Descriptor instead. func (*FileDataResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{40} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{40} } func (x *FileDataResp) GetAllLineTotal() int32 { @@ -4225,7 +4225,7 @@ type QueueReq struct { func (x *QueueReq) Reset() { *x = QueueReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[41] + mi := &file_pb_hpcAC_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4238,7 +4238,7 @@ func (x *QueueReq) String() string { func (*QueueReq) ProtoMessage() {} func (x *QueueReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[41] + mi := &file_pb_hpcAC_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4251,7 +4251,7 @@ func (x *QueueReq) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueReq.ProtoReflect.Descriptor instead. func (*QueueReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{41} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{41} } func (x *QueueReq) GetUser() string { @@ -4281,7 +4281,7 @@ type QueueResp struct { func (x *QueueResp) Reset() { *x = QueueResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[42] + mi := &file_pb_hpcAC_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4294,7 +4294,7 @@ func (x *QueueResp) String() string { func (*QueueResp) ProtoMessage() {} func (x *QueueResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[42] + mi := &file_pb_hpcAC_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4307,7 +4307,7 @@ func (x *QueueResp) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueResp.ProtoReflect.Descriptor instead. func (*QueueResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{42} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{42} } func (x *QueueResp) GetCode() string { @@ -4358,7 +4358,7 @@ type QueueData struct { func (x *QueueData) Reset() { *x = QueueData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[43] + mi := &file_pb_hpcAC_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4371,7 +4371,7 @@ func (x *QueueData) String() string { func (*QueueData) ProtoMessage() {} func (x *QueueData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[43] + mi := &file_pb_hpcAC_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4384,7 +4384,7 @@ func (x *QueueData) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueData.ProtoReflect.Descriptor instead. func (*QueueData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{43} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{43} } func (x *QueueData) GetAclHosts() string { @@ -4519,7 +4519,7 @@ type QueueDetailsResp struct { func (x *QueueDetailsResp) Reset() { *x = QueueDetailsResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[44] + mi := &file_pb_hpcAC_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4532,7 +4532,7 @@ func (x *QueueDetailsResp) String() string { func (*QueueDetailsResp) ProtoMessage() {} func (x *QueueDetailsResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[44] + mi := &file_pb_hpcAC_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4545,7 +4545,7 @@ func (x *QueueDetailsResp) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueDetailsResp.ProtoReflect.Descriptor instead. func (*QueueDetailsResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{44} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{44} } func (x *QueueDetailsResp) GetCode() string { @@ -4593,7 +4593,7 @@ type QueueDetailsData struct { func (x *QueueDetailsData) Reset() { *x = QueueDetailsData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[45] + mi := &file_pb_hpcAC_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4606,7 +4606,7 @@ func (x *QueueDetailsData) String() string { func (*QueueDetailsData) ProtoMessage() {} func (x *QueueDetailsData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[45] + mi := &file_pb_hpcAC_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4619,7 +4619,7 @@ func (x *QueueDetailsData) ProtoReflect() protoreflect.Message { // Deprecated: Use QueueDetailsData.ProtoReflect.Descriptor instead. func (*QueueDetailsData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{45} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{45} } func (x *QueueDetailsData) GetQueNodes() int32 { @@ -4733,7 +4733,7 @@ type UserQuotasLimitResp struct { func (x *UserQuotasLimitResp) Reset() { *x = UserQuotasLimitResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[46] + mi := &file_pb_hpcAC_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4746,7 +4746,7 @@ func (x *UserQuotasLimitResp) String() string { func (*UserQuotasLimitResp) ProtoMessage() {} func (x *UserQuotasLimitResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[46] + mi := &file_pb_hpcAC_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4759,7 +4759,7 @@ func (x *UserQuotasLimitResp) ProtoReflect() protoreflect.Message { // Deprecated: Use UserQuotasLimitResp.ProtoReflect.Descriptor instead. func (*UserQuotasLimitResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{46} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{46} } func (x *UserQuotasLimitResp) GetCode() string { @@ -4814,7 +4814,7 @@ type UserQuotasLimitData struct { func (x *UserQuotasLimitData) Reset() { *x = UserQuotasLimitData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[47] + mi := &file_pb_hpcAC_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4827,7 +4827,7 @@ func (x *UserQuotasLimitData) String() string { func (*UserQuotasLimitData) ProtoMessage() {} func (x *UserQuotasLimitData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[47] + mi := &file_pb_hpcAC_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4840,7 +4840,7 @@ func (x *UserQuotasLimitData) ProtoReflect() protoreflect.Message { // Deprecated: Use UserQuotasLimitData.ProtoReflect.Descriptor instead. func (*UserQuotasLimitData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{47} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{47} } func (x *UserQuotasLimitData) GetUserName() string { @@ -5000,7 +5000,7 @@ type ACTokenReq struct { func (x *ACTokenReq) Reset() { *x = ACTokenReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[48] + mi := &file_pb_hpcAC_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5013,7 +5013,7 @@ func (x *ACTokenReq) String() string { func (*ACTokenReq) ProtoMessage() {} func (x *ACTokenReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[48] + mi := &file_pb_hpcAC_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5026,9 +5026,10 @@ func (x *ACTokenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ACTokenReq.ProtoReflect.Descriptor instead. func (*ACTokenReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{48} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{48} } +// AC原始token返回 type ACTokenResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5042,7 +5043,7 @@ type ACTokenResp struct { func (x *ACTokenResp) Reset() { *x = ACTokenResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[49] + mi := &file_pb_hpcAC_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5055,7 +5056,7 @@ func (x *ACTokenResp) String() string { func (*ACTokenResp) ProtoMessage() {} func (x *ACTokenResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[49] + mi := &file_pb_hpcAC_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5068,7 +5069,7 @@ func (x *ACTokenResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ACTokenResp.ProtoReflect.Descriptor instead. func (*ACTokenResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{49} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{49} } func (x *ACTokenResp) GetMsg() string { @@ -5105,7 +5106,7 @@ type ACTokenData struct { func (x *ACTokenData) Reset() { *x = ACTokenData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[50] + mi := &file_pb_hpcAC_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5118,7 +5119,7 @@ func (x *ACTokenData) String() string { func (*ACTokenData) ProtoMessage() {} func (x *ACTokenData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[50] + mi := &file_pb_hpcAC_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5131,7 +5132,7 @@ func (x *ACTokenData) ProtoReflect() protoreflect.Message { // Deprecated: Use ACTokenData.ProtoReflect.Descriptor instead. func (*ACTokenData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{50} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{50} } func (x *ACTokenData) GetClusterName() string { @@ -5168,7 +5169,7 @@ type ACTokenState struct { func (x *ACTokenState) Reset() { *x = ACTokenState{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[51] + mi := &file_pb_hpcAC_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5181,7 +5182,7 @@ func (x *ACTokenState) String() string { func (*ACTokenState) ProtoMessage() {} func (x *ACTokenState) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[51] + mi := &file_pb_hpcAC_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5194,7 +5195,7 @@ func (x *ACTokenState) ProtoReflect() protoreflect.Message { // Deprecated: Use ACTokenState.ProtoReflect.Descriptor instead. func (*ACTokenState) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{51} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{51} } func (x *ACTokenState) GetMsg() string { @@ -5232,7 +5233,7 @@ type TokenResp struct { func (x *TokenResp) Reset() { *x = TokenResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[52] + mi := &file_pb_hpcAC_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5245,7 +5246,7 @@ func (x *TokenResp) String() string { func (*TokenResp) ProtoMessage() {} func (x *TokenResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[52] + mi := &file_pb_hpcAC_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5258,7 +5259,7 @@ func (x *TokenResp) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenResp.ProtoReflect.Descriptor instead. func (*TokenResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{52} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{52} } func (x *TokenResp) GetMsg() string { @@ -5293,7 +5294,7 @@ type ACClusterReq struct { func (x *ACClusterReq) Reset() { *x = ACClusterReq{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[53] + mi := &file_pb_hpcAC_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5306,7 +5307,7 @@ func (x *ACClusterReq) String() string { func (*ACClusterReq) ProtoMessage() {} func (x *ACClusterReq) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[53] + mi := &file_pb_hpcAC_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5319,7 +5320,7 @@ func (x *ACClusterReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ACClusterReq.ProtoReflect.Descriptor instead. func (*ACClusterReq) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{53} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{53} } func (x *ACClusterReq) GetToken() string { @@ -5342,7 +5343,7 @@ type ACClusterResp struct { func (x *ACClusterResp) Reset() { *x = ACClusterResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[54] + mi := &file_pb_hpcAC_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5355,7 +5356,7 @@ func (x *ACClusterResp) String() string { func (*ACClusterResp) ProtoMessage() {} func (x *ACClusterResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[54] + mi := &file_pb_hpcAC_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5368,7 +5369,7 @@ func (x *ACClusterResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ACClusterResp.ProtoReflect.Descriptor instead. func (*ACClusterResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{54} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{54} } func (x *ACClusterResp) GetMsg() string { @@ -5406,7 +5407,7 @@ type ClusterResp struct { func (x *ClusterResp) Reset() { *x = ClusterResp{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[55] + mi := &file_pb_hpcAC_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5419,7 +5420,7 @@ func (x *ClusterResp) String() string { func (*ClusterResp) ProtoMessage() {} func (x *ClusterResp) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[55] + mi := &file_pb_hpcAC_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5432,7 +5433,7 @@ func (x *ClusterResp) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterResp.ProtoReflect.Descriptor instead. func (*ClusterResp) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{55} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{55} } func (x *ClusterResp) GetMsg() string { @@ -5471,7 +5472,7 @@ type ACClusterData struct { func (x *ACClusterData) Reset() { *x = ACClusterData{} if protoimpl.UnsafeEnabled { - mi := &file_hpcAC_proto_msgTypes[56] + mi := &file_pb_hpcAC_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5484,7 +5485,7 @@ func (x *ACClusterData) String() string { func (*ACClusterData) ProtoMessage() {} func (x *ACClusterData) ProtoReflect() protoreflect.Message { - mi := &file_hpcAC_proto_msgTypes[56] + mi := &file_pb_hpcAC_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5497,7 +5498,7 @@ func (x *ACClusterData) ProtoReflect() protoreflect.Message { // Deprecated: Use ACClusterData.ProtoReflect.Descriptor instead. func (*ACClusterData) Descriptor() ([]byte, []int) { - return file_hpcAC_proto_rawDescGZIP(), []int{56} + return file_pb_hpcAC_proto_rawDescGZIP(), []int{56} } func (x *ACClusterData) GetJobManagerType() string { @@ -5535,953 +5536,1047 @@ func (x *ACClusterData) GetJobManagerPort() string { return "" } -var File_hpcAC_proto protoreflect.FileDescriptor +// 获取算力接口参数 +type ResourceReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} -var file_hpcAC_proto_rawDesc = []byte{ - 0x0a, 0x0b, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x68, - 0x70, 0x63, 0x41, 0x43, 0x22, 0xae, 0x01, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, - 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6a, - 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x22, 0x61, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, - 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, - 0x73, 0x67, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcf, 0x0d, 0x0a, 0x0b, 0x4a, 0x6f, - 0x62, 0x49, 0x6e, 0x69, 0x74, 0x41, 0x74, 0x74, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x72, 0x75, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x72, 0x75, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, - 0x73, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x70, - 0x75, 0x73, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x61, - 0x79, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6c, 0x69, 0x67, 0x69, - 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x5f, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x65, 0x78, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, - 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x63, - 0x73, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, - 0x63, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x63, - 0x70, 0x75, 0x73, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x6d, - 0x69, 0x6e, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x54, 0x6d, 0x70, 0x44, 0x69, - 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x69, 0x73, - 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x6e, 0x62, 0x73, 0x63, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x74, 0x61, 0x73, - 0x6b, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x62, 0x73, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, - 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x75, 0x6d, - 0x43, 0x70, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x25, - 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x6f, 0x73, 0x18, 0x26, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x71, 0x6f, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x62, - 0x73, 0x63, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x42, 0x73, - 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, - 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x75, - 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x65, - 0x5f, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x73, 0x65, 0x63, 0x73, 0x50, 0x72, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x30, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x73, 0x74, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x64, 0x45, 0x72, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x5f, 0x69, 0x6e, 0x18, - 0x33, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x49, 0x6e, 0x12, 0x17, 0x0a, 0x07, - 0x73, 0x74, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x75, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x72, 0x65, - 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x39, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x3b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x22, 0xfb, 0x06, 0x0a, 0x11, - 0x4a, 0x6f, 0x62, 0x56, 0x6e, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x69, - 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x64, - 0x65, 0x70, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, - 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x41, 0x74, 0x74, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x73, - 0x74, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x5f, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x47, 0x65, 0x6f, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x2b, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x29, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, - 0x72, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, - 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, - 0x74, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x43, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x5f, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x5f, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x19, - 0x0a, 0x08, 0x76, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x6e, 0x63, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x93, 0x09, 0x0a, 0x09, 0x4a, 0x6f, - 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x76, 0x65, 0x5f, 0x72, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x65, 0x52, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0b, 0x61, - 0x76, 0x65, 0x5f, 0x76, 0x6d, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x76, 0x65, 0x56, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, - 0x1e, 0x0a, 0x0b, 0x64, 0x63, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, - 0x20, 0x0a, 0x0c, 0x64, 0x63, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x55, 0x73, 0x65, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, - 0x0b, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x67, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, - 0x0c, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x67, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x5f, - 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x69, 0x74, 0x41, - 0x74, 0x74, 0x72, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x49, 0x6e, 0x69, 0x74, 0x41, 0x74, 0x74, 0x72, - 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6a, - 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6a, 0x6f, 0x62, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x6a, 0x6f, - 0x62, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, - 0x56, 0x6e, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, - 0x6a, 0x6f, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, - 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, - 0x75, 0x73, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x55, - 0x73, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, - 0x72, 0x65, 0x71, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x4e, - 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x55, 0x73, - 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, - 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x18, - 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x52, 0x65, - 0x71, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x4e, 0x75, - 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x65, - 0x71, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, - 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x22, - 0x25, 0x0a, 0x0c, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x27, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, - 0x62, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x61, 0x70, 0x22, - 0xa2, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x44, - 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x04, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x15, 0x0a, 0x06, - 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, - 0x62, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x75, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, - 0x55, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x6e, 0x75, 0x6d, - 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x63, 0x4e, 0x75, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x24, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, +func (x *ResourceReq) Reset() { + *x = ResourceReq{} + if protoimpl.UnsafeEnabled { + mi := &file_pb_hpcAC_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceReq) ProtoMessage() {} + +func (x *ResourceReq) ProtoReflect() protoreflect.Message { + mi := &file_pb_hpcAC_proto_msgTypes[57] + 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 ResourceReq.ProtoReflect.Descriptor instead. +func (*ResourceReq) Descriptor() ([]byte, []int) { + return file_pb_hpcAC_proto_rawDescGZIP(), []int{57} +} + +type CpResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + POpsAtFp16 float32 `protobuf:"fixed32,1,opt,name=pOpsAtFp16,proto3" json:"pOpsAtFp16,omitempty"` +} + +func (x *CpResp) Reset() { + *x = CpResp{} + if protoimpl.UnsafeEnabled { + mi := &file_pb_hpcAC_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CpResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CpResp) ProtoMessage() {} + +func (x *CpResp) ProtoReflect() protoreflect.Message { + mi := &file_pb_hpcAC_proto_msgTypes[58] + 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 CpResp.ProtoReflect.Descriptor instead. +func (*CpResp) Descriptor() ([]byte, []int) { + return file_pb_hpcAC_proto_rawDescGZIP(), []int{58} +} + +func (x *CpResp) GetPOpsAtFp16() float32 { + if x != nil { + return x.POpsAtFp16 + } + return 0 +} + +var File_pb_hpcAC_proto protoreflect.FileDescriptor + +var file_pb_hpcAC_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x70, 0x62, 0x2f, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x05, 0x68, 0x70, 0x63, 0x41, 0x43, 0x22, 0xae, 0x01, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, - 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, - 0x72, 0x6b, 0x44, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x70, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x22, 0x76, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, - 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, - 0x70, 0x63, 0x41, 0x43, 0x2e, 0x6a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xd3, - 0x03, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x73, 0x74, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, - 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, - 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x69, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, - 0x62, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x0e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x28, + 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x22, 0x61, 0x0a, 0x12, 0x4c, 0x69, 0x73, + 0x74, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcf, 0x0d, 0x0a, + 0x0b, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x69, 0x74, 0x41, 0x74, 0x74, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x72, 0x75, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, + 0x72, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09, + 0x63, 0x70, 0x75, 0x73, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x70, 0x75, 0x73, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, + 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6c, + 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x65, 0x78, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x63, 0x73, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x63, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x69, + 0x6e, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x29, + 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x54, 0x6d, + 0x70, 0x44, 0x69, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x6e, 0x62, 0x73, 0x63, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, + 0x74, 0x61, 0x73, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x62, 0x73, 0x63, 0x12, 0x19, 0x0a, 0x08, + 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6e, 0x75, 0x6d, 0x43, 0x70, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x4e, + 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x73, 0x6b, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, + 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x6f, 0x73, 0x18, + 0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x71, 0x6f, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x28, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, + 0x71, 0x5f, 0x62, 0x73, 0x63, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x71, 0x42, 0x73, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x4e, + 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x18, 0x2c, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, + 0x74, 0x63, 0x68, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x73, 0x5f, + 0x70, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x2f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x73, 0x50, 0x72, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, + 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x31, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x64, 0x45, 0x72, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x5f, + 0x69, 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x49, 0x6e, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x72, 0x65, 0x73, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x72, 0x65, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x38, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x39, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x18, + 0x3b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x22, 0xfb, + 0x06, 0x0a, 0x11, 0x4a, 0x6f, 0x62, 0x56, 0x6e, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x26, + 0x0a, 0x0f, 0x69, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x5f, 0x70, 0x69, 0x78, 0x65, + 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, + 0x50, 0x69, 0x78, 0x65, 0x6c, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x74, 0x74, + 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x41, 0x74, 0x74, 0x72, 0x73, 0x12, 0x22, + 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x5f, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x47, 0x65, 0x6f, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, 0x62, + 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2b, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, + 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x73, 0x74, 0x72, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x73, 0x74, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, + 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x72, + 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x73, + 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x5f, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x73, 0x74, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x6e, 0x63, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x93, 0x09, 0x0a, + 0x09, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, + 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x76, 0x65, 0x5f, 0x72, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x65, 0x52, 0x73, 0x73, 0x12, 0x1e, + 0x0a, 0x0b, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x6d, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x65, 0x56, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, + 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x73, + 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x64, 0x63, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, + 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x64, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x52, + 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x63, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, + 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x63, 0x75, 0x4e, 0x75, 0x6d, + 0x55, 0x73, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1e, 0x0a, 0x0b, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, + 0x12, 0x20, 0x0a, 0x0c, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x67, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x55, 0x73, + 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x6a, + 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, + 0x69, 0x74, 0x41, 0x74, 0x74, 0x72, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x49, 0x6e, 0x69, 0x74, 0x41, + 0x74, 0x74, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x24, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6a, 0x6f, 0x62, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, + 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, + 0x4a, 0x6f, 0x62, 0x56, 0x6e, 0x63, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x24, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, + 0x65, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, + 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x6f, + 0x64, 0x65, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, + 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x72, + 0x65, 0x71, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x4e, 0x75, + 0x6d, 0x52, 0x65, 0x71, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x6e, 0x75, 0x6d, + 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x63, 0x4e, 0x75, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x72, 0x65, 0x71, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x61, 0x6c, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, + 0x64, 0x69, 0x72, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, + 0x69, 0x72, 0x22, 0x25, 0x0a, 0x0c, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x0c, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x27, 0x0a, 0x10, 0x73, 0x74, 0x72, + 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x4d, + 0x61, 0x70, 0x22, 0xa2, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, + 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x04, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x12, + 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, + 0x6f, 0x64, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x63, 0x5f, + 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6a, + 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, + 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, + 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, + 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x4c, + 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x22, 0x76, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x21, + 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x6a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, + 0x73, 0x22, 0xd3, 0x03, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x74, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, + 0x75, 0x65, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, + 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x55, 0x73, + 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x72, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x73, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x42, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x79, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x94, - 0x04, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, - 0x62, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, - 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6a, - 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, - 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, - 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x50, 0x72, 0x6f, 0x63, - 0x4e, 0x75, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x50, 0x72, - 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x22, 0xa8, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, - 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x49, 0x44, 0x12, 0x3a, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, - 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x70, - 0x63, 0x41, 0x43, 0x2e, 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, - 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, + 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, + 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, + 0x74, 0x22, 0x94, 0x04, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6a, 0x6f, + 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, + 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, + 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x45, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, + 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x57, + 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x50, + 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6a, 0x6f, + 0x62, 0x50, 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x22, 0xa8, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, + 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x12, 0x3a, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, + 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, + 0x6e, 0x66, 0x6f, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xeb, + 0x04, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x43, 0x4d, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x43, 0x4d, 0x44, 0x46, 0x49, + 0x4c, 0x45, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x12, + 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, + 0x4e, 0x47, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x4e, 0x4f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50, 0x5f, 0x53, + 0x55, 0x42, 0x4d, 0x49, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x59, 0x50, 0x45, 0x12, + 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4e, 0x41, 0x4d, + 0x45, 0x12, 0x20, 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x44, 0x49, + 0x52, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x57, 0x4f, 0x52, 0x4b, + 0x44, 0x49, 0x52, 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x51, 0x55, 0x45, 0x55, 0x45, + 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x12, 0x17, 0x0a, + 0x07, 0x47, 0x41, 0x50, 0x5f, 0x50, 0x50, 0x4e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x47, 0x41, 0x50, 0x50, 0x50, 0x4e, 0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x47, + 0x50, 0x55, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x47, 0x50, + 0x55, 0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x44, 0x43, 0x55, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x44, 0x43, 0x55, 0x12, 0x1e, 0x0a, 0x0b, + 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4d, 0x45, 0x4d, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4d, 0x45, 0x4d, 0x12, 0x22, 0x0a, 0x0d, + 0x47, 0x41, 0x50, 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47, 0x41, 0x50, 0x57, 0x41, 0x4c, 0x4c, 0x54, 0x49, 0x4d, 0x45, + 0x12, 0x23, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x56, + 0x45, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x47, 0x41, 0x50, 0x45, 0x58, 0x43, 0x4c, + 0x55, 0x53, 0x49, 0x56, 0x45, 0x12, 0x1f, 0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x41, 0x50, 0x50, + 0x4e, 0x41, 0x4d, 0x45, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x41, + 0x50, 0x50, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x55, 0x42, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47, + 0x41, 0x50, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x53, 0x55, 0x42, 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, + 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x46, + 0x49, 0x4c, 0x45, 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f, 0x45, + 0x52, 0x52, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, + 0x41, 0x50, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x22, 0x2e, 0x0a, 0x10, + 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x11, + 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xeb, 0x04, 0x0a, 0x0d, - 0x4d, 0x61, 0x70, 0x41, 0x70, 0x70, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, - 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x43, 0x4d, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x43, 0x4d, 0x44, 0x46, 0x49, 0x4c, 0x45, 0x12, - 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x4e, 0x4f, 0x44, 0x45, 0x12, 0x26, 0x0a, 0x0f, - 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x54, - 0x52, 0x49, 0x4e, 0x47, 0x12, 0x26, 0x0a, 0x0f, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x55, 0x42, 0x4d, - 0x49, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, - 0x41, 0x50, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x59, 0x50, 0x45, 0x12, 0x20, 0x0a, 0x0c, - 0x47, 0x41, 0x50, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x20, - 0x0a, 0x0c, 0x47, 0x41, 0x50, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x44, 0x49, 0x52, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x57, 0x4f, 0x52, 0x4b, 0x44, 0x49, 0x52, - 0x12, 0x1b, 0x0a, 0x09, 0x47, 0x41, 0x50, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x47, 0x41, 0x50, 0x51, 0x55, 0x45, 0x55, 0x45, 0x12, 0x1b, 0x0a, - 0x09, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x47, 0x41, 0x50, 0x4e, 0x50, 0x52, 0x4f, 0x43, 0x12, 0x17, 0x0a, 0x07, 0x47, 0x41, - 0x50, 0x5f, 0x50, 0x50, 0x4e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x47, 0x41, 0x50, - 0x50, 0x50, 0x4e, 0x12, 0x19, 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x47, 0x50, 0x55, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x47, 0x50, 0x55, 0x12, 0x19, - 0x0a, 0x08, 0x47, 0x41, 0x50, 0x5f, 0x4e, 0x44, 0x43, 0x55, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x47, 0x41, 0x50, 0x4e, 0x44, 0x43, 0x55, 0x12, 0x1e, 0x0a, 0x0b, 0x47, 0x41, 0x50, - 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x4d, 0x45, 0x4d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x47, 0x41, 0x50, 0x4a, 0x4f, 0x42, 0x4d, 0x45, 0x4d, 0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, - 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x47, 0x41, 0x50, 0x57, 0x41, 0x4c, 0x4c, 0x54, 0x49, 0x4d, 0x45, 0x12, 0x23, 0x0a, - 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x56, 0x45, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x47, 0x41, 0x50, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, - 0x56, 0x45, 0x12, 0x1f, 0x0a, 0x0b, 0x47, 0x41, 0x50, 0x5f, 0x41, 0x50, 0x50, 0x4e, 0x41, 0x4d, - 0x45, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x41, 0x50, 0x41, 0x50, 0x50, 0x4e, - 0x41, 0x4d, 0x45, 0x12, 0x22, 0x0a, 0x0d, 0x47, 0x41, 0x50, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, - 0x5f, 0x53, 0x55, 0x42, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x47, 0x41, 0x50, 0x4d, - 0x55, 0x4c, 0x54, 0x49, 0x53, 0x55, 0x42, 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, - 0x54, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, 0x46, 0x49, 0x4c, 0x45, - 0x12, 0x27, 0x0a, 0x10, 0x47, 0x41, 0x50, 0x5f, 0x53, 0x54, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x5f, - 0x46, 0x49, 0x4c, 0x45, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x47, 0x41, 0x50, 0x53, - 0x54, 0x44, 0x45, 0x52, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x22, 0x2e, 0x0a, 0x10, 0x50, 0x61, 0x72, - 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x11, 0x50, 0x61, 0x72, - 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x4d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6f, 0x0a, 0x09, 0x51, 0x75, - 0x6f, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x22, 0x29, 0x0a, 0x0b, 0x57, - 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, + 0x6f, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6f, 0x0a, + 0x09, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x48, 0x0a, 0x0c, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, - 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x2a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x0d, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, - 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x4a, 0x0a, 0x06, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x22, 0x57, 0x0a, 0x0b, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, - 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x07, - 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x79, 0x22, 0x25, 0x0a, 0x07, 0x4a, 0x6f, 0x62, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x54, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, - 0x73, 0x67, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x72, 0x65, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x72, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, + 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x22, 0x29, + 0x0a, 0x0b, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x48, 0x0a, 0x0c, 0x57, 0x61, 0x6c, + 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x2a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x57, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x01, 0x79, 0x22, 0x6b, 0x0a, 0x13, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, - 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, - 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x22, 0xa4, 0x0f, 0x0a, 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x70, 0x75, - 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x48, 0x6f, 0x75, - 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x53, - 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, - 0x6c, 0x65, 0x61, 0x72, 0x53, 0x65, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x55, 0x6e, - 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x63, - 0x70, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x1e, 0x0a, - 0x0a, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x12, 0x22, 0x0a, - 0x0c, 0x64, 0x63, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x0c, 0x64, 0x63, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x43, - 0x70, 0x75, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, - 0x65, 0x6e, 0x63, 0x79, 0x43, 0x70, 0x75, 0x12, 0x2a, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x43, 0x70, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x43, 0x70, 0x75, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x4d, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x57, 0x61, 0x6c, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x6f, 0x6c, 0x64, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x6f, 0x6c, 0x64, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x70, 0x75, 0x43, 0x61, 0x72, 0x64, - 0x48, 0x6f, 0x75, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x70, 0x75, 0x43, - 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x70, 0x75, 0x43, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x70, 0x75, - 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x70, 0x75, 0x55, 0x6e, - 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x67, - 0x70, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x6a, 0x6f, 0x62, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x6a, 0x6f, 0x62, 0x12, - 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x43, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x43, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x44, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x44, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, - 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x47, 0x70, 0x75, 0x73, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x47, 0x70, 0x75, 0x73, 0x12, - 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x1b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, - 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x47, 0x70, - 0x75, 0x4e, 0x75, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x47, - 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, - 0x6f, 0x62, 0x4d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x6a, 0x6f, 0x62, 0x4d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6a, - 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x50, 0x72, 0x6f, 0x63, - 0x4e, 0x75, 0x6d, 0x18, 0x21, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x50, 0x72, - 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, - 0x52, 0x65, 0x71, 0x43, 0x70, 0x75, 0x18, 0x23, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x43, 0x70, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, - 0x71, 0x44, 0x63, 0x75, 0x18, 0x24, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x44, 0x63, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x47, - 0x70, 0x75, 0x18, 0x25, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x47, 0x70, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x4d, 0x65, 0x6d, - 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x4d, 0x65, - 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x27, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x29, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x6a, 0x6f, 0x62, 0x56, 0x6d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x18, 0x2b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x56, 0x6d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x2c, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x55, 0x73, 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6a, 0x6f, 0x62, 0x57, - 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6a, - 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x18, 0x2e, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x65, 0x64, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x65, 0x64, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, - 0x31, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x33, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, - 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, 0x70, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x35, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, 0x70, 0x75, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x6d, 0x18, - 0x36, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x6d, 0x12, - 0x24, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x37, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x57, 0x61, 0x6c, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x39, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x22, 0x69, 0x0a, 0x14, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x4a, 0x0a, 0x06, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x70, 0x75, 0x43, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x22, 0x57, 0x0a, 0x0b, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x70, 0x63, 0x41, + 0x43, 0x2e, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x2b, 0x0a, 0x07, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0c, + 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x79, 0x22, 0x25, 0x0a, 0x07, + 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x43, + 0x6f, 0x72, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x07, 0x4a, 0x6f, 0x62, + 0x43, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x01, 0x79, 0x22, 0x6b, 0x0a, 0x13, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, + 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, + 0x62, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0xa4, 0x0f, 0x0a, 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, + 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, + 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, + 0x48, 0x6f, 0x75, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x4e, 0x75, 0x63, 0x6c, 0x65, + 0x61, 0x72, 0x53, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x70, 0x75, + 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x53, 0x65, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x70, + 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0c, 0x63, 0x70, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x63, 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, + 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x63, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x64, 0x63, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, + 0x63, 0x79, 0x43, 0x70, 0x75, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x66, 0x66, + 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x70, 0x75, 0x12, 0x2a, 0x0a, 0x10, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x43, 0x70, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x43, + 0x70, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x11, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x6f, 0x6c, 0x64, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x6f, + 0x6c, 0x64, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x70, 0x75, 0x43, + 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, + 0x70, 0x75, 0x43, 0x61, 0x72, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x70, + 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x67, 0x70, 0x75, 0x43, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x70, + 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0c, 0x67, 0x70, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x6a, 0x6f, 0x62, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x6a, + 0x6f, 0x62, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x43, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x43, 0x70, 0x75, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x44, 0x63, 0x75, 0x4e, 0x75, 0x6d, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x44, 0x63, 0x75, 0x4e, 0x75, 0x6d, + 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x47, 0x70, 0x75, 0x73, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x47, 0x70, + 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, 0x48, 0x6f, 0x73, + 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x65, 0x63, + 0x48, 0x6f, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x45, 0x78, 0x69, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6a, 0x6f, 0x62, + 0x45, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, + 0x62, 0x47, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6a, + 0x6f, 0x62, 0x47, 0x70, 0x75, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, + 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x4d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x18, 0x1f, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x4d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x50, + 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x18, 0x21, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6a, 0x6f, + 0x62, 0x50, 0x72, 0x6f, 0x63, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x6a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x43, 0x70, 0x75, 0x18, 0x23, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x43, 0x70, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, + 0x62, 0x52, 0x65, 0x71, 0x44, 0x63, 0x75, 0x18, 0x24, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, + 0x6f, 0x62, 0x52, 0x65, 0x71, 0x44, 0x63, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x52, + 0x65, 0x71, 0x47, 0x70, 0x75, 0x18, 0x25, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x6f, 0x62, + 0x52, 0x65, 0x71, 0x47, 0x70, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, + 0x4d, 0x65, 0x6d, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x4d, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x18, 0x27, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0f, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x56, 0x6d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x64, 0x18, + 0x2b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x56, 0x6d, 0x65, 0x6d, 0x55, 0x73, + 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x69, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6a, + 0x6f, 0x62, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x64, 0x18, 0x2e, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, + 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x65, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, + 0x63, 0x74, 0x18, 0x31, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x63, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, + 0x33, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x61, + 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, 0x70, 0x75, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x43, + 0x70, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, + 0x65, 0x6d, 0x18, 0x36, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, + 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x37, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x39, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x3a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x3b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x22, 0x69, 0x0a, 0x14, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, + 0x70, 0x63, 0x41, 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x72, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x69, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, + 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x24, 0x0a, + 0x0d, 0x72, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6e, 0x65, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x4c, + 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x08, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, + 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x22, 0x57, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xa9, 0x04, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x63, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x63, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, + 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, + 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x12, 0x24, 0x0a, + 0x0d, 0x71, 0x75, 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, + 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, + 0x4e, 0x63, 0x70, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, + 0x64, 0x63, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, + 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, + 0x63, 0x70, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, + 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x71, + 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, + 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, + 0x4e, 0x12, 0x26, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, + 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, + 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x50, 0x4e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x50, 0x4e, 0x22, 0x65, 0x0a, 0x10, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x60, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, - 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x72, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x64, 0x69, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x6f, - 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x6f, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6e, 0x65, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x2c, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, - 0x72, 0x72, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x08, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x72, - 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x49, 0x44, 0x22, 0x57, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa9, 0x04, 0x0a, - 0x09, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, - 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, - 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, - 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x71, 0x75, - 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, - 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x12, 0x24, 0x0a, 0x0d, 0x71, 0x75, - 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, - 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, - 0x64, 0x63, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, - 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, - 0x63, 0x70, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, - 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, - 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x12, 0x26, - 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, - 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, - 0x44, 0x63, 0x75, 0x50, 0x4e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, - 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x50, 0x4e, 0x22, 0x65, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xf0, 0x03, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, + 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, + 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, + 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, + 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, + 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x71, 0x75, + 0x65, 0x4d, 0x61, 0x78, 0x50, 0x50, 0x4e, 0x12, 0x24, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, + 0x71, 0x75, 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, + 0x6f, 0x64, 0x65, 0x63, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, + 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, + 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x12, 0x26, 0x0a, 0x0e, 0x71, + 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, + 0x50, 0x4e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, + 0x44, 0x63, 0x75, 0x50, 0x4e, 0x22, 0x6b, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, + 0x74, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, - 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0xf0, 0x03, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, - 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x67, - 0x70, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, - 0x78, 0x4e, 0x67, 0x70, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, - 0x50, 0x50, 0x4e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x71, 0x75, 0x65, 0x4d, 0x61, - 0x78, 0x50, 0x50, 0x4e, 0x12, 0x24, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x43, 0x68, 0x61, 0x72, 0x67, - 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x71, 0x75, 0x65, - 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, - 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x64, 0x63, 0x75, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x69, 0x6e, 0x4e, 0x63, 0x70, 0x75, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x46, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, - 0x63, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, - 0x4e, 0x6f, 0x64, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, - 0x47, 0x70, 0x75, 0x50, 0x4e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, - 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x50, 0x4e, 0x12, 0x26, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x4d, - 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x50, 0x4e, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, - 0x50, 0x4e, 0x22, 0x6b, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, - 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x8f, 0x06, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x43, 0x70, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x43, 0x70, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x44, 0x63, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x44, 0x63, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x47, 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x47, 0x70, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x4d, 0x6c, 0x75, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x4d, 0x6c, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x4d, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, - 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, - 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4d, - 0x61, 0x78, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x52, 0x75, - 0x6e, 0x4a, 0x6f, 0x62, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, - 0x4d, 0x61, 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x12, - 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, - 0x61, 0x78, 0x44, 0x63, 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x6c, 0x75, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x6c, - 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4d, - 0x65, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x30, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, - 0x62, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x52, - 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x0a, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x12, 0x20, 0x0a, - 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x22, - 0x5b, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x0b, - 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0x48, 0x0a, 0x0c, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x73, 0x67, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, + 0x74, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x8f, 0x06, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, + 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x4d, 0x6c, 0x75, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x6c, 0x75, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, + 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x61, + 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, + 0x73, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x0a, 0x0d, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x43, + 0x70, 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, + 0x44, 0x63, 0x75, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x44, 0x63, 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x47, 0x70, 0x75, 0x12, 0x24, + 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x6c, 0x75, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, + 0x78, 0x4d, 0x6c, 0x75, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, + 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x13, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, + 0x61, 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, + 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, + 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x57, 0x61, 0x6c, 0x6c, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x22, 0x5b, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x59, 0x0a, 0x09, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x26, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, - 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x24, 0x0a, 0x0c, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5f, 0x0a, 0x0d, - 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, - 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5d, 0x0a, - 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, - 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xab, 0x01, 0x0a, - 0x0d, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, - 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x32, 0xaf, 0x08, 0x0a, 0x05, 0x68, - 0x70, 0x63, 0x41, 0x43, 0x12, 0x30, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x12, - 0x11, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, - 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, - 0x41, 0x43, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, - 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, - 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, - 0x2e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, - 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, - 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x2e, - 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x1a, 0x16, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x11, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0f, - 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x3d, 0x0a, 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x0f, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x43, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, - 0x74, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0f, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, - 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x68, 0x70, 0x63, 0x41, - 0x43, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, - 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x50, - 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, - 0x18, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, - 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x08, 0x57, 0x61, 0x6c, - 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x57, 0x61, - 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, - 0x43, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, - 0x0a, 0x09, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x13, 0x2e, 0x68, 0x70, - 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, - 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, - 0x65, 0x12, 0x11, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, 0x70, 0x75, - 0x43, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, - 0x12, 0x0e, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x0f, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x4b, 0x0a, 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x71, 0x1a, 0x1b, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x11, 0x2e, 0x68, - 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x10, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x42, 0x08, 0x5a, 0x06, - 0x2f, 0x68, 0x70, 0x63, 0x41, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x63, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, + 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0c, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x59, + 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x24, 0x0a, 0x0c, 0x41, 0x43, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x5f, 0x0a, 0x0d, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x5d, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xab, 0x01, 0x0a, 0x0d, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6a, + 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x0d, 0x0a, + 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x22, 0x28, 0x0a, 0x06, + 0x63, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x4f, 0x70, 0x73, 0x41, 0x74, + 0x46, 0x70, 0x31, 0x36, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x70, 0x4f, 0x70, 0x73, + 0x41, 0x74, 0x46, 0x70, 0x31, 0x36, 0x32, 0xe7, 0x08, 0x0a, 0x05, 0x68, 0x70, 0x63, 0x41, 0x43, + 0x12, 0x30, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x11, 0x2e, 0x68, 0x70, + 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x12, + 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x45, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4a, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x19, + 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x09, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x68, 0x70, + 0x63, 0x41, 0x43, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x41, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x68, 0x70, 0x63, 0x41, + 0x43, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, + 0x43, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x36, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, + 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, + 0x62, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0b, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, + 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, + 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x11, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x68, 0x70, 0x63, + 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x68, 0x70, + 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, + 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x0f, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x14, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x0f, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x42, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, + 0x74, 0x61, 0x12, 0x17, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x53, + 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x68, 0x70, + 0x63, 0x41, 0x43, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x54, 0x69, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x57, 0x61, + 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x09, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x68, + 0x70, 0x63, 0x41, 0x43, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x11, 0x2e, + 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x0e, 0x2e, 0x68, + 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x68, + 0x70, 0x63, 0x41, 0x43, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, + 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x1a, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, + 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x6f, 0x62, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0a, 0x47, 0x65, + 0x74, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x11, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, + 0x2e, 0x41, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x68, 0x70, + 0x63, 0x41, 0x43, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, + 0x0e, 0x47, 0x65, 0x74, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x13, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x41, 0x43, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x12, 0x2e, + 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x0d, 0x2e, 0x68, 0x70, 0x63, 0x41, 0x43, 0x2e, 0x63, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x42, 0x08, 0x5a, 0x06, 0x2f, 0x68, 0x70, 0x63, 0x41, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( - file_hpcAC_proto_rawDescOnce sync.Once - file_hpcAC_proto_rawDescData = file_hpcAC_proto_rawDesc + file_pb_hpcAC_proto_rawDescOnce sync.Once + file_pb_hpcAC_proto_rawDescData = file_pb_hpcAC_proto_rawDesc ) -func file_hpcAC_proto_rawDescGZIP() []byte { - file_hpcAC_proto_rawDescOnce.Do(func() { - file_hpcAC_proto_rawDescData = protoimpl.X.CompressGZIP(file_hpcAC_proto_rawDescData) +func file_pb_hpcAC_proto_rawDescGZIP() []byte { + file_pb_hpcAC_proto_rawDescOnce.Do(func() { + file_pb_hpcAC_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_hpcAC_proto_rawDescData) }) - return file_hpcAC_proto_rawDescData + return file_pb_hpcAC_proto_rawDescData } -var file_hpcAC_proto_msgTypes = make([]protoimpl.MessageInfo, 58) -var file_hpcAC_proto_goTypes = []interface{}{ +var file_pb_hpcAC_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_pb_hpcAC_proto_goTypes = []interface{}{ (*JobManager)(nil), // 0: hpcAC.JobManager (*JobManagerReq)(nil), // 1: hpcAC.JobManagerReq (*ListJobManagerResp)(nil), // 2: hpcAC.ListJobManagerResp @@ -6539,14 +6634,16 @@ var file_hpcAC_proto_goTypes = []interface{}{ (*ACClusterResp)(nil), // 54: hpcAC.ACClusterResp (*ClusterResp)(nil), // 55: hpcAC.ClusterResp (*ACClusterData)(nil), // 56: hpcAC.ACClusterData - nil, // 57: hpcAC.DeleteJobResp.DataEntry + (*ResourceReq)(nil), // 57: hpcAC.resourceReq + (*CpResp)(nil), // 58: hpcAC.cpResp + nil, // 59: hpcAC.DeleteJobResp.DataEntry } -var file_hpcAC_proto_depIdxs = []int32{ +var file_pb_hpcAC_proto_depIdxs = []int32{ 0, // 0: hpcAC.ListJobManagerResp.data:type_name -> hpcAC.JobManager 3, // 1: hpcAC.JobDetail.job_init_attr:type_name -> hpcAC.JobInitAttr 4, // 2: hpcAC.JobDetail.job_session_info:type_name -> hpcAC.JobVncSessionInfo 5, // 3: hpcAC.GetJobDetailResp.data:type_name -> hpcAC.JobDetail - 57, // 4: hpcAC.DeleteJobResp.data:type_name -> hpcAC.DeleteJobResp.DataEntry + 59, // 4: hpcAC.DeleteJobResp.data:type_name -> hpcAC.DeleteJobResp.DataEntry 10, // 5: hpcAC.ListJobResp.jobs:type_name -> hpcAC.job 15, // 6: hpcAC.ListHistoryJobResp.data:type_name -> hpcAC.HistoryJobData 16, // 7: hpcAC.HistoryJobData.list:type_name -> hpcAC.HistoryJobList @@ -6583,38 +6680,40 @@ var file_hpcAC_proto_depIdxs = []int32{ 35, // 38: hpcAC.hpcAC.HistoryJobDetail:input_type -> hpcAC.HistoryJobDetailReq 48, // 39: hpcAC.hpcAC.GetACToken:input_type -> hpcAC.ACTokenReq 53, // 40: hpcAC.hpcAC.GetACClusterId:input_type -> hpcAC.ACClusterReq - 12, // 41: hpcAC.hpcAC.ListJob:output_type -> hpcAC.ListJobResp - 14, // 42: hpcAC.hpcAC.ListHistoryJob:output_type -> hpcAC.ListHistoryJobResp - 18, // 43: hpcAC.hpcAC.SubmitJob:output_type -> hpcAC.SubmitJobResp - 2, // 44: hpcAC.hpcAC.ListJobManager:output_type -> hpcAC.ListJobManagerResp - 7, // 45: hpcAC.hpcAC.GetJobDetail:output_type -> hpcAC.GetJobDetailResp - 9, // 46: hpcAC.hpcAC.DeleteJob:output_type -> hpcAC.DeleteJobResp - 38, // 47: hpcAC.hpcAC.FileContent:output_type -> hpcAC.FileContentResp - 42, // 48: hpcAC.hpcAC.SelectQueueByUser:output_type -> hpcAC.QueueResp - 44, // 49: hpcAC.hpcAC.QueryQueueDetails:output_type -> hpcAC.QueueDetailsResp - 46, // 50: hpcAC.hpcAC.QueryUserQuotasLimit:output_type -> hpcAC.UserQuotasLimitResp - 21, // 51: hpcAC.hpcAC.ParaStorQuota:output_type -> hpcAC.ParaStorQuotaResp - 24, // 52: hpcAC.hpcAC.WallTime:output_type -> hpcAC.WallTimeResp - 26, // 53: hpcAC.hpcAC.QueueJobs:output_type -> hpcAC.QueueJobsResp - 30, // 54: hpcAC.hpcAC.CpuCore:output_type -> hpcAC.CpuCoreResp - 33, // 55: hpcAC.hpcAC.jobs:output_type -> hpcAC.JobsResp - 37, // 56: hpcAC.hpcAC.HistoryJobDetail:output_type -> hpcAC.HistoryJobDetailResp - 52, // 57: hpcAC.hpcAC.GetACToken:output_type -> hpcAC.TokenResp - 55, // 58: hpcAC.hpcAC.GetACClusterId:output_type -> hpcAC.ClusterResp - 41, // [41:59] is the sub-list for method output_type - 23, // [23:41] is the sub-list for method input_type + 57, // 41: hpcAC.hpcAC.GetComputingPower:input_type -> hpcAC.resourceReq + 12, // 42: hpcAC.hpcAC.ListJob:output_type -> hpcAC.ListJobResp + 14, // 43: hpcAC.hpcAC.ListHistoryJob:output_type -> hpcAC.ListHistoryJobResp + 18, // 44: hpcAC.hpcAC.SubmitJob:output_type -> hpcAC.SubmitJobResp + 2, // 45: hpcAC.hpcAC.ListJobManager:output_type -> hpcAC.ListJobManagerResp + 7, // 46: hpcAC.hpcAC.GetJobDetail:output_type -> hpcAC.GetJobDetailResp + 9, // 47: hpcAC.hpcAC.DeleteJob:output_type -> hpcAC.DeleteJobResp + 38, // 48: hpcAC.hpcAC.FileContent:output_type -> hpcAC.FileContentResp + 42, // 49: hpcAC.hpcAC.SelectQueueByUser:output_type -> hpcAC.QueueResp + 44, // 50: hpcAC.hpcAC.QueryQueueDetails:output_type -> hpcAC.QueueDetailsResp + 46, // 51: hpcAC.hpcAC.QueryUserQuotasLimit:output_type -> hpcAC.UserQuotasLimitResp + 21, // 52: hpcAC.hpcAC.ParaStorQuota:output_type -> hpcAC.ParaStorQuotaResp + 24, // 53: hpcAC.hpcAC.WallTime:output_type -> hpcAC.WallTimeResp + 26, // 54: hpcAC.hpcAC.QueueJobs:output_type -> hpcAC.QueueJobsResp + 30, // 55: hpcAC.hpcAC.CpuCore:output_type -> hpcAC.CpuCoreResp + 33, // 56: hpcAC.hpcAC.jobs:output_type -> hpcAC.JobsResp + 37, // 57: hpcAC.hpcAC.HistoryJobDetail:output_type -> hpcAC.HistoryJobDetailResp + 52, // 58: hpcAC.hpcAC.GetACToken:output_type -> hpcAC.TokenResp + 55, // 59: hpcAC.hpcAC.GetACClusterId:output_type -> hpcAC.ClusterResp + 58, // 60: hpcAC.hpcAC.GetComputingPower:output_type -> hpcAC.cpResp + 42, // [42:61] is the sub-list for method output_type + 23, // [23:42] is the sub-list for method input_type 23, // [23:23] is the sub-list for extension type_name 23, // [23:23] is the sub-list for extension extendee 0, // [0:23] is the sub-list for field type_name } -func init() { file_hpcAC_proto_init() } -func file_hpcAC_proto_init() { - if File_hpcAC_proto != nil { +func init() { file_pb_hpcAC_proto_init() } +func file_pb_hpcAC_proto_init() { + if File_pb_hpcAC_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_hpcAC_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobManager); i { case 0: return &v.state @@ -6626,7 +6725,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobManagerReq); i { case 0: return &v.state @@ -6638,7 +6737,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListJobManagerResp); i { case 0: return &v.state @@ -6650,7 +6749,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobInitAttr); i { case 0: return &v.state @@ -6662,7 +6761,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobVncSessionInfo); i { case 0: return &v.state @@ -6674,7 +6773,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobDetail); i { case 0: return &v.state @@ -6686,7 +6785,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobDetailReq); i { case 0: return &v.state @@ -6698,7 +6797,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetJobDetailResp); i { case 0: return &v.state @@ -6710,7 +6809,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteJobReq); i { case 0: return &v.state @@ -6722,7 +6821,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteJobResp); i { case 0: return &v.state @@ -6734,7 +6833,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Job); i { case 0: return &v.state @@ -6746,7 +6845,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListJobReq); i { case 0: return &v.state @@ -6758,7 +6857,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListJobResp); i { case 0: return &v.state @@ -6770,7 +6869,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListHistoryJobReq); i { case 0: return &v.state @@ -6782,7 +6881,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListHistoryJobResp); i { case 0: return &v.state @@ -6794,7 +6893,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryJobData); i { case 0: return &v.state @@ -6806,7 +6905,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryJobList); i { case 0: return &v.state @@ -6818,7 +6917,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitJobReq); i { case 0: return &v.state @@ -6830,7 +6929,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitJobResp); i { case 0: return &v.state @@ -6842,7 +6941,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MapAppJobInfo); i { case 0: return &v.state @@ -6854,7 +6953,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ParaStorQuotaReq); i { case 0: return &v.state @@ -6866,7 +6965,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ParaStorQuotaResp); i { case 0: return &v.state @@ -6878,7 +6977,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QuotaData); i { case 0: return &v.state @@ -6890,7 +6989,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WallTimeReq); i { case 0: return &v.state @@ -6902,7 +7001,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WallTimeResp); i { case 0: return &v.state @@ -6914,7 +7013,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueJobsReq); i { case 0: return &v.state @@ -6926,7 +7025,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueJobsResp); i { case 0: return &v.state @@ -6938,7 +7037,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Queue); i { case 0: return &v.state @@ -6950,7 +7049,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Metric); i { case 0: return &v.state @@ -6962,7 +7061,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CpuCoreReq); i { case 0: return &v.state @@ -6974,7 +7073,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CpuCoreResp); i { case 0: return &v.state @@ -6986,7 +7085,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CpuCore); i { case 0: return &v.state @@ -6998,7 +7097,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobsReq); i { case 0: return &v.state @@ -7010,7 +7109,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobsResp); i { case 0: return &v.state @@ -7022,7 +7121,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobCore); i { case 0: return &v.state @@ -7034,7 +7133,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryJobDetailReq); i { case 0: return &v.state @@ -7046,7 +7145,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryJobDetail); i { case 0: return &v.state @@ -7058,7 +7157,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HistoryJobDetailResp); i { case 0: return &v.state @@ -7070,7 +7169,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileContentResp); i { case 0: return &v.state @@ -7082,7 +7181,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileDataReq); i { case 0: return &v.state @@ -7094,7 +7193,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileDataResp); i { case 0: return &v.state @@ -7106,7 +7205,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueReq); i { case 0: return &v.state @@ -7118,7 +7217,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueResp); i { case 0: return &v.state @@ -7130,7 +7229,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueData); i { case 0: return &v.state @@ -7142,7 +7241,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueDetailsResp); i { case 0: return &v.state @@ -7154,7 +7253,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueueDetailsData); i { case 0: return &v.state @@ -7166,7 +7265,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserQuotasLimitResp); i { case 0: return &v.state @@ -7178,7 +7277,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserQuotasLimitData); i { case 0: return &v.state @@ -7190,7 +7289,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACTokenReq); i { case 0: return &v.state @@ -7202,7 +7301,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACTokenResp); i { case 0: return &v.state @@ -7214,7 +7313,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACTokenData); i { case 0: return &v.state @@ -7226,7 +7325,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACTokenState); i { case 0: return &v.state @@ -7238,7 +7337,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TokenResp); i { case 0: return &v.state @@ -7250,7 +7349,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACClusterReq); i { case 0: return &v.state @@ -7262,7 +7361,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACClusterResp); i { case 0: return &v.state @@ -7274,7 +7373,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterResp); i { case 0: return &v.state @@ -7286,7 +7385,7 @@ func file_hpcAC_proto_init() { return nil } } - file_hpcAC_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_pb_hpcAC_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ACClusterData); i { case 0: return &v.state @@ -7298,23 +7397,47 @@ func file_hpcAC_proto_init() { return nil } } + file_pb_hpcAC_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pb_hpcAC_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CpResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_hpcAC_proto_rawDesc, + RawDescriptor: file_pb_hpcAC_proto_rawDesc, NumEnums: 0, - NumMessages: 58, + NumMessages: 60, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_hpcAC_proto_goTypes, - DependencyIndexes: file_hpcAC_proto_depIdxs, - MessageInfos: file_hpcAC_proto_msgTypes, + GoTypes: file_pb_hpcAC_proto_goTypes, + DependencyIndexes: file_pb_hpcAC_proto_depIdxs, + MessageInfos: file_pb_hpcAC_proto_msgTypes, }.Build() - File_hpcAC_proto = out.File - file_hpcAC_proto_rawDesc = nil - file_hpcAC_proto_goTypes = nil - file_hpcAC_proto_depIdxs = nil + File_pb_hpcAC_proto = out.File + file_pb_hpcAC_proto_rawDesc = nil + file_pb_hpcAC_proto_goTypes = nil + file_pb_hpcAC_proto_depIdxs = nil } diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go b/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go index ad40059..eda4e8e 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC/hpcAC_grpc.pb.go @@ -2,7 +2,7 @@ // versions: // - protoc-gen-go-grpc v1.2.0 // - protoc v3.19.4 -// source: hpcAC.proto +// source: pb/hpcAC.proto package hpcAC @@ -55,6 +55,8 @@ type HpcACClient interface { GetACToken(ctx context.Context, in *ACTokenReq, opts ...grpc.CallOption) (*TokenResp, error) // 曙光ac获取clusterid GetACClusterId(ctx context.Context, in *ACClusterReq, opts ...grpc.CallOption) (*ClusterResp, error) + // 获取曙光账号算力 + GetComputingPower(ctx context.Context, in *ResourceReq, opts ...grpc.CallOption) (*CpResp, error) } type hpcACClient struct { @@ -227,6 +229,15 @@ func (c *hpcACClient) GetACClusterId(ctx context.Context, in *ACClusterReq, opts return out, nil } +func (c *hpcACClient) GetComputingPower(ctx context.Context, in *ResourceReq, opts ...grpc.CallOption) (*CpResp, error) { + out := new(CpResp) + err := c.cc.Invoke(ctx, "/hpcAC.hpcAC/GetComputingPower", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // HpcACServer is the server API for HpcAC service. // All implementations must embed UnimplementedHpcACServer // for forward compatibility @@ -264,6 +275,8 @@ type HpcACServer interface { GetACToken(context.Context, *ACTokenReq) (*TokenResp, error) // 曙光ac获取clusterid GetACClusterId(context.Context, *ACClusterReq) (*ClusterResp, error) + // 获取曙光账号算力 + GetComputingPower(context.Context, *ResourceReq) (*CpResp, error) mustEmbedUnimplementedHpcACServer() } @@ -325,6 +338,9 @@ func (UnimplementedHpcACServer) GetACToken(context.Context, *ACTokenReq) (*Token func (UnimplementedHpcACServer) GetACClusterId(context.Context, *ACClusterReq) (*ClusterResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetACClusterId not implemented") } +func (UnimplementedHpcACServer) GetComputingPower(context.Context, *ResourceReq) (*CpResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetComputingPower not implemented") +} func (UnimplementedHpcACServer) mustEmbedUnimplementedHpcACServer() {} // UnsafeHpcACServer may be embedded to opt out of forward compatibility for this service. @@ -662,6 +678,24 @@ func _HpcAC_GetACClusterId_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _HpcAC_GetComputingPower_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResourceReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(HpcACServer).GetComputingPower(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/hpcAC.hpcAC/GetComputingPower", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(HpcACServer).GetComputingPower(ctx, req.(*ResourceReq)) + } + return interceptor(ctx, in, info, handler) +} + // HpcAC_ServiceDesc is the grpc.ServiceDesc for HpcAC service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -741,7 +775,11 @@ var HpcAC_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetACClusterId", Handler: _HpcAC_GetACClusterId_Handler, }, + { + MethodName: "GetComputingPower", + Handler: _HpcAC_GetComputingPower_Handler, + }, }, Streams: []grpc.StreamDesc{}, - Metadata: "hpcAC.proto", + Metadata: "pb/hpcAC.proto", } diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go b/adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go index 9b47632..197fb68 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/hpcac.go @@ -1,7 +1,6 @@ package main import ( - "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC" "PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/config" "PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic" @@ -9,8 +8,6 @@ import ( "PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/svc" commonConfig "PCM/common/config" "PCM/common/interceptor/rpcserver" - "PCM/common/tool" - "context" "flag" "fmt" "github.com/zeromicro/go-zero/core/conf" @@ -90,99 +87,10 @@ func main() { s.AddUnaryInterceptors(rpcserver.LoggerInterceptor) defer s.Stop() + // 初始化定时任务 + logic.InitCron(ctx) logx.Infof("Starting rpc server at %s...\n", c.ListenOn) - initCron(ctx) + s.Start() } - -func initCron(svc *svc.ServiceContext) { - submitJobLogic := logic.NewSubmitJobLogic(context.Background(), svc) - listLogic := logic.NewListJobLogic(context.Background(), svc) - svc.Cron.AddFunc("*/5 * * * * ?", func() { - syncInfoReq := pcmcoreclient.SyncInfoReq{ - Kind: "hpc", - ServiceName: "ac", - } - // 查询core端分发下来的任务列表 - infoList, err := queryCoreInfoList(svc) - if err != nil { - logx.Error(err) - return - } - // 提交任务 - submitJob(infoList, submitJobLogic) - // 查询运行中的任务列表同步信息 - listReq := hpcAC.ListJobReq{} - listJob, err := listLogic.ListJob(&listReq) - if err != nil { - logx.Error(err) - return - } - for index, _ := range infoList.HpcInfoList { - for _, job := range listJob.Jobs { - if job.JobName == infoList.HpcInfoList[index].Name { - infoList.HpcInfoList[index].JobId = job.JobId - infoList.HpcInfoList[index].StartTime = job.JobStartTime - infoList.HpcInfoList[index].RunningTime = int64(tool.RunTimeToSeconds(job.JobRunTime)) - if job.JobStatus == "statR" { - infoList.HpcInfoList[index].Status = "Running" - } - if job.JobStatus == "statC" { - infoList.HpcInfoList[index].Status = "Completed" - } - } - } - } - // 同步信息到core端 - if len(infoList.HpcInfoList) != 0 { - syncInfoReq.HpcInfoList = infoList.HpcInfoList - svc.PcmCoreRpc.SyncInfo(context.Background(), &syncInfoReq) - } - }) -} - -func submitJob(infoList *pcmcoreclient.InfoListResp, submitJobLogic *logic.SubmitJobLogic) { - for index, _ := range infoList.HpcInfoList { - if infoList.HpcInfoList[index].Status == "Saved" { - submitReq := hpcAC.SubmitJobReq{ - Appname: "BASE", - Apptype: "BASIC", - StrJobManagerID: 1638523853, - MapAppJobInfo: &hpcAC.MapAppJobInfo{ - GAP_CMD_FILE: "sleep 10", - GAP_NNODE: "1", - GAP_SUBMIT_TYPE: "cmd", - GAP_JOB_NAME: infoList.HpcInfoList[index].Name, - GAP_WORK_DIR: infoList.HpcInfoList[index].WorkDir, - GAP_QUEUE: "debug2", - GAP_NPROC: "1", - GAP_APPNAME: "BASE", - GAP_WALL_TIME: infoList.HpcInfoList[index].WallTime, - GAP_STD_OUT_FILE: "/public/home/zhijiang/test/testjob1/std.out.%j", - GAP_STD_ERR_FILE: " /public/home/zhijiang/test/testjob1/std.err.%j", - }, - } - jobResult, _ := submitJobLogic.SubmitJob(&submitReq) - if jobResult.Code == "0" { - infoList.HpcInfoList[index].Status = "Pending" - infoList.HpcInfoList[index].JobId = jobResult.Data - } else { - infoList.HpcInfoList[index].Result = "Failed" - infoList.HpcInfoList[index].Result = jobResult.Msg - } - } - } -} - -func queryCoreInfoList(svc *svc.ServiceContext) (*pcmcoreclient.InfoListResp, error) { - infoReq := pcmcoreclient.InfoListReq{ - Kind: "hpc", - ServiceName: "ac", - } - infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) - if err != nil { - return nil, err - } - return infoList, nil -} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go b/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go index 144572f..f0922c3 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/hpcacclient/hpcac.go @@ -21,6 +21,7 @@ type ( ACTokenResp = hpcAC.ACTokenResp ACTokenState = hpcAC.ACTokenState ClusterResp = hpcAC.ClusterResp + CpResp = hpcAC.CpResp CpuCore = hpcAC.CpuCore CpuCoreReq = hpcAC.CpuCoreReq CpuCoreResp = hpcAC.CpuCoreResp @@ -63,6 +64,7 @@ type ( QueueReq = hpcAC.QueueReq QueueResp = hpcAC.QueueResp QuotaData = hpcAC.QuotaData + ResourceReq = hpcAC.ResourceReq SubmitJobReq = hpcAC.SubmitJobReq SubmitJobResp = hpcAC.SubmitJobResp TokenResp = hpcAC.TokenResp @@ -105,6 +107,8 @@ type ( GetACToken(ctx context.Context, in *ACTokenReq, opts ...grpc.CallOption) (*TokenResp, error) // 曙光ac获取clusterid GetACClusterId(ctx context.Context, in *ACClusterReq, opts ...grpc.CallOption) (*ClusterResp, error) + // 获取曙光账号算力 + GetComputingPower(ctx context.Context, in *ResourceReq, opts ...grpc.CallOption) (*CpResp, error) } defaultHpcAC struct { @@ -222,3 +226,9 @@ func (m *defaultHpcAC) GetACClusterId(ctx context.Context, in *ACClusterReq, opt client := hpcAC.NewHpcACClient(m.cli.Conn()) return client.GetACClusterId(ctx, in, opts...) } + +// 获取曙光账号算力 +func (m *defaultHpcAC) GetComputingPower(ctx context.Context, in *ResourceReq, opts ...grpc.CallOption) (*CpResp, error) { + client := hpcAC.NewHpcACClient(m.cli.Conn()) + return client.GetComputingPower(ctx, in, opts...) +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/common/entity.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/common/entity.go new file mode 100644 index 0000000..813be71 --- /dev/null +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/common/entity.go @@ -0,0 +1,114 @@ +package common + +type CenterResp struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data struct { + Id int `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + IngressUrls []interface{} `json:"ingressUrls"` + EfileUrls []struct { + NodeName string `json:"nodeName"` + Enable string `json:"enable"` + FastTransEnable string `json:"fastTransEnable"` + UdpPort string `json:"udpPort"` + Version string `json:"version"` + Url string `json:"url"` + AppId string `json:"appId,omitempty"` + AppSecret string `json:"appSecret,omitempty"` + IsManagerNode string `json:"isManagerNode,omitempty"` + } `json:"efileUrls"` + EshellUrls []struct { + Enable string `json:"enable"` + Version string `json:"version"` + Url string `json:"url"` + NodeName string `json:"nodeName,omitempty"` + AppId string `json:"appId,omitempty"` + AppSecret string `json:"appSecret,omitempty"` + FastTransEnable string `json:"fastTransEnable,omitempty"` + UdpPort string `json:"udpPort,omitempty"` + IsManagerNode string `json:"isManagerNode,omitempty"` + } `json:"eshellUrls"` + HpcUrls []struct { + Enable string `json:"enable"` + IsManagerNode string `json:"isManagerNode"` + Version string `json:"version"` + Url string `json:"url"` + } `json:"hpcUrls"` + AiUrls []struct { + Enable string `json:"enable"` + Version string `json:"version"` + Url string `json:"url"` + } `json:"aiUrls"` + EshellSshHosts []struct { + Enable string `json:"enable"` + Url string `json:"url"` + NodeName string `json:"nodeName,omitempty"` + AppId string `json:"appId,omitempty"` + AppSecret string `json:"appSecret,omitempty"` + FastTransEnable string `json:"fastTransEnable,omitempty"` + UdpPort string `json:"udpPort,omitempty"` + IsManagerNode string `json:"isManagerNode,omitempty"` + Version string `json:"version,omitempty"` + } `json:"eshellSshHosts"` + InternetSshHosts []struct { + LimitState string `json:"limitState"` + Url string `json:"url"` + } `json:"internetSshHosts"` + ClusterUserInfo struct { + UserName string `json:"userName"` + HomePath string `json:"homePath"` + } `json:"clusterUserInfo"` + } `json:"data"` +} + +type TokenResp struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data []struct { + ClusterId string `json:"clusterId"` + ClusterName string `json:"clusterName"` + Token string `json:"token"` + } `json:"data"` +} + +type QuotaResp struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data struct { + UserName interface{} `json:"userName"` + AccountName interface{} `json:"accountName"` + UserMaxCpu int `json:"userMaxCpu"` + UserMaxDcu int `json:"userMaxDcu"` + UserMaxGpu int `json:"userMaxGpu"` + UserMaxMlu int `json:"userMaxMlu"` + UserMaxMem int `json:"userMaxMem"` + UserMaxNode int `json:"userMaxNode"` + UserMaxSubmitJob int `json:"userMaxSubmitJob"` + UserMaxRunJob int `json:"userMaxRunJob"` + AccountMaxCpu int `json:"accountMaxCpu"` + AccountMaxDcu int `json:"accountMaxDcu"` + AccountMaxGpu int `json:"accountMaxGpu"` + AccountMaxMlu int `json:"accountMaxMlu"` + AccountMaxMem int `json:"accountMaxMem"` + AccountMaxNode int `json:"accountMaxNode"` + AccountMaxSubmitJob int `json:"accountMaxSubmitJob"` + AccountMaxRunJob int `json:"accountMaxRunJob"` + UserMinCpu int `json:"userMinCpu"` + UserMinNode int `json:"userMinNode"` + MaxWallTime int `json:"maxWallTime"` + } `json:"data"` +} + +type ClusterResp struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data []struct { + JobManagerAddr string `json:"JobManagerAddr"` + JobManagerType string `json:"JobManagerType"` + Id int `json:"id"` + Text string `json:"text"` + JobManagerPort string `json:"JobManagerPort"` + } `json:"data"` +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/config.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/config.go index e5a9947..c60e342 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/config.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/config.go @@ -10,4 +10,5 @@ type Config struct { ShuguangConf PcmCoreRpcConf zrpc.RpcClientConf LogConf logx.LogConf + CPConf } diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/shuguangConfig.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/shuguangConfig.go index 5e7bcbd..e5d10a6 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/shuguangConfig.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/config/shuguangConfig.go @@ -13,3 +13,14 @@ type ShuguangConf struct { Token string `json:"Token"` ClusterID string `json:"ClusterID"` } + +// 算力相关配置 +type CPConf struct { + AcBaseUrl string + AuthUrl string + ClusUrl string + CenterUrl string + UserLimitUrl string + Dcu float32 + CpuCore float32 +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/cronlogic.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/cronlogic.go new file mode 100644 index 0000000..5117354 --- /dev/null +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/cronlogic.go @@ -0,0 +1,101 @@ +package logic + +import ( + "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" + "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC" + "PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/svc" + "PCM/common/tool" + "context" + "github.com/zeromicro/go-zero/core/logx" +) + +func InitCron(svc *svc.ServiceContext) { + submitJobLogic := NewSubmitJobLogic(context.Background(), svc) + listLogic := NewListJobLogic(context.Background(), svc) + svc.Cron.AddFunc("*/5 * * * * ?", func() { + syncInfoReq := pcmcoreclient.SyncInfoReq{ + Kind: "hpc", + ServiceName: "ac", + } + // 查询core端分发下来的任务列表 + infoList, err := queryCoreInfoList(svc) + if err != nil { + logx.Error(err) + return + } + // 提交任务 + submitJob(infoList, submitJobLogic) + // 查询运行中的任务列表同步信息 + listReq := hpcAC.ListJobReq{} + listJob, err := listLogic.ListJob(&listReq) + if err != nil { + logx.Error(err) + return + } + for index, _ := range infoList.HpcInfoList { + for _, job := range listJob.Jobs { + if job.JobName == infoList.HpcInfoList[index].Name { + infoList.HpcInfoList[index].JobId = job.JobId + infoList.HpcInfoList[index].StartTime = job.JobStartTime + infoList.HpcInfoList[index].RunningTime = int64(tool.RunTimeToSeconds(job.JobRunTime)) + if job.JobStatus == "statR" { + infoList.HpcInfoList[index].Status = "Running" + } + if job.JobStatus == "statC" { + infoList.HpcInfoList[index].Status = "Completed" + } + } + } + } + // 同步信息到core端 + if len(infoList.HpcInfoList) != 0 { + syncInfoReq.HpcInfoList = infoList.HpcInfoList + svc.PcmCoreRpc.SyncInfo(context.Background(), &syncInfoReq) + } + }) +} + +func submitJob(infoList *pcmcoreclient.InfoListResp, submitJobLogic *SubmitJobLogic) { + for index, _ := range infoList.HpcInfoList { + if infoList.HpcInfoList[index].Status == "Saved" { + submitReq := hpcAC.SubmitJobReq{ + Appname: "BASE", + Apptype: "BASIC", + StrJobManagerID: 1638523853, + MapAppJobInfo: &hpcAC.MapAppJobInfo{ + GAP_CMD_FILE: "sleep 10", + GAP_NNODE: "1", + GAP_SUBMIT_TYPE: "cmd", + GAP_JOB_NAME: infoList.HpcInfoList[index].Name, + GAP_WORK_DIR: infoList.HpcInfoList[index].WorkDir, + GAP_QUEUE: "debug2", + GAP_NPROC: "1", + GAP_APPNAME: "BASE", + GAP_WALL_TIME: infoList.HpcInfoList[index].WallTime, + GAP_STD_OUT_FILE: "/public/home/zhijiang/test/testjob1/std.out.%j", + GAP_STD_ERR_FILE: " /public/home/zhijiang/test/testjob1/std.err.%j", + }, + } + jobResult, _ := submitJobLogic.SubmitJob(&submitReq) + if jobResult.Code == "0" { + infoList.HpcInfoList[index].Status = "Pending" + infoList.HpcInfoList[index].JobId = jobResult.Data + } else { + infoList.HpcInfoList[index].Result = "Failed" + infoList.HpcInfoList[index].Result = jobResult.Msg + } + } + } +} + +func queryCoreInfoList(svc *svc.ServiceContext) (*pcmcoreclient.InfoListResp, error) { + infoReq := pcmcoreclient.InfoListReq{ + Kind: "hpc", + ServiceName: "ac", + } + infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) + if err != nil { + return nil, err + } + return infoList, nil +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/getcomputingpowerlogic.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/getcomputingpowerlogic.go new file mode 100644 index 0000000..1b6b2bb --- /dev/null +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/logic/getcomputingpowerlogic.go @@ -0,0 +1,31 @@ +package logic + +import ( + "context" + + "PCM/adaptor/PCM-HPC/PCM-AC/rpc/hpcAC" + "PCM/adaptor/PCM-HPC/PCM-AC/rpc/internal/svc" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetComputingPowerLogic struct { + ctx context.Context + svcCtx *svc.ServiceContext + logx.Logger +} + +func NewGetComputingPowerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetComputingPowerLogic { + return &GetComputingPowerLogic{ + ctx: ctx, + svcCtx: svcCtx, + Logger: logx.WithContext(ctx), + } +} + +// 获取曙光账号算力 +func (l *GetComputingPowerLogic) GetComputingPower(in *hpcAC.ResourceReq) (*hpcAC.CpResp, error) { + // todo: add your logic here and delete this line + + return &hpcAC.CpResp{}, nil +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/internal/server/hpcacserver.go b/adaptor/PCM-HPC/PCM-AC/rpc/internal/server/hpcacserver.go index bcf5428..cde05b4 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/internal/server/hpcacserver.go +++ b/adaptor/PCM-HPC/PCM-AC/rpc/internal/server/hpcacserver.go @@ -126,3 +126,9 @@ func (s *HpcACServer) GetACClusterId(ctx context.Context, in *hpcAC.ACClusterReq l := logic.NewGetACClusterIdLogic(ctx, s.svcCtx) return l.GetACClusterId(in) } + +// 获取曙光账号算力 +func (s *HpcACServer) GetComputingPower(ctx context.Context, in *hpcAC.ResourceReq) (*hpcAC.CpResp, error) { + l := logic.NewGetComputingPowerLogic(ctx, s.svcCtx) + return l.GetComputingPower(in) +} diff --git a/adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto b/adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto index 171cd81..f374f9e 100644 --- a/adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto +++ b/adaptor/PCM-HPC/PCM-AC/rpc/pb/hpcAC.proto @@ -606,6 +606,14 @@ message ACClusterData { string jobManagerPort = 5; } +// 获取算力接口参数 +message resourceReq{ +} + +message cpResp{ + float pOpsAtFp16 = 1; +} + // HPC Services for AC service hpcAC { @@ -660,4 +668,7 @@ service hpcAC { //曙光ac获取clusterid rpc GetACClusterId(ACClusterReq) returns(ClusterResp); + //获取曙光账号算力 + rpc GetComputingPower(resourceReq) returns (cpResp); + } \ No newline at end of file diff --git a/adaptor/PCM-HPC/PCM-TH/rpc/etc/hpcth.yaml b/adaptor/PCM-HPC/PCM-TH/rpc/etc/hpcth.yaml index 3967c8c..ea8db24 100644 --- a/adaptor/PCM-HPC/PCM-TH/rpc/etc/hpcth.yaml +++ b/adaptor/PCM-HPC/PCM-TH/rpc/etc/hpcth.yaml @@ -2,7 +2,7 @@ NacosConfig: DataId: pcm-th-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 + - IpAddr: 10.101.15.7 Port: 8848 ClientConfig: NamespaceId: test diff --git a/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/etc/kubenative.yaml b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/etc/kubenative.yaml index d8c0714..c022599 100644 --- a/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/etc/kubenative.yaml +++ b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/etc/kubenative.yaml @@ -2,7 +2,9 @@ NacosConfig: DataId: pcm-kubenative-rpc.yaml Group: DEFAULT_GROUP ServerConfigs: - - IpAddr: 127.0.0.1 +# - IpAddr: 127.0.0.1 +# Port: 8848 + - IpAddr: 10.101.15.7 Port: 8848 - IpAddr: nacos-headless Port: 8848 diff --git a/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/logic/cronlogic.go b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/logic/cronlogic.go new file mode 100644 index 0000000..a82e64b --- /dev/null +++ b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/logic/cronlogic.go @@ -0,0 +1,75 @@ +package logic + +import ( + "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" + "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/svc" + "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/kubenative" + "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/kubenativeclient" + "PCM/common/tool" + "context" + "github.com/zeromicro/go-zero/core/logx" + v1 "k8s.io/api/apps/v1" + "time" +) + +func InitCron(svc *svc.ServiceContext) { + svc.Cron.AddFunc("*/5 * * * * ?", func() { + SyncInfoReq := pcmcoreclient.SyncInfoReq{ + Kind: "cloud", + ServiceName: "kubeNative", + } + + // 查询core端分发下来的任务列表 + infoReq := pcmcoreclient.InfoListReq{ + Kind: "cloud", + ServiceName: "kubeNative", + } + infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) + if err != nil { + logx.Error(err) + return + } + // 提交任务 + applyYamlLogic := NewApplyYamlLogic(context.Background(), svc) + for index, _ := range infoList.CloudInfoList { + applyReq := kubenativeclient.ApplyReq{ + YamlString: infoList.CloudInfoList[index].YamlString, + } + infoList.CloudInfoList[index].Status = "Pending" + _, err := applyYamlLogic.ApplyYaml(&applyReq) + if err != nil { + return + } + } + // 查询Deployment列表 + listLogic := NewListLogic(context.Background(), svc) + listReq := kubenative.ListReq{ + YamlString: "apiVersion: apps/v1\nkind: Deployment\n", + } + resp, err := listLogic.List(&listReq) + var deploymentList v1.DeploymentList + tool.K8sUnstructured(resp.Data, &deploymentList) + if err != nil { + return + } + + // 遍历core端任务列表信息 + for index, _ := range infoList.CloudInfoList { + for _, deployment := range deploymentList.Items { + if deployment.Namespace == infoList.CloudInfoList[index].Namespace && deployment.Name == infoList.CloudInfoList[index].Name { + infoList.CloudInfoList[index].StartTime = tool.TimeRemoveZone(deployment.Status.Conditions[0].LastTransitionTime.Time).String() + infoList.CloudInfoList[index].RunningTime = time.Now().Sub(deployment.Status.Conditions[0].LastTransitionTime.Time).Milliseconds() / 1000 + // 判断状态 + if deployment.Status.ReadyReplicas == deployment.Status.Replicas { + infoList.CloudInfoList[index].Status = "running" + } else { + infoList.CloudInfoList[index].Status = "pending" + } + } + } + } + // 同步信息到core端 + SyncInfoReq.CloudInfoList = infoList.CloudInfoList + svc.PcmCoreRpc.SyncInfo(context.Background(), &SyncInfoReq) + }) +} diff --git a/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go index 7c92efd..f94d325 100644 --- a/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go +++ b/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/pcmkubenative.go @@ -1,22 +1,15 @@ package main import ( - "PCM/adaptor/PCM-CORE/rpc/pcmcoreclient" - "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/logic" - "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/kubenativeclient" - commonConfig "PCM/common/config" - "PCM/common/interceptor/rpcserver" - "PCM/common/tool" - "context" - "flag" - "github.com/zeromicro/go-zero/core/logx" - v1 "k8s.io/api/apps/v1" - "time" - "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/config" + "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/logic" "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/server" "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/internal/svc" "PCM/adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/kubenative" + commonConfig "PCM/common/config" + "PCM/common/interceptor/rpcserver" + "flag" + "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/service" @@ -28,27 +21,7 @@ import ( var configFile = flag.String("f", "adaptor/PCM-K8S/PCM-K8S-NATIVE/rpc/etc/kubenative.yaml", "the config file") func main() { - //flag.Parse() - // - //var c config.Config - //conf.MustLoad(*configFile, &c) - //// start log component - //logx.MustSetup(c.LogConf) - //ctx := svc.NewServiceContext(c) - //ctx.Cron.Start() - //s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) { - // kubenative.RegisterKubeNativeServer(grpcServer, server.NewKubeNativeServer(ctx)) - // - // if c.Mode == service.DevMode || c.Mode == service.TestMode { - // reflection.Register(grpcServer) - // } - //}) - //defer s.Stop() - //initCron(ctx) - //logx.Infof("Starting rpc server at %s...\n", c.ListenOn) - //s.Start() - //------------ flag.Parse() var bootstrapConfig commonConfig.BootstrapConfig @@ -90,68 +63,7 @@ func main() { defer s.Stop() logx.Infof("Starting rpc server at %s...\n", c.ListenOn) - initCron(ctx) + // 初始化定时任务 + logic.InitCron(ctx) s.Start() } - -func initCron(svc *svc.ServiceContext) { - svc.Cron.AddFunc("*/5 * * * * ?", func() { - SyncInfoReq := pcmcoreclient.SyncInfoReq{ - Kind: "cloud", - ServiceName: "kubeNative", - } - - // 查询core端分发下来的任务列表 - infoReq := pcmcoreclient.InfoListReq{ - Kind: "cloud", - ServiceName: "kubeNative", - } - infoList, err := svc.PcmCoreRpc.InfoList(context.Background(), &infoReq) - if err != nil { - logx.Error(err) - return - } - // 提交任务 - applyYamlLogic := logic.NewApplyYamlLogic(context.Background(), svc) - for index, _ := range infoList.CloudInfoList { - applyReq := kubenativeclient.ApplyReq{ - YamlString: infoList.CloudInfoList[index].YamlString, - } - infoList.CloudInfoList[index].Status = "Pending" - _, err := applyYamlLogic.ApplyYaml(&applyReq) - if err != nil { - return - } - } - // 查询Deployment列表 - listLogic := logic.NewListLogic(context.Background(), svc) - listReq := kubenative.ListReq{ - YamlString: "apiVersion: apps/v1\nkind: Deployment\n", - } - resp, err := listLogic.List(&listReq) - var deploymentList v1.DeploymentList - tool.K8sUnstructured(resp.Data, &deploymentList) - if err != nil { - return - } - - // 遍历core端任务列表信息 - for index, _ := range infoList.CloudInfoList { - for _, deployment := range deploymentList.Items { - if deployment.Namespace == infoList.CloudInfoList[index].Namespace && deployment.Name == infoList.CloudInfoList[index].Name { - infoList.CloudInfoList[index].StartTime = tool.TimeRemoveZone(deployment.Status.Conditions[0].LastTransitionTime.Time).String() - infoList.CloudInfoList[index].RunningTime = time.Now().Sub(deployment.Status.Conditions[0].LastTransitionTime.Time).Milliseconds() / 1000 - // 判断状态 - if deployment.Status.ReadyReplicas == deployment.Status.Replicas { - infoList.CloudInfoList[index].Status = "running" - } else { - infoList.CloudInfoList[index].Status = "pending" - } - } - } - } - // 同步信息到core端 - SyncInfoReq.CloudInfoList = infoList.CloudInfoList - svc.PcmCoreRpc.SyncInfo(context.Background(), &SyncInfoReq) - }) -} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph.pb.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph.pb.go new file mode 100644 index 0000000..b812ccb --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph.pb.go @@ -0,0 +1,553 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.19.4 +// source: pcm-ceph.proto + +package ceph + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +// *****************screen storage Start************************ +type StorageScreenReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StorageScreenReq) Reset() { + *x = StorageScreenReq{} + if protoimpl.UnsafeEnabled { + mi := &file_pcm_ceph_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageScreenReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageScreenReq) ProtoMessage() {} + +func (x *StorageScreenReq) ProtoReflect() protoreflect.Message { + mi := &file_pcm_ceph_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 StorageScreenReq.ProtoReflect.Descriptor instead. +func (*StorageScreenReq) Descriptor() ([]byte, []int) { + return file_pcm_ceph_proto_rawDescGZIP(), []int{0} +} + +type AiCenterInfos struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // @gotags: copier:"id" + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // @gotags: copier:"name" + Desc string `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"` // @gotags: copier:"name" + Resource string `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + TrainJob string `protobuf:"bytes,5,opt,name=trainJob,proto3" json:"trainJob,omitempty"` + ComputeScale int32 `protobuf:"varint,6,opt,name=computeScale,proto3" json:"computeScale,omitempty"` + StorageScale int32 `protobuf:"varint,7,opt,name=storageScale,proto3" json:"storageScale,omitempty"` // @gotags: copier:"storageScale" + Province string `protobuf:"bytes,8,opt,name=province,proto3" json:"province,omitempty"` + City string `protobuf:"bytes,9,opt,name=city,proto3" json:"city,omitempty"` // @gotags: copier:"city" + CoordinateX int32 `protobuf:"varint,10,opt,name=coordinateX,proto3" json:"coordinateX,omitempty"` + CoordinateY int32 `protobuf:"varint,11,opt,name=coordinateY,proto3" json:"coordinateY,omitempty"` + Type int32 `protobuf:"varint,12,opt,name=type,proto3" json:"type,omitempty"` + Weight int32 `protobuf:"varint,13,opt,name=weight,proto3" json:"weight,omitempty"` + ConnectionState int32 `protobuf:"varint,14,opt,name=connectionState,proto3" json:"connectionState,omitempty"` // @gotags: copier:"connectionState" + BusyState int32 `protobuf:"varint,15,opt,name=busyState,proto3" json:"busyState,omitempty"` + ImageUrl string `protobuf:"bytes,16,opt,name=imageUrl,proto3" json:"imageUrl,omitempty"` + AccDevices string `protobuf:"bytes,17,opt,name=accDevices,proto3" json:"accDevices,omitempty"` + MarketTime int64 `protobuf:"varint,18,opt,name=marketTime,proto3" json:"marketTime,omitempty"` + CreatedAt int64 `protobuf:"varint,19,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + AccessTime int32 `protobuf:"varint,20,opt,name=accessTime,proto3" json:"accessTime,omitempty"` + CardRunTime int32 `protobuf:"varint,21,opt,name=cardRunTime,proto3" json:"cardRunTime,omitempty"` + JobCount int32 `protobuf:"varint,22,opt,name=jobCount,proto3" json:"jobCount,omitempty"` +} + +func (x *AiCenterInfos) Reset() { + *x = AiCenterInfos{} + if protoimpl.UnsafeEnabled { + mi := &file_pcm_ceph_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AiCenterInfos) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiCenterInfos) ProtoMessage() {} + +func (x *AiCenterInfos) ProtoReflect() protoreflect.Message { + mi := &file_pcm_ceph_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 AiCenterInfos.ProtoReflect.Descriptor instead. +func (*AiCenterInfos) Descriptor() ([]byte, []int) { + return file_pcm_ceph_proto_rawDescGZIP(), []int{1} +} + +func (x *AiCenterInfos) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AiCenterInfos) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AiCenterInfos) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *AiCenterInfos) GetResource() string { + if x != nil { + return x.Resource + } + return "" +} + +func (x *AiCenterInfos) GetTrainJob() string { + if x != nil { + return x.TrainJob + } + return "" +} + +func (x *AiCenterInfos) GetComputeScale() int32 { + if x != nil { + return x.ComputeScale + } + return 0 +} + +func (x *AiCenterInfos) GetStorageScale() int32 { + if x != nil { + return x.StorageScale + } + return 0 +} + +func (x *AiCenterInfos) GetProvince() string { + if x != nil { + return x.Province + } + return "" +} + +func (x *AiCenterInfos) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *AiCenterInfos) GetCoordinateX() int32 { + if x != nil { + return x.CoordinateX + } + return 0 +} + +func (x *AiCenterInfos) GetCoordinateY() int32 { + if x != nil { + return x.CoordinateY + } + return 0 +} + +func (x *AiCenterInfos) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *AiCenterInfos) GetWeight() int32 { + if x != nil { + return x.Weight + } + return 0 +} + +func (x *AiCenterInfos) GetConnectionState() int32 { + if x != nil { + return x.ConnectionState + } + return 0 +} + +func (x *AiCenterInfos) GetBusyState() int32 { + if x != nil { + return x.BusyState + } + return 0 +} + +func (x *AiCenterInfos) GetImageUrl() string { + if x != nil { + return x.ImageUrl + } + return "" +} + +func (x *AiCenterInfos) GetAccDevices() string { + if x != nil { + return x.AccDevices + } + return "" +} + +func (x *AiCenterInfos) GetMarketTime() int64 { + if x != nil { + return x.MarketTime + } + return 0 +} + +func (x *AiCenterInfos) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *AiCenterInfos) GetAccessTime() int32 { + if x != nil { + return x.AccessTime + } + return 0 +} + +func (x *AiCenterInfos) GetCardRunTime() int32 { + if x != nil { + return x.CardRunTime + } + return 0 +} + +func (x *AiCenterInfos) GetJobCount() int32 { + if x != nil { + return x.JobCount + } + return 0 +} + +type StorageScreenResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalSize int32 `protobuf:"varint,1,opt,name=totalSize,proto3" json:"totalSize,omitempty"` // @gotags: copier:"totalSize" + AiCenterInfos []*AiCenterInfos `protobuf:"bytes,2,rep,name=aiCenterInfos,proto3" json:"aiCenterInfos,omitempty"` // @gotags: copier:"aiCenterInfos" + StorageUsed float32 `protobuf:"fixed32,3,opt,name=StorageUsed,proto3" json:"StorageUsed,omitempty"` + StorageUsing float32 `protobuf:"fixed32,4,opt,name=StorageUsing,proto3" json:"StorageUsing,omitempty"` + UsageRate float32 `protobuf:"fixed32,5,opt,name=UsageRate,proto3" json:"UsageRate,omitempty"` + UsingRate float32 `protobuf:"fixed32,6,opt,name=UsingRate,proto3" json:"UsingRate,omitempty"` + Code int32 `protobuf:"varint,7,opt,name=code,proto3" json:"code,omitempty"` // @gotags: copier:"Code" + Msg string `protobuf:"bytes,8,opt,name=msg,proto3" json:"msg,omitempty"` // @gotags: copier:"Msg" + ErrorMsg string `protobuf:"bytes,9,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"` // @gotags: copier:"ErrorMsg" +} + +func (x *StorageScreenResp) Reset() { + *x = StorageScreenResp{} + if protoimpl.UnsafeEnabled { + mi := &file_pcm_ceph_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageScreenResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageScreenResp) ProtoMessage() {} + +func (x *StorageScreenResp) ProtoReflect() protoreflect.Message { + mi := &file_pcm_ceph_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 StorageScreenResp.ProtoReflect.Descriptor instead. +func (*StorageScreenResp) Descriptor() ([]byte, []int) { + return file_pcm_ceph_proto_rawDescGZIP(), []int{2} +} + +func (x *StorageScreenResp) GetTotalSize() int32 { + if x != nil { + return x.TotalSize + } + return 0 +} + +func (x *StorageScreenResp) GetAiCenterInfos() []*AiCenterInfos { + if x != nil { + return x.AiCenterInfos + } + return nil +} + +func (x *StorageScreenResp) GetStorageUsed() float32 { + if x != nil { + return x.StorageUsed + } + return 0 +} + +func (x *StorageScreenResp) GetStorageUsing() float32 { + if x != nil { + return x.StorageUsing + } + return 0 +} + +func (x *StorageScreenResp) GetUsageRate() float32 { + if x != nil { + return x.UsageRate + } + return 0 +} + +func (x *StorageScreenResp) GetUsingRate() float32 { + if x != nil { + return x.UsingRate + } + return 0 +} + +func (x *StorageScreenResp) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *StorageScreenResp) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *StorageScreenResp) GetErrorMsg() string { + if x != nil { + return x.ErrorMsg + } + return "" +} + +var File_pcm_ceph_proto protoreflect.FileDescriptor + +var file_pcm_ceph_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x70, 0x63, 0x6d, 0x2d, 0x63, 0x65, 0x70, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x22, 0x87, + 0x05, 0x0a, 0x0d, 0x41, 0x69, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, + 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x58, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x59, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x59, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x75, 0x73, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x75, 0x73, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x61, 0x63, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x61, + 0x72, 0x64, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x63, 0x61, 0x72, 0x64, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb5, 0x02, 0x0a, 0x11, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3d, 0x0a, 0x0d, + 0x61, 0x69, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, + 0x69, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x0d, 0x61, 0x69, + 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x73, 0x69, 0x6e, + 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x09, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, + 0x32, 0x50, 0x0a, 0x04, 0x43, 0x65, 0x70, 0x68, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x1a, 0x2e, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x42, 0x07, 0x5a, 0x05, 0x2f, 0x63, 0x65, 0x70, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_pcm_ceph_proto_rawDescOnce sync.Once + file_pcm_ceph_proto_rawDescData = file_pcm_ceph_proto_rawDesc +) + +func file_pcm_ceph_proto_rawDescGZIP() []byte { + file_pcm_ceph_proto_rawDescOnce.Do(func() { + file_pcm_ceph_proto_rawDescData = protoimpl.X.CompressGZIP(file_pcm_ceph_proto_rawDescData) + }) + return file_pcm_ceph_proto_rawDescData +} + +var file_pcm_ceph_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_pcm_ceph_proto_goTypes = []interface{}{ + (*StorageScreenReq)(nil), // 0: template.StorageScreenReq + (*AiCenterInfos)(nil), // 1: template.AiCenterInfos + (*StorageScreenResp)(nil), // 2: template.StorageScreenResp +} +var file_pcm_ceph_proto_depIdxs = []int32{ + 1, // 0: template.StorageScreenResp.aiCenterInfos:type_name -> template.AiCenterInfos + 0, // 1: template.Ceph.storageScreen:input_type -> template.StorageScreenReq + 2, // 2: template.Ceph.storageScreen:output_type -> template.StorageScreenResp + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_pcm_ceph_proto_init() } +func file_pcm_ceph_proto_init() { + if File_pcm_ceph_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_pcm_ceph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageScreenReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pcm_ceph_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AiCenterInfos); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pcm_ceph_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageScreenResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_pcm_ceph_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_pcm_ceph_proto_goTypes, + DependencyIndexes: file_pcm_ceph_proto_depIdxs, + MessageInfos: file_pcm_ceph_proto_msgTypes, + }.Build() + File_pcm_ceph_proto = out.File + file_pcm_ceph_proto_rawDesc = nil + file_pcm_ceph_proto_goTypes = nil + file_pcm_ceph_proto_depIdxs = nil +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph_grpc.pb.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph_grpc.pb.go new file mode 100644 index 0000000..9731f11 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph/pcm-ceph_grpc.pb.go @@ -0,0 +1,105 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.19.4 +// source: pcm-ceph.proto + +package ceph + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// CephClient is the client API for Ceph service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type CephClient interface { + StorageScreen(ctx context.Context, in *StorageScreenReq, opts ...grpc.CallOption) (*StorageScreenResp, error) +} + +type cephClient struct { + cc grpc.ClientConnInterface +} + +func NewCephClient(cc grpc.ClientConnInterface) CephClient { + return &cephClient{cc} +} + +func (c *cephClient) StorageScreen(ctx context.Context, in *StorageScreenReq, opts ...grpc.CallOption) (*StorageScreenResp, error) { + out := new(StorageScreenResp) + err := c.cc.Invoke(ctx, "/template.Ceph/storageScreen", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// CephServer is the server API for Ceph service. +// All implementations must embed UnimplementedCephServer +// for forward compatibility +type CephServer interface { + StorageScreen(context.Context, *StorageScreenReq) (*StorageScreenResp, error) + mustEmbedUnimplementedCephServer() +} + +// UnimplementedCephServer must be embedded to have forward compatible implementations. +type UnimplementedCephServer struct { +} + +func (UnimplementedCephServer) StorageScreen(context.Context, *StorageScreenReq) (*StorageScreenResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method StorageScreen not implemented") +} +func (UnimplementedCephServer) mustEmbedUnimplementedCephServer() {} + +// UnsafeCephServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to CephServer will +// result in compilation errors. +type UnsafeCephServer interface { + mustEmbedUnimplementedCephServer() +} + +func RegisterCephServer(s grpc.ServiceRegistrar, srv CephServer) { + s.RegisterService(&Ceph_ServiceDesc, srv) +} + +func _Ceph_StorageScreen_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StorageScreenReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CephServer).StorageScreen(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/template.Ceph/storageScreen", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CephServer).StorageScreen(ctx, req.(*StorageScreenReq)) + } + return interceptor(ctx, in, info, handler) +} + +// Ceph_ServiceDesc is the grpc.ServiceDesc for Ceph service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Ceph_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "template.Ceph", + HandlerType: (*CephServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "storageScreen", + Handler: _Ceph_StorageScreen_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "pcm-ceph.proto", +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/cephclient/ceph.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/cephclient/ceph.go new file mode 100644 index 0000000..dbb33dd --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/cephclient/ceph.go @@ -0,0 +1,38 @@ +// Code generated by goctl. DO NOT EDIT. +// Source: pcm-ceph.proto + +package cephclient + +import ( + "context" + + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph" + + "github.com/zeromicro/go-zero/zrpc" + "google.golang.org/grpc" +) + +type ( + AiCenterInfos = ceph.AiCenterInfos + StorageScreenReq = ceph.StorageScreenReq + StorageScreenResp = ceph.StorageScreenResp + + Ceph interface { + StorageScreen(ctx context.Context, in *StorageScreenReq, opts ...grpc.CallOption) (*StorageScreenResp, error) + } + + defaultCeph struct { + cli zrpc.Client + } +) + +func NewCeph(cli zrpc.Client) Ceph { + return &defaultCeph{ + cli: cli, + } +} + +func (m *defaultCeph) StorageScreen(ctx context.Context, in *StorageScreenReq, opts ...grpc.CallOption) (*StorageScreenResp, error) { + client := ceph.NewCephClient(m.cli.Conn()) + return client.StorageScreen(ctx, in, opts...) +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/ceph.yaml b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/ceph.yaml new file mode 100644 index 0000000..2559357 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/ceph.yaml @@ -0,0 +1,10 @@ +Name: ceph.rpc +ListenOn: 0.0.0.0:2004 + +#Hosts: +# - 127.0.0.1:2379 +#Key: octopus.rpc +#User: root +#Pass: + +PengChengUrl: "http://grampus.openi.org.cn/openapi/v1/sharescreen/" diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/pcmceph.yaml b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/pcmceph.yaml new file mode 100644 index 0000000..a233dc5 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/pcmceph.yaml @@ -0,0 +1,17 @@ +Name: pcmceph.rpc +ListenOn: 0.0.0.0:2005 +Etcd: + Hosts: + - 10.101.15.170:31890 + Key: pcmceph.rpc + User: root + Pass: I9wLvrRufj + +#Hosts: +# - 127.0.0.1:2379 +#Key: pcmceph.rpc +#User: root +#Pass: + +ScreenUrl: "http://grampus.openi.org.cn/openapi/v1/sharescreen/" + diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/config.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/config.go new file mode 100644 index 0000000..bdce365 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/config.go @@ -0,0 +1,21 @@ +package config + +import ( + "flag" + "github.com/zeromicro/go-zero/core/conf" + "github.com/zeromicro/go-zero/zrpc" +) + +type Config struct { + zrpc.RpcServerConf + ScreenConfig +} + +var configFile = flag.String("o", "adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/pcmceph.yaml", "the config file") +var Cfg = getConfig() + +func getConfig() Config { + var c Config + conf.MustLoad(*configFile, &c) + return c +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/screenConfig.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/screenConfig.go new file mode 100644 index 0000000..7e39851 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config/screenConfig.go @@ -0,0 +1,5 @@ +package config + +type ScreenConfig struct { + ScreenUrl string +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/logic/storagescreenlogic.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/logic/storagescreenlogic.go new file mode 100644 index 0000000..2b14616 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/logic/storagescreenlogic.go @@ -0,0 +1,114 @@ +package logic + +import ( + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config" + "PCM/common/tool" + "context" + "fmt" + "k8s.io/apimachinery/pkg/util/json" + "strings" + + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc" + + "github.com/zeromicro/go-zero/core/logx" +) + +type StorageScreenLogic struct { + ctx context.Context + svcCtx *svc.ServiceContext + logx.Logger +} + +/*type StorageArg struct { + totalSize int32 `json:"totalSize"` + aiCenterInfos []AiCenterInfos `json:"aiCenterInfos"` +} + +type AiCenterInfos struct { + id string `json:"id"` + name string `json:"name"` + /* desc string + resource string + trainJob string + computeScale int32 + storageScale int32 `json:"storageScale"` + /* province string + city string + coordinateX int32 + coordinateY int32 + weight int32 + connectionState int32 + busyState int32 + imageUrl string + accDevices string + marketTime int64 + createdAt int64 + accessTime int32 + cardRunTime int32 + jobCount int32 +}*/ + +func NewStorageScreenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StorageScreenLogic { + return &StorageScreenLogic{ + ctx: ctx, + svcCtx: svcCtx, + Logger: logx.WithContext(ctx), + } +} + +// get modelarts Token +func (l *StorageScreenLogic) StorageScreen(in *ceph.StorageScreenReq) (*ceph.StorageScreenResp, error) { + // todo: add your logic here and delete this line + var resp ceph.StorageScreenResp + //var storageArg StorageArg + screenConfig := config.Cfg + screenUrl := screenConfig.ScreenConfig.ScreenUrl + statusCode, body, err := tool.HttpClientWithScreen(tool.GET, screenUrl+"aicenter?sortBy=weight&orderBy=asc", strings.NewReader(``)) + if err != nil { + return nil, err + } + if statusCode == 200 { + err := json.Unmarshal(body, &resp) + if err != nil { + fmt.Println(err) + } + var usedStorageScale int32 //已使用 + var usingStorageScale int32 //未使用 + for _, item := range resp.AiCenterInfos { + if item.ConnectionState == 3 { + usedStorageScale += item.StorageScale + } else { + usingStorageScale += item.StorageScale + } + } + fmt.Println(usedStorageScale) + fmt.Println(usingStorageScale) + var floatUsedStorageScale float32 = float32(usedStorageScale) + var floatUsingStorageScale float32 = float32(usingStorageScale) + + var UsageRate float32 //已使用率 + var UsingRate float32 //未使用率 + var StorageUsed float32 //已使用量 + var StorageUsing float32 //未使用量 + UsageRate = (floatUsedStorageScale*1024 + 54.6) / (floatUsedStorageScale*1024 + floatUsingStorageScale*1024 + 54.6) + UsingRate = (floatUsingStorageScale*1024 + 54.6) / (floatUsedStorageScale*1024 + floatUsingStorageScale*1024 + 54.6) + StorageUsed = floatUsedStorageScale*1024 + 54.6 + StorageUsing = floatUsingStorageScale*1024 + 54.6 + fmt.Println(StorageUsed) + fmt.Println(StorageUsing) + fmt.Println(UsageRate) + fmt.Println(UsingRate) + resp.UsageRate = UsageRate + resp.UsageRate = UsingRate + resp.StorageUsing = StorageUsing + resp.StorageUsing = StorageUsed + resp.Code = 200 + resp.Msg = "Success" + } else if statusCode != 200 { + json.Unmarshal(body, &resp) + resp.Code = 400 + resp.Msg = "Failure" + } + return &resp, nil +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/server/cephserver.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/server/cephserver.go new file mode 100644 index 0000000..d7fccda --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/server/cephserver.go @@ -0,0 +1,28 @@ +// Code generated by goctl. DO NOT EDIT. +// Source: pcm-ceph.proto + +package server + +import ( + "context" + + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/logic" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc" +) + +type CephServer struct { + svcCtx *svc.ServiceContext + ceph.UnimplementedCephServer +} + +func NewCephServer(svcCtx *svc.ServiceContext) *CephServer { + return &CephServer{ + svcCtx: svcCtx, + } +} + +func (s *CephServer) StorageScreen(ctx context.Context, in *ceph.StorageScreenReq) (*ceph.StorageScreenResp, error) { + l := logic.NewStorageScreenLogic(ctx, s.svcCtx) + return l.StorageScreen(in) +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc/servicecontext.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc/servicecontext.go new file mode 100644 index 0000000..ff762ae --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc/servicecontext.go @@ -0,0 +1,13 @@ +package svc + +import "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config" + +type ServiceContext struct { + Config config.Config +} + +func NewServiceContext(c config.Config) *ServiceContext { + return &ServiceContext{ + Config: c, + } +} diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pb/pcm-ceph.proto b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pb/pcm-ceph.proto index fc60e31..3e22b90 100644 --- a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pb/pcm-ceph.proto +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pb/pcm-ceph.proto @@ -1,3 +1,56 @@ syntax = "proto3"; -package template; \ No newline at end of file +package template; +option go_package = "/ceph"; + +/******************screen storage Start*************************/ +message StorageScreenReq{ + +} + +message AiCenterInfos{ + string id = 1; // @gotags: copier:"id" + string name = 2; // @gotags: copier:"name" + string desc = 3; // @gotags: copier:"name" + string resource = 4; + string trainJob = 5; + int32 computeScale = 6; + int32 storageScale = 7; // @gotags: copier:"storageScale" + string province =8; + string city = 9 ; // @gotags: copier:"city" + int32 coordinateX =10; + int32 coordinateY =11; + int32 type =12; + int32 weight =13; + int32 connectionState = 14; // @gotags: copier:"connectionState" + int32 busyState =15; + string imageUrl =16; + string accDevices =17; + int64 marketTime =18; + int64 createdAt =19; + int32 accessTime =20; + int32 cardRunTime =21; + int32 jobCount=22; +} + +message StorageScreenResp{ + int32 totalSize = 1; // @gotags: copier:"totalSize" + repeated AiCenterInfos aiCenterInfos = 2; // @gotags: copier:"aiCenterInfos" + float StorageUsed = 3; + float StorageUsing = 4; + float UsageRate =5; + float UsingRate =6; + int32 code = 7; // @gotags: copier:"Code" + string msg = 8; // @gotags: copier:"Msg" + string error_msg =9;// @gotags: copier:"ErrorMsg" +} +/******************screen storage end*************************/ + +/******************screen computing power Start*************************/ + +/******************screen computing power End*************************/ + +service Ceph { + + rpc storageScreen(StorageScreenReq) returns (StorageScreenResp); +} \ No newline at end of file diff --git a/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pcmceph.go b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pcmceph.go new file mode 100644 index 0000000..e971c53 --- /dev/null +++ b/adaptor/PCM-STORAGE/PCM-CEPH/rpc/pcmceph.go @@ -0,0 +1,39 @@ +package main + +import ( + "flag" + "fmt" + + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/ceph" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/config" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/server" + "PCM/adaptor/PCM-STORAGE/PCM-CEPH/rpc/internal/svc" + + "github.com/zeromicro/go-zero/core/conf" + "github.com/zeromicro/go-zero/core/service" + "github.com/zeromicro/go-zero/zrpc" + "google.golang.org/grpc" + "google.golang.org/grpc/reflection" +) + +var configFile = flag.String("f", "adaptor/PCM-STORAGE/PCM-CEPH/rpc/etc/pcmceph.yaml", "the config file") + +func main() { + flag.Parse() + + var c config.Config + conf.MustLoad(*configFile, &c) + ctx := svc.NewServiceContext(c) + + s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) { + ceph.RegisterCephServer(grpcServer, server.NewCephServer(ctx)) + + if c.Mode == service.DevMode || c.Mode == service.TestMode { + reflection.Register(grpcServer) + } + }) + defer s.Stop() + + fmt.Printf("Starting rpc server at %s...\n", c.ListenOn) + s.Start() +} diff --git a/common/tool/http.go b/common/tool/http.go index e4b58de..a0dbbb2 100644 --- a/common/tool/http.go +++ b/common/tool/http.go @@ -175,3 +175,17 @@ func HttpClientWithBodyAndCode(method string, url string, payload io.Reader, tok return res.StatusCode, body, err } + +func HttpClientWithScreen(method string, url string, payload io.Reader) (int, []byte, error) { + request, err := http.NewRequest(method, url, payload) + + client := &http.Client{} + res, err := client.Do(request) + if err != nil { + log.Fatal(err) + } + defer res.Body.Close() + body, err := io.ReadAll(res.Body) + + return res.StatusCode, body, err +} diff --git a/go.mod b/go.mod index 3d8f51b..494cf9b 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module PCM -go 1.19 +go 1.18 require ( github.com/JCCE-nudt/zero-contrib/zrpc/registry/nacos v0.0.0-20230419021610-13bbc83fbc3c @@ -10,7 +10,6 @@ require ( github.com/go-resty/resty/v2 v2.7.0 github.com/go-sql-driver/mysql v1.7.0 github.com/jinzhu/copier v0.3.5 - github.com/jmoiron/sqlx v1.3.5 github.com/nacos-group/nacos-sdk-go/v2 v2.2.1 github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.1 diff --git a/go.sum b/go.sum index eaaac83..ebe8821 100644 --- a/go.sum +++ b/go.sum @@ -562,7 +562,6 @@ github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -744,8 +743,6 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= -github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -784,8 +781,6 @@ github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtB github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= @@ -805,8 +800,6 @@ github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=