From 1783f5cce16f21cbe33aae585d65e25aaa7c6496 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20Tich=C3=A1k?= <michal.tichak@cern.ch>
Date: Tue, 20 Feb 2024 15:00:41 +0100
Subject: [PATCH] [core] implemented GetAvailableDetectors

---
 coconut/protos/o2control.pb.go      | 1423 ++++++++++++++-------------
 coconut/protos/o2control_grpc.pb.go |  188 +++-
 core/protos/o2control.pb.go         | 1423 ++++++++++++++-------------
 core/protos/o2control.proto         |    7 +-
 core/protos/o2control_grpc.pb.go    |  188 +++-
 core/server.go                      |   56 +-
 6 files changed, 1818 insertions(+), 1467 deletions(-)

diff --git a/coconut/protos/o2control.pb.go b/coconut/protos/o2control.pb.go
index 8ab79126..d091ff4d 100644
--- a/coconut/protos/o2control.pb.go
+++ b/coconut/protos/o2control.pb.go
@@ -23,8 +23,8 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.28.1
-// 	protoc        v4.23.4
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.25.1
 // source: protos/o2control.proto
 
 package pb
@@ -263,7 +263,7 @@ func (x VarSpecMessage_UiWidget) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use VarSpecMessage_UiWidget.Descriptor instead.
 func (VarSpecMessage_UiWidget) EnumDescriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51, 0}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52, 0}
 }
 
 type VarSpecMessage_Type int32
@@ -318,7 +318,7 @@ func (x VarSpecMessage_Type) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use VarSpecMessage_Type.Descriptor instead.
 func (VarSpecMessage_Type) EnumDescriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51, 1}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52, 1}
 }
 
 type Event_MesosHeartbeat struct {
@@ -2380,6 +2380,53 @@ func (x *GetActiveDetectorsReply) GetDetectors() []string {
 	return nil
 }
 
+type GetAvailableDetectorsReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Detectors []string `protobuf:"bytes,1,rep,name=detectors,proto3" json:"detectors,omitempty"`
+}
+
+func (x *GetAvailableDetectorsReply) Reset() {
+	*x = GetAvailableDetectorsReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_protos_o2control_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAvailableDetectorsReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAvailableDetectorsReply) ProtoMessage() {}
+
+func (x *GetAvailableDetectorsReply) ProtoReflect() protoreflect.Message {
+	mi := &file_protos_o2control_proto_msgTypes[31]
+	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 GetAvailableDetectorsReply.ProtoReflect.Descriptor instead.
+func (*GetAvailableDetectorsReply) Descriptor() ([]byte, []int) {
+	return file_protos_o2control_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *GetAvailableDetectorsReply) GetDetectors() []string {
+	if x != nil {
+		return x.Detectors
+	}
+	return nil
+}
+
 // //////////////////////////////////////
 // Environment, GET/SET properties
 // //////////////////////////////////////
@@ -2397,7 +2444,7 @@ type SetEnvironmentPropertiesRequest struct {
 func (x *SetEnvironmentPropertiesRequest) Reset() {
 	*x = SetEnvironmentPropertiesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[31]
+		mi := &file_protos_o2control_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2410,7 +2457,7 @@ func (x *SetEnvironmentPropertiesRequest) String() string {
 func (*SetEnvironmentPropertiesRequest) ProtoMessage() {}
 
 func (x *SetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[31]
+	mi := &file_protos_o2control_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2423,7 +2470,7 @@ func (x *SetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetEnvironmentPropertiesRequest.ProtoReflect.Descriptor instead.
 func (*SetEnvironmentPropertiesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{31}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{32}
 }
 
 func (x *SetEnvironmentPropertiesRequest) GetId() string {
@@ -2449,7 +2496,7 @@ type SetEnvironmentPropertiesReply struct {
 func (x *SetEnvironmentPropertiesReply) Reset() {
 	*x = SetEnvironmentPropertiesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[32]
+		mi := &file_protos_o2control_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2462,7 +2509,7 @@ func (x *SetEnvironmentPropertiesReply) String() string {
 func (*SetEnvironmentPropertiesReply) ProtoMessage() {}
 
 func (x *SetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[32]
+	mi := &file_protos_o2control_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2475,7 +2522,7 @@ func (x *SetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetEnvironmentPropertiesReply.ProtoReflect.Descriptor instead.
 func (*SetEnvironmentPropertiesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{32}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{33}
 }
 
 type GetEnvironmentPropertiesRequest struct {
@@ -2494,7 +2541,7 @@ type GetEnvironmentPropertiesRequest struct {
 func (x *GetEnvironmentPropertiesRequest) Reset() {
 	*x = GetEnvironmentPropertiesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[33]
+		mi := &file_protos_o2control_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2507,7 +2554,7 @@ func (x *GetEnvironmentPropertiesRequest) String() string {
 func (*GetEnvironmentPropertiesRequest) ProtoMessage() {}
 
 func (x *GetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[33]
+	mi := &file_protos_o2control_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2520,7 +2567,7 @@ func (x *GetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetEnvironmentPropertiesRequest.ProtoReflect.Descriptor instead.
 func (*GetEnvironmentPropertiesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{33}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{34}
 }
 
 func (x *GetEnvironmentPropertiesRequest) GetId() string {
@@ -2555,7 +2602,7 @@ type GetEnvironmentPropertiesReply struct {
 func (x *GetEnvironmentPropertiesReply) Reset() {
 	*x = GetEnvironmentPropertiesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[34]
+		mi := &file_protos_o2control_proto_msgTypes[35]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2568,7 +2615,7 @@ func (x *GetEnvironmentPropertiesReply) String() string {
 func (*GetEnvironmentPropertiesReply) ProtoMessage() {}
 
 func (x *GetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[34]
+	mi := &file_protos_o2control_proto_msgTypes[35]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2581,7 +2628,7 @@ func (x *GetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetEnvironmentPropertiesReply.ProtoReflect.Descriptor instead.
 func (*GetEnvironmentPropertiesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{34}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{35}
 }
 
 func (x *GetEnvironmentPropertiesReply) GetProperties() map[string]string {
@@ -2614,7 +2661,7 @@ type ShortTaskInfo struct {
 func (x *ShortTaskInfo) Reset() {
 	*x = ShortTaskInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[35]
+		mi := &file_protos_o2control_proto_msgTypes[36]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2627,7 +2674,7 @@ func (x *ShortTaskInfo) String() string {
 func (*ShortTaskInfo) ProtoMessage() {}
 
 func (x *ShortTaskInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[35]
+	mi := &file_protos_o2control_proto_msgTypes[36]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2640,7 +2687,7 @@ func (x *ShortTaskInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ShortTaskInfo.ProtoReflect.Descriptor instead.
 func (*ShortTaskInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{35}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{36}
 }
 
 func (x *ShortTaskInfo) GetName() string {
@@ -2727,7 +2774,7 @@ type TaskDeploymentInfo struct {
 func (x *TaskDeploymentInfo) Reset() {
 	*x = TaskDeploymentInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[36]
+		mi := &file_protos_o2control_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2740,7 +2787,7 @@ func (x *TaskDeploymentInfo) String() string {
 func (*TaskDeploymentInfo) ProtoMessage() {}
 
 func (x *TaskDeploymentInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[36]
+	mi := &file_protos_o2control_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2753,7 +2800,7 @@ func (x *TaskDeploymentInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskDeploymentInfo.ProtoReflect.Descriptor instead.
 func (*TaskDeploymentInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{36}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{37}
 }
 
 func (x *TaskDeploymentInfo) GetHostname() string {
@@ -2793,7 +2840,7 @@ type GetTasksRequest struct {
 func (x *GetTasksRequest) Reset() {
 	*x = GetTasksRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[37]
+		mi := &file_protos_o2control_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2806,7 +2853,7 @@ func (x *GetTasksRequest) String() string {
 func (*GetTasksRequest) ProtoMessage() {}
 
 func (x *GetTasksRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[37]
+	mi := &file_protos_o2control_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2819,7 +2866,7 @@ func (x *GetTasksRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTasksRequest.ProtoReflect.Descriptor instead.
 func (*GetTasksRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{37}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{38}
 }
 
 type GetTasksReply struct {
@@ -2833,7 +2880,7 @@ type GetTasksReply struct {
 func (x *GetTasksReply) Reset() {
 	*x = GetTasksReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[38]
+		mi := &file_protos_o2control_proto_msgTypes[39]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2846,7 +2893,7 @@ func (x *GetTasksReply) String() string {
 func (*GetTasksReply) ProtoMessage() {}
 
 func (x *GetTasksReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[38]
+	mi := &file_protos_o2control_proto_msgTypes[39]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2859,7 +2906,7 @@ func (x *GetTasksReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTasksReply.ProtoReflect.Descriptor instead.
 func (*GetTasksReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{38}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{39}
 }
 
 func (x *GetTasksReply) GetTasks() []*ShortTaskInfo {
@@ -2880,7 +2927,7 @@ type GetTaskRequest struct {
 func (x *GetTaskRequest) Reset() {
 	*x = GetTaskRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[39]
+		mi := &file_protos_o2control_proto_msgTypes[40]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2893,7 +2940,7 @@ func (x *GetTaskRequest) String() string {
 func (*GetTaskRequest) ProtoMessage() {}
 
 func (x *GetTaskRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[39]
+	mi := &file_protos_o2control_proto_msgTypes[40]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2906,7 +2953,7 @@ func (x *GetTaskRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTaskRequest.ProtoReflect.Descriptor instead.
 func (*GetTaskRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{39}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{40}
 }
 
 func (x *GetTaskRequest) GetTaskId() string {
@@ -2927,7 +2974,7 @@ type GetTaskReply struct {
 func (x *GetTaskReply) Reset() {
 	*x = GetTaskReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[40]
+		mi := &file_protos_o2control_proto_msgTypes[41]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2940,7 +2987,7 @@ func (x *GetTaskReply) String() string {
 func (*GetTaskReply) ProtoMessage() {}
 
 func (x *GetTaskReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[40]
+	mi := &file_protos_o2control_proto_msgTypes[41]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2953,7 +3000,7 @@ func (x *GetTaskReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTaskReply.ProtoReflect.Descriptor instead.
 func (*GetTaskReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{40}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{41}
 }
 
 func (x *GetTaskReply) GetTask() *TaskInfo {
@@ -2975,7 +3022,7 @@ type TaskClassInfo struct {
 func (x *TaskClassInfo) Reset() {
 	*x = TaskClassInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[41]
+		mi := &file_protos_o2control_proto_msgTypes[42]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2988,7 +3035,7 @@ func (x *TaskClassInfo) String() string {
 func (*TaskClassInfo) ProtoMessage() {}
 
 func (x *TaskClassInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[41]
+	mi := &file_protos_o2control_proto_msgTypes[42]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3001,7 +3048,7 @@ func (x *TaskClassInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskClassInfo.ProtoReflect.Descriptor instead.
 func (*TaskClassInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{41}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{42}
 }
 
 func (x *TaskClassInfo) GetName() string {
@@ -3033,7 +3080,7 @@ type CommandInfo struct {
 func (x *CommandInfo) Reset() {
 	*x = CommandInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[42]
+		mi := &file_protos_o2control_proto_msgTypes[43]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3046,7 +3093,7 @@ func (x *CommandInfo) String() string {
 func (*CommandInfo) ProtoMessage() {}
 
 func (x *CommandInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[42]
+	mi := &file_protos_o2control_proto_msgTypes[43]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3059,7 +3106,7 @@ func (x *CommandInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CommandInfo.ProtoReflect.Descriptor instead.
 func (*CommandInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{42}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{43}
 }
 
 func (x *CommandInfo) GetEnv() []string {
@@ -3110,7 +3157,7 @@ type ChannelInfo struct {
 func (x *ChannelInfo) Reset() {
 	*x = ChannelInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[43]
+		mi := &file_protos_o2control_proto_msgTypes[44]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3123,7 +3170,7 @@ func (x *ChannelInfo) String() string {
 func (*ChannelInfo) ProtoMessage() {}
 
 func (x *ChannelInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[43]
+	mi := &file_protos_o2control_proto_msgTypes[44]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3136,7 +3183,7 @@ func (x *ChannelInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ChannelInfo.ProtoReflect.Descriptor instead.
 func (*ChannelInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{43}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{44}
 }
 
 func (x *ChannelInfo) GetName() string {
@@ -3178,7 +3225,7 @@ type TaskInfo struct {
 func (x *TaskInfo) Reset() {
 	*x = TaskInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[44]
+		mi := &file_protos_o2control_proto_msgTypes[45]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3191,7 +3238,7 @@ func (x *TaskInfo) String() string {
 func (*TaskInfo) ProtoMessage() {}
 
 func (x *TaskInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[44]
+	mi := &file_protos_o2control_proto_msgTypes[45]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3204,7 +3251,7 @@ func (x *TaskInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskInfo.ProtoReflect.Descriptor instead.
 func (*TaskInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{44}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{45}
 }
 
 func (x *TaskInfo) GetShortInfo() *ShortTaskInfo {
@@ -3274,7 +3321,7 @@ type CleanupTasksRequest struct {
 func (x *CleanupTasksRequest) Reset() {
 	*x = CleanupTasksRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[45]
+		mi := &file_protos_o2control_proto_msgTypes[46]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3287,7 +3334,7 @@ func (x *CleanupTasksRequest) String() string {
 func (*CleanupTasksRequest) ProtoMessage() {}
 
 func (x *CleanupTasksRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[45]
+	mi := &file_protos_o2control_proto_msgTypes[46]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3300,7 +3347,7 @@ func (x *CleanupTasksRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CleanupTasksRequest.ProtoReflect.Descriptor instead.
 func (*CleanupTasksRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{45}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{46}
 }
 
 func (x *CleanupTasksRequest) GetTaskIds() []string {
@@ -3322,7 +3369,7 @@ type CleanupTasksReply struct {
 func (x *CleanupTasksReply) Reset() {
 	*x = CleanupTasksReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[46]
+		mi := &file_protos_o2control_proto_msgTypes[47]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3335,7 +3382,7 @@ func (x *CleanupTasksReply) String() string {
 func (*CleanupTasksReply) ProtoMessage() {}
 
 func (x *CleanupTasksReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[46]
+	mi := &file_protos_o2control_proto_msgTypes[47]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3348,7 +3395,7 @@ func (x *CleanupTasksReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CleanupTasksReply.ProtoReflect.Descriptor instead.
 func (*CleanupTasksReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{46}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{47}
 }
 
 func (x *CleanupTasksReply) GetKilledTasks() []*ShortTaskInfo {
@@ -3380,7 +3427,7 @@ type GetRolesRequest struct {
 func (x *GetRolesRequest) Reset() {
 	*x = GetRolesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[47]
+		mi := &file_protos_o2control_proto_msgTypes[48]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3393,7 +3440,7 @@ func (x *GetRolesRequest) String() string {
 func (*GetRolesRequest) ProtoMessage() {}
 
 func (x *GetRolesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[47]
+	mi := &file_protos_o2control_proto_msgTypes[48]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3406,7 +3453,7 @@ func (x *GetRolesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRolesRequest.ProtoReflect.Descriptor instead.
 func (*GetRolesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{47}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{48}
 }
 
 func (x *GetRolesRequest) GetEnvId() string {
@@ -3444,7 +3491,7 @@ type RoleInfo struct {
 func (x *RoleInfo) Reset() {
 	*x = RoleInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[48]
+		mi := &file_protos_o2control_proto_msgTypes[49]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3457,7 +3504,7 @@ func (x *RoleInfo) String() string {
 func (*RoleInfo) ProtoMessage() {}
 
 func (x *RoleInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[48]
+	mi := &file_protos_o2control_proto_msgTypes[49]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3470,7 +3517,7 @@ func (x *RoleInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RoleInfo.ProtoReflect.Descriptor instead.
 func (*RoleInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{48}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{49}
 }
 
 func (x *RoleInfo) GetName() string {
@@ -3561,7 +3608,7 @@ type GetRolesReply struct {
 func (x *GetRolesReply) Reset() {
 	*x = GetRolesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[49]
+		mi := &file_protos_o2control_proto_msgTypes[50]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3574,7 +3621,7 @@ func (x *GetRolesReply) String() string {
 func (*GetRolesReply) ProtoMessage() {}
 
 func (x *GetRolesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[49]
+	mi := &file_protos_o2control_proto_msgTypes[50]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3587,7 +3634,7 @@ func (x *GetRolesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRolesReply.ProtoReflect.Descriptor instead.
 func (*GetRolesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{49}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{50}
 }
 
 func (x *GetRolesReply) GetRoles() []*RoleInfo {
@@ -3612,7 +3659,7 @@ type GetWorkflowTemplatesRequest struct {
 func (x *GetWorkflowTemplatesRequest) Reset() {
 	*x = GetWorkflowTemplatesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[50]
+		mi := &file_protos_o2control_proto_msgTypes[51]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3625,7 +3672,7 @@ func (x *GetWorkflowTemplatesRequest) String() string {
 func (*GetWorkflowTemplatesRequest) ProtoMessage() {}
 
 func (x *GetWorkflowTemplatesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[50]
+	mi := &file_protos_o2control_proto_msgTypes[51]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3638,7 +3685,7 @@ func (x *GetWorkflowTemplatesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWorkflowTemplatesRequest.ProtoReflect.Descriptor instead.
 func (*GetWorkflowTemplatesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{50}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{51}
 }
 
 func (x *GetWorkflowTemplatesRequest) GetRepoPattern() string {
@@ -3696,7 +3743,7 @@ type VarSpecMessage struct {
 func (x *VarSpecMessage) Reset() {
 	*x = VarSpecMessage{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[51]
+		mi := &file_protos_o2control_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3709,7 +3756,7 @@ func (x *VarSpecMessage) String() string {
 func (*VarSpecMessage) ProtoMessage() {}
 
 func (x *VarSpecMessage) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[51]
+	mi := &file_protos_o2control_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3722,7 +3769,7 @@ func (x *VarSpecMessage) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use VarSpecMessage.ProtoReflect.Descriptor instead.
 func (*VarSpecMessage) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52}
 }
 
 func (x *VarSpecMessage) GetDefaultValue() string {
@@ -3810,7 +3857,7 @@ type WorkflowTemplateInfo struct {
 func (x *WorkflowTemplateInfo) Reset() {
 	*x = WorkflowTemplateInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[52]
+		mi := &file_protos_o2control_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3823,7 +3870,7 @@ func (x *WorkflowTemplateInfo) String() string {
 func (*WorkflowTemplateInfo) ProtoMessage() {}
 
 func (x *WorkflowTemplateInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[52]
+	mi := &file_protos_o2control_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3836,7 +3883,7 @@ func (x *WorkflowTemplateInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use WorkflowTemplateInfo.ProtoReflect.Descriptor instead.
 func (*WorkflowTemplateInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{52}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{53}
 }
 
 func (x *WorkflowTemplateInfo) GetRepo() string {
@@ -3885,7 +3932,7 @@ type GetWorkflowTemplatesReply struct {
 func (x *GetWorkflowTemplatesReply) Reset() {
 	*x = GetWorkflowTemplatesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[53]
+		mi := &file_protos_o2control_proto_msgTypes[54]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3898,7 +3945,7 @@ func (x *GetWorkflowTemplatesReply) String() string {
 func (*GetWorkflowTemplatesReply) ProtoMessage() {}
 
 func (x *GetWorkflowTemplatesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[53]
+	mi := &file_protos_o2control_proto_msgTypes[54]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3911,7 +3958,7 @@ func (x *GetWorkflowTemplatesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWorkflowTemplatesReply.ProtoReflect.Descriptor instead.
 func (*GetWorkflowTemplatesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{53}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{54}
 }
 
 func (x *GetWorkflowTemplatesReply) GetWorkflowTemplates() []*WorkflowTemplateInfo {
@@ -3932,7 +3979,7 @@ type ListReposRequest struct {
 func (x *ListReposRequest) Reset() {
 	*x = ListReposRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[54]
+		mi := &file_protos_o2control_proto_msgTypes[55]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3945,7 +3992,7 @@ func (x *ListReposRequest) String() string {
 func (*ListReposRequest) ProtoMessage() {}
 
 func (x *ListReposRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[54]
+	mi := &file_protos_o2control_proto_msgTypes[55]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3958,7 +4005,7 @@ func (x *ListReposRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListReposRequest.ProtoReflect.Descriptor instead.
 func (*ListReposRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{54}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{55}
 }
 
 func (x *ListReposRequest) GetGetRevisions() bool {
@@ -3982,7 +4029,7 @@ type RepoInfo struct {
 func (x *RepoInfo) Reset() {
 	*x = RepoInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[55]
+		mi := &file_protos_o2control_proto_msgTypes[56]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3995,7 +4042,7 @@ func (x *RepoInfo) String() string {
 func (*RepoInfo) ProtoMessage() {}
 
 func (x *RepoInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[55]
+	mi := &file_protos_o2control_proto_msgTypes[56]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4008,7 +4055,7 @@ func (x *RepoInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RepoInfo.ProtoReflect.Descriptor instead.
 func (*RepoInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{55}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{56}
 }
 
 func (x *RepoInfo) GetName() string {
@@ -4051,7 +4098,7 @@ type ListReposReply struct {
 func (x *ListReposReply) Reset() {
 	*x = ListReposReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[56]
+		mi := &file_protos_o2control_proto_msgTypes[57]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4064,7 +4111,7 @@ func (x *ListReposReply) String() string {
 func (*ListReposReply) ProtoMessage() {}
 
 func (x *ListReposReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[56]
+	mi := &file_protos_o2control_proto_msgTypes[57]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4077,7 +4124,7 @@ func (x *ListReposReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListReposReply.ProtoReflect.Descriptor instead.
 func (*ListReposReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{56}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{57}
 }
 
 func (x *ListReposReply) GetRepos() []*RepoInfo {
@@ -4106,7 +4153,7 @@ type AddRepoRequest struct {
 func (x *AddRepoRequest) Reset() {
 	*x = AddRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[57]
+		mi := &file_protos_o2control_proto_msgTypes[58]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4119,7 +4166,7 @@ func (x *AddRepoRequest) String() string {
 func (*AddRepoRequest) ProtoMessage() {}
 
 func (x *AddRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[57]
+	mi := &file_protos_o2control_proto_msgTypes[58]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4132,7 +4179,7 @@ func (x *AddRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AddRepoRequest.ProtoReflect.Descriptor instead.
 func (*AddRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{57}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{58}
 }
 
 func (x *AddRepoRequest) GetName() string {
@@ -4161,7 +4208,7 @@ type AddRepoReply struct {
 func (x *AddRepoReply) Reset() {
 	*x = AddRepoReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[58]
+		mi := &file_protos_o2control_proto_msgTypes[59]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4174,7 +4221,7 @@ func (x *AddRepoReply) String() string {
 func (*AddRepoReply) ProtoMessage() {}
 
 func (x *AddRepoReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[58]
+	mi := &file_protos_o2control_proto_msgTypes[59]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4187,7 +4234,7 @@ func (x *AddRepoReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AddRepoReply.ProtoReflect.Descriptor instead.
 func (*AddRepoReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{58}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{59}
 }
 
 func (x *AddRepoReply) GetNewDefaultRevision() string {
@@ -4215,7 +4262,7 @@ type RemoveRepoRequest struct {
 func (x *RemoveRepoRequest) Reset() {
 	*x = RemoveRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[59]
+		mi := &file_protos_o2control_proto_msgTypes[60]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4228,7 +4275,7 @@ func (x *RemoveRepoRequest) String() string {
 func (*RemoveRepoRequest) ProtoMessage() {}
 
 func (x *RemoveRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[59]
+	mi := &file_protos_o2control_proto_msgTypes[60]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4241,7 +4288,7 @@ func (x *RemoveRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RemoveRepoRequest.ProtoReflect.Descriptor instead.
 func (*RemoveRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{59}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{60}
 }
 
 func (x *RemoveRepoRequest) GetIndex() int32 {
@@ -4262,7 +4309,7 @@ type RemoveRepoReply struct {
 func (x *RemoveRepoReply) Reset() {
 	*x = RemoveRepoReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[60]
+		mi := &file_protos_o2control_proto_msgTypes[61]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4275,7 +4322,7 @@ func (x *RemoveRepoReply) String() string {
 func (*RemoveRepoReply) ProtoMessage() {}
 
 func (x *RemoveRepoReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[60]
+	mi := &file_protos_o2control_proto_msgTypes[61]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4288,7 +4335,7 @@ func (x *RemoveRepoReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RemoveRepoReply.ProtoReflect.Descriptor instead.
 func (*RemoveRepoReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{60}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{61}
 }
 
 func (x *RemoveRepoReply) GetNewDefaultRepo() string {
@@ -4309,7 +4356,7 @@ type RefreshReposRequest struct {
 func (x *RefreshReposRequest) Reset() {
 	*x = RefreshReposRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[61]
+		mi := &file_protos_o2control_proto_msgTypes[62]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4322,7 +4369,7 @@ func (x *RefreshReposRequest) String() string {
 func (*RefreshReposRequest) ProtoMessage() {}
 
 func (x *RefreshReposRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[61]
+	mi := &file_protos_o2control_proto_msgTypes[62]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4335,7 +4382,7 @@ func (x *RefreshReposRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RefreshReposRequest.ProtoReflect.Descriptor instead.
 func (*RefreshReposRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{61}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{62}
 }
 
 func (x *RefreshReposRequest) GetIndex() int32 {
@@ -4356,7 +4403,7 @@ type SetDefaultRepoRequest struct {
 func (x *SetDefaultRepoRequest) Reset() {
 	*x = SetDefaultRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[62]
+		mi := &file_protos_o2control_proto_msgTypes[63]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4369,7 +4416,7 @@ func (x *SetDefaultRepoRequest) String() string {
 func (*SetDefaultRepoRequest) ProtoMessage() {}
 
 func (x *SetDefaultRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[62]
+	mi := &file_protos_o2control_proto_msgTypes[63]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4382,7 +4429,7 @@ func (x *SetDefaultRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetDefaultRepoRequest.ProtoReflect.Descriptor instead.
 func (*SetDefaultRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{62}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{63}
 }
 
 func (x *SetDefaultRepoRequest) GetIndex() int32 {
@@ -4403,7 +4450,7 @@ type SetGlobalDefaultRevisionRequest struct {
 func (x *SetGlobalDefaultRevisionRequest) Reset() {
 	*x = SetGlobalDefaultRevisionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[63]
+		mi := &file_protos_o2control_proto_msgTypes[64]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4416,7 +4463,7 @@ func (x *SetGlobalDefaultRevisionRequest) String() string {
 func (*SetGlobalDefaultRevisionRequest) ProtoMessage() {}
 
 func (x *SetGlobalDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[63]
+	mi := &file_protos_o2control_proto_msgTypes[64]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4429,7 +4476,7 @@ func (x *SetGlobalDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetGlobalDefaultRevisionRequest.ProtoReflect.Descriptor instead.
 func (*SetGlobalDefaultRevisionRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{63}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{64}
 }
 
 func (x *SetGlobalDefaultRevisionRequest) GetRevision() string {
@@ -4451,7 +4498,7 @@ type SetRepoDefaultRevisionRequest struct {
 func (x *SetRepoDefaultRevisionRequest) Reset() {
 	*x = SetRepoDefaultRevisionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[64]
+		mi := &file_protos_o2control_proto_msgTypes[65]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4464,7 +4511,7 @@ func (x *SetRepoDefaultRevisionRequest) String() string {
 func (*SetRepoDefaultRevisionRequest) ProtoMessage() {}
 
 func (x *SetRepoDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[64]
+	mi := &file_protos_o2control_proto_msgTypes[65]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4477,7 +4524,7 @@ func (x *SetRepoDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetRepoDefaultRevisionRequest.ProtoReflect.Descriptor instead.
 func (*SetRepoDefaultRevisionRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{64}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{65}
 }
 
 func (x *SetRepoDefaultRevisionRequest) GetIndex() int32 {
@@ -4505,7 +4552,7 @@ type SetRepoDefaultRevisionReply struct {
 func (x *SetRepoDefaultRevisionReply) Reset() {
 	*x = SetRepoDefaultRevisionReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[65]
+		mi := &file_protos_o2control_proto_msgTypes[66]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4518,7 +4565,7 @@ func (x *SetRepoDefaultRevisionReply) String() string {
 func (*SetRepoDefaultRevisionReply) ProtoMessage() {}
 
 func (x *SetRepoDefaultRevisionReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[65]
+	mi := &file_protos_o2control_proto_msgTypes[66]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4531,7 +4578,7 @@ func (x *SetRepoDefaultRevisionReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetRepoDefaultRevisionReply.ProtoReflect.Descriptor instead.
 func (*SetRepoDefaultRevisionReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{65}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{66}
 }
 
 func (x *SetRepoDefaultRevisionReply) GetInfo() string {
@@ -4550,7 +4597,7 @@ type Empty struct {
 func (x *Empty) Reset() {
 	*x = Empty{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[66]
+		mi := &file_protos_o2control_proto_msgTypes[67]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4563,7 +4610,7 @@ func (x *Empty) String() string {
 func (*Empty) ProtoMessage() {}
 
 func (x *Empty) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[66]
+	mi := &file_protos_o2control_proto_msgTypes[67]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4576,7 +4623,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Empty.ProtoReflect.Descriptor instead.
 func (*Empty) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{66}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{67}
 }
 
 type ListIntegratedServicesReply struct {
@@ -4590,7 +4637,7 @@ type ListIntegratedServicesReply struct {
 func (x *ListIntegratedServicesReply) Reset() {
 	*x = ListIntegratedServicesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[67]
+		mi := &file_protos_o2control_proto_msgTypes[68]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4603,7 +4650,7 @@ func (x *ListIntegratedServicesReply) String() string {
 func (*ListIntegratedServicesReply) ProtoMessage() {}
 
 func (x *ListIntegratedServicesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[67]
+	mi := &file_protos_o2control_proto_msgTypes[68]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4616,7 +4663,7 @@ func (x *ListIntegratedServicesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListIntegratedServicesReply.ProtoReflect.Descriptor instead.
 func (*ListIntegratedServicesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{67}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{68}
 }
 
 func (x *ListIntegratedServicesReply) GetServices() map[string]*IntegratedServiceInfo {
@@ -4641,7 +4688,7 @@ type IntegratedServiceInfo struct {
 func (x *IntegratedServiceInfo) Reset() {
 	*x = IntegratedServiceInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[68]
+		mi := &file_protos_o2control_proto_msgTypes[69]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4654,7 +4701,7 @@ func (x *IntegratedServiceInfo) String() string {
 func (*IntegratedServiceInfo) ProtoMessage() {}
 
 func (x *IntegratedServiceInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[68]
+	mi := &file_protos_o2control_proto_msgTypes[69]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4667,7 +4714,7 @@ func (x *IntegratedServiceInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IntegratedServiceInfo.ProtoReflect.Descriptor instead.
 func (*IntegratedServiceInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{68}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{69}
 }
 
 func (x *IntegratedServiceInfo) GetName() string {
@@ -5033,404 +5080,413 @@ var file_protos_o2control_proto_rawDesc = []byte{
 	0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63,
 	0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74,
 	0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65,
-	0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x45,
-	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70,
-	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x3a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x45,
-	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65,
-	0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76,
-	0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
-	0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x73, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x6e,
-	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
-	0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75,
-	0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65,
-	0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47,
-	0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78,
-	0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a,
-	0x1d, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50,
-	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x58,
-	0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47,
-	0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72,
-	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0xbc, 0x02, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x72,
-	0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c,
-	0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63,
-	0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
-	0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x64, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61,
-	0x73, 0x6b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70,
-	0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x64,
-	0x6f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62,
-	0x6f, 0x78, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69,
-	0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x61,
-	0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x44,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x67, 0x65,
-	0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e,
-	0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a,
-	0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a,
-	0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x22, 0x3f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c,
-	0x79, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f,
-	0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b,
-	0x73, 0x22, 0x28, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0c, 0x47,
-	0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x74,
-	0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04,
-	0x74, 0x61, 0x73, 0x6b, 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73,
-	0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x7d, 0x0a, 0x0b, 0x43,
-	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e,
-	0x76, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x14, 0x0a, 0x05,
-	0x73, 0x68, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x68, 0x65,
-	0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x68,
-	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a,
-	0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70,
-	0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xf0, 0x03, 0x0a, 0x08, 0x54, 0x61,
-	0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49,
-	0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36,
-	0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61,
-	0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x6c, 0x61,
-	0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e,
-	0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e,
-	0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64,
-	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x62,
-	0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43,
-	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62,
-	0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b,
-	0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f,
-	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
-	0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61,
-	0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61,
-	0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f,
-	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66,
-	0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a,
-	0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x2f, 0x0a, 0x13,
-	0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x8d, 0x01,
-	0x0a, 0x11, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65,
-	0x70, 0x6c, 0x79, 0x12, 0x3a, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73,
-	0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12,
-	0x3c, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18,
-	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52,
-	0x0c, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x43, 0x0a,
-	0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70,
-	0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70,
-	0x65, 0x63, 0x22, 0xd3, 0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12,
-	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73,
-	0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a,
-	0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
-	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73,
-	0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c,
-	0x65, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x07,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x73, 0x12, 0x31, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
-	0x76, 0x61, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73,
-	0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56,
-	0x61, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61,
-	0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64,
-	0x53, 0x74, 0x61, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73,
-	0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x20, 0x0a,
-	0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
-	0x3b, 0x0a, 0x0d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 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, 0x1a, 0x37, 0x0a, 0x09,
-	0x56, 0x61, 0x72, 0x73, 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, 0x1a, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72,
+	0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x3a, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x76,
+	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
+	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74,
+	0x6f, 0x72, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72,
+	0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72,
+	0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
 	0x73, 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, 0x1a, 0x44, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74,
-	0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x38, 0x01, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
+	0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x73, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+	0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61,
+	0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
+	0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x58, 0x0a, 0x0a, 0x70, 0x72,
+	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e,
+	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+	0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 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, 0xbc, 0x02, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73,
+	0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63,
+	0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
+	0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73,
+	0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d,
+	0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65,
+	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x64, 0x65,
+	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03,
+	0x70, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x24,
+	0x0a, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74,
+	0x64, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c,
+	0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62,
+	0x6c, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12,
+	0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65,
+	0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+	0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3f, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a,
+	0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61,
+	0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x28, 0x0a,
+	0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x61,
+	0x73, 0x6b, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b,
+	0x22, 0x45, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x7d, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x65, 0x6c,
+	0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
+	0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+	0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
+	0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xf0, 0x03, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x63, 0x6c,
+	0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c,
+	0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61,
+	0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e,
+	0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e,
+	0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14,
+	0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+	0x6e, 0x76, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72,
+	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70,
+	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f,
+	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x3a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52,
-	0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c,
-	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72,
-	0x6f, 0x6c, 0x65, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
-	0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74,
-	0x65, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50,
-	0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
-	0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
-	0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c,
-	0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
-	0x22, 0x9a, 0x04, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c,
-	0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65,
-	0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55,
-	0x69, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x52, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12,
-	0x14, 0x0a, 0x05, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x70, 0x61, 0x6e, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
-	0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c,
-	0x6c, 0x6f, 0x77, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69,
-	0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
-	0x78, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x12,
-	0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x18, 0x0a, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x22, 0x71, 0x0a,
-	0x08, 0x55, 0x69, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x65, 0x64, 0x69,
-	0x74, 0x42, 0x6f, 0x78, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72,
-	0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x78, 0x10, 0x02, 0x12,
-	0x0f, 0x0a, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x03,
-	0x12, 0x0c, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x10, 0x04, 0x12, 0x12,
-	0x0a, 0x0e, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78,
-	0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x6f, 0x78, 0x10, 0x06,
-	0x22, 0x3b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x01,
-	0x12, 0x08, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x6c, 0x69,
-	0x73, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x10, 0x04, 0x22, 0xaf, 0x02,
-	0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
-	0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70,
-	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
-	0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d,
-	0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63,
-	0x4d, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x58, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63,
-	0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
-	0x6a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x11,
-	0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
-	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
-	0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
-	0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x22, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x28,
-	0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x71, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x70, 0x6f, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6f,
-	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x65,
-	0x70, 0x6f, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x0e, 0x41, 0x64, 0x64,
-	0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x13, 0x43, 0x6c, 0x65, 0x61,
+	0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+	0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x43, 0x6c,
+	0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
+	0x3a, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b,
+	0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x72,
+	0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68,
+	0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x72, 0x75, 0x6e,
+	0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+	0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
+	0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76,
+	0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x22, 0xd3,
+	0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e,
 	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-	0x28, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x0c, 0x41, 0x64, 0x64,
-	0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x77,
-	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66,
-	0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x29, 0x0a,
-	0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x39, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f,
-	0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x6e,
-	0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
-	0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65,
-	0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e,
-	0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
-	0x22, 0x2d, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
-	0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64,
-	0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22,
-	0x3d, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51,
-	0x0a, 0x1d, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
-	0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x22, 0x31, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79,
-	0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x69, 0x6e, 0x66, 0x6f, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xce, 0x01,
-	0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x50, 0x0a,
-	0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x34, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74,
-	0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a,
-	0x5d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
-	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
-	0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6e,
-	0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9f,
-	0x01, 0x0a, 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
-	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69,
-	0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69,
-	0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e,
-	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
-	0x32, 0x82, 0x10, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b,
-	0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x6f, 0x32,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x30,
-	0x01, 0x12, 0x5a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52,
+	0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3d,
+	0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c,
+	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x31, 0x0a,
+	0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73,
+	0x12, 0x3d, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52,
+	0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 0x12,
+	0x58, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x74, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e,
+	0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63,
+	0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x0a, 0x0d, 0x44,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 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, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x73,
+	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, 0x1a, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 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, 0x1a, 0x44,
+	0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74,
+	0x61, 0x63, 0x6b, 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, 0x3a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73,
+	0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+	0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74, 0x65,
+	0x72, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61,
+	0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x20, 0x0a, 0x0b,
+	0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x18,
+	0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x57,
+	0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
+	0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0x9a, 0x04, 0x0a,
+	0x0e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61,
+	0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x20, 0x0a,
+	0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x3a, 0x0a, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53,
+	0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x69, 0x57, 0x69, 0x64,
+	0x67, 0x65, 0x74, 0x52, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70,
+	0x61, 0x6e, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x6e, 0x65,
+	0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65,
+	0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a,
+	0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x22, 0x71, 0x0a, 0x08, 0x55, 0x69, 0x57,
+	0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x42, 0x6f, 0x78,
+	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x10, 0x01, 0x12, 0x0b,
+	0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x78, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x64,
+	0x72, 0x6f, 0x70, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08,
+	0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x05, 0x12, 0x0c,
+	0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x6f, 0x78, 0x10, 0x06, 0x22, 0x3b, 0x0a, 0x04,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x00,
+	0x12, 0x0a, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04,
+	0x62, 0x6f, 0x6f, 0x6c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x10, 0x03,
+	0x12, 0x07, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x10, 0x04, 0x22, 0xaf, 0x02, 0x0a, 0x14, 0x57, 0x6f,
+	0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4f,
+	0x0a, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x18, 0x04, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x57,
+	0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x12,
+	0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x1a, 0x58, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6a, 0x0a, 0x19, 0x47,
+	0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b,
+	0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
+	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x67,
+	0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22,
+	0x80, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x22, 0x71, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x12,
+	0x34, 0x0a, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15,
+	0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6f,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6f,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x29, 0x0a, 0x11, 0x52, 0x65, 0x6d,
+	0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14,
+	0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69,
+	0x6e, 0x64, 0x65, 0x78, 0x22, 0x39, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65,
+	0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x22,
+	0x2b, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x2d, 0x0a, 0x15,
+	0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x3d, 0x0a, 0x1f, 0x53,
+	0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
+	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+	0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x1d, 0x53, 0x65,
+	0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69,
+	0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69,
+	0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
+	0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x0a,
+	0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
+	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04,
+	0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f,
+	0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x4c, 0x69,
+	0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x50, 0x0a, 0x08, 0x73, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65,
+	0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0d, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+	0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x49,
+	0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28,
+	0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xd6, 0x10, 0x0a,
+	0x07, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x63,
+	0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5a, 0x0a,
+	0x10, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65,
+	0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
 	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f,
-	0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a,
-	0x08, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22,
-	0x00, 0x12, 0x57, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
-	0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
-	0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x4e, 0x65,
-	0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
-	0x12, 0x24, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77,
-	0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
-	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e,
-	0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x08, 0x54, 0x65, 0x61,
+	0x72, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x65,
+	0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a,
+	0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+	0x12, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74,
+	0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74, 0x6f,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e,
+	0x65, 0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x4e, 0x65, 0x77, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69,
+	0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54,
+	0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
+	0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47,
+	0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e,
 	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77,
-	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79,
-	0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
-	0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x4d, 0x6f,
-	0x64, 0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
-	0x23, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
-	0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x73,
-	0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
-	0x24, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74,
-	0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
-	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x47,
-	0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72,
-	0x73, 0x12, 0x10, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d,
-	0x70, 0x74, 0x79, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
+	0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x45, 0x6e,
+	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65,
+	0x73, 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63,
+	0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x10, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
+	0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41,
+	0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69,
+	0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x10,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x1a, 0x25, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
 	0x72, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x08, 0x47, 0x65, 0x74,
 	0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
 	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
@@ -5521,7 +5577,7 @@ func file_protos_o2control_proto_rawDescGZIP() []byte {
 }
 
 var file_protos_o2control_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
-var file_protos_o2control_proto_msgTypes = make([]protoimpl.MessageInfo, 84)
+var file_protos_o2control_proto_msgTypes = make([]protoimpl.MessageInfo, 85)
 var file_protos_o2control_proto_goTypes = []interface{}{
 	(StatusUpdate_Level)(0),                 // 0: o2control.StatusUpdate.Level
 	(ControlEnvironmentRequest_Optype)(0),   // 1: o2control.ControlEnvironmentRequest.Optype
@@ -5559,59 +5615,60 @@ var file_protos_o2control_proto_goTypes = []interface{}{
 	(*DestroyEnvironmentRequest)(nil),       // 33: o2control.DestroyEnvironmentRequest
 	(*DestroyEnvironmentReply)(nil),         // 34: o2control.DestroyEnvironmentReply
 	(*GetActiveDetectorsReply)(nil),         // 35: o2control.GetActiveDetectorsReply
-	(*SetEnvironmentPropertiesRequest)(nil), // 36: o2control.SetEnvironmentPropertiesRequest
-	(*SetEnvironmentPropertiesReply)(nil),   // 37: o2control.SetEnvironmentPropertiesReply
-	(*GetEnvironmentPropertiesRequest)(nil), // 38: o2control.GetEnvironmentPropertiesRequest
-	(*GetEnvironmentPropertiesReply)(nil),   // 39: o2control.GetEnvironmentPropertiesReply
-	(*ShortTaskInfo)(nil),                   // 40: o2control.ShortTaskInfo
-	(*TaskDeploymentInfo)(nil),              // 41: o2control.TaskDeploymentInfo
-	(*GetTasksRequest)(nil),                 // 42: o2control.GetTasksRequest
-	(*GetTasksReply)(nil),                   // 43: o2control.GetTasksReply
-	(*GetTaskRequest)(nil),                  // 44: o2control.GetTaskRequest
-	(*GetTaskReply)(nil),                    // 45: o2control.GetTaskReply
-	(*TaskClassInfo)(nil),                   // 46: o2control.TaskClassInfo
-	(*CommandInfo)(nil),                     // 47: o2control.CommandInfo
-	(*ChannelInfo)(nil),                     // 48: o2control.ChannelInfo
-	(*TaskInfo)(nil),                        // 49: o2control.TaskInfo
-	(*CleanupTasksRequest)(nil),             // 50: o2control.CleanupTasksRequest
-	(*CleanupTasksReply)(nil),               // 51: o2control.CleanupTasksReply
-	(*GetRolesRequest)(nil),                 // 52: o2control.GetRolesRequest
-	(*RoleInfo)(nil),                        // 53: o2control.RoleInfo
-	(*GetRolesReply)(nil),                   // 54: o2control.GetRolesReply
-	(*GetWorkflowTemplatesRequest)(nil),     // 55: o2control.GetWorkflowTemplatesRequest
-	(*VarSpecMessage)(nil),                  // 56: o2control.VarSpecMessage
-	(*WorkflowTemplateInfo)(nil),            // 57: o2control.WorkflowTemplateInfo
-	(*GetWorkflowTemplatesReply)(nil),       // 58: o2control.GetWorkflowTemplatesReply
-	(*ListReposRequest)(nil),                // 59: o2control.ListReposRequest
-	(*RepoInfo)(nil),                        // 60: o2control.RepoInfo
-	(*ListReposReply)(nil),                  // 61: o2control.ListReposReply
-	(*AddRepoRequest)(nil),                  // 62: o2control.AddRepoRequest
-	(*AddRepoReply)(nil),                    // 63: o2control.AddRepoReply
-	(*RemoveRepoRequest)(nil),               // 64: o2control.RemoveRepoRequest
-	(*RemoveRepoReply)(nil),                 // 65: o2control.RemoveRepoReply
-	(*RefreshReposRequest)(nil),             // 66: o2control.RefreshReposRequest
-	(*SetDefaultRepoRequest)(nil),           // 67: o2control.SetDefaultRepoRequest
-	(*SetGlobalDefaultRevisionRequest)(nil), // 68: o2control.SetGlobalDefaultRevisionRequest
-	(*SetRepoDefaultRevisionRequest)(nil),   // 69: o2control.SetRepoDefaultRevisionRequest
-	(*SetRepoDefaultRevisionReply)(nil),     // 70: o2control.SetRepoDefaultRevisionReply
-	(*Empty)(nil),                           // 71: o2control.Empty
-	(*ListIntegratedServicesReply)(nil),     // 72: o2control.ListIntegratedServicesReply
-	(*IntegratedServiceInfo)(nil),           // 73: o2control.IntegratedServiceInfo
-	nil,                                     // 74: o2control.EnvironmentInfo.DefaultsEntry
-	nil,                                     // 75: o2control.EnvironmentInfo.VarsEntry
-	nil,                                     // 76: o2control.EnvironmentInfo.UserVarsEntry
-	nil,                                     // 77: o2control.EnvironmentInfo.IntegratedServicesDataEntry
-	nil,                                     // 78: o2control.NewEnvironmentRequest.VarsEntry
-	nil,                                     // 79: o2control.NewAutoEnvironmentRequest.VarsEntry
-	nil,                                     // 80: o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
-	nil,                                     // 81: o2control.GetEnvironmentPropertiesReply.PropertiesEntry
-	nil,                                     // 82: o2control.TaskInfo.PropertiesEntry
-	nil,                                     // 83: o2control.RoleInfo.DefaultsEntry
-	nil,                                     // 84: o2control.RoleInfo.VarsEntry
-	nil,                                     // 85: o2control.RoleInfo.UserVarsEntry
-	nil,                                     // 86: o2control.RoleInfo.ConsolidatedStackEntry
-	nil,                                     // 87: o2control.WorkflowTemplateInfo.VarSpecMapEntry
-	nil,                                     // 88: o2control.ListIntegratedServicesReply.ServicesEntry
+	(*GetAvailableDetectorsReply)(nil),      // 36: o2control.GetAvailableDetectorsReply
+	(*SetEnvironmentPropertiesRequest)(nil), // 37: o2control.SetEnvironmentPropertiesRequest
+	(*SetEnvironmentPropertiesReply)(nil),   // 38: o2control.SetEnvironmentPropertiesReply
+	(*GetEnvironmentPropertiesRequest)(nil), // 39: o2control.GetEnvironmentPropertiesRequest
+	(*GetEnvironmentPropertiesReply)(nil),   // 40: o2control.GetEnvironmentPropertiesReply
+	(*ShortTaskInfo)(nil),                   // 41: o2control.ShortTaskInfo
+	(*TaskDeploymentInfo)(nil),              // 42: o2control.TaskDeploymentInfo
+	(*GetTasksRequest)(nil),                 // 43: o2control.GetTasksRequest
+	(*GetTasksReply)(nil),                   // 44: o2control.GetTasksReply
+	(*GetTaskRequest)(nil),                  // 45: o2control.GetTaskRequest
+	(*GetTaskReply)(nil),                    // 46: o2control.GetTaskReply
+	(*TaskClassInfo)(nil),                   // 47: o2control.TaskClassInfo
+	(*CommandInfo)(nil),                     // 48: o2control.CommandInfo
+	(*ChannelInfo)(nil),                     // 49: o2control.ChannelInfo
+	(*TaskInfo)(nil),                        // 50: o2control.TaskInfo
+	(*CleanupTasksRequest)(nil),             // 51: o2control.CleanupTasksRequest
+	(*CleanupTasksReply)(nil),               // 52: o2control.CleanupTasksReply
+	(*GetRolesRequest)(nil),                 // 53: o2control.GetRolesRequest
+	(*RoleInfo)(nil),                        // 54: o2control.RoleInfo
+	(*GetRolesReply)(nil),                   // 55: o2control.GetRolesReply
+	(*GetWorkflowTemplatesRequest)(nil),     // 56: o2control.GetWorkflowTemplatesRequest
+	(*VarSpecMessage)(nil),                  // 57: o2control.VarSpecMessage
+	(*WorkflowTemplateInfo)(nil),            // 58: o2control.WorkflowTemplateInfo
+	(*GetWorkflowTemplatesReply)(nil),       // 59: o2control.GetWorkflowTemplatesReply
+	(*ListReposRequest)(nil),                // 60: o2control.ListReposRequest
+	(*RepoInfo)(nil),                        // 61: o2control.RepoInfo
+	(*ListReposReply)(nil),                  // 62: o2control.ListReposReply
+	(*AddRepoRequest)(nil),                  // 63: o2control.AddRepoRequest
+	(*AddRepoReply)(nil),                    // 64: o2control.AddRepoReply
+	(*RemoveRepoRequest)(nil),               // 65: o2control.RemoveRepoRequest
+	(*RemoveRepoReply)(nil),                 // 66: o2control.RemoveRepoReply
+	(*RefreshReposRequest)(nil),             // 67: o2control.RefreshReposRequest
+	(*SetDefaultRepoRequest)(nil),           // 68: o2control.SetDefaultRepoRequest
+	(*SetGlobalDefaultRevisionRequest)(nil), // 69: o2control.SetGlobalDefaultRevisionRequest
+	(*SetRepoDefaultRevisionRequest)(nil),   // 70: o2control.SetRepoDefaultRevisionRequest
+	(*SetRepoDefaultRevisionReply)(nil),     // 71: o2control.SetRepoDefaultRevisionReply
+	(*Empty)(nil),                           // 72: o2control.Empty
+	(*ListIntegratedServicesReply)(nil),     // 73: o2control.ListIntegratedServicesReply
+	(*IntegratedServiceInfo)(nil),           // 74: o2control.IntegratedServiceInfo
+	nil,                                     // 75: o2control.EnvironmentInfo.DefaultsEntry
+	nil,                                     // 76: o2control.EnvironmentInfo.VarsEntry
+	nil,                                     // 77: o2control.EnvironmentInfo.UserVarsEntry
+	nil,                                     // 78: o2control.EnvironmentInfo.IntegratedServicesDataEntry
+	nil,                                     // 79: o2control.NewEnvironmentRequest.VarsEntry
+	nil,                                     // 80: o2control.NewAutoEnvironmentRequest.VarsEntry
+	nil,                                     // 81: o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
+	nil,                                     // 82: o2control.GetEnvironmentPropertiesReply.PropertiesEntry
+	nil,                                     // 83: o2control.TaskInfo.PropertiesEntry
+	nil,                                     // 84: o2control.RoleInfo.DefaultsEntry
+	nil,                                     // 85: o2control.RoleInfo.VarsEntry
+	nil,                                     // 86: o2control.RoleInfo.UserVarsEntry
+	nil,                                     // 87: o2control.RoleInfo.ConsolidatedStackEntry
+	nil,                                     // 88: o2control.WorkflowTemplateInfo.VarSpecMapEntry
+	nil,                                     // 89: o2control.ListIntegratedServicesReply.ServicesEntry
 }
 var file_protos_o2control_proto_depIdxs = []int32{
 	11, // 0: o2control.StatusReply.statusUpdates:type_name -> o2control.StatusUpdate
@@ -5622,48 +5679,48 @@ var file_protos_o2control_proto_depIdxs = []int32{
 	8,  // 5: o2control.Event.roleEvent:type_name -> o2control.Ev_RoleEvent
 	15, // 6: o2control.GetFrameworkInfoReply.version:type_name -> o2control.Version
 	21, // 7: o2control.GetEnvironmentsReply.environments:type_name -> o2control.EnvironmentInfo
-	40, // 8: o2control.EnvironmentInfo.tasks:type_name -> o2control.ShortTaskInfo
-	74, // 9: o2control.EnvironmentInfo.defaults:type_name -> o2control.EnvironmentInfo.DefaultsEntry
-	75, // 10: o2control.EnvironmentInfo.vars:type_name -> o2control.EnvironmentInfo.VarsEntry
-	76, // 11: o2control.EnvironmentInfo.userVars:type_name -> o2control.EnvironmentInfo.UserVarsEntry
-	77, // 12: o2control.EnvironmentInfo.integratedServicesData:type_name -> o2control.EnvironmentInfo.IntegratedServicesDataEntry
-	78, // 13: o2control.NewEnvironmentRequest.vars:type_name -> o2control.NewEnvironmentRequest.VarsEntry
+	41, // 8: o2control.EnvironmentInfo.tasks:type_name -> o2control.ShortTaskInfo
+	75, // 9: o2control.EnvironmentInfo.defaults:type_name -> o2control.EnvironmentInfo.DefaultsEntry
+	76, // 10: o2control.EnvironmentInfo.vars:type_name -> o2control.EnvironmentInfo.VarsEntry
+	77, // 11: o2control.EnvironmentInfo.userVars:type_name -> o2control.EnvironmentInfo.UserVarsEntry
+	78, // 12: o2control.EnvironmentInfo.integratedServicesData:type_name -> o2control.EnvironmentInfo.IntegratedServicesDataEntry
+	79, // 13: o2control.NewEnvironmentRequest.vars:type_name -> o2control.NewEnvironmentRequest.VarsEntry
 	21, // 14: o2control.NewEnvironmentReply.environment:type_name -> o2control.EnvironmentInfo
-	79, // 15: o2control.NewAutoEnvironmentRequest.vars:type_name -> o2control.NewAutoEnvironmentRequest.VarsEntry
+	80, // 15: o2control.NewAutoEnvironmentRequest.vars:type_name -> o2control.NewAutoEnvironmentRequest.VarsEntry
 	21, // 16: o2control.GetEnvironmentReply.environment:type_name -> o2control.EnvironmentInfo
-	53, // 17: o2control.GetEnvironmentReply.workflow:type_name -> o2control.RoleInfo
+	54, // 17: o2control.GetEnvironmentReply.workflow:type_name -> o2control.RoleInfo
 	1,  // 18: o2control.ControlEnvironmentRequest.type:type_name -> o2control.ControlEnvironmentRequest.Optype
 	31, // 19: o2control.ModifyEnvironmentRequest.operations:type_name -> o2control.EnvironmentOperation
 	2,  // 20: o2control.EnvironmentOperation.type:type_name -> o2control.EnvironmentOperation.Optype
 	31, // 21: o2control.ModifyEnvironmentReply.failedOperations:type_name -> o2control.EnvironmentOperation
-	51, // 22: o2control.DestroyEnvironmentReply.cleanupTasksReply:type_name -> o2control.CleanupTasksReply
-	80, // 23: o2control.SetEnvironmentPropertiesRequest.properties:type_name -> o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
-	81, // 24: o2control.GetEnvironmentPropertiesReply.properties:type_name -> o2control.GetEnvironmentPropertiesReply.PropertiesEntry
-	41, // 25: o2control.ShortTaskInfo.deploymentInfo:type_name -> o2control.TaskDeploymentInfo
-	40, // 26: o2control.GetTasksReply.tasks:type_name -> o2control.ShortTaskInfo
-	49, // 27: o2control.GetTaskReply.task:type_name -> o2control.TaskInfo
-	40, // 28: o2control.TaskInfo.shortInfo:type_name -> o2control.ShortTaskInfo
-	46, // 29: o2control.TaskInfo.classInfo:type_name -> o2control.TaskClassInfo
-	48, // 30: o2control.TaskInfo.inboundChannels:type_name -> o2control.ChannelInfo
-	48, // 31: o2control.TaskInfo.outboundChannels:type_name -> o2control.ChannelInfo
-	47, // 32: o2control.TaskInfo.commandInfo:type_name -> o2control.CommandInfo
-	82, // 33: o2control.TaskInfo.properties:type_name -> o2control.TaskInfo.PropertiesEntry
-	40, // 34: o2control.CleanupTasksReply.killedTasks:type_name -> o2control.ShortTaskInfo
-	40, // 35: o2control.CleanupTasksReply.runningTasks:type_name -> o2control.ShortTaskInfo
-	53, // 36: o2control.RoleInfo.roles:type_name -> o2control.RoleInfo
-	83, // 37: o2control.RoleInfo.defaults:type_name -> o2control.RoleInfo.DefaultsEntry
-	84, // 38: o2control.RoleInfo.vars:type_name -> o2control.RoleInfo.VarsEntry
-	85, // 39: o2control.RoleInfo.userVars:type_name -> o2control.RoleInfo.UserVarsEntry
-	86, // 40: o2control.RoleInfo.consolidatedStack:type_name -> o2control.RoleInfo.ConsolidatedStackEntry
-	53, // 41: o2control.GetRolesReply.roles:type_name -> o2control.RoleInfo
+	52, // 22: o2control.DestroyEnvironmentReply.cleanupTasksReply:type_name -> o2control.CleanupTasksReply
+	81, // 23: o2control.SetEnvironmentPropertiesRequest.properties:type_name -> o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
+	82, // 24: o2control.GetEnvironmentPropertiesReply.properties:type_name -> o2control.GetEnvironmentPropertiesReply.PropertiesEntry
+	42, // 25: o2control.ShortTaskInfo.deploymentInfo:type_name -> o2control.TaskDeploymentInfo
+	41, // 26: o2control.GetTasksReply.tasks:type_name -> o2control.ShortTaskInfo
+	50, // 27: o2control.GetTaskReply.task:type_name -> o2control.TaskInfo
+	41, // 28: o2control.TaskInfo.shortInfo:type_name -> o2control.ShortTaskInfo
+	47, // 29: o2control.TaskInfo.classInfo:type_name -> o2control.TaskClassInfo
+	49, // 30: o2control.TaskInfo.inboundChannels:type_name -> o2control.ChannelInfo
+	49, // 31: o2control.TaskInfo.outboundChannels:type_name -> o2control.ChannelInfo
+	48, // 32: o2control.TaskInfo.commandInfo:type_name -> o2control.CommandInfo
+	83, // 33: o2control.TaskInfo.properties:type_name -> o2control.TaskInfo.PropertiesEntry
+	41, // 34: o2control.CleanupTasksReply.killedTasks:type_name -> o2control.ShortTaskInfo
+	41, // 35: o2control.CleanupTasksReply.runningTasks:type_name -> o2control.ShortTaskInfo
+	54, // 36: o2control.RoleInfo.roles:type_name -> o2control.RoleInfo
+	84, // 37: o2control.RoleInfo.defaults:type_name -> o2control.RoleInfo.DefaultsEntry
+	85, // 38: o2control.RoleInfo.vars:type_name -> o2control.RoleInfo.VarsEntry
+	86, // 39: o2control.RoleInfo.userVars:type_name -> o2control.RoleInfo.UserVarsEntry
+	87, // 40: o2control.RoleInfo.consolidatedStack:type_name -> o2control.RoleInfo.ConsolidatedStackEntry
+	54, // 41: o2control.GetRolesReply.roles:type_name -> o2control.RoleInfo
 	4,  // 42: o2control.VarSpecMessage.type:type_name -> o2control.VarSpecMessage.Type
 	3,  // 43: o2control.VarSpecMessage.widget:type_name -> o2control.VarSpecMessage.UiWidget
-	87, // 44: o2control.WorkflowTemplateInfo.varSpecMap:type_name -> o2control.WorkflowTemplateInfo.VarSpecMapEntry
-	57, // 45: o2control.GetWorkflowTemplatesReply.workflowTemplates:type_name -> o2control.WorkflowTemplateInfo
-	60, // 46: o2control.ListReposReply.repos:type_name -> o2control.RepoInfo
-	88, // 47: o2control.ListIntegratedServicesReply.services:type_name -> o2control.ListIntegratedServicesReply.ServicesEntry
-	56, // 48: o2control.WorkflowTemplateInfo.VarSpecMapEntry.value:type_name -> o2control.VarSpecMessage
-	73, // 49: o2control.ListIntegratedServicesReply.ServicesEntry.value:type_name -> o2control.IntegratedServiceInfo
+	88, // 44: o2control.WorkflowTemplateInfo.varSpecMap:type_name -> o2control.WorkflowTemplateInfo.VarSpecMapEntry
+	58, // 45: o2control.GetWorkflowTemplatesReply.workflowTemplates:type_name -> o2control.WorkflowTemplateInfo
+	61, // 46: o2control.ListReposReply.repos:type_name -> o2control.RepoInfo
+	89, // 47: o2control.ListIntegratedServicesReply.services:type_name -> o2control.ListIntegratedServicesReply.ServicesEntry
+	57, // 48: o2control.WorkflowTemplateInfo.VarSpecMapEntry.value:type_name -> o2control.VarSpecMessage
+	74, // 49: o2control.ListIntegratedServicesReply.ServicesEntry.value:type_name -> o2control.IntegratedServiceInfo
 	9,  // 50: o2control.Control.TrackStatus:input_type -> o2control.StatusRequest
 	14, // 51: o2control.Control.GetFrameworkInfo:input_type -> o2control.GetFrameworkInfoRequest
 	17, // 52: o2control.Control.Teardown:input_type -> o2control.TeardownRequest
@@ -5674,48 +5731,50 @@ var file_protos_o2control_proto_depIdxs = []int32{
 	28, // 57: o2control.Control.ControlEnvironment:input_type -> o2control.ControlEnvironmentRequest
 	30, // 58: o2control.Control.ModifyEnvironment:input_type -> o2control.ModifyEnvironmentRequest
 	33, // 59: o2control.Control.DestroyEnvironment:input_type -> o2control.DestroyEnvironmentRequest
-	71, // 60: o2control.Control.GetActiveDetectors:input_type -> o2control.Empty
-	42, // 61: o2control.Control.GetTasks:input_type -> o2control.GetTasksRequest
-	44, // 62: o2control.Control.GetTask:input_type -> o2control.GetTaskRequest
-	50, // 63: o2control.Control.CleanupTasks:input_type -> o2control.CleanupTasksRequest
-	52, // 64: o2control.Control.GetRoles:input_type -> o2control.GetRolesRequest
-	55, // 65: o2control.Control.GetWorkflowTemplates:input_type -> o2control.GetWorkflowTemplatesRequest
-	59, // 66: o2control.Control.ListRepos:input_type -> o2control.ListReposRequest
-	62, // 67: o2control.Control.AddRepo:input_type -> o2control.AddRepoRequest
-	64, // 68: o2control.Control.RemoveRepo:input_type -> o2control.RemoveRepoRequest
-	66, // 69: o2control.Control.RefreshRepos:input_type -> o2control.RefreshReposRequest
-	67, // 70: o2control.Control.SetDefaultRepo:input_type -> o2control.SetDefaultRepoRequest
-	68, // 71: o2control.Control.SetGlobalDefaultRevision:input_type -> o2control.SetGlobalDefaultRevisionRequest
-	69, // 72: o2control.Control.SetRepoDefaultRevision:input_type -> o2control.SetRepoDefaultRevisionRequest
-	13, // 73: o2control.Control.Subscribe:input_type -> o2control.SubscribeRequest
-	71, // 74: o2control.Control.GetIntegratedServices:input_type -> o2control.Empty
-	10, // 75: o2control.Control.TrackStatus:output_type -> o2control.StatusReply
-	16, // 76: o2control.Control.GetFrameworkInfo:output_type -> o2control.GetFrameworkInfoReply
-	18, // 77: o2control.Control.Teardown:output_type -> o2control.TeardownReply
-	20, // 78: o2control.Control.GetEnvironments:output_type -> o2control.GetEnvironmentsReply
-	25, // 79: o2control.Control.NewAutoEnvironment:output_type -> o2control.NewAutoEnvironmentReply
-	23, // 80: o2control.Control.NewEnvironment:output_type -> o2control.NewEnvironmentReply
-	27, // 81: o2control.Control.GetEnvironment:output_type -> o2control.GetEnvironmentReply
-	29, // 82: o2control.Control.ControlEnvironment:output_type -> o2control.ControlEnvironmentReply
-	32, // 83: o2control.Control.ModifyEnvironment:output_type -> o2control.ModifyEnvironmentReply
-	34, // 84: o2control.Control.DestroyEnvironment:output_type -> o2control.DestroyEnvironmentReply
-	35, // 85: o2control.Control.GetActiveDetectors:output_type -> o2control.GetActiveDetectorsReply
-	43, // 86: o2control.Control.GetTasks:output_type -> o2control.GetTasksReply
-	45, // 87: o2control.Control.GetTask:output_type -> o2control.GetTaskReply
-	51, // 88: o2control.Control.CleanupTasks:output_type -> o2control.CleanupTasksReply
-	54, // 89: o2control.Control.GetRoles:output_type -> o2control.GetRolesReply
-	58, // 90: o2control.Control.GetWorkflowTemplates:output_type -> o2control.GetWorkflowTemplatesReply
-	61, // 91: o2control.Control.ListRepos:output_type -> o2control.ListReposReply
-	63, // 92: o2control.Control.AddRepo:output_type -> o2control.AddRepoReply
-	65, // 93: o2control.Control.RemoveRepo:output_type -> o2control.RemoveRepoReply
-	71, // 94: o2control.Control.RefreshRepos:output_type -> o2control.Empty
-	71, // 95: o2control.Control.SetDefaultRepo:output_type -> o2control.Empty
-	71, // 96: o2control.Control.SetGlobalDefaultRevision:output_type -> o2control.Empty
-	70, // 97: o2control.Control.SetRepoDefaultRevision:output_type -> o2control.SetRepoDefaultRevisionReply
-	12, // 98: o2control.Control.Subscribe:output_type -> o2control.Event
-	72, // 99: o2control.Control.GetIntegratedServices:output_type -> o2control.ListIntegratedServicesReply
-	75, // [75:100] is the sub-list for method output_type
-	50, // [50:75] is the sub-list for method input_type
+	72, // 60: o2control.Control.GetActiveDetectors:input_type -> o2control.Empty
+	72, // 61: o2control.Control.GetAvailableDetectors:input_type -> o2control.Empty
+	43, // 62: o2control.Control.GetTasks:input_type -> o2control.GetTasksRequest
+	45, // 63: o2control.Control.GetTask:input_type -> o2control.GetTaskRequest
+	51, // 64: o2control.Control.CleanupTasks:input_type -> o2control.CleanupTasksRequest
+	53, // 65: o2control.Control.GetRoles:input_type -> o2control.GetRolesRequest
+	56, // 66: o2control.Control.GetWorkflowTemplates:input_type -> o2control.GetWorkflowTemplatesRequest
+	60, // 67: o2control.Control.ListRepos:input_type -> o2control.ListReposRequest
+	63, // 68: o2control.Control.AddRepo:input_type -> o2control.AddRepoRequest
+	65, // 69: o2control.Control.RemoveRepo:input_type -> o2control.RemoveRepoRequest
+	67, // 70: o2control.Control.RefreshRepos:input_type -> o2control.RefreshReposRequest
+	68, // 71: o2control.Control.SetDefaultRepo:input_type -> o2control.SetDefaultRepoRequest
+	69, // 72: o2control.Control.SetGlobalDefaultRevision:input_type -> o2control.SetGlobalDefaultRevisionRequest
+	70, // 73: o2control.Control.SetRepoDefaultRevision:input_type -> o2control.SetRepoDefaultRevisionRequest
+	13, // 74: o2control.Control.Subscribe:input_type -> o2control.SubscribeRequest
+	72, // 75: o2control.Control.GetIntegratedServices:input_type -> o2control.Empty
+	10, // 76: o2control.Control.TrackStatus:output_type -> o2control.StatusReply
+	16, // 77: o2control.Control.GetFrameworkInfo:output_type -> o2control.GetFrameworkInfoReply
+	18, // 78: o2control.Control.Teardown:output_type -> o2control.TeardownReply
+	20, // 79: o2control.Control.GetEnvironments:output_type -> o2control.GetEnvironmentsReply
+	25, // 80: o2control.Control.NewAutoEnvironment:output_type -> o2control.NewAutoEnvironmentReply
+	23, // 81: o2control.Control.NewEnvironment:output_type -> o2control.NewEnvironmentReply
+	27, // 82: o2control.Control.GetEnvironment:output_type -> o2control.GetEnvironmentReply
+	29, // 83: o2control.Control.ControlEnvironment:output_type -> o2control.ControlEnvironmentReply
+	32, // 84: o2control.Control.ModifyEnvironment:output_type -> o2control.ModifyEnvironmentReply
+	34, // 85: o2control.Control.DestroyEnvironment:output_type -> o2control.DestroyEnvironmentReply
+	35, // 86: o2control.Control.GetActiveDetectors:output_type -> o2control.GetActiveDetectorsReply
+	36, // 87: o2control.Control.GetAvailableDetectors:output_type -> o2control.GetAvailableDetectorsReply
+	44, // 88: o2control.Control.GetTasks:output_type -> o2control.GetTasksReply
+	46, // 89: o2control.Control.GetTask:output_type -> o2control.GetTaskReply
+	52, // 90: o2control.Control.CleanupTasks:output_type -> o2control.CleanupTasksReply
+	55, // 91: o2control.Control.GetRoles:output_type -> o2control.GetRolesReply
+	59, // 92: o2control.Control.GetWorkflowTemplates:output_type -> o2control.GetWorkflowTemplatesReply
+	62, // 93: o2control.Control.ListRepos:output_type -> o2control.ListReposReply
+	64, // 94: o2control.Control.AddRepo:output_type -> o2control.AddRepoReply
+	66, // 95: o2control.Control.RemoveRepo:output_type -> o2control.RemoveRepoReply
+	72, // 96: o2control.Control.RefreshRepos:output_type -> o2control.Empty
+	72, // 97: o2control.Control.SetDefaultRepo:output_type -> o2control.Empty
+	72, // 98: o2control.Control.SetGlobalDefaultRevision:output_type -> o2control.Empty
+	71, // 99: o2control.Control.SetRepoDefaultRevision:output_type -> o2control.SetRepoDefaultRevisionReply
+	12, // 100: o2control.Control.Subscribe:output_type -> o2control.Event
+	73, // 101: o2control.Control.GetIntegratedServices:output_type -> o2control.ListIntegratedServicesReply
+	76, // [76:102] is the sub-list for method output_type
+	50, // [50:76] is the sub-list for method input_type
 	50, // [50:50] is the sub-list for extension type_name
 	50, // [50:50] is the sub-list for extension extendee
 	0,  // [0:50] is the sub-list for field type_name
@@ -6100,7 +6159,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetEnvironmentPropertiesRequest); i {
+			switch v := v.(*GetAvailableDetectorsReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6112,7 +6171,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetEnvironmentPropertiesReply); i {
+			switch v := v.(*SetEnvironmentPropertiesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6124,7 +6183,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetEnvironmentPropertiesRequest); i {
+			switch v := v.(*SetEnvironmentPropertiesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6136,7 +6195,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetEnvironmentPropertiesReply); i {
+			switch v := v.(*GetEnvironmentPropertiesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6148,7 +6207,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ShortTaskInfo); i {
+			switch v := v.(*GetEnvironmentPropertiesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6160,7 +6219,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskDeploymentInfo); i {
+			switch v := v.(*ShortTaskInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6172,7 +6231,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTasksRequest); i {
+			switch v := v.(*TaskDeploymentInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6184,7 +6243,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTasksReply); i {
+			switch v := v.(*GetTasksRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6196,7 +6255,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTaskRequest); i {
+			switch v := v.(*GetTasksReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6208,7 +6267,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTaskReply); i {
+			switch v := v.(*GetTaskRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6220,7 +6279,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskClassInfo); i {
+			switch v := v.(*GetTaskReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6232,7 +6291,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CommandInfo); i {
+			switch v := v.(*TaskClassInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6244,7 +6303,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChannelInfo); i {
+			switch v := v.(*CommandInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6256,7 +6315,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskInfo); i {
+			switch v := v.(*ChannelInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6268,7 +6327,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CleanupTasksRequest); i {
+			switch v := v.(*TaskInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6280,7 +6339,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CleanupTasksReply); i {
+			switch v := v.(*CleanupTasksRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6292,7 +6351,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRolesRequest); i {
+			switch v := v.(*CleanupTasksReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6304,7 +6363,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RoleInfo); i {
+			switch v := v.(*GetRolesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6316,7 +6375,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRolesReply); i {
+			switch v := v.(*RoleInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6328,7 +6387,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetWorkflowTemplatesRequest); i {
+			switch v := v.(*GetRolesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6340,7 +6399,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VarSpecMessage); i {
+			switch v := v.(*GetWorkflowTemplatesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6352,7 +6411,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WorkflowTemplateInfo); i {
+			switch v := v.(*VarSpecMessage); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6364,7 +6423,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetWorkflowTemplatesReply); i {
+			switch v := v.(*WorkflowTemplateInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6376,7 +6435,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListReposRequest); i {
+			switch v := v.(*GetWorkflowTemplatesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6388,7 +6447,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RepoInfo); i {
+			switch v := v.(*ListReposRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6400,7 +6459,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListReposReply); i {
+			switch v := v.(*RepoInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6412,7 +6471,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddRepoRequest); i {
+			switch v := v.(*ListReposReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6424,7 +6483,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddRepoReply); i {
+			switch v := v.(*AddRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6436,7 +6495,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemoveRepoRequest); i {
+			switch v := v.(*AddRepoReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6448,7 +6507,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemoveRepoReply); i {
+			switch v := v.(*RemoveRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6460,7 +6519,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RefreshReposRequest); i {
+			switch v := v.(*RemoveRepoReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6472,7 +6531,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetDefaultRepoRequest); i {
+			switch v := v.(*RefreshReposRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6484,7 +6543,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetGlobalDefaultRevisionRequest); i {
+			switch v := v.(*SetDefaultRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6496,7 +6555,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRepoDefaultRevisionRequest); i {
+			switch v := v.(*SetGlobalDefaultRevisionRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6508,7 +6567,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRepoDefaultRevisionReply); i {
+			switch v := v.(*SetRepoDefaultRevisionRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6520,7 +6579,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Empty); i {
+			switch v := v.(*SetRepoDefaultRevisionReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6532,7 +6591,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListIntegratedServicesReply); i {
+			switch v := v.(*Empty); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6544,6 +6603,18 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ListIntegratedServicesReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_protos_o2control_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*IntegratedServiceInfo); i {
 			case 0:
 				return &v.state
@@ -6570,7 +6641,7 @@ func file_protos_o2control_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_protos_o2control_proto_rawDesc,
 			NumEnums:      5,
-			NumMessages:   84,
+			NumMessages:   85,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/coconut/protos/o2control_grpc.pb.go b/coconut/protos/o2control_grpc.pb.go
index 0ece9cea..e3bca95b 100644
--- a/coconut/protos/o2control_grpc.pb.go
+++ b/coconut/protos/o2control_grpc.pb.go
@@ -1,7 +1,30 @@
+//
+// === This file is part of ALICE O² ===
+//
+// Copyright 2018 CERN and copyright holders of ALICE O².
+// Author: Teo Mrnjavac <teo.mrnjavac@cern.ch>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+// In applying this license CERN does not waive the privileges and
+// immunities granted to it by virtue of its status as an
+// Intergovernmental Organization or submit itself to any jurisdiction.
+
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
-// - protoc-gen-go-grpc v1.2.0
-// - protoc             v4.23.4
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             v4.25.1
 // source: protos/o2control.proto
 
 package pb
@@ -18,6 +41,35 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
+const (
+	Control_TrackStatus_FullMethodName              = "/o2control.Control/TrackStatus"
+	Control_GetFrameworkInfo_FullMethodName         = "/o2control.Control/GetFrameworkInfo"
+	Control_Teardown_FullMethodName                 = "/o2control.Control/Teardown"
+	Control_GetEnvironments_FullMethodName          = "/o2control.Control/GetEnvironments"
+	Control_NewAutoEnvironment_FullMethodName       = "/o2control.Control/NewAutoEnvironment"
+	Control_NewEnvironment_FullMethodName           = "/o2control.Control/NewEnvironment"
+	Control_GetEnvironment_FullMethodName           = "/o2control.Control/GetEnvironment"
+	Control_ControlEnvironment_FullMethodName       = "/o2control.Control/ControlEnvironment"
+	Control_ModifyEnvironment_FullMethodName        = "/o2control.Control/ModifyEnvironment"
+	Control_DestroyEnvironment_FullMethodName       = "/o2control.Control/DestroyEnvironment"
+	Control_GetActiveDetectors_FullMethodName       = "/o2control.Control/GetActiveDetectors"
+	Control_GetAvailableDetectors_FullMethodName    = "/o2control.Control/GetAvailableDetectors"
+	Control_GetTasks_FullMethodName                 = "/o2control.Control/GetTasks"
+	Control_GetTask_FullMethodName                  = "/o2control.Control/GetTask"
+	Control_CleanupTasks_FullMethodName             = "/o2control.Control/CleanupTasks"
+	Control_GetRoles_FullMethodName                 = "/o2control.Control/GetRoles"
+	Control_GetWorkflowTemplates_FullMethodName     = "/o2control.Control/GetWorkflowTemplates"
+	Control_ListRepos_FullMethodName                = "/o2control.Control/ListRepos"
+	Control_AddRepo_FullMethodName                  = "/o2control.Control/AddRepo"
+	Control_RemoveRepo_FullMethodName               = "/o2control.Control/RemoveRepo"
+	Control_RefreshRepos_FullMethodName             = "/o2control.Control/RefreshRepos"
+	Control_SetDefaultRepo_FullMethodName           = "/o2control.Control/SetDefaultRepo"
+	Control_SetGlobalDefaultRevision_FullMethodName = "/o2control.Control/SetGlobalDefaultRevision"
+	Control_SetRepoDefaultRevision_FullMethodName   = "/o2control.Control/SetRepoDefaultRevision"
+	Control_Subscribe_FullMethodName                = "/o2control.Control/Subscribe"
+	Control_GetIntegratedServices_FullMethodName    = "/o2control.Control/GetIntegratedServices"
+)
+
 // ControlClient is the client API for Control 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.
@@ -33,6 +85,7 @@ type ControlClient interface {
 	ModifyEnvironment(ctx context.Context, in *ModifyEnvironmentRequest, opts ...grpc.CallOption) (*ModifyEnvironmentReply, error)
 	DestroyEnvironment(ctx context.Context, in *DestroyEnvironmentRequest, opts ...grpc.CallOption) (*DestroyEnvironmentReply, error)
 	GetActiveDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetActiveDetectorsReply, error)
+	GetAvailableDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetAvailableDetectorsReply, error)
 	GetTasks(ctx context.Context, in *GetTasksRequest, opts ...grpc.CallOption) (*GetTasksReply, error)
 	GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskReply, error)
 	CleanupTasks(ctx context.Context, in *CleanupTasksRequest, opts ...grpc.CallOption) (*CleanupTasksReply, error)
@@ -58,7 +111,7 @@ func NewControlClient(cc grpc.ClientConnInterface) ControlClient {
 }
 
 func (c *controlClient) TrackStatus(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (Control_TrackStatusClient, error) {
-	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[0], "/o2control.Control/TrackStatus", opts...)
+	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[0], Control_TrackStatus_FullMethodName, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -91,7 +144,7 @@ func (x *controlTrackStatusClient) Recv() (*StatusReply, error) {
 
 func (c *controlClient) GetFrameworkInfo(ctx context.Context, in *GetFrameworkInfoRequest, opts ...grpc.CallOption) (*GetFrameworkInfoReply, error) {
 	out := new(GetFrameworkInfoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetFrameworkInfo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetFrameworkInfo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -100,7 +153,7 @@ func (c *controlClient) GetFrameworkInfo(ctx context.Context, in *GetFrameworkIn
 
 func (c *controlClient) Teardown(ctx context.Context, in *TeardownRequest, opts ...grpc.CallOption) (*TeardownReply, error) {
 	out := new(TeardownReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/Teardown", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_Teardown_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -109,7 +162,7 @@ func (c *controlClient) Teardown(ctx context.Context, in *TeardownRequest, opts
 
 func (c *controlClient) GetEnvironments(ctx context.Context, in *GetEnvironmentsRequest, opts ...grpc.CallOption) (*GetEnvironmentsReply, error) {
 	out := new(GetEnvironmentsReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetEnvironments", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetEnvironments_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -118,7 +171,7 @@ func (c *controlClient) GetEnvironments(ctx context.Context, in *GetEnvironments
 
 func (c *controlClient) NewAutoEnvironment(ctx context.Context, in *NewAutoEnvironmentRequest, opts ...grpc.CallOption) (*NewAutoEnvironmentReply, error) {
 	out := new(NewAutoEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/NewAutoEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_NewAutoEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -127,7 +180,7 @@ func (c *controlClient) NewAutoEnvironment(ctx context.Context, in *NewAutoEnvir
 
 func (c *controlClient) NewEnvironment(ctx context.Context, in *NewEnvironmentRequest, opts ...grpc.CallOption) (*NewEnvironmentReply, error) {
 	out := new(NewEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/NewEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_NewEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -136,7 +189,7 @@ func (c *controlClient) NewEnvironment(ctx context.Context, in *NewEnvironmentRe
 
 func (c *controlClient) GetEnvironment(ctx context.Context, in *GetEnvironmentRequest, opts ...grpc.CallOption) (*GetEnvironmentReply, error) {
 	out := new(GetEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -145,7 +198,7 @@ func (c *controlClient) GetEnvironment(ctx context.Context, in *GetEnvironmentRe
 
 func (c *controlClient) ControlEnvironment(ctx context.Context, in *ControlEnvironmentRequest, opts ...grpc.CallOption) (*ControlEnvironmentReply, error) {
 	out := new(ControlEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ControlEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ControlEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -154,7 +207,7 @@ func (c *controlClient) ControlEnvironment(ctx context.Context, in *ControlEnvir
 
 func (c *controlClient) ModifyEnvironment(ctx context.Context, in *ModifyEnvironmentRequest, opts ...grpc.CallOption) (*ModifyEnvironmentReply, error) {
 	out := new(ModifyEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ModifyEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ModifyEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -163,7 +216,7 @@ func (c *controlClient) ModifyEnvironment(ctx context.Context, in *ModifyEnviron
 
 func (c *controlClient) DestroyEnvironment(ctx context.Context, in *DestroyEnvironmentRequest, opts ...grpc.CallOption) (*DestroyEnvironmentReply, error) {
 	out := new(DestroyEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/DestroyEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_DestroyEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -172,7 +225,16 @@ func (c *controlClient) DestroyEnvironment(ctx context.Context, in *DestroyEnvir
 
 func (c *controlClient) GetActiveDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetActiveDetectorsReply, error) {
 	out := new(GetActiveDetectorsReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetActiveDetectors", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetActiveDetectors_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *controlClient) GetAvailableDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetAvailableDetectorsReply, error) {
+	out := new(GetAvailableDetectorsReply)
+	err := c.cc.Invoke(ctx, Control_GetAvailableDetectors_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -181,7 +243,7 @@ func (c *controlClient) GetActiveDetectors(ctx context.Context, in *Empty, opts
 
 func (c *controlClient) GetTasks(ctx context.Context, in *GetTasksRequest, opts ...grpc.CallOption) (*GetTasksReply, error) {
 	out := new(GetTasksReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetTasks", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetTasks_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -190,7 +252,7 @@ func (c *controlClient) GetTasks(ctx context.Context, in *GetTasksRequest, opts
 
 func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskReply, error) {
 	out := new(GetTaskReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetTask", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetTask_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -199,7 +261,7 @@ func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ..
 
 func (c *controlClient) CleanupTasks(ctx context.Context, in *CleanupTasksRequest, opts ...grpc.CallOption) (*CleanupTasksReply, error) {
 	out := new(CleanupTasksReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/CleanupTasks", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_CleanupTasks_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -208,7 +270,7 @@ func (c *controlClient) CleanupTasks(ctx context.Context, in *CleanupTasksReques
 
 func (c *controlClient) GetRoles(ctx context.Context, in *GetRolesRequest, opts ...grpc.CallOption) (*GetRolesReply, error) {
 	out := new(GetRolesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetRoles", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetRoles_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -217,7 +279,7 @@ func (c *controlClient) GetRoles(ctx context.Context, in *GetRolesRequest, opts
 
 func (c *controlClient) GetWorkflowTemplates(ctx context.Context, in *GetWorkflowTemplatesRequest, opts ...grpc.CallOption) (*GetWorkflowTemplatesReply, error) {
 	out := new(GetWorkflowTemplatesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetWorkflowTemplates", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetWorkflowTemplates_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -226,7 +288,7 @@ func (c *controlClient) GetWorkflowTemplates(ctx context.Context, in *GetWorkflo
 
 func (c *controlClient) ListRepos(ctx context.Context, in *ListReposRequest, opts ...grpc.CallOption) (*ListReposReply, error) {
 	out := new(ListReposReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ListRepos", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ListRepos_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -235,7 +297,7 @@ func (c *controlClient) ListRepos(ctx context.Context, in *ListReposRequest, opt
 
 func (c *controlClient) AddRepo(ctx context.Context, in *AddRepoRequest, opts ...grpc.CallOption) (*AddRepoReply, error) {
 	out := new(AddRepoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/AddRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_AddRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -244,7 +306,7 @@ func (c *controlClient) AddRepo(ctx context.Context, in *AddRepoRequest, opts ..
 
 func (c *controlClient) RemoveRepo(ctx context.Context, in *RemoveRepoRequest, opts ...grpc.CallOption) (*RemoveRepoReply, error) {
 	out := new(RemoveRepoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/RemoveRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_RemoveRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -253,7 +315,7 @@ func (c *controlClient) RemoveRepo(ctx context.Context, in *RemoveRepoRequest, o
 
 func (c *controlClient) RefreshRepos(ctx context.Context, in *RefreshReposRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/RefreshRepos", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_RefreshRepos_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -262,7 +324,7 @@ func (c *controlClient) RefreshRepos(ctx context.Context, in *RefreshReposReques
 
 func (c *controlClient) SetDefaultRepo(ctx context.Context, in *SetDefaultRepoRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetDefaultRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetDefaultRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -271,7 +333,7 @@ func (c *controlClient) SetDefaultRepo(ctx context.Context, in *SetDefaultRepoRe
 
 func (c *controlClient) SetGlobalDefaultRevision(ctx context.Context, in *SetGlobalDefaultRevisionRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetGlobalDefaultRevision", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetGlobalDefaultRevision_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -280,7 +342,7 @@ func (c *controlClient) SetGlobalDefaultRevision(ctx context.Context, in *SetGlo
 
 func (c *controlClient) SetRepoDefaultRevision(ctx context.Context, in *SetRepoDefaultRevisionRequest, opts ...grpc.CallOption) (*SetRepoDefaultRevisionReply, error) {
 	out := new(SetRepoDefaultRevisionReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetRepoDefaultRevision", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetRepoDefaultRevision_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -288,7 +350,7 @@ func (c *controlClient) SetRepoDefaultRevision(ctx context.Context, in *SetRepoD
 }
 
 func (c *controlClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (Control_SubscribeClient, error) {
-	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[1], "/o2control.Control/Subscribe", opts...)
+	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[1], Control_Subscribe_FullMethodName, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -321,7 +383,7 @@ func (x *controlSubscribeClient) Recv() (*Event, error) {
 
 func (c *controlClient) GetIntegratedServices(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListIntegratedServicesReply, error) {
 	out := new(ListIntegratedServicesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetIntegratedServices", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetIntegratedServices_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -343,6 +405,7 @@ type ControlServer interface {
 	ModifyEnvironment(context.Context, *ModifyEnvironmentRequest) (*ModifyEnvironmentReply, error)
 	DestroyEnvironment(context.Context, *DestroyEnvironmentRequest) (*DestroyEnvironmentReply, error)
 	GetActiveDetectors(context.Context, *Empty) (*GetActiveDetectorsReply, error)
+	GetAvailableDetectors(context.Context, *Empty) (*GetAvailableDetectorsReply, error)
 	GetTasks(context.Context, *GetTasksRequest) (*GetTasksReply, error)
 	GetTask(context.Context, *GetTaskRequest) (*GetTaskReply, error)
 	CleanupTasks(context.Context, *CleanupTasksRequest) (*CleanupTasksReply, error)
@@ -397,6 +460,9 @@ func (UnimplementedControlServer) DestroyEnvironment(context.Context, *DestroyEn
 func (UnimplementedControlServer) GetActiveDetectors(context.Context, *Empty) (*GetActiveDetectorsReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetActiveDetectors not implemented")
 }
+func (UnimplementedControlServer) GetAvailableDetectors(context.Context, *Empty) (*GetAvailableDetectorsReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAvailableDetectors not implemented")
+}
 func (UnimplementedControlServer) GetTasks(context.Context, *GetTasksRequest) (*GetTasksReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetTasks not implemented")
 }
@@ -483,7 +549,7 @@ func _Control_GetFrameworkInfo_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetFrameworkInfo",
+		FullMethod: Control_GetFrameworkInfo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetFrameworkInfo(ctx, req.(*GetFrameworkInfoRequest))
@@ -501,7 +567,7 @@ func _Control_Teardown_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/Teardown",
+		FullMethod: Control_Teardown_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).Teardown(ctx, req.(*TeardownRequest))
@@ -519,7 +585,7 @@ func _Control_GetEnvironments_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetEnvironments",
+		FullMethod: Control_GetEnvironments_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetEnvironments(ctx, req.(*GetEnvironmentsRequest))
@@ -537,7 +603,7 @@ func _Control_NewAutoEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/NewAutoEnvironment",
+		FullMethod: Control_NewAutoEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).NewAutoEnvironment(ctx, req.(*NewAutoEnvironmentRequest))
@@ -555,7 +621,7 @@ func _Control_NewEnvironment_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/NewEnvironment",
+		FullMethod: Control_NewEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).NewEnvironment(ctx, req.(*NewEnvironmentRequest))
@@ -573,7 +639,7 @@ func _Control_GetEnvironment_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetEnvironment",
+		FullMethod: Control_GetEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetEnvironment(ctx, req.(*GetEnvironmentRequest))
@@ -591,7 +657,7 @@ func _Control_ControlEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ControlEnvironment",
+		FullMethod: Control_ControlEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ControlEnvironment(ctx, req.(*ControlEnvironmentRequest))
@@ -609,7 +675,7 @@ func _Control_ModifyEnvironment_Handler(srv interface{}, ctx context.Context, de
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ModifyEnvironment",
+		FullMethod: Control_ModifyEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ModifyEnvironment(ctx, req.(*ModifyEnvironmentRequest))
@@ -627,7 +693,7 @@ func _Control_DestroyEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/DestroyEnvironment",
+		FullMethod: Control_DestroyEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).DestroyEnvironment(ctx, req.(*DestroyEnvironmentRequest))
@@ -645,7 +711,7 @@ func _Control_GetActiveDetectors_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetActiveDetectors",
+		FullMethod: Control_GetActiveDetectors_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetActiveDetectors(ctx, req.(*Empty))
@@ -653,6 +719,24 @@ func _Control_GetActiveDetectors_Handler(srv interface{}, ctx context.Context, d
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Control_GetAvailableDetectors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ControlServer).GetAvailableDetectors(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Control_GetAvailableDetectors_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ControlServer).GetAvailableDetectors(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Control_GetTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(GetTasksRequest)
 	if err := dec(in); err != nil {
@@ -663,7 +747,7 @@ func _Control_GetTasks_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetTasks",
+		FullMethod: Control_GetTasks_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetTasks(ctx, req.(*GetTasksRequest))
@@ -681,7 +765,7 @@ func _Control_GetTask_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetTask",
+		FullMethod: Control_GetTask_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetTask(ctx, req.(*GetTaskRequest))
@@ -699,7 +783,7 @@ func _Control_CleanupTasks_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/CleanupTasks",
+		FullMethod: Control_CleanupTasks_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).CleanupTasks(ctx, req.(*CleanupTasksRequest))
@@ -717,7 +801,7 @@ func _Control_GetRoles_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetRoles",
+		FullMethod: Control_GetRoles_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetRoles(ctx, req.(*GetRolesRequest))
@@ -735,7 +819,7 @@ func _Control_GetWorkflowTemplates_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetWorkflowTemplates",
+		FullMethod: Control_GetWorkflowTemplates_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetWorkflowTemplates(ctx, req.(*GetWorkflowTemplatesRequest))
@@ -753,7 +837,7 @@ func _Control_ListRepos_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ListRepos",
+		FullMethod: Control_ListRepos_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ListRepos(ctx, req.(*ListReposRequest))
@@ -771,7 +855,7 @@ func _Control_AddRepo_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/AddRepo",
+		FullMethod: Control_AddRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).AddRepo(ctx, req.(*AddRepoRequest))
@@ -789,7 +873,7 @@ func _Control_RemoveRepo_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/RemoveRepo",
+		FullMethod: Control_RemoveRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).RemoveRepo(ctx, req.(*RemoveRepoRequest))
@@ -807,7 +891,7 @@ func _Control_RefreshRepos_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/RefreshRepos",
+		FullMethod: Control_RefreshRepos_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).RefreshRepos(ctx, req.(*RefreshReposRequest))
@@ -825,7 +909,7 @@ func _Control_SetDefaultRepo_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetDefaultRepo",
+		FullMethod: Control_SetDefaultRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetDefaultRepo(ctx, req.(*SetDefaultRepoRequest))
@@ -843,7 +927,7 @@ func _Control_SetGlobalDefaultRevision_Handler(srv interface{}, ctx context.Cont
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetGlobalDefaultRevision",
+		FullMethod: Control_SetGlobalDefaultRevision_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetGlobalDefaultRevision(ctx, req.(*SetGlobalDefaultRevisionRequest))
@@ -861,7 +945,7 @@ func _Control_SetRepoDefaultRevision_Handler(srv interface{}, ctx context.Contex
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetRepoDefaultRevision",
+		FullMethod: Control_SetRepoDefaultRevision_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetRepoDefaultRevision(ctx, req.(*SetRepoDefaultRevisionRequest))
@@ -900,7 +984,7 @@ func _Control_GetIntegratedServices_Handler(srv interface{}, ctx context.Context
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetIntegratedServices",
+		FullMethod: Control_GetIntegratedServices_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetIntegratedServices(ctx, req.(*Empty))
@@ -955,6 +1039,10 @@ var Control_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetActiveDetectors",
 			Handler:    _Control_GetActiveDetectors_Handler,
 		},
+		{
+			MethodName: "GetAvailableDetectors",
+			Handler:    _Control_GetAvailableDetectors_Handler,
+		},
 		{
 			MethodName: "GetTasks",
 			Handler:    _Control_GetTasks_Handler,
diff --git a/core/protos/o2control.pb.go b/core/protos/o2control.pb.go
index 8ab79126..d091ff4d 100644
--- a/core/protos/o2control.pb.go
+++ b/core/protos/o2control.pb.go
@@ -23,8 +23,8 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.28.1
-// 	protoc        v4.23.4
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.25.1
 // source: protos/o2control.proto
 
 package pb
@@ -263,7 +263,7 @@ func (x VarSpecMessage_UiWidget) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use VarSpecMessage_UiWidget.Descriptor instead.
 func (VarSpecMessage_UiWidget) EnumDescriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51, 0}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52, 0}
 }
 
 type VarSpecMessage_Type int32
@@ -318,7 +318,7 @@ func (x VarSpecMessage_Type) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use VarSpecMessage_Type.Descriptor instead.
 func (VarSpecMessage_Type) EnumDescriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51, 1}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52, 1}
 }
 
 type Event_MesosHeartbeat struct {
@@ -2380,6 +2380,53 @@ func (x *GetActiveDetectorsReply) GetDetectors() []string {
 	return nil
 }
 
+type GetAvailableDetectorsReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Detectors []string `protobuf:"bytes,1,rep,name=detectors,proto3" json:"detectors,omitempty"`
+}
+
+func (x *GetAvailableDetectorsReply) Reset() {
+	*x = GetAvailableDetectorsReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_protos_o2control_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAvailableDetectorsReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAvailableDetectorsReply) ProtoMessage() {}
+
+func (x *GetAvailableDetectorsReply) ProtoReflect() protoreflect.Message {
+	mi := &file_protos_o2control_proto_msgTypes[31]
+	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 GetAvailableDetectorsReply.ProtoReflect.Descriptor instead.
+func (*GetAvailableDetectorsReply) Descriptor() ([]byte, []int) {
+	return file_protos_o2control_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *GetAvailableDetectorsReply) GetDetectors() []string {
+	if x != nil {
+		return x.Detectors
+	}
+	return nil
+}
+
 // //////////////////////////////////////
 // Environment, GET/SET properties
 // //////////////////////////////////////
@@ -2397,7 +2444,7 @@ type SetEnvironmentPropertiesRequest struct {
 func (x *SetEnvironmentPropertiesRequest) Reset() {
 	*x = SetEnvironmentPropertiesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[31]
+		mi := &file_protos_o2control_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2410,7 +2457,7 @@ func (x *SetEnvironmentPropertiesRequest) String() string {
 func (*SetEnvironmentPropertiesRequest) ProtoMessage() {}
 
 func (x *SetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[31]
+	mi := &file_protos_o2control_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2423,7 +2470,7 @@ func (x *SetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetEnvironmentPropertiesRequest.ProtoReflect.Descriptor instead.
 func (*SetEnvironmentPropertiesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{31}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{32}
 }
 
 func (x *SetEnvironmentPropertiesRequest) GetId() string {
@@ -2449,7 +2496,7 @@ type SetEnvironmentPropertiesReply struct {
 func (x *SetEnvironmentPropertiesReply) Reset() {
 	*x = SetEnvironmentPropertiesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[32]
+		mi := &file_protos_o2control_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2462,7 +2509,7 @@ func (x *SetEnvironmentPropertiesReply) String() string {
 func (*SetEnvironmentPropertiesReply) ProtoMessage() {}
 
 func (x *SetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[32]
+	mi := &file_protos_o2control_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2475,7 +2522,7 @@ func (x *SetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetEnvironmentPropertiesReply.ProtoReflect.Descriptor instead.
 func (*SetEnvironmentPropertiesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{32}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{33}
 }
 
 type GetEnvironmentPropertiesRequest struct {
@@ -2494,7 +2541,7 @@ type GetEnvironmentPropertiesRequest struct {
 func (x *GetEnvironmentPropertiesRequest) Reset() {
 	*x = GetEnvironmentPropertiesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[33]
+		mi := &file_protos_o2control_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2507,7 +2554,7 @@ func (x *GetEnvironmentPropertiesRequest) String() string {
 func (*GetEnvironmentPropertiesRequest) ProtoMessage() {}
 
 func (x *GetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[33]
+	mi := &file_protos_o2control_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2520,7 +2567,7 @@ func (x *GetEnvironmentPropertiesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetEnvironmentPropertiesRequest.ProtoReflect.Descriptor instead.
 func (*GetEnvironmentPropertiesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{33}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{34}
 }
 
 func (x *GetEnvironmentPropertiesRequest) GetId() string {
@@ -2555,7 +2602,7 @@ type GetEnvironmentPropertiesReply struct {
 func (x *GetEnvironmentPropertiesReply) Reset() {
 	*x = GetEnvironmentPropertiesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[34]
+		mi := &file_protos_o2control_proto_msgTypes[35]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2568,7 +2615,7 @@ func (x *GetEnvironmentPropertiesReply) String() string {
 func (*GetEnvironmentPropertiesReply) ProtoMessage() {}
 
 func (x *GetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[34]
+	mi := &file_protos_o2control_proto_msgTypes[35]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2581,7 +2628,7 @@ func (x *GetEnvironmentPropertiesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetEnvironmentPropertiesReply.ProtoReflect.Descriptor instead.
 func (*GetEnvironmentPropertiesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{34}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{35}
 }
 
 func (x *GetEnvironmentPropertiesReply) GetProperties() map[string]string {
@@ -2614,7 +2661,7 @@ type ShortTaskInfo struct {
 func (x *ShortTaskInfo) Reset() {
 	*x = ShortTaskInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[35]
+		mi := &file_protos_o2control_proto_msgTypes[36]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2627,7 +2674,7 @@ func (x *ShortTaskInfo) String() string {
 func (*ShortTaskInfo) ProtoMessage() {}
 
 func (x *ShortTaskInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[35]
+	mi := &file_protos_o2control_proto_msgTypes[36]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2640,7 +2687,7 @@ func (x *ShortTaskInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ShortTaskInfo.ProtoReflect.Descriptor instead.
 func (*ShortTaskInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{35}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{36}
 }
 
 func (x *ShortTaskInfo) GetName() string {
@@ -2727,7 +2774,7 @@ type TaskDeploymentInfo struct {
 func (x *TaskDeploymentInfo) Reset() {
 	*x = TaskDeploymentInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[36]
+		mi := &file_protos_o2control_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2740,7 +2787,7 @@ func (x *TaskDeploymentInfo) String() string {
 func (*TaskDeploymentInfo) ProtoMessage() {}
 
 func (x *TaskDeploymentInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[36]
+	mi := &file_protos_o2control_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2753,7 +2800,7 @@ func (x *TaskDeploymentInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskDeploymentInfo.ProtoReflect.Descriptor instead.
 func (*TaskDeploymentInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{36}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{37}
 }
 
 func (x *TaskDeploymentInfo) GetHostname() string {
@@ -2793,7 +2840,7 @@ type GetTasksRequest struct {
 func (x *GetTasksRequest) Reset() {
 	*x = GetTasksRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[37]
+		mi := &file_protos_o2control_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2806,7 +2853,7 @@ func (x *GetTasksRequest) String() string {
 func (*GetTasksRequest) ProtoMessage() {}
 
 func (x *GetTasksRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[37]
+	mi := &file_protos_o2control_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2819,7 +2866,7 @@ func (x *GetTasksRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTasksRequest.ProtoReflect.Descriptor instead.
 func (*GetTasksRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{37}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{38}
 }
 
 type GetTasksReply struct {
@@ -2833,7 +2880,7 @@ type GetTasksReply struct {
 func (x *GetTasksReply) Reset() {
 	*x = GetTasksReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[38]
+		mi := &file_protos_o2control_proto_msgTypes[39]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2846,7 +2893,7 @@ func (x *GetTasksReply) String() string {
 func (*GetTasksReply) ProtoMessage() {}
 
 func (x *GetTasksReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[38]
+	mi := &file_protos_o2control_proto_msgTypes[39]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2859,7 +2906,7 @@ func (x *GetTasksReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTasksReply.ProtoReflect.Descriptor instead.
 func (*GetTasksReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{38}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{39}
 }
 
 func (x *GetTasksReply) GetTasks() []*ShortTaskInfo {
@@ -2880,7 +2927,7 @@ type GetTaskRequest struct {
 func (x *GetTaskRequest) Reset() {
 	*x = GetTaskRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[39]
+		mi := &file_protos_o2control_proto_msgTypes[40]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2893,7 +2940,7 @@ func (x *GetTaskRequest) String() string {
 func (*GetTaskRequest) ProtoMessage() {}
 
 func (x *GetTaskRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[39]
+	mi := &file_protos_o2control_proto_msgTypes[40]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2906,7 +2953,7 @@ func (x *GetTaskRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTaskRequest.ProtoReflect.Descriptor instead.
 func (*GetTaskRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{39}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{40}
 }
 
 func (x *GetTaskRequest) GetTaskId() string {
@@ -2927,7 +2974,7 @@ type GetTaskReply struct {
 func (x *GetTaskReply) Reset() {
 	*x = GetTaskReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[40]
+		mi := &file_protos_o2control_proto_msgTypes[41]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2940,7 +2987,7 @@ func (x *GetTaskReply) String() string {
 func (*GetTaskReply) ProtoMessage() {}
 
 func (x *GetTaskReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[40]
+	mi := &file_protos_o2control_proto_msgTypes[41]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2953,7 +3000,7 @@ func (x *GetTaskReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetTaskReply.ProtoReflect.Descriptor instead.
 func (*GetTaskReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{40}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{41}
 }
 
 func (x *GetTaskReply) GetTask() *TaskInfo {
@@ -2975,7 +3022,7 @@ type TaskClassInfo struct {
 func (x *TaskClassInfo) Reset() {
 	*x = TaskClassInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[41]
+		mi := &file_protos_o2control_proto_msgTypes[42]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2988,7 +3035,7 @@ func (x *TaskClassInfo) String() string {
 func (*TaskClassInfo) ProtoMessage() {}
 
 func (x *TaskClassInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[41]
+	mi := &file_protos_o2control_proto_msgTypes[42]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3001,7 +3048,7 @@ func (x *TaskClassInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskClassInfo.ProtoReflect.Descriptor instead.
 func (*TaskClassInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{41}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{42}
 }
 
 func (x *TaskClassInfo) GetName() string {
@@ -3033,7 +3080,7 @@ type CommandInfo struct {
 func (x *CommandInfo) Reset() {
 	*x = CommandInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[42]
+		mi := &file_protos_o2control_proto_msgTypes[43]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3046,7 +3093,7 @@ func (x *CommandInfo) String() string {
 func (*CommandInfo) ProtoMessage() {}
 
 func (x *CommandInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[42]
+	mi := &file_protos_o2control_proto_msgTypes[43]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3059,7 +3106,7 @@ func (x *CommandInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CommandInfo.ProtoReflect.Descriptor instead.
 func (*CommandInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{42}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{43}
 }
 
 func (x *CommandInfo) GetEnv() []string {
@@ -3110,7 +3157,7 @@ type ChannelInfo struct {
 func (x *ChannelInfo) Reset() {
 	*x = ChannelInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[43]
+		mi := &file_protos_o2control_proto_msgTypes[44]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3123,7 +3170,7 @@ func (x *ChannelInfo) String() string {
 func (*ChannelInfo) ProtoMessage() {}
 
 func (x *ChannelInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[43]
+	mi := &file_protos_o2control_proto_msgTypes[44]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3136,7 +3183,7 @@ func (x *ChannelInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ChannelInfo.ProtoReflect.Descriptor instead.
 func (*ChannelInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{43}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{44}
 }
 
 func (x *ChannelInfo) GetName() string {
@@ -3178,7 +3225,7 @@ type TaskInfo struct {
 func (x *TaskInfo) Reset() {
 	*x = TaskInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[44]
+		mi := &file_protos_o2control_proto_msgTypes[45]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3191,7 +3238,7 @@ func (x *TaskInfo) String() string {
 func (*TaskInfo) ProtoMessage() {}
 
 func (x *TaskInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[44]
+	mi := &file_protos_o2control_proto_msgTypes[45]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3204,7 +3251,7 @@ func (x *TaskInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TaskInfo.ProtoReflect.Descriptor instead.
 func (*TaskInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{44}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{45}
 }
 
 func (x *TaskInfo) GetShortInfo() *ShortTaskInfo {
@@ -3274,7 +3321,7 @@ type CleanupTasksRequest struct {
 func (x *CleanupTasksRequest) Reset() {
 	*x = CleanupTasksRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[45]
+		mi := &file_protos_o2control_proto_msgTypes[46]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3287,7 +3334,7 @@ func (x *CleanupTasksRequest) String() string {
 func (*CleanupTasksRequest) ProtoMessage() {}
 
 func (x *CleanupTasksRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[45]
+	mi := &file_protos_o2control_proto_msgTypes[46]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3300,7 +3347,7 @@ func (x *CleanupTasksRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CleanupTasksRequest.ProtoReflect.Descriptor instead.
 func (*CleanupTasksRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{45}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{46}
 }
 
 func (x *CleanupTasksRequest) GetTaskIds() []string {
@@ -3322,7 +3369,7 @@ type CleanupTasksReply struct {
 func (x *CleanupTasksReply) Reset() {
 	*x = CleanupTasksReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[46]
+		mi := &file_protos_o2control_proto_msgTypes[47]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3335,7 +3382,7 @@ func (x *CleanupTasksReply) String() string {
 func (*CleanupTasksReply) ProtoMessage() {}
 
 func (x *CleanupTasksReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[46]
+	mi := &file_protos_o2control_proto_msgTypes[47]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3348,7 +3395,7 @@ func (x *CleanupTasksReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CleanupTasksReply.ProtoReflect.Descriptor instead.
 func (*CleanupTasksReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{46}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{47}
 }
 
 func (x *CleanupTasksReply) GetKilledTasks() []*ShortTaskInfo {
@@ -3380,7 +3427,7 @@ type GetRolesRequest struct {
 func (x *GetRolesRequest) Reset() {
 	*x = GetRolesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[47]
+		mi := &file_protos_o2control_proto_msgTypes[48]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3393,7 +3440,7 @@ func (x *GetRolesRequest) String() string {
 func (*GetRolesRequest) ProtoMessage() {}
 
 func (x *GetRolesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[47]
+	mi := &file_protos_o2control_proto_msgTypes[48]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3406,7 +3453,7 @@ func (x *GetRolesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRolesRequest.ProtoReflect.Descriptor instead.
 func (*GetRolesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{47}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{48}
 }
 
 func (x *GetRolesRequest) GetEnvId() string {
@@ -3444,7 +3491,7 @@ type RoleInfo struct {
 func (x *RoleInfo) Reset() {
 	*x = RoleInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[48]
+		mi := &file_protos_o2control_proto_msgTypes[49]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3457,7 +3504,7 @@ func (x *RoleInfo) String() string {
 func (*RoleInfo) ProtoMessage() {}
 
 func (x *RoleInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[48]
+	mi := &file_protos_o2control_proto_msgTypes[49]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3470,7 +3517,7 @@ func (x *RoleInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RoleInfo.ProtoReflect.Descriptor instead.
 func (*RoleInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{48}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{49}
 }
 
 func (x *RoleInfo) GetName() string {
@@ -3561,7 +3608,7 @@ type GetRolesReply struct {
 func (x *GetRolesReply) Reset() {
 	*x = GetRolesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[49]
+		mi := &file_protos_o2control_proto_msgTypes[50]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3574,7 +3621,7 @@ func (x *GetRolesReply) String() string {
 func (*GetRolesReply) ProtoMessage() {}
 
 func (x *GetRolesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[49]
+	mi := &file_protos_o2control_proto_msgTypes[50]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3587,7 +3634,7 @@ func (x *GetRolesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRolesReply.ProtoReflect.Descriptor instead.
 func (*GetRolesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{49}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{50}
 }
 
 func (x *GetRolesReply) GetRoles() []*RoleInfo {
@@ -3612,7 +3659,7 @@ type GetWorkflowTemplatesRequest struct {
 func (x *GetWorkflowTemplatesRequest) Reset() {
 	*x = GetWorkflowTemplatesRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[50]
+		mi := &file_protos_o2control_proto_msgTypes[51]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3625,7 +3672,7 @@ func (x *GetWorkflowTemplatesRequest) String() string {
 func (*GetWorkflowTemplatesRequest) ProtoMessage() {}
 
 func (x *GetWorkflowTemplatesRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[50]
+	mi := &file_protos_o2control_proto_msgTypes[51]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3638,7 +3685,7 @@ func (x *GetWorkflowTemplatesRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWorkflowTemplatesRequest.ProtoReflect.Descriptor instead.
 func (*GetWorkflowTemplatesRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{50}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{51}
 }
 
 func (x *GetWorkflowTemplatesRequest) GetRepoPattern() string {
@@ -3696,7 +3743,7 @@ type VarSpecMessage struct {
 func (x *VarSpecMessage) Reset() {
 	*x = VarSpecMessage{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[51]
+		mi := &file_protos_o2control_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3709,7 +3756,7 @@ func (x *VarSpecMessage) String() string {
 func (*VarSpecMessage) ProtoMessage() {}
 
 func (x *VarSpecMessage) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[51]
+	mi := &file_protos_o2control_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3722,7 +3769,7 @@ func (x *VarSpecMessage) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use VarSpecMessage.ProtoReflect.Descriptor instead.
 func (*VarSpecMessage) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{51}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{52}
 }
 
 func (x *VarSpecMessage) GetDefaultValue() string {
@@ -3810,7 +3857,7 @@ type WorkflowTemplateInfo struct {
 func (x *WorkflowTemplateInfo) Reset() {
 	*x = WorkflowTemplateInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[52]
+		mi := &file_protos_o2control_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3823,7 +3870,7 @@ func (x *WorkflowTemplateInfo) String() string {
 func (*WorkflowTemplateInfo) ProtoMessage() {}
 
 func (x *WorkflowTemplateInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[52]
+	mi := &file_protos_o2control_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3836,7 +3883,7 @@ func (x *WorkflowTemplateInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use WorkflowTemplateInfo.ProtoReflect.Descriptor instead.
 func (*WorkflowTemplateInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{52}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{53}
 }
 
 func (x *WorkflowTemplateInfo) GetRepo() string {
@@ -3885,7 +3932,7 @@ type GetWorkflowTemplatesReply struct {
 func (x *GetWorkflowTemplatesReply) Reset() {
 	*x = GetWorkflowTemplatesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[53]
+		mi := &file_protos_o2control_proto_msgTypes[54]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3898,7 +3945,7 @@ func (x *GetWorkflowTemplatesReply) String() string {
 func (*GetWorkflowTemplatesReply) ProtoMessage() {}
 
 func (x *GetWorkflowTemplatesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[53]
+	mi := &file_protos_o2control_proto_msgTypes[54]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3911,7 +3958,7 @@ func (x *GetWorkflowTemplatesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWorkflowTemplatesReply.ProtoReflect.Descriptor instead.
 func (*GetWorkflowTemplatesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{53}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{54}
 }
 
 func (x *GetWorkflowTemplatesReply) GetWorkflowTemplates() []*WorkflowTemplateInfo {
@@ -3932,7 +3979,7 @@ type ListReposRequest struct {
 func (x *ListReposRequest) Reset() {
 	*x = ListReposRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[54]
+		mi := &file_protos_o2control_proto_msgTypes[55]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3945,7 +3992,7 @@ func (x *ListReposRequest) String() string {
 func (*ListReposRequest) ProtoMessage() {}
 
 func (x *ListReposRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[54]
+	mi := &file_protos_o2control_proto_msgTypes[55]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3958,7 +4005,7 @@ func (x *ListReposRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListReposRequest.ProtoReflect.Descriptor instead.
 func (*ListReposRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{54}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{55}
 }
 
 func (x *ListReposRequest) GetGetRevisions() bool {
@@ -3982,7 +4029,7 @@ type RepoInfo struct {
 func (x *RepoInfo) Reset() {
 	*x = RepoInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[55]
+		mi := &file_protos_o2control_proto_msgTypes[56]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3995,7 +4042,7 @@ func (x *RepoInfo) String() string {
 func (*RepoInfo) ProtoMessage() {}
 
 func (x *RepoInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[55]
+	mi := &file_protos_o2control_proto_msgTypes[56]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4008,7 +4055,7 @@ func (x *RepoInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RepoInfo.ProtoReflect.Descriptor instead.
 func (*RepoInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{55}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{56}
 }
 
 func (x *RepoInfo) GetName() string {
@@ -4051,7 +4098,7 @@ type ListReposReply struct {
 func (x *ListReposReply) Reset() {
 	*x = ListReposReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[56]
+		mi := &file_protos_o2control_proto_msgTypes[57]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4064,7 +4111,7 @@ func (x *ListReposReply) String() string {
 func (*ListReposReply) ProtoMessage() {}
 
 func (x *ListReposReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[56]
+	mi := &file_protos_o2control_proto_msgTypes[57]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4077,7 +4124,7 @@ func (x *ListReposReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListReposReply.ProtoReflect.Descriptor instead.
 func (*ListReposReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{56}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{57}
 }
 
 func (x *ListReposReply) GetRepos() []*RepoInfo {
@@ -4106,7 +4153,7 @@ type AddRepoRequest struct {
 func (x *AddRepoRequest) Reset() {
 	*x = AddRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[57]
+		mi := &file_protos_o2control_proto_msgTypes[58]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4119,7 +4166,7 @@ func (x *AddRepoRequest) String() string {
 func (*AddRepoRequest) ProtoMessage() {}
 
 func (x *AddRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[57]
+	mi := &file_protos_o2control_proto_msgTypes[58]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4132,7 +4179,7 @@ func (x *AddRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AddRepoRequest.ProtoReflect.Descriptor instead.
 func (*AddRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{57}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{58}
 }
 
 func (x *AddRepoRequest) GetName() string {
@@ -4161,7 +4208,7 @@ type AddRepoReply struct {
 func (x *AddRepoReply) Reset() {
 	*x = AddRepoReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[58]
+		mi := &file_protos_o2control_proto_msgTypes[59]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4174,7 +4221,7 @@ func (x *AddRepoReply) String() string {
 func (*AddRepoReply) ProtoMessage() {}
 
 func (x *AddRepoReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[58]
+	mi := &file_protos_o2control_proto_msgTypes[59]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4187,7 +4234,7 @@ func (x *AddRepoReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AddRepoReply.ProtoReflect.Descriptor instead.
 func (*AddRepoReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{58}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{59}
 }
 
 func (x *AddRepoReply) GetNewDefaultRevision() string {
@@ -4215,7 +4262,7 @@ type RemoveRepoRequest struct {
 func (x *RemoveRepoRequest) Reset() {
 	*x = RemoveRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[59]
+		mi := &file_protos_o2control_proto_msgTypes[60]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4228,7 +4275,7 @@ func (x *RemoveRepoRequest) String() string {
 func (*RemoveRepoRequest) ProtoMessage() {}
 
 func (x *RemoveRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[59]
+	mi := &file_protos_o2control_proto_msgTypes[60]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4241,7 +4288,7 @@ func (x *RemoveRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RemoveRepoRequest.ProtoReflect.Descriptor instead.
 func (*RemoveRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{59}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{60}
 }
 
 func (x *RemoveRepoRequest) GetIndex() int32 {
@@ -4262,7 +4309,7 @@ type RemoveRepoReply struct {
 func (x *RemoveRepoReply) Reset() {
 	*x = RemoveRepoReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[60]
+		mi := &file_protos_o2control_proto_msgTypes[61]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4275,7 +4322,7 @@ func (x *RemoveRepoReply) String() string {
 func (*RemoveRepoReply) ProtoMessage() {}
 
 func (x *RemoveRepoReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[60]
+	mi := &file_protos_o2control_proto_msgTypes[61]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4288,7 +4335,7 @@ func (x *RemoveRepoReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RemoveRepoReply.ProtoReflect.Descriptor instead.
 func (*RemoveRepoReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{60}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{61}
 }
 
 func (x *RemoveRepoReply) GetNewDefaultRepo() string {
@@ -4309,7 +4356,7 @@ type RefreshReposRequest struct {
 func (x *RefreshReposRequest) Reset() {
 	*x = RefreshReposRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[61]
+		mi := &file_protos_o2control_proto_msgTypes[62]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4322,7 +4369,7 @@ func (x *RefreshReposRequest) String() string {
 func (*RefreshReposRequest) ProtoMessage() {}
 
 func (x *RefreshReposRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[61]
+	mi := &file_protos_o2control_proto_msgTypes[62]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4335,7 +4382,7 @@ func (x *RefreshReposRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RefreshReposRequest.ProtoReflect.Descriptor instead.
 func (*RefreshReposRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{61}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{62}
 }
 
 func (x *RefreshReposRequest) GetIndex() int32 {
@@ -4356,7 +4403,7 @@ type SetDefaultRepoRequest struct {
 func (x *SetDefaultRepoRequest) Reset() {
 	*x = SetDefaultRepoRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[62]
+		mi := &file_protos_o2control_proto_msgTypes[63]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4369,7 +4416,7 @@ func (x *SetDefaultRepoRequest) String() string {
 func (*SetDefaultRepoRequest) ProtoMessage() {}
 
 func (x *SetDefaultRepoRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[62]
+	mi := &file_protos_o2control_proto_msgTypes[63]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4382,7 +4429,7 @@ func (x *SetDefaultRepoRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetDefaultRepoRequest.ProtoReflect.Descriptor instead.
 func (*SetDefaultRepoRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{62}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{63}
 }
 
 func (x *SetDefaultRepoRequest) GetIndex() int32 {
@@ -4403,7 +4450,7 @@ type SetGlobalDefaultRevisionRequest struct {
 func (x *SetGlobalDefaultRevisionRequest) Reset() {
 	*x = SetGlobalDefaultRevisionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[63]
+		mi := &file_protos_o2control_proto_msgTypes[64]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4416,7 +4463,7 @@ func (x *SetGlobalDefaultRevisionRequest) String() string {
 func (*SetGlobalDefaultRevisionRequest) ProtoMessage() {}
 
 func (x *SetGlobalDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[63]
+	mi := &file_protos_o2control_proto_msgTypes[64]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4429,7 +4476,7 @@ func (x *SetGlobalDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetGlobalDefaultRevisionRequest.ProtoReflect.Descriptor instead.
 func (*SetGlobalDefaultRevisionRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{63}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{64}
 }
 
 func (x *SetGlobalDefaultRevisionRequest) GetRevision() string {
@@ -4451,7 +4498,7 @@ type SetRepoDefaultRevisionRequest struct {
 func (x *SetRepoDefaultRevisionRequest) Reset() {
 	*x = SetRepoDefaultRevisionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[64]
+		mi := &file_protos_o2control_proto_msgTypes[65]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4464,7 +4511,7 @@ func (x *SetRepoDefaultRevisionRequest) String() string {
 func (*SetRepoDefaultRevisionRequest) ProtoMessage() {}
 
 func (x *SetRepoDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[64]
+	mi := &file_protos_o2control_proto_msgTypes[65]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4477,7 +4524,7 @@ func (x *SetRepoDefaultRevisionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetRepoDefaultRevisionRequest.ProtoReflect.Descriptor instead.
 func (*SetRepoDefaultRevisionRequest) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{64}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{65}
 }
 
 func (x *SetRepoDefaultRevisionRequest) GetIndex() int32 {
@@ -4505,7 +4552,7 @@ type SetRepoDefaultRevisionReply struct {
 func (x *SetRepoDefaultRevisionReply) Reset() {
 	*x = SetRepoDefaultRevisionReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[65]
+		mi := &file_protos_o2control_proto_msgTypes[66]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4518,7 +4565,7 @@ func (x *SetRepoDefaultRevisionReply) String() string {
 func (*SetRepoDefaultRevisionReply) ProtoMessage() {}
 
 func (x *SetRepoDefaultRevisionReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[65]
+	mi := &file_protos_o2control_proto_msgTypes[66]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4531,7 +4578,7 @@ func (x *SetRepoDefaultRevisionReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetRepoDefaultRevisionReply.ProtoReflect.Descriptor instead.
 func (*SetRepoDefaultRevisionReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{65}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{66}
 }
 
 func (x *SetRepoDefaultRevisionReply) GetInfo() string {
@@ -4550,7 +4597,7 @@ type Empty struct {
 func (x *Empty) Reset() {
 	*x = Empty{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[66]
+		mi := &file_protos_o2control_proto_msgTypes[67]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4563,7 +4610,7 @@ func (x *Empty) String() string {
 func (*Empty) ProtoMessage() {}
 
 func (x *Empty) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[66]
+	mi := &file_protos_o2control_proto_msgTypes[67]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4576,7 +4623,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Empty.ProtoReflect.Descriptor instead.
 func (*Empty) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{66}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{67}
 }
 
 type ListIntegratedServicesReply struct {
@@ -4590,7 +4637,7 @@ type ListIntegratedServicesReply struct {
 func (x *ListIntegratedServicesReply) Reset() {
 	*x = ListIntegratedServicesReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[67]
+		mi := &file_protos_o2control_proto_msgTypes[68]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4603,7 +4650,7 @@ func (x *ListIntegratedServicesReply) String() string {
 func (*ListIntegratedServicesReply) ProtoMessage() {}
 
 func (x *ListIntegratedServicesReply) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[67]
+	mi := &file_protos_o2control_proto_msgTypes[68]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4616,7 +4663,7 @@ func (x *ListIntegratedServicesReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListIntegratedServicesReply.ProtoReflect.Descriptor instead.
 func (*ListIntegratedServicesReply) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{67}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{68}
 }
 
 func (x *ListIntegratedServicesReply) GetServices() map[string]*IntegratedServiceInfo {
@@ -4641,7 +4688,7 @@ type IntegratedServiceInfo struct {
 func (x *IntegratedServiceInfo) Reset() {
 	*x = IntegratedServiceInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_protos_o2control_proto_msgTypes[68]
+		mi := &file_protos_o2control_proto_msgTypes[69]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4654,7 +4701,7 @@ func (x *IntegratedServiceInfo) String() string {
 func (*IntegratedServiceInfo) ProtoMessage() {}
 
 func (x *IntegratedServiceInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_protos_o2control_proto_msgTypes[68]
+	mi := &file_protos_o2control_proto_msgTypes[69]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4667,7 +4714,7 @@ func (x *IntegratedServiceInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IntegratedServiceInfo.ProtoReflect.Descriptor instead.
 func (*IntegratedServiceInfo) Descriptor() ([]byte, []int) {
-	return file_protos_o2control_proto_rawDescGZIP(), []int{68}
+	return file_protos_o2control_proto_rawDescGZIP(), []int{69}
 }
 
 func (x *IntegratedServiceInfo) GetName() string {
@@ -5033,404 +5080,413 @@ var file_protos_o2control_proto_rawDesc = []byte{
 	0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63,
 	0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74,
 	0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65,
-	0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x45,
-	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70,
-	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x3a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x45,
-	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-	0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65,
-	0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76,
-	0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
-	0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x73, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x6e,
-	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
-	0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75,
-	0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65,
-	0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47,
-	0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78,
-	0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a,
-	0x1d, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50,
-	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x58,
-	0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47,
-	0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72,
-	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0xbc, 0x02, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x72,
-	0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c,
-	0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63,
-	0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
-	0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x64, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61,
-	0x73, 0x6b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70,
-	0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x64,
-	0x6f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62,
-	0x6f, 0x78, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69,
-	0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x61,
-	0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x44,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x67, 0x65,
-	0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e,
-	0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a,
-	0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a,
-	0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x22, 0x3f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c,
-	0x79, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f,
-	0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b,
-	0x73, 0x22, 0x28, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0c, 0x47,
-	0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x74,
-	0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04,
-	0x74, 0x61, 0x73, 0x6b, 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73,
-	0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x7d, 0x0a, 0x0b, 0x43,
-	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e,
-	0x76, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x14, 0x0a, 0x05,
-	0x73, 0x68, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x68, 0x65,
-	0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x68,
-	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a,
-	0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70,
-	0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xf0, 0x03, 0x0a, 0x08, 0x54, 0x61,
-	0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49,
-	0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36,
-	0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61,
-	0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x6c, 0x61,
-	0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e,
-	0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e,
-	0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64,
-	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x62,
-	0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43,
-	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62,
-	0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b,
-	0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f,
-	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
-	0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61,
-	0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61,
-	0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f,
-	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66,
-	0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a,
-	0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x2f, 0x0a, 0x13,
-	0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x8d, 0x01,
-	0x0a, 0x11, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65,
-	0x70, 0x6c, 0x79, 0x12, 0x3a, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73,
-	0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12,
-	0x3c, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18,
-	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52,
-	0x0c, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x43, 0x0a,
-	0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70,
-	0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70,
-	0x65, 0x63, 0x22, 0xd3, 0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12,
-	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73,
-	0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a,
-	0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
-	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73,
-	0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c,
-	0x65, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x07,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x73, 0x12, 0x31, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
-	0x76, 0x61, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73,
-	0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56,
-	0x61, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61,
-	0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64,
-	0x53, 0x74, 0x61, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73,
-	0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x20, 0x0a,
-	0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
-	0x3b, 0x0a, 0x0d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 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, 0x1a, 0x37, 0x0a, 0x09,
-	0x56, 0x61, 0x72, 0x73, 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, 0x1a, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72,
+	0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x3a, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x76,
+	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
+	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74,
+	0x6f, 0x72, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72,
+	0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72,
+	0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
 	0x73, 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, 0x1a, 0x44, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74,
-	0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x38, 0x01, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
+	0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x73, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+	0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61,
+	0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
+	0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x58, 0x0a, 0x0a, 0x70, 0x72,
+	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e,
+	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+	0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+	0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 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, 0xbc, 0x02, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73,
+	0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63,
+	0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
+	0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73,
+	0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d,
+	0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65,
+	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x64, 0x65,
+	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03,
+	0x70, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x24,
+	0x0a, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74,
+	0x64, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c,
+	0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62,
+	0x6c, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12,
+	0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65,
+	0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+	0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3f, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a,
+	0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61,
+	0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x28, 0x0a,
+	0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x61,
+	0x73, 0x6b, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b,
+	0x22, 0x45, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x7d, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x65, 0x6c,
+	0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
+	0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+	0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
+	0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xf0, 0x03, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x09, 0x63, 0x6c,
+	0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6c,
+	0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61,
+	0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x6e,
+	0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e,
+	0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14,
+	0x0a, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+	0x6e, 0x76, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72,
+	0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70,
+	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f,
+	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 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, 0x3a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52,
-	0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c,
-	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e,
-	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72,
-	0x6f, 0x6c, 0x65, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
-	0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74,
-	0x65, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50,
-	0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
-	0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
-	0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c,
-	0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
-	0x22, 0x9a, 0x04, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c,
-	0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65,
-	0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55,
-	0x69, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x52, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12,
-	0x14, 0x0a, 0x05, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x70, 0x61, 0x6e, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
-	0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c,
-	0x6c, 0x6f, 0x77, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69,
-	0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
-	0x78, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x12,
-	0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x18, 0x0a, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x22, 0x71, 0x0a,
-	0x08, 0x55, 0x69, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x65, 0x64, 0x69,
-	0x74, 0x42, 0x6f, 0x78, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72,
-	0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x78, 0x10, 0x02, 0x12,
-	0x0f, 0x0a, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x03,
-	0x12, 0x0c, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x10, 0x04, 0x12, 0x12,
-	0x0a, 0x0e, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78,
-	0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x6f, 0x78, 0x10, 0x06,
-	0x22, 0x3b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x01,
-	0x12, 0x08, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x6c, 0x69,
-	0x73, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x10, 0x04, 0x22, 0xaf, 0x02,
-	0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
-	0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70,
-	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
-	0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d,
-	0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63,
-	0x4d, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x58, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63,
-	0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
-	0x6a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x11,
-	0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
-	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
-	0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
-	0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x22, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x28,
-	0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x71, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x70, 0x6f, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6f,
-	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x65,
-	0x70, 0x6f, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x0e, 0x41, 0x64, 0x64,
-	0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x13, 0x43, 0x6c, 0x65, 0x61,
+	0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+	0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x43, 0x6c,
+	0x65, 0x61, 0x6e, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
+	0x3a, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b,
+	0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x72,
+	0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x68,
+	0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x72, 0x75, 0x6e,
+	0x6e, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+	0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
+	0x65, 0x6e, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76,
+	0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x22, 0xd3,
+	0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e,
 	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-	0x28, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x0c, 0x41, 0x64, 0x64,
-	0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x77,
-	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66,
-	0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x29, 0x0a,
-	0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x39, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f,
-	0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x6e,
-	0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
-	0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65,
-	0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e,
-	0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
-	0x22, 0x2d, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
-	0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64,
-	0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22,
-	0x3d, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51,
-	0x0a, 0x1d, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
-	0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
-	0x6e, 0x22, 0x31, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79,
-	0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x69, 0x6e, 0x66, 0x6f, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xce, 0x01,
-	0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x50, 0x0a,
-	0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x34, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74,
-	0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a,
-	0x5d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
-	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
-	0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6e,
-	0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9f,
-	0x01, 0x0a, 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
-	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69,
-	0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69,
-	0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e,
-	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
-	0x32, 0x82, 0x10, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b,
-	0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x6f, 0x32,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x30,
-	0x01, 0x12, 0x5a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72,
-	0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52,
+	0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3d,
+	0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c,
+	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x31, 0x0a,
+	0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73,
+	0x12, 0x3d, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52,
+	0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 0x12,
+	0x58, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x74, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e,
+	0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63,
+	0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x0a, 0x0d, 0x44,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 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, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x73,
+	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, 0x1a, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x56, 0x61, 0x72, 0x73, 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, 0x1a, 0x44,
+	0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74,
+	0x61, 0x63, 0x6b, 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, 0x3a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+	0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73,
+	0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+	0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x50, 0x61, 0x74, 0x74, 0x65,
+	0x72, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61,
+	0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x20, 0x0a, 0x0b,
+	0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x18,
+	0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x57,
+	0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
+	0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0x9a, 0x04, 0x0a,
+	0x0e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61,
+	0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x20, 0x0a,
+	0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x3a, 0x0a, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53,
+	0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x69, 0x57, 0x69, 0x64,
+	0x67, 0x65, 0x74, 0x52, 0x06, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70,
+	0x61, 0x6e, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x6e, 0x65,
+	0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65,
+	0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a,
+	0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x65,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x49, 0x66, 0x22, 0x71, 0x0a, 0x08, 0x55, 0x69, 0x57,
+	0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x42, 0x6f, 0x78,
+	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x10, 0x01, 0x12, 0x0b,
+	0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x78, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x64,
+	0x72, 0x6f, 0x70, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08,
+	0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x72, 0x61,
+	0x64, 0x69, 0x6f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78, 0x10, 0x05, 0x12, 0x0c,
+	0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x6f, 0x78, 0x10, 0x06, 0x22, 0x3b, 0x0a, 0x04,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x00,
+	0x12, 0x0a, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04,
+	0x62, 0x6f, 0x6f, 0x6c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x10, 0x03,
+	0x12, 0x07, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x10, 0x04, 0x22, 0xaf, 0x02, 0x0a, 0x14, 0x57, 0x6f,
+	0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4f,
+	0x0a, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x18, 0x04, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x57,
+	0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x12,
+	0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x1a, 0x58, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x70, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x56, 0x61, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6a, 0x0a, 0x19, 0x47,
+	0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+	0x74, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b,
+	0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
+	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x70, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x67,
+	0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22,
+	0x80, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x22, 0x71, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x52, 0x65, 0x70, 0x6f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x12,
+	0x34, 0x0a, 0x15, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15,
+	0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6f,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6f,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x12, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x29, 0x0a, 0x11, 0x52, 0x65, 0x6d,
+	0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14,
+	0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69,
+	0x6e, 0x64, 0x65, 0x78, 0x22, 0x39, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65,
+	0x70, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x22,
+	0x2b, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x2d, 0x0a, 0x15,
+	0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x3d, 0x0a, 0x1f, 0x53,
+	0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
+	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+	0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x1d, 0x53, 0x65,
+	0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x76, 0x69,
+	0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69,
+	0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
+	0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x0a,
+	0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
+	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04,
+	0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f,
+	0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x4c, 0x69,
+	0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x50, 0x0a, 0x08, 0x73, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65,
+	0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0d, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+	0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x49,
+	0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28,
+	0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xd6, 0x10, 0x0a,
+	0x07, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x63,
+	0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5a, 0x0a,
+	0x10, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65,
+	0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
 	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f,
-	0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a,
-	0x08, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f,
-	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22,
-	0x00, 0x12, 0x57, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
-	0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
-	0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x4e, 0x65,
-	0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
-	0x12, 0x24, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77,
-	0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
-	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e,
-	0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x08, 0x54, 0x65, 0x61,
+	0x72, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
+	0x6c, 0x2e, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x65,
+	0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a,
+	0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+	0x12, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
+	0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74,
+	0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x75, 0x74, 0x6f,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e,
+	0x65, 0x77, 0x41, 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x4e, 0x65, 0x77, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f,
+	0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x45, 0x6e, 0x76, 0x69,
+	0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54,
+	0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
+	0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47,
+	0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f, 0x32, 0x63,
+	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e,
 	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77,
-	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79,
-	0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
-	0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74,
-	0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24,
-	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72,
-	0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x4d, 0x6f,
-	0x64, 0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
-	0x23, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
-	0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
-	0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x73,
-	0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
-	0x24, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74,
-	0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
-	0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
-	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x47,
-	0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72,
-	0x73, 0x12, 0x10, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d,
-	0x70, 0x74, 0x79, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
-	0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
+	0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e,
+	0x74, 0x72, 0x6f, 0x6c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x45, 0x6e,
+	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x21, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79,
+	0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x6f, 0x32,
+	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x65,
+	0x73, 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63,
+	0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x10, 0x2e,
+	0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
+	0x22, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41,
+	0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69,
+	0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x10,
+	0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x1a, 0x25, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74,
+	0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
 	0x72, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x08, 0x47, 0x65, 0x74,
 	0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x32, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
 	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
@@ -5521,7 +5577,7 @@ func file_protos_o2control_proto_rawDescGZIP() []byte {
 }
 
 var file_protos_o2control_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
-var file_protos_o2control_proto_msgTypes = make([]protoimpl.MessageInfo, 84)
+var file_protos_o2control_proto_msgTypes = make([]protoimpl.MessageInfo, 85)
 var file_protos_o2control_proto_goTypes = []interface{}{
 	(StatusUpdate_Level)(0),                 // 0: o2control.StatusUpdate.Level
 	(ControlEnvironmentRequest_Optype)(0),   // 1: o2control.ControlEnvironmentRequest.Optype
@@ -5559,59 +5615,60 @@ var file_protos_o2control_proto_goTypes = []interface{}{
 	(*DestroyEnvironmentRequest)(nil),       // 33: o2control.DestroyEnvironmentRequest
 	(*DestroyEnvironmentReply)(nil),         // 34: o2control.DestroyEnvironmentReply
 	(*GetActiveDetectorsReply)(nil),         // 35: o2control.GetActiveDetectorsReply
-	(*SetEnvironmentPropertiesRequest)(nil), // 36: o2control.SetEnvironmentPropertiesRequest
-	(*SetEnvironmentPropertiesReply)(nil),   // 37: o2control.SetEnvironmentPropertiesReply
-	(*GetEnvironmentPropertiesRequest)(nil), // 38: o2control.GetEnvironmentPropertiesRequest
-	(*GetEnvironmentPropertiesReply)(nil),   // 39: o2control.GetEnvironmentPropertiesReply
-	(*ShortTaskInfo)(nil),                   // 40: o2control.ShortTaskInfo
-	(*TaskDeploymentInfo)(nil),              // 41: o2control.TaskDeploymentInfo
-	(*GetTasksRequest)(nil),                 // 42: o2control.GetTasksRequest
-	(*GetTasksReply)(nil),                   // 43: o2control.GetTasksReply
-	(*GetTaskRequest)(nil),                  // 44: o2control.GetTaskRequest
-	(*GetTaskReply)(nil),                    // 45: o2control.GetTaskReply
-	(*TaskClassInfo)(nil),                   // 46: o2control.TaskClassInfo
-	(*CommandInfo)(nil),                     // 47: o2control.CommandInfo
-	(*ChannelInfo)(nil),                     // 48: o2control.ChannelInfo
-	(*TaskInfo)(nil),                        // 49: o2control.TaskInfo
-	(*CleanupTasksRequest)(nil),             // 50: o2control.CleanupTasksRequest
-	(*CleanupTasksReply)(nil),               // 51: o2control.CleanupTasksReply
-	(*GetRolesRequest)(nil),                 // 52: o2control.GetRolesRequest
-	(*RoleInfo)(nil),                        // 53: o2control.RoleInfo
-	(*GetRolesReply)(nil),                   // 54: o2control.GetRolesReply
-	(*GetWorkflowTemplatesRequest)(nil),     // 55: o2control.GetWorkflowTemplatesRequest
-	(*VarSpecMessage)(nil),                  // 56: o2control.VarSpecMessage
-	(*WorkflowTemplateInfo)(nil),            // 57: o2control.WorkflowTemplateInfo
-	(*GetWorkflowTemplatesReply)(nil),       // 58: o2control.GetWorkflowTemplatesReply
-	(*ListReposRequest)(nil),                // 59: o2control.ListReposRequest
-	(*RepoInfo)(nil),                        // 60: o2control.RepoInfo
-	(*ListReposReply)(nil),                  // 61: o2control.ListReposReply
-	(*AddRepoRequest)(nil),                  // 62: o2control.AddRepoRequest
-	(*AddRepoReply)(nil),                    // 63: o2control.AddRepoReply
-	(*RemoveRepoRequest)(nil),               // 64: o2control.RemoveRepoRequest
-	(*RemoveRepoReply)(nil),                 // 65: o2control.RemoveRepoReply
-	(*RefreshReposRequest)(nil),             // 66: o2control.RefreshReposRequest
-	(*SetDefaultRepoRequest)(nil),           // 67: o2control.SetDefaultRepoRequest
-	(*SetGlobalDefaultRevisionRequest)(nil), // 68: o2control.SetGlobalDefaultRevisionRequest
-	(*SetRepoDefaultRevisionRequest)(nil),   // 69: o2control.SetRepoDefaultRevisionRequest
-	(*SetRepoDefaultRevisionReply)(nil),     // 70: o2control.SetRepoDefaultRevisionReply
-	(*Empty)(nil),                           // 71: o2control.Empty
-	(*ListIntegratedServicesReply)(nil),     // 72: o2control.ListIntegratedServicesReply
-	(*IntegratedServiceInfo)(nil),           // 73: o2control.IntegratedServiceInfo
-	nil,                                     // 74: o2control.EnvironmentInfo.DefaultsEntry
-	nil,                                     // 75: o2control.EnvironmentInfo.VarsEntry
-	nil,                                     // 76: o2control.EnvironmentInfo.UserVarsEntry
-	nil,                                     // 77: o2control.EnvironmentInfo.IntegratedServicesDataEntry
-	nil,                                     // 78: o2control.NewEnvironmentRequest.VarsEntry
-	nil,                                     // 79: o2control.NewAutoEnvironmentRequest.VarsEntry
-	nil,                                     // 80: o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
-	nil,                                     // 81: o2control.GetEnvironmentPropertiesReply.PropertiesEntry
-	nil,                                     // 82: o2control.TaskInfo.PropertiesEntry
-	nil,                                     // 83: o2control.RoleInfo.DefaultsEntry
-	nil,                                     // 84: o2control.RoleInfo.VarsEntry
-	nil,                                     // 85: o2control.RoleInfo.UserVarsEntry
-	nil,                                     // 86: o2control.RoleInfo.ConsolidatedStackEntry
-	nil,                                     // 87: o2control.WorkflowTemplateInfo.VarSpecMapEntry
-	nil,                                     // 88: o2control.ListIntegratedServicesReply.ServicesEntry
+	(*GetAvailableDetectorsReply)(nil),      // 36: o2control.GetAvailableDetectorsReply
+	(*SetEnvironmentPropertiesRequest)(nil), // 37: o2control.SetEnvironmentPropertiesRequest
+	(*SetEnvironmentPropertiesReply)(nil),   // 38: o2control.SetEnvironmentPropertiesReply
+	(*GetEnvironmentPropertiesRequest)(nil), // 39: o2control.GetEnvironmentPropertiesRequest
+	(*GetEnvironmentPropertiesReply)(nil),   // 40: o2control.GetEnvironmentPropertiesReply
+	(*ShortTaskInfo)(nil),                   // 41: o2control.ShortTaskInfo
+	(*TaskDeploymentInfo)(nil),              // 42: o2control.TaskDeploymentInfo
+	(*GetTasksRequest)(nil),                 // 43: o2control.GetTasksRequest
+	(*GetTasksReply)(nil),                   // 44: o2control.GetTasksReply
+	(*GetTaskRequest)(nil),                  // 45: o2control.GetTaskRequest
+	(*GetTaskReply)(nil),                    // 46: o2control.GetTaskReply
+	(*TaskClassInfo)(nil),                   // 47: o2control.TaskClassInfo
+	(*CommandInfo)(nil),                     // 48: o2control.CommandInfo
+	(*ChannelInfo)(nil),                     // 49: o2control.ChannelInfo
+	(*TaskInfo)(nil),                        // 50: o2control.TaskInfo
+	(*CleanupTasksRequest)(nil),             // 51: o2control.CleanupTasksRequest
+	(*CleanupTasksReply)(nil),               // 52: o2control.CleanupTasksReply
+	(*GetRolesRequest)(nil),                 // 53: o2control.GetRolesRequest
+	(*RoleInfo)(nil),                        // 54: o2control.RoleInfo
+	(*GetRolesReply)(nil),                   // 55: o2control.GetRolesReply
+	(*GetWorkflowTemplatesRequest)(nil),     // 56: o2control.GetWorkflowTemplatesRequest
+	(*VarSpecMessage)(nil),                  // 57: o2control.VarSpecMessage
+	(*WorkflowTemplateInfo)(nil),            // 58: o2control.WorkflowTemplateInfo
+	(*GetWorkflowTemplatesReply)(nil),       // 59: o2control.GetWorkflowTemplatesReply
+	(*ListReposRequest)(nil),                // 60: o2control.ListReposRequest
+	(*RepoInfo)(nil),                        // 61: o2control.RepoInfo
+	(*ListReposReply)(nil),                  // 62: o2control.ListReposReply
+	(*AddRepoRequest)(nil),                  // 63: o2control.AddRepoRequest
+	(*AddRepoReply)(nil),                    // 64: o2control.AddRepoReply
+	(*RemoveRepoRequest)(nil),               // 65: o2control.RemoveRepoRequest
+	(*RemoveRepoReply)(nil),                 // 66: o2control.RemoveRepoReply
+	(*RefreshReposRequest)(nil),             // 67: o2control.RefreshReposRequest
+	(*SetDefaultRepoRequest)(nil),           // 68: o2control.SetDefaultRepoRequest
+	(*SetGlobalDefaultRevisionRequest)(nil), // 69: o2control.SetGlobalDefaultRevisionRequest
+	(*SetRepoDefaultRevisionRequest)(nil),   // 70: o2control.SetRepoDefaultRevisionRequest
+	(*SetRepoDefaultRevisionReply)(nil),     // 71: o2control.SetRepoDefaultRevisionReply
+	(*Empty)(nil),                           // 72: o2control.Empty
+	(*ListIntegratedServicesReply)(nil),     // 73: o2control.ListIntegratedServicesReply
+	(*IntegratedServiceInfo)(nil),           // 74: o2control.IntegratedServiceInfo
+	nil,                                     // 75: o2control.EnvironmentInfo.DefaultsEntry
+	nil,                                     // 76: o2control.EnvironmentInfo.VarsEntry
+	nil,                                     // 77: o2control.EnvironmentInfo.UserVarsEntry
+	nil,                                     // 78: o2control.EnvironmentInfo.IntegratedServicesDataEntry
+	nil,                                     // 79: o2control.NewEnvironmentRequest.VarsEntry
+	nil,                                     // 80: o2control.NewAutoEnvironmentRequest.VarsEntry
+	nil,                                     // 81: o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
+	nil,                                     // 82: o2control.GetEnvironmentPropertiesReply.PropertiesEntry
+	nil,                                     // 83: o2control.TaskInfo.PropertiesEntry
+	nil,                                     // 84: o2control.RoleInfo.DefaultsEntry
+	nil,                                     // 85: o2control.RoleInfo.VarsEntry
+	nil,                                     // 86: o2control.RoleInfo.UserVarsEntry
+	nil,                                     // 87: o2control.RoleInfo.ConsolidatedStackEntry
+	nil,                                     // 88: o2control.WorkflowTemplateInfo.VarSpecMapEntry
+	nil,                                     // 89: o2control.ListIntegratedServicesReply.ServicesEntry
 }
 var file_protos_o2control_proto_depIdxs = []int32{
 	11, // 0: o2control.StatusReply.statusUpdates:type_name -> o2control.StatusUpdate
@@ -5622,48 +5679,48 @@ var file_protos_o2control_proto_depIdxs = []int32{
 	8,  // 5: o2control.Event.roleEvent:type_name -> o2control.Ev_RoleEvent
 	15, // 6: o2control.GetFrameworkInfoReply.version:type_name -> o2control.Version
 	21, // 7: o2control.GetEnvironmentsReply.environments:type_name -> o2control.EnvironmentInfo
-	40, // 8: o2control.EnvironmentInfo.tasks:type_name -> o2control.ShortTaskInfo
-	74, // 9: o2control.EnvironmentInfo.defaults:type_name -> o2control.EnvironmentInfo.DefaultsEntry
-	75, // 10: o2control.EnvironmentInfo.vars:type_name -> o2control.EnvironmentInfo.VarsEntry
-	76, // 11: o2control.EnvironmentInfo.userVars:type_name -> o2control.EnvironmentInfo.UserVarsEntry
-	77, // 12: o2control.EnvironmentInfo.integratedServicesData:type_name -> o2control.EnvironmentInfo.IntegratedServicesDataEntry
-	78, // 13: o2control.NewEnvironmentRequest.vars:type_name -> o2control.NewEnvironmentRequest.VarsEntry
+	41, // 8: o2control.EnvironmentInfo.tasks:type_name -> o2control.ShortTaskInfo
+	75, // 9: o2control.EnvironmentInfo.defaults:type_name -> o2control.EnvironmentInfo.DefaultsEntry
+	76, // 10: o2control.EnvironmentInfo.vars:type_name -> o2control.EnvironmentInfo.VarsEntry
+	77, // 11: o2control.EnvironmentInfo.userVars:type_name -> o2control.EnvironmentInfo.UserVarsEntry
+	78, // 12: o2control.EnvironmentInfo.integratedServicesData:type_name -> o2control.EnvironmentInfo.IntegratedServicesDataEntry
+	79, // 13: o2control.NewEnvironmentRequest.vars:type_name -> o2control.NewEnvironmentRequest.VarsEntry
 	21, // 14: o2control.NewEnvironmentReply.environment:type_name -> o2control.EnvironmentInfo
-	79, // 15: o2control.NewAutoEnvironmentRequest.vars:type_name -> o2control.NewAutoEnvironmentRequest.VarsEntry
+	80, // 15: o2control.NewAutoEnvironmentRequest.vars:type_name -> o2control.NewAutoEnvironmentRequest.VarsEntry
 	21, // 16: o2control.GetEnvironmentReply.environment:type_name -> o2control.EnvironmentInfo
-	53, // 17: o2control.GetEnvironmentReply.workflow:type_name -> o2control.RoleInfo
+	54, // 17: o2control.GetEnvironmentReply.workflow:type_name -> o2control.RoleInfo
 	1,  // 18: o2control.ControlEnvironmentRequest.type:type_name -> o2control.ControlEnvironmentRequest.Optype
 	31, // 19: o2control.ModifyEnvironmentRequest.operations:type_name -> o2control.EnvironmentOperation
 	2,  // 20: o2control.EnvironmentOperation.type:type_name -> o2control.EnvironmentOperation.Optype
 	31, // 21: o2control.ModifyEnvironmentReply.failedOperations:type_name -> o2control.EnvironmentOperation
-	51, // 22: o2control.DestroyEnvironmentReply.cleanupTasksReply:type_name -> o2control.CleanupTasksReply
-	80, // 23: o2control.SetEnvironmentPropertiesRequest.properties:type_name -> o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
-	81, // 24: o2control.GetEnvironmentPropertiesReply.properties:type_name -> o2control.GetEnvironmentPropertiesReply.PropertiesEntry
-	41, // 25: o2control.ShortTaskInfo.deploymentInfo:type_name -> o2control.TaskDeploymentInfo
-	40, // 26: o2control.GetTasksReply.tasks:type_name -> o2control.ShortTaskInfo
-	49, // 27: o2control.GetTaskReply.task:type_name -> o2control.TaskInfo
-	40, // 28: o2control.TaskInfo.shortInfo:type_name -> o2control.ShortTaskInfo
-	46, // 29: o2control.TaskInfo.classInfo:type_name -> o2control.TaskClassInfo
-	48, // 30: o2control.TaskInfo.inboundChannels:type_name -> o2control.ChannelInfo
-	48, // 31: o2control.TaskInfo.outboundChannels:type_name -> o2control.ChannelInfo
-	47, // 32: o2control.TaskInfo.commandInfo:type_name -> o2control.CommandInfo
-	82, // 33: o2control.TaskInfo.properties:type_name -> o2control.TaskInfo.PropertiesEntry
-	40, // 34: o2control.CleanupTasksReply.killedTasks:type_name -> o2control.ShortTaskInfo
-	40, // 35: o2control.CleanupTasksReply.runningTasks:type_name -> o2control.ShortTaskInfo
-	53, // 36: o2control.RoleInfo.roles:type_name -> o2control.RoleInfo
-	83, // 37: o2control.RoleInfo.defaults:type_name -> o2control.RoleInfo.DefaultsEntry
-	84, // 38: o2control.RoleInfo.vars:type_name -> o2control.RoleInfo.VarsEntry
-	85, // 39: o2control.RoleInfo.userVars:type_name -> o2control.RoleInfo.UserVarsEntry
-	86, // 40: o2control.RoleInfo.consolidatedStack:type_name -> o2control.RoleInfo.ConsolidatedStackEntry
-	53, // 41: o2control.GetRolesReply.roles:type_name -> o2control.RoleInfo
+	52, // 22: o2control.DestroyEnvironmentReply.cleanupTasksReply:type_name -> o2control.CleanupTasksReply
+	81, // 23: o2control.SetEnvironmentPropertiesRequest.properties:type_name -> o2control.SetEnvironmentPropertiesRequest.PropertiesEntry
+	82, // 24: o2control.GetEnvironmentPropertiesReply.properties:type_name -> o2control.GetEnvironmentPropertiesReply.PropertiesEntry
+	42, // 25: o2control.ShortTaskInfo.deploymentInfo:type_name -> o2control.TaskDeploymentInfo
+	41, // 26: o2control.GetTasksReply.tasks:type_name -> o2control.ShortTaskInfo
+	50, // 27: o2control.GetTaskReply.task:type_name -> o2control.TaskInfo
+	41, // 28: o2control.TaskInfo.shortInfo:type_name -> o2control.ShortTaskInfo
+	47, // 29: o2control.TaskInfo.classInfo:type_name -> o2control.TaskClassInfo
+	49, // 30: o2control.TaskInfo.inboundChannels:type_name -> o2control.ChannelInfo
+	49, // 31: o2control.TaskInfo.outboundChannels:type_name -> o2control.ChannelInfo
+	48, // 32: o2control.TaskInfo.commandInfo:type_name -> o2control.CommandInfo
+	83, // 33: o2control.TaskInfo.properties:type_name -> o2control.TaskInfo.PropertiesEntry
+	41, // 34: o2control.CleanupTasksReply.killedTasks:type_name -> o2control.ShortTaskInfo
+	41, // 35: o2control.CleanupTasksReply.runningTasks:type_name -> o2control.ShortTaskInfo
+	54, // 36: o2control.RoleInfo.roles:type_name -> o2control.RoleInfo
+	84, // 37: o2control.RoleInfo.defaults:type_name -> o2control.RoleInfo.DefaultsEntry
+	85, // 38: o2control.RoleInfo.vars:type_name -> o2control.RoleInfo.VarsEntry
+	86, // 39: o2control.RoleInfo.userVars:type_name -> o2control.RoleInfo.UserVarsEntry
+	87, // 40: o2control.RoleInfo.consolidatedStack:type_name -> o2control.RoleInfo.ConsolidatedStackEntry
+	54, // 41: o2control.GetRolesReply.roles:type_name -> o2control.RoleInfo
 	4,  // 42: o2control.VarSpecMessage.type:type_name -> o2control.VarSpecMessage.Type
 	3,  // 43: o2control.VarSpecMessage.widget:type_name -> o2control.VarSpecMessage.UiWidget
-	87, // 44: o2control.WorkflowTemplateInfo.varSpecMap:type_name -> o2control.WorkflowTemplateInfo.VarSpecMapEntry
-	57, // 45: o2control.GetWorkflowTemplatesReply.workflowTemplates:type_name -> o2control.WorkflowTemplateInfo
-	60, // 46: o2control.ListReposReply.repos:type_name -> o2control.RepoInfo
-	88, // 47: o2control.ListIntegratedServicesReply.services:type_name -> o2control.ListIntegratedServicesReply.ServicesEntry
-	56, // 48: o2control.WorkflowTemplateInfo.VarSpecMapEntry.value:type_name -> o2control.VarSpecMessage
-	73, // 49: o2control.ListIntegratedServicesReply.ServicesEntry.value:type_name -> o2control.IntegratedServiceInfo
+	88, // 44: o2control.WorkflowTemplateInfo.varSpecMap:type_name -> o2control.WorkflowTemplateInfo.VarSpecMapEntry
+	58, // 45: o2control.GetWorkflowTemplatesReply.workflowTemplates:type_name -> o2control.WorkflowTemplateInfo
+	61, // 46: o2control.ListReposReply.repos:type_name -> o2control.RepoInfo
+	89, // 47: o2control.ListIntegratedServicesReply.services:type_name -> o2control.ListIntegratedServicesReply.ServicesEntry
+	57, // 48: o2control.WorkflowTemplateInfo.VarSpecMapEntry.value:type_name -> o2control.VarSpecMessage
+	74, // 49: o2control.ListIntegratedServicesReply.ServicesEntry.value:type_name -> o2control.IntegratedServiceInfo
 	9,  // 50: o2control.Control.TrackStatus:input_type -> o2control.StatusRequest
 	14, // 51: o2control.Control.GetFrameworkInfo:input_type -> o2control.GetFrameworkInfoRequest
 	17, // 52: o2control.Control.Teardown:input_type -> o2control.TeardownRequest
@@ -5674,48 +5731,50 @@ var file_protos_o2control_proto_depIdxs = []int32{
 	28, // 57: o2control.Control.ControlEnvironment:input_type -> o2control.ControlEnvironmentRequest
 	30, // 58: o2control.Control.ModifyEnvironment:input_type -> o2control.ModifyEnvironmentRequest
 	33, // 59: o2control.Control.DestroyEnvironment:input_type -> o2control.DestroyEnvironmentRequest
-	71, // 60: o2control.Control.GetActiveDetectors:input_type -> o2control.Empty
-	42, // 61: o2control.Control.GetTasks:input_type -> o2control.GetTasksRequest
-	44, // 62: o2control.Control.GetTask:input_type -> o2control.GetTaskRequest
-	50, // 63: o2control.Control.CleanupTasks:input_type -> o2control.CleanupTasksRequest
-	52, // 64: o2control.Control.GetRoles:input_type -> o2control.GetRolesRequest
-	55, // 65: o2control.Control.GetWorkflowTemplates:input_type -> o2control.GetWorkflowTemplatesRequest
-	59, // 66: o2control.Control.ListRepos:input_type -> o2control.ListReposRequest
-	62, // 67: o2control.Control.AddRepo:input_type -> o2control.AddRepoRequest
-	64, // 68: o2control.Control.RemoveRepo:input_type -> o2control.RemoveRepoRequest
-	66, // 69: o2control.Control.RefreshRepos:input_type -> o2control.RefreshReposRequest
-	67, // 70: o2control.Control.SetDefaultRepo:input_type -> o2control.SetDefaultRepoRequest
-	68, // 71: o2control.Control.SetGlobalDefaultRevision:input_type -> o2control.SetGlobalDefaultRevisionRequest
-	69, // 72: o2control.Control.SetRepoDefaultRevision:input_type -> o2control.SetRepoDefaultRevisionRequest
-	13, // 73: o2control.Control.Subscribe:input_type -> o2control.SubscribeRequest
-	71, // 74: o2control.Control.GetIntegratedServices:input_type -> o2control.Empty
-	10, // 75: o2control.Control.TrackStatus:output_type -> o2control.StatusReply
-	16, // 76: o2control.Control.GetFrameworkInfo:output_type -> o2control.GetFrameworkInfoReply
-	18, // 77: o2control.Control.Teardown:output_type -> o2control.TeardownReply
-	20, // 78: o2control.Control.GetEnvironments:output_type -> o2control.GetEnvironmentsReply
-	25, // 79: o2control.Control.NewAutoEnvironment:output_type -> o2control.NewAutoEnvironmentReply
-	23, // 80: o2control.Control.NewEnvironment:output_type -> o2control.NewEnvironmentReply
-	27, // 81: o2control.Control.GetEnvironment:output_type -> o2control.GetEnvironmentReply
-	29, // 82: o2control.Control.ControlEnvironment:output_type -> o2control.ControlEnvironmentReply
-	32, // 83: o2control.Control.ModifyEnvironment:output_type -> o2control.ModifyEnvironmentReply
-	34, // 84: o2control.Control.DestroyEnvironment:output_type -> o2control.DestroyEnvironmentReply
-	35, // 85: o2control.Control.GetActiveDetectors:output_type -> o2control.GetActiveDetectorsReply
-	43, // 86: o2control.Control.GetTasks:output_type -> o2control.GetTasksReply
-	45, // 87: o2control.Control.GetTask:output_type -> o2control.GetTaskReply
-	51, // 88: o2control.Control.CleanupTasks:output_type -> o2control.CleanupTasksReply
-	54, // 89: o2control.Control.GetRoles:output_type -> o2control.GetRolesReply
-	58, // 90: o2control.Control.GetWorkflowTemplates:output_type -> o2control.GetWorkflowTemplatesReply
-	61, // 91: o2control.Control.ListRepos:output_type -> o2control.ListReposReply
-	63, // 92: o2control.Control.AddRepo:output_type -> o2control.AddRepoReply
-	65, // 93: o2control.Control.RemoveRepo:output_type -> o2control.RemoveRepoReply
-	71, // 94: o2control.Control.RefreshRepos:output_type -> o2control.Empty
-	71, // 95: o2control.Control.SetDefaultRepo:output_type -> o2control.Empty
-	71, // 96: o2control.Control.SetGlobalDefaultRevision:output_type -> o2control.Empty
-	70, // 97: o2control.Control.SetRepoDefaultRevision:output_type -> o2control.SetRepoDefaultRevisionReply
-	12, // 98: o2control.Control.Subscribe:output_type -> o2control.Event
-	72, // 99: o2control.Control.GetIntegratedServices:output_type -> o2control.ListIntegratedServicesReply
-	75, // [75:100] is the sub-list for method output_type
-	50, // [50:75] is the sub-list for method input_type
+	72, // 60: o2control.Control.GetActiveDetectors:input_type -> o2control.Empty
+	72, // 61: o2control.Control.GetAvailableDetectors:input_type -> o2control.Empty
+	43, // 62: o2control.Control.GetTasks:input_type -> o2control.GetTasksRequest
+	45, // 63: o2control.Control.GetTask:input_type -> o2control.GetTaskRequest
+	51, // 64: o2control.Control.CleanupTasks:input_type -> o2control.CleanupTasksRequest
+	53, // 65: o2control.Control.GetRoles:input_type -> o2control.GetRolesRequest
+	56, // 66: o2control.Control.GetWorkflowTemplates:input_type -> o2control.GetWorkflowTemplatesRequest
+	60, // 67: o2control.Control.ListRepos:input_type -> o2control.ListReposRequest
+	63, // 68: o2control.Control.AddRepo:input_type -> o2control.AddRepoRequest
+	65, // 69: o2control.Control.RemoveRepo:input_type -> o2control.RemoveRepoRequest
+	67, // 70: o2control.Control.RefreshRepos:input_type -> o2control.RefreshReposRequest
+	68, // 71: o2control.Control.SetDefaultRepo:input_type -> o2control.SetDefaultRepoRequest
+	69, // 72: o2control.Control.SetGlobalDefaultRevision:input_type -> o2control.SetGlobalDefaultRevisionRequest
+	70, // 73: o2control.Control.SetRepoDefaultRevision:input_type -> o2control.SetRepoDefaultRevisionRequest
+	13, // 74: o2control.Control.Subscribe:input_type -> o2control.SubscribeRequest
+	72, // 75: o2control.Control.GetIntegratedServices:input_type -> o2control.Empty
+	10, // 76: o2control.Control.TrackStatus:output_type -> o2control.StatusReply
+	16, // 77: o2control.Control.GetFrameworkInfo:output_type -> o2control.GetFrameworkInfoReply
+	18, // 78: o2control.Control.Teardown:output_type -> o2control.TeardownReply
+	20, // 79: o2control.Control.GetEnvironments:output_type -> o2control.GetEnvironmentsReply
+	25, // 80: o2control.Control.NewAutoEnvironment:output_type -> o2control.NewAutoEnvironmentReply
+	23, // 81: o2control.Control.NewEnvironment:output_type -> o2control.NewEnvironmentReply
+	27, // 82: o2control.Control.GetEnvironment:output_type -> o2control.GetEnvironmentReply
+	29, // 83: o2control.Control.ControlEnvironment:output_type -> o2control.ControlEnvironmentReply
+	32, // 84: o2control.Control.ModifyEnvironment:output_type -> o2control.ModifyEnvironmentReply
+	34, // 85: o2control.Control.DestroyEnvironment:output_type -> o2control.DestroyEnvironmentReply
+	35, // 86: o2control.Control.GetActiveDetectors:output_type -> o2control.GetActiveDetectorsReply
+	36, // 87: o2control.Control.GetAvailableDetectors:output_type -> o2control.GetAvailableDetectorsReply
+	44, // 88: o2control.Control.GetTasks:output_type -> o2control.GetTasksReply
+	46, // 89: o2control.Control.GetTask:output_type -> o2control.GetTaskReply
+	52, // 90: o2control.Control.CleanupTasks:output_type -> o2control.CleanupTasksReply
+	55, // 91: o2control.Control.GetRoles:output_type -> o2control.GetRolesReply
+	59, // 92: o2control.Control.GetWorkflowTemplates:output_type -> o2control.GetWorkflowTemplatesReply
+	62, // 93: o2control.Control.ListRepos:output_type -> o2control.ListReposReply
+	64, // 94: o2control.Control.AddRepo:output_type -> o2control.AddRepoReply
+	66, // 95: o2control.Control.RemoveRepo:output_type -> o2control.RemoveRepoReply
+	72, // 96: o2control.Control.RefreshRepos:output_type -> o2control.Empty
+	72, // 97: o2control.Control.SetDefaultRepo:output_type -> o2control.Empty
+	72, // 98: o2control.Control.SetGlobalDefaultRevision:output_type -> o2control.Empty
+	71, // 99: o2control.Control.SetRepoDefaultRevision:output_type -> o2control.SetRepoDefaultRevisionReply
+	12, // 100: o2control.Control.Subscribe:output_type -> o2control.Event
+	73, // 101: o2control.Control.GetIntegratedServices:output_type -> o2control.ListIntegratedServicesReply
+	76, // [76:102] is the sub-list for method output_type
+	50, // [50:76] is the sub-list for method input_type
 	50, // [50:50] is the sub-list for extension type_name
 	50, // [50:50] is the sub-list for extension extendee
 	0,  // [0:50] is the sub-list for field type_name
@@ -6100,7 +6159,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetEnvironmentPropertiesRequest); i {
+			switch v := v.(*GetAvailableDetectorsReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6112,7 +6171,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetEnvironmentPropertiesReply); i {
+			switch v := v.(*SetEnvironmentPropertiesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6124,7 +6183,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetEnvironmentPropertiesRequest); i {
+			switch v := v.(*SetEnvironmentPropertiesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6136,7 +6195,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetEnvironmentPropertiesReply); i {
+			switch v := v.(*GetEnvironmentPropertiesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6148,7 +6207,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ShortTaskInfo); i {
+			switch v := v.(*GetEnvironmentPropertiesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6160,7 +6219,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskDeploymentInfo); i {
+			switch v := v.(*ShortTaskInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6172,7 +6231,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTasksRequest); i {
+			switch v := v.(*TaskDeploymentInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6184,7 +6243,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTasksReply); i {
+			switch v := v.(*GetTasksRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6196,7 +6255,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTaskRequest); i {
+			switch v := v.(*GetTasksReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6208,7 +6267,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetTaskReply); i {
+			switch v := v.(*GetTaskRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6220,7 +6279,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskClassInfo); i {
+			switch v := v.(*GetTaskReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6232,7 +6291,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CommandInfo); i {
+			switch v := v.(*TaskClassInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6244,7 +6303,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChannelInfo); i {
+			switch v := v.(*CommandInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6256,7 +6315,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TaskInfo); i {
+			switch v := v.(*ChannelInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6268,7 +6327,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CleanupTasksRequest); i {
+			switch v := v.(*TaskInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6280,7 +6339,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CleanupTasksReply); i {
+			switch v := v.(*CleanupTasksRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6292,7 +6351,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRolesRequest); i {
+			switch v := v.(*CleanupTasksReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6304,7 +6363,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RoleInfo); i {
+			switch v := v.(*GetRolesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6316,7 +6375,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRolesReply); i {
+			switch v := v.(*RoleInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6328,7 +6387,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetWorkflowTemplatesRequest); i {
+			switch v := v.(*GetRolesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6340,7 +6399,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VarSpecMessage); i {
+			switch v := v.(*GetWorkflowTemplatesRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6352,7 +6411,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WorkflowTemplateInfo); i {
+			switch v := v.(*VarSpecMessage); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6364,7 +6423,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetWorkflowTemplatesReply); i {
+			switch v := v.(*WorkflowTemplateInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6376,7 +6435,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListReposRequest); i {
+			switch v := v.(*GetWorkflowTemplatesReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6388,7 +6447,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RepoInfo); i {
+			switch v := v.(*ListReposRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6400,7 +6459,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListReposReply); i {
+			switch v := v.(*RepoInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6412,7 +6471,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddRepoRequest); i {
+			switch v := v.(*ListReposReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6424,7 +6483,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddRepoReply); i {
+			switch v := v.(*AddRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6436,7 +6495,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemoveRepoRequest); i {
+			switch v := v.(*AddRepoReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6448,7 +6507,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemoveRepoReply); i {
+			switch v := v.(*RemoveRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6460,7 +6519,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RefreshReposRequest); i {
+			switch v := v.(*RemoveRepoReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6472,7 +6531,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetDefaultRepoRequest); i {
+			switch v := v.(*RefreshReposRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6484,7 +6543,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetGlobalDefaultRevisionRequest); i {
+			switch v := v.(*SetDefaultRepoRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6496,7 +6555,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRepoDefaultRevisionRequest); i {
+			switch v := v.(*SetGlobalDefaultRevisionRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6508,7 +6567,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRepoDefaultRevisionReply); i {
+			switch v := v.(*SetRepoDefaultRevisionRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6520,7 +6579,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Empty); i {
+			switch v := v.(*SetRepoDefaultRevisionReply); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6532,7 +6591,7 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListIntegratedServicesReply); i {
+			switch v := v.(*Empty); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6544,6 +6603,18 @@ func file_protos_o2control_proto_init() {
 			}
 		}
 		file_protos_o2control_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ListIntegratedServicesReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_protos_o2control_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*IntegratedServiceInfo); i {
 			case 0:
 				return &v.state
@@ -6570,7 +6641,7 @@ func file_protos_o2control_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_protos_o2control_proto_rawDesc,
 			NumEnums:      5,
-			NumMessages:   84,
+			NumMessages:   85,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/core/protos/o2control.proto b/core/protos/o2control.proto
index b575da22..03c280f8 100644
--- a/core/protos/o2control.proto
+++ b/core/protos/o2control.proto
@@ -73,6 +73,7 @@ service Control {
     rpc ModifyEnvironment (ModifyEnvironmentRequest) returns (ModifyEnvironmentReply) {}
     rpc DestroyEnvironment (DestroyEnvironmentRequest) returns (DestroyEnvironmentReply) {}
     rpc GetActiveDetectors (Empty) returns (GetActiveDetectorsReply) {}
+    rpc GetAvailableDetectors (Empty) returns (GetAvailableDetectorsReply) {}
 
 //    rpc SetEnvironmentProperties (SetEnvironmentPropertiesRequest) returns (SetEnvironmentPropertiesReply) {}
 //    rpc GetEnvironmentProperties (GetEnvironmentPropertiesRequest) returns (GetEnvironmentPropertiesReply) {}
@@ -280,6 +281,10 @@ message GetActiveDetectorsReply {
     repeated string detectors = 1;
 }
 
+message GetAvailableDetectorsReply {
+    repeated string detectors = 1;
+}
+
 ////////////////////////////////////////
 // Environment, GET/SET properties
 ////////////////////////////////////////
@@ -522,4 +527,4 @@ message IntegratedServiceInfo {
     string endpoint = 3;
     string connectionState = 4; // allowed values: READY, CONNECTING, TRANSIENT_FAILURE, IDLE, SHUTDOWN
     string data = 5; // always a JSON payload with a map<string, string> inside.
-}
\ No newline at end of file
+}
diff --git a/core/protos/o2control_grpc.pb.go b/core/protos/o2control_grpc.pb.go
index 884a14e1..faa355ec 100644
--- a/core/protos/o2control_grpc.pb.go
+++ b/core/protos/o2control_grpc.pb.go
@@ -1,7 +1,30 @@
+//
+// === This file is part of ALICE O² ===
+//
+// Copyright 2018 CERN and copyright holders of ALICE O².
+// Author: Teo Mrnjavac <teo.mrnjavac@cern.ch>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+// In applying this license CERN does not waive the privileges and
+// immunities granted to it by virtue of its status as an
+// Intergovernmental Organization or submit itself to any jurisdiction.
+
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
-// - protoc-gen-go-grpc v1.2.0
-// - protoc             v4.23.4
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             v4.25.1
 // source: protos/o2control.proto
 
 package pb
@@ -18,6 +41,35 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
+const (
+	Control_TrackStatus_FullMethodName              = "/o2control.Control/TrackStatus"
+	Control_GetFrameworkInfo_FullMethodName         = "/o2control.Control/GetFrameworkInfo"
+	Control_Teardown_FullMethodName                 = "/o2control.Control/Teardown"
+	Control_GetEnvironments_FullMethodName          = "/o2control.Control/GetEnvironments"
+	Control_NewAutoEnvironment_FullMethodName       = "/o2control.Control/NewAutoEnvironment"
+	Control_NewEnvironment_FullMethodName           = "/o2control.Control/NewEnvironment"
+	Control_GetEnvironment_FullMethodName           = "/o2control.Control/GetEnvironment"
+	Control_ControlEnvironment_FullMethodName       = "/o2control.Control/ControlEnvironment"
+	Control_ModifyEnvironment_FullMethodName        = "/o2control.Control/ModifyEnvironment"
+	Control_DestroyEnvironment_FullMethodName       = "/o2control.Control/DestroyEnvironment"
+	Control_GetActiveDetectors_FullMethodName       = "/o2control.Control/GetActiveDetectors"
+	Control_GetAvailableDetectors_FullMethodName    = "/o2control.Control/GetAvailableDetectors"
+	Control_GetTasks_FullMethodName                 = "/o2control.Control/GetTasks"
+	Control_GetTask_FullMethodName                  = "/o2control.Control/GetTask"
+	Control_CleanupTasks_FullMethodName             = "/o2control.Control/CleanupTasks"
+	Control_GetRoles_FullMethodName                 = "/o2control.Control/GetRoles"
+	Control_GetWorkflowTemplates_FullMethodName     = "/o2control.Control/GetWorkflowTemplates"
+	Control_ListRepos_FullMethodName                = "/o2control.Control/ListRepos"
+	Control_AddRepo_FullMethodName                  = "/o2control.Control/AddRepo"
+	Control_RemoveRepo_FullMethodName               = "/o2control.Control/RemoveRepo"
+	Control_RefreshRepos_FullMethodName             = "/o2control.Control/RefreshRepos"
+	Control_SetDefaultRepo_FullMethodName           = "/o2control.Control/SetDefaultRepo"
+	Control_SetGlobalDefaultRevision_FullMethodName = "/o2control.Control/SetGlobalDefaultRevision"
+	Control_SetRepoDefaultRevision_FullMethodName   = "/o2control.Control/SetRepoDefaultRevision"
+	Control_Subscribe_FullMethodName                = "/o2control.Control/Subscribe"
+	Control_GetIntegratedServices_FullMethodName    = "/o2control.Control/GetIntegratedServices"
+)
+
 // ControlClient is the client API for Control 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.
@@ -33,6 +85,7 @@ type ControlClient interface {
 	ModifyEnvironment(ctx context.Context, in *ModifyEnvironmentRequest, opts ...grpc.CallOption) (*ModifyEnvironmentReply, error)
 	DestroyEnvironment(ctx context.Context, in *DestroyEnvironmentRequest, opts ...grpc.CallOption) (*DestroyEnvironmentReply, error)
 	GetActiveDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetActiveDetectorsReply, error)
+	GetAvailableDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetAvailableDetectorsReply, error)
 	GetTasks(ctx context.Context, in *GetTasksRequest, opts ...grpc.CallOption) (*GetTasksReply, error)
 	GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskReply, error)
 	CleanupTasks(ctx context.Context, in *CleanupTasksRequest, opts ...grpc.CallOption) (*CleanupTasksReply, error)
@@ -58,7 +111,7 @@ func NewControlClient(cc grpc.ClientConnInterface) ControlClient {
 }
 
 func (c *controlClient) TrackStatus(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (Control_TrackStatusClient, error) {
-	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[0], "/o2control.Control/TrackStatus", opts...)
+	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[0], Control_TrackStatus_FullMethodName, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -91,7 +144,7 @@ func (x *controlTrackStatusClient) Recv() (*StatusReply, error) {
 
 func (c *controlClient) GetFrameworkInfo(ctx context.Context, in *GetFrameworkInfoRequest, opts ...grpc.CallOption) (*GetFrameworkInfoReply, error) {
 	out := new(GetFrameworkInfoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetFrameworkInfo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetFrameworkInfo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -100,7 +153,7 @@ func (c *controlClient) GetFrameworkInfo(ctx context.Context, in *GetFrameworkIn
 
 func (c *controlClient) Teardown(ctx context.Context, in *TeardownRequest, opts ...grpc.CallOption) (*TeardownReply, error) {
 	out := new(TeardownReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/Teardown", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_Teardown_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -109,7 +162,7 @@ func (c *controlClient) Teardown(ctx context.Context, in *TeardownRequest, opts
 
 func (c *controlClient) GetEnvironments(ctx context.Context, in *GetEnvironmentsRequest, opts ...grpc.CallOption) (*GetEnvironmentsReply, error) {
 	out := new(GetEnvironmentsReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetEnvironments", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetEnvironments_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -118,7 +171,7 @@ func (c *controlClient) GetEnvironments(ctx context.Context, in *GetEnvironments
 
 func (c *controlClient) NewAutoEnvironment(ctx context.Context, in *NewAutoEnvironmentRequest, opts ...grpc.CallOption) (*NewAutoEnvironmentReply, error) {
 	out := new(NewAutoEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/NewAutoEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_NewAutoEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -127,7 +180,7 @@ func (c *controlClient) NewAutoEnvironment(ctx context.Context, in *NewAutoEnvir
 
 func (c *controlClient) NewEnvironment(ctx context.Context, in *NewEnvironmentRequest, opts ...grpc.CallOption) (*NewEnvironmentReply, error) {
 	out := new(NewEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/NewEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_NewEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -136,7 +189,7 @@ func (c *controlClient) NewEnvironment(ctx context.Context, in *NewEnvironmentRe
 
 func (c *controlClient) GetEnvironment(ctx context.Context, in *GetEnvironmentRequest, opts ...grpc.CallOption) (*GetEnvironmentReply, error) {
 	out := new(GetEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -145,7 +198,7 @@ func (c *controlClient) GetEnvironment(ctx context.Context, in *GetEnvironmentRe
 
 func (c *controlClient) ControlEnvironment(ctx context.Context, in *ControlEnvironmentRequest, opts ...grpc.CallOption) (*ControlEnvironmentReply, error) {
 	out := new(ControlEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ControlEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ControlEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -154,7 +207,7 @@ func (c *controlClient) ControlEnvironment(ctx context.Context, in *ControlEnvir
 
 func (c *controlClient) ModifyEnvironment(ctx context.Context, in *ModifyEnvironmentRequest, opts ...grpc.CallOption) (*ModifyEnvironmentReply, error) {
 	out := new(ModifyEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ModifyEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ModifyEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -163,7 +216,7 @@ func (c *controlClient) ModifyEnvironment(ctx context.Context, in *ModifyEnviron
 
 func (c *controlClient) DestroyEnvironment(ctx context.Context, in *DestroyEnvironmentRequest, opts ...grpc.CallOption) (*DestroyEnvironmentReply, error) {
 	out := new(DestroyEnvironmentReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/DestroyEnvironment", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_DestroyEnvironment_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -172,7 +225,16 @@ func (c *controlClient) DestroyEnvironment(ctx context.Context, in *DestroyEnvir
 
 func (c *controlClient) GetActiveDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetActiveDetectorsReply, error) {
 	out := new(GetActiveDetectorsReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetActiveDetectors", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetActiveDetectors_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *controlClient) GetAvailableDetectors(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetAvailableDetectorsReply, error) {
+	out := new(GetAvailableDetectorsReply)
+	err := c.cc.Invoke(ctx, Control_GetAvailableDetectors_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -181,7 +243,7 @@ func (c *controlClient) GetActiveDetectors(ctx context.Context, in *Empty, opts
 
 func (c *controlClient) GetTasks(ctx context.Context, in *GetTasksRequest, opts ...grpc.CallOption) (*GetTasksReply, error) {
 	out := new(GetTasksReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetTasks", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetTasks_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -190,7 +252,7 @@ func (c *controlClient) GetTasks(ctx context.Context, in *GetTasksRequest, opts
 
 func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskReply, error) {
 	out := new(GetTaskReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetTask", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetTask_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -199,7 +261,7 @@ func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ..
 
 func (c *controlClient) CleanupTasks(ctx context.Context, in *CleanupTasksRequest, opts ...grpc.CallOption) (*CleanupTasksReply, error) {
 	out := new(CleanupTasksReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/CleanupTasks", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_CleanupTasks_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -208,7 +270,7 @@ func (c *controlClient) CleanupTasks(ctx context.Context, in *CleanupTasksReques
 
 func (c *controlClient) GetRoles(ctx context.Context, in *GetRolesRequest, opts ...grpc.CallOption) (*GetRolesReply, error) {
 	out := new(GetRolesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetRoles", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetRoles_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -217,7 +279,7 @@ func (c *controlClient) GetRoles(ctx context.Context, in *GetRolesRequest, opts
 
 func (c *controlClient) GetWorkflowTemplates(ctx context.Context, in *GetWorkflowTemplatesRequest, opts ...grpc.CallOption) (*GetWorkflowTemplatesReply, error) {
 	out := new(GetWorkflowTemplatesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetWorkflowTemplates", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetWorkflowTemplates_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -226,7 +288,7 @@ func (c *controlClient) GetWorkflowTemplates(ctx context.Context, in *GetWorkflo
 
 func (c *controlClient) ListRepos(ctx context.Context, in *ListReposRequest, opts ...grpc.CallOption) (*ListReposReply, error) {
 	out := new(ListReposReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/ListRepos", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_ListRepos_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -235,7 +297,7 @@ func (c *controlClient) ListRepos(ctx context.Context, in *ListReposRequest, opt
 
 func (c *controlClient) AddRepo(ctx context.Context, in *AddRepoRequest, opts ...grpc.CallOption) (*AddRepoReply, error) {
 	out := new(AddRepoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/AddRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_AddRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -244,7 +306,7 @@ func (c *controlClient) AddRepo(ctx context.Context, in *AddRepoRequest, opts ..
 
 func (c *controlClient) RemoveRepo(ctx context.Context, in *RemoveRepoRequest, opts ...grpc.CallOption) (*RemoveRepoReply, error) {
 	out := new(RemoveRepoReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/RemoveRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_RemoveRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -253,7 +315,7 @@ func (c *controlClient) RemoveRepo(ctx context.Context, in *RemoveRepoRequest, o
 
 func (c *controlClient) RefreshRepos(ctx context.Context, in *RefreshReposRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/RefreshRepos", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_RefreshRepos_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -262,7 +324,7 @@ func (c *controlClient) RefreshRepos(ctx context.Context, in *RefreshReposReques
 
 func (c *controlClient) SetDefaultRepo(ctx context.Context, in *SetDefaultRepoRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetDefaultRepo", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetDefaultRepo_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -271,7 +333,7 @@ func (c *controlClient) SetDefaultRepo(ctx context.Context, in *SetDefaultRepoRe
 
 func (c *controlClient) SetGlobalDefaultRevision(ctx context.Context, in *SetGlobalDefaultRevisionRequest, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetGlobalDefaultRevision", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetGlobalDefaultRevision_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -280,7 +342,7 @@ func (c *controlClient) SetGlobalDefaultRevision(ctx context.Context, in *SetGlo
 
 func (c *controlClient) SetRepoDefaultRevision(ctx context.Context, in *SetRepoDefaultRevisionRequest, opts ...grpc.CallOption) (*SetRepoDefaultRevisionReply, error) {
 	out := new(SetRepoDefaultRevisionReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/SetRepoDefaultRevision", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_SetRepoDefaultRevision_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -288,7 +350,7 @@ func (c *controlClient) SetRepoDefaultRevision(ctx context.Context, in *SetRepoD
 }
 
 func (c *controlClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (Control_SubscribeClient, error) {
-	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[1], "/o2control.Control/Subscribe", opts...)
+	stream, err := c.cc.NewStream(ctx, &Control_ServiceDesc.Streams[1], Control_Subscribe_FullMethodName, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -321,7 +383,7 @@ func (x *controlSubscribeClient) Recv() (*Event, error) {
 
 func (c *controlClient) GetIntegratedServices(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListIntegratedServicesReply, error) {
 	out := new(ListIntegratedServicesReply)
-	err := c.cc.Invoke(ctx, "/o2control.Control/GetIntegratedServices", in, out, opts...)
+	err := c.cc.Invoke(ctx, Control_GetIntegratedServices_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -343,6 +405,7 @@ type ControlServer interface {
 	ModifyEnvironment(context.Context, *ModifyEnvironmentRequest) (*ModifyEnvironmentReply, error)
 	DestroyEnvironment(context.Context, *DestroyEnvironmentRequest) (*DestroyEnvironmentReply, error)
 	GetActiveDetectors(context.Context, *Empty) (*GetActiveDetectorsReply, error)
+	GetAvailableDetectors(context.Context, *Empty) (*GetAvailableDetectorsReply, error)
 	GetTasks(context.Context, *GetTasksRequest) (*GetTasksReply, error)
 	GetTask(context.Context, *GetTaskRequest) (*GetTaskReply, error)
 	CleanupTasks(context.Context, *CleanupTasksRequest) (*CleanupTasksReply, error)
@@ -396,6 +459,9 @@ func (UnimplementedControlServer) DestroyEnvironment(context.Context, *DestroyEn
 func (UnimplementedControlServer) GetActiveDetectors(context.Context, *Empty) (*GetActiveDetectorsReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetActiveDetectors not implemented")
 }
+func (UnimplementedControlServer) GetAvailableDetectors(context.Context, *Empty) (*GetAvailableDetectorsReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAvailableDetectors not implemented")
+}
 func (UnimplementedControlServer) GetTasks(context.Context, *GetTasksRequest) (*GetTasksReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetTasks not implemented")
 }
@@ -481,7 +547,7 @@ func _Control_GetFrameworkInfo_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetFrameworkInfo",
+		FullMethod: Control_GetFrameworkInfo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetFrameworkInfo(ctx, req.(*GetFrameworkInfoRequest))
@@ -499,7 +565,7 @@ func _Control_Teardown_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/Teardown",
+		FullMethod: Control_Teardown_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).Teardown(ctx, req.(*TeardownRequest))
@@ -517,7 +583,7 @@ func _Control_GetEnvironments_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetEnvironments",
+		FullMethod: Control_GetEnvironments_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetEnvironments(ctx, req.(*GetEnvironmentsRequest))
@@ -535,7 +601,7 @@ func _Control_NewAutoEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/NewAutoEnvironment",
+		FullMethod: Control_NewAutoEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).NewAutoEnvironment(ctx, req.(*NewAutoEnvironmentRequest))
@@ -553,7 +619,7 @@ func _Control_NewEnvironment_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/NewEnvironment",
+		FullMethod: Control_NewEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).NewEnvironment(ctx, req.(*NewEnvironmentRequest))
@@ -571,7 +637,7 @@ func _Control_GetEnvironment_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetEnvironment",
+		FullMethod: Control_GetEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetEnvironment(ctx, req.(*GetEnvironmentRequest))
@@ -589,7 +655,7 @@ func _Control_ControlEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ControlEnvironment",
+		FullMethod: Control_ControlEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ControlEnvironment(ctx, req.(*ControlEnvironmentRequest))
@@ -607,7 +673,7 @@ func _Control_ModifyEnvironment_Handler(srv interface{}, ctx context.Context, de
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ModifyEnvironment",
+		FullMethod: Control_ModifyEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ModifyEnvironment(ctx, req.(*ModifyEnvironmentRequest))
@@ -625,7 +691,7 @@ func _Control_DestroyEnvironment_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/DestroyEnvironment",
+		FullMethod: Control_DestroyEnvironment_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).DestroyEnvironment(ctx, req.(*DestroyEnvironmentRequest))
@@ -643,7 +709,7 @@ func _Control_GetActiveDetectors_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetActiveDetectors",
+		FullMethod: Control_GetActiveDetectors_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetActiveDetectors(ctx, req.(*Empty))
@@ -651,6 +717,24 @@ func _Control_GetActiveDetectors_Handler(srv interface{}, ctx context.Context, d
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Control_GetAvailableDetectors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ControlServer).GetAvailableDetectors(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Control_GetAvailableDetectors_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ControlServer).GetAvailableDetectors(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Control_GetTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(GetTasksRequest)
 	if err := dec(in); err != nil {
@@ -661,7 +745,7 @@ func _Control_GetTasks_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetTasks",
+		FullMethod: Control_GetTasks_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetTasks(ctx, req.(*GetTasksRequest))
@@ -679,7 +763,7 @@ func _Control_GetTask_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetTask",
+		FullMethod: Control_GetTask_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetTask(ctx, req.(*GetTaskRequest))
@@ -697,7 +781,7 @@ func _Control_CleanupTasks_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/CleanupTasks",
+		FullMethod: Control_CleanupTasks_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).CleanupTasks(ctx, req.(*CleanupTasksRequest))
@@ -715,7 +799,7 @@ func _Control_GetRoles_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetRoles",
+		FullMethod: Control_GetRoles_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetRoles(ctx, req.(*GetRolesRequest))
@@ -733,7 +817,7 @@ func _Control_GetWorkflowTemplates_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetWorkflowTemplates",
+		FullMethod: Control_GetWorkflowTemplates_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetWorkflowTemplates(ctx, req.(*GetWorkflowTemplatesRequest))
@@ -751,7 +835,7 @@ func _Control_ListRepos_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/ListRepos",
+		FullMethod: Control_ListRepos_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).ListRepos(ctx, req.(*ListReposRequest))
@@ -769,7 +853,7 @@ func _Control_AddRepo_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/AddRepo",
+		FullMethod: Control_AddRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).AddRepo(ctx, req.(*AddRepoRequest))
@@ -787,7 +871,7 @@ func _Control_RemoveRepo_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/RemoveRepo",
+		FullMethod: Control_RemoveRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).RemoveRepo(ctx, req.(*RemoveRepoRequest))
@@ -805,7 +889,7 @@ func _Control_RefreshRepos_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/RefreshRepos",
+		FullMethod: Control_RefreshRepos_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).RefreshRepos(ctx, req.(*RefreshReposRequest))
@@ -823,7 +907,7 @@ func _Control_SetDefaultRepo_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetDefaultRepo",
+		FullMethod: Control_SetDefaultRepo_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetDefaultRepo(ctx, req.(*SetDefaultRepoRequest))
@@ -841,7 +925,7 @@ func _Control_SetGlobalDefaultRevision_Handler(srv interface{}, ctx context.Cont
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetGlobalDefaultRevision",
+		FullMethod: Control_SetGlobalDefaultRevision_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetGlobalDefaultRevision(ctx, req.(*SetGlobalDefaultRevisionRequest))
@@ -859,7 +943,7 @@ func _Control_SetRepoDefaultRevision_Handler(srv interface{}, ctx context.Contex
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/SetRepoDefaultRevision",
+		FullMethod: Control_SetRepoDefaultRevision_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).SetRepoDefaultRevision(ctx, req.(*SetRepoDefaultRevisionRequest))
@@ -898,7 +982,7 @@ func _Control_GetIntegratedServices_Handler(srv interface{}, ctx context.Context
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/o2control.Control/GetIntegratedServices",
+		FullMethod: Control_GetIntegratedServices_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ControlServer).GetIntegratedServices(ctx, req.(*Empty))
@@ -953,6 +1037,10 @@ var Control_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetActiveDetectors",
 			Handler:    _Control_GetActiveDetectors_Handler,
 		},
+		{
+			MethodName: "GetAvailableDetectors",
+			Handler:    _Control_GetAvailableDetectors_Handler,
+		},
 		{
 			MethodName: "GetTasks",
 			Handler:    _Control_GetTasks_Handler,
diff --git a/core/server.go b/core/server.go
index c69eaad9..fbc2e617 100644
--- a/core/server.go
+++ b/core/server.go
@@ -173,21 +173,12 @@ func (m *RpcServer) GetFrameworkInfo(context.Context, *pb.GetFrameworkInfoReques
 	min, _ := strconv.ParseInt(product.VERSION_MINOR, 10, 32)
 	pat, _ := strconv.ParseInt(product.VERSION_PATCH, 10, 32)
 
-	cs := the.ConfSvc()
-	allDetectors, err := cs.ListDetectors(true)
+	availableDetectors, activeDetectors, allDetectors, err := m.listDetectors()
+
 	if err != nil {
 		allDetectors = []string{"NIL"}
-	}
-	activeDetectorsMap := m.state.environments.GetActiveDetectors()
-	availableDetectors := make([]string, 0)
-	for _, det := range allDetectors {
-		detId, err := system.IDString(det)
-		if err != nil {
-			continue
-		}
-		if _, contains := activeDetectorsMap[detId]; !contains {
-			availableDetectors = append(availableDetectors, det)
-		}
+		availableDetectors = []string{}
+		activeDetectors = []string{}
 	}
 
 	r := &pb.GetFrameworkInfoReply{
@@ -207,7 +198,7 @@ func (m *RpcServer) GetFrameworkInfo(context.Context, *pb.GetFrameworkInfoReques
 		},
 		ConfigurationEndpoint: viper.GetString("configServiceUri"),
 		DetectorsInInstance:   allDetectors,
-		ActiveDetectors:       activeDetectorsMap.StringList(),
+		ActiveDetectors:       activeDetectors,
 		AvailableDetectors:    availableDetectors,
 	}
 	return r, nil
@@ -691,6 +682,43 @@ func (m *RpcServer) GetActiveDetectors(_ context.Context, _ *pb.Empty) (*pb.GetA
 	return r, nil
 }
 
+// return string lists of available, active and all detectors
+func (m *RpcServer) listDetectors() ([]string, []string, []string, error) {
+	cs := the.ConfSvc()
+	allDetectors, err := cs.ListDetectors(true)
+	if err != nil {
+		return nil, nil, nil, err
+	}
+	activeDetectorsMap := m.state.environments.GetActiveDetectors()
+	availableDetectors := make([]string, 0)
+	for _, det := range allDetectors {
+		detId, err := system.IDString(det)
+		if err != nil {
+			continue
+		}
+		if _, contains := activeDetectorsMap[detId]; !contains {
+			availableDetectors = append(availableDetectors, det)
+		}
+	}
+
+	return availableDetectors, activeDetectorsMap.StringList(), allDetectors, nil
+}
+
+func (m *RpcServer) GetAvailableDetectors(_ context.Context, _ *pb.Empty) (*pb.GetAvailableDetectorsReply, error) {
+	defer utils.TimeTrackFunction(time.Now(), log.WithPrefix("rpcserver"))
+	m.logMethod()
+	defer m.logMethodHandled()
+
+	if availableDetectors, _, _, err := m.listDetectors(); err != nil {
+		return nil, err
+	} else {
+		r := &pb.GetAvailableDetectorsReply{
+			Detectors: availableDetectors,
+		}
+		return r, nil
+	}
+}
+
 func (m *RpcServer) GetTasks(context.Context, *pb.GetTasksRequest) (*pb.GetTasksReply, error) {
 	defer utils.TimeTrackFunction(time.Now(), log.WithPrefix("rpcserver"))
 	m.logMethod()