diff --git a/api/go/gosdn/networkelement/networkelement.pb.go b/api/go/gosdn/networkelement/networkelement.pb.go
index 1a75e9b8e15b103bb3585d604a167db1af64d244..597a8b8a38806079eae9193b44d48f5da754c933 100644
--- a/api/go/gosdn/networkelement/networkelement.pb.go
+++ b/api/go/gosdn/networkelement/networkelement.pb.go
@@ -339,20 +339,19 @@ func (StreamMode) EnumDescriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{5}
 }
 
-type ManagedNetworkElement struct {
+type AddNetworkElementConfiguration struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id              string                          `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	Name            string                          `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-	MneNotification []*gnmi.Notification            `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"`
-	Sbi             *southbound.SouthboundInterface `protobuf:"bytes,4,opt,name=sbi,proto3" json:"sbi,omitempty"`
-	Metadata        *conflict.Metadata              `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	Address            string                          `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	Sbi                *southbound.SouthboundInterface `protobuf:"bytes,2,opt,name=sbi,proto3" json:"sbi,omitempty"`
+	NetworkElementName string                          `protobuf:"bytes,3,opt,name=network_element_name,json=networkElementName,proto3" json:"network_element_name,omitempty"`
+	TransportOption    *transport.TransportOption      `protobuf:"bytes,4,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"`
 }
 
-func (x *ManagedNetworkElement) Reset() {
-	*x = ManagedNetworkElement{}
+func (x *AddNetworkElementConfiguration) Reset() {
+	*x = AddNetworkElementConfiguration{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -360,13 +359,13 @@ func (x *ManagedNetworkElement) Reset() {
 	}
 }
 
-func (x *ManagedNetworkElement) String() string {
+func (x *AddNetworkElementConfiguration) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*ManagedNetworkElement) ProtoMessage() {}
+func (*AddNetworkElementConfiguration) ProtoMessage() {}
 
-func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message {
+func (x *AddNetworkElementConfiguration) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -378,58 +377,51 @@ func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ManagedNetworkElement.ProtoReflect.Descriptor instead.
-func (*ManagedNetworkElement) Descriptor() ([]byte, []int) {
+// Deprecated: Use AddNetworkElementConfiguration.ProtoReflect.Descriptor instead.
+func (*AddNetworkElementConfiguration) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *ManagedNetworkElement) GetId() string {
-	if x != nil {
-		return x.Id
-	}
-	return ""
-}
-
-func (x *ManagedNetworkElement) GetName() string {
+func (x *AddNetworkElementConfiguration) GetAddress() string {
 	if x != nil {
-		return x.Name
+		return x.Address
 	}
 	return ""
 }
 
-func (x *ManagedNetworkElement) GetMneNotification() []*gnmi.Notification {
+func (x *AddNetworkElementConfiguration) GetSbi() *southbound.SouthboundInterface {
 	if x != nil {
-		return x.MneNotification
+		return x.Sbi
 	}
 	return nil
 }
 
-func (x *ManagedNetworkElement) GetSbi() *southbound.SouthboundInterface {
+func (x *AddNetworkElementConfiguration) GetNetworkElementName() string {
 	if x != nil {
-		return x.Sbi
+		return x.NetworkElementName
 	}
-	return nil
+	return ""
 }
 
-func (x *ManagedNetworkElement) GetMetadata() *conflict.Metadata {
+func (x *AddNetworkElementConfiguration) GetTransportOption() *transport.TransportOption {
 	if x != nil {
-		return x.Metadata
+		return x.TransportOption
 	}
 	return nil
 }
 
-type FlattenedManagedNetworkElement struct {
+type AddNetworkElementRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id   string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-	Sbi  string `protobuf:"bytes,3,opt,name=sbi,proto3" json:"sbi,omitempty"`
+	Timestamp      int64                           `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	NetworkElement *AddNetworkElementConfiguration `protobuf:"bytes,2,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"`
+	Pid            string                          `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"`
 }
 
-func (x *FlattenedManagedNetworkElement) Reset() {
-	*x = FlattenedManagedNetworkElement{}
+func (x *AddNetworkElementRequest) Reset() {
+	*x = AddNetworkElementRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -437,13 +429,13 @@ func (x *FlattenedManagedNetworkElement) Reset() {
 	}
 }
 
-func (x *FlattenedManagedNetworkElement) String() string {
+func (x *AddNetworkElementRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*FlattenedManagedNetworkElement) ProtoMessage() {}
+func (*AddNetworkElementRequest) ProtoMessage() {}
 
-func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message {
+func (x *AddNetworkElementRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -455,45 +447,44 @@ func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use FlattenedManagedNetworkElement.ProtoReflect.Descriptor instead.
-func (*FlattenedManagedNetworkElement) Descriptor() ([]byte, []int) {
+// Deprecated: Use AddNetworkElementRequest.ProtoReflect.Descriptor instead.
+func (*AddNetworkElementRequest) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{1}
 }
 
-func (x *FlattenedManagedNetworkElement) GetId() string {
+func (x *AddNetworkElementRequest) GetTimestamp() int64 {
 	if x != nil {
-		return x.Id
+		return x.Timestamp
 	}
-	return ""
+	return 0
 }
 
-func (x *FlattenedManagedNetworkElement) GetName() string {
+func (x *AddNetworkElementRequest) GetNetworkElement() *AddNetworkElementConfiguration {
 	if x != nil {
-		return x.Name
+		return x.NetworkElement
 	}
-	return ""
+	return nil
 }
 
-func (x *FlattenedManagedNetworkElement) GetSbi() string {
+func (x *AddNetworkElementRequest) GetPid() string {
 	if x != nil {
-		return x.Sbi
+		return x.Pid
 	}
 	return ""
 }
 
-// //TODO(PND): this is maybe only temporary, need to figure out how to include without cycle or duplication
-type PrincipalNetworkDomain struct {
+type AddNetworkElementResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	Name        string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	Timestamp        int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	Status           Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
+	NetworkElementId string `protobuf:"bytes,3,opt,name=network_element_id,json=networkElementId,proto3" json:"network_element_id,omitempty"`
 }
 
-func (x *PrincipalNetworkDomain) Reset() {
-	*x = PrincipalNetworkDomain{}
+func (x *AddNetworkElementResponse) Reset() {
+	*x = AddNetworkElementResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -501,13 +492,13 @@ func (x *PrincipalNetworkDomain) Reset() {
 	}
 }
 
-func (x *PrincipalNetworkDomain) String() string {
+func (x *AddNetworkElementResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*PrincipalNetworkDomain) ProtoMessage() {}
+func (*AddNetworkElementResponse) ProtoMessage() {}
 
-func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message {
+func (x *AddNetworkElementResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -519,43 +510,43 @@ func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use PrincipalNetworkDomain.ProtoReflect.Descriptor instead.
-func (*PrincipalNetworkDomain) Descriptor() ([]byte, []int) {
+// Deprecated: Use AddNetworkElementResponse.ProtoReflect.Descriptor instead.
+func (*AddNetworkElementResponse) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{2}
 }
 
-func (x *PrincipalNetworkDomain) GetId() string {
+func (x *AddNetworkElementResponse) GetTimestamp() int64 {
 	if x != nil {
-		return x.Id
+		return x.Timestamp
 	}
-	return ""
+	return 0
 }
 
-func (x *PrincipalNetworkDomain) GetName() string {
+func (x *AddNetworkElementResponse) GetStatus() Status {
 	if x != nil {
-		return x.Name
+		return x.Status
 	}
-	return ""
+	return Status_STATUS_UNSPECIFIED
 }
 
-func (x *PrincipalNetworkDomain) GetDescription() string {
+func (x *AddNetworkElementResponse) GetNetworkElementId() string {
 	if x != nil {
-		return x.Description
+		return x.NetworkElementId
 	}
 	return ""
 }
 
-type GetMneListRequest struct {
+type GetNetworkElementRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Pid       string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"`
+	Timestamp        int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	NetworkElementId string `protobuf:"bytes,2,opt,name=network_element_id,json=networkElementId,proto3" json:"network_element_id,omitempty"`
 }
 
-func (x *GetMneListRequest) Reset() {
-	*x = GetMneListRequest{}
+func (x *GetNetworkElementRequest) Reset() {
+	*x = GetNetworkElementRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -563,13 +554,13 @@ func (x *GetMneListRequest) Reset() {
 	}
 }
 
-func (x *GetMneListRequest) String() string {
+func (x *GetNetworkElementRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetMneListRequest) ProtoMessage() {}
+func (*GetNetworkElementRequest) ProtoMessage() {}
 
-func (x *GetMneListRequest) ProtoReflect() protoreflect.Message {
+func (x *GetNetworkElementRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -581,39 +572,37 @@ func (x *GetMneListRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMneListRequest.ProtoReflect.Descriptor instead.
-func (*GetMneListRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetNetworkElementRequest.ProtoReflect.Descriptor instead.
+func (*GetNetworkElementRequest) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{3}
 }
 
-func (x *GetMneListRequest) GetTimestamp() int64 {
+func (x *GetNetworkElementRequest) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *GetMneListRequest) GetPid() string {
+func (x *GetNetworkElementRequest) GetNetworkElementId() string {
 	if x != nil {
-		return x.Pid
+		return x.NetworkElementId
 	}
 	return ""
 }
 
-type GetMneListResponse struct {
+type GetNetworkElementResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
-	// is also sufficient.
-	Pnd *PrincipalNetworkDomain  `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
-	Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"`
+	Timestamp      int64           `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	Status         Status          `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
+	NetworkElement *NetworkElement `protobuf:"bytes,3,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"`
 }
 
-func (x *GetMneListResponse) Reset() {
-	*x = GetMneListResponse{}
+func (x *GetNetworkElementResponse) Reset() {
+	*x = GetNetworkElementResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -621,13 +610,13 @@ func (x *GetMneListResponse) Reset() {
 	}
 }
 
-func (x *GetMneListResponse) String() string {
+func (x *GetNetworkElementResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetMneListResponse) ProtoMessage() {}
+func (*GetNetworkElementResponse) ProtoMessage() {}
 
-func (x *GetMneListResponse) ProtoReflect() protoreflect.Message {
+func (x *GetNetworkElementResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -639,47 +628,42 @@ func (x *GetMneListResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMneListResponse.ProtoReflect.Descriptor instead.
-func (*GetMneListResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetNetworkElementResponse.ProtoReflect.Descriptor instead.
+func (*GetNetworkElementResponse) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{4}
 }
 
-func (x *GetMneListResponse) GetTimestamp() int64 {
+func (x *GetNetworkElementResponse) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *GetMneListResponse) GetPnd() *PrincipalNetworkDomain {
+func (x *GetNetworkElementResponse) GetStatus() Status {
 	if x != nil {
-		return x.Pnd
+		return x.Status
 	}
-	return nil
+	return Status_STATUS_UNSPECIFIED
 }
 
-func (x *GetMneListResponse) GetMne() []*ManagedNetworkElement {
+func (x *GetNetworkElementResponse) GetNetworkElement() *NetworkElement {
 	if x != nil {
-		return x.Mne
+		return x.NetworkElement
 	}
 	return nil
 }
 
-//TODO(PND): add request here
-type GetFlattenedMneListResponse struct {
+type GetAllNetworkElementRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
-	// is also sufficient.
-	Pnd *PrincipalNetworkDomain           `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
-	Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"`
+	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
 }
 
-func (x *GetFlattenedMneListResponse) Reset() {
-	*x = GetFlattenedMneListResponse{}
+func (x *GetAllNetworkElementRequest) Reset() {
+	*x = GetAllNetworkElementRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -687,13 +671,13 @@ func (x *GetFlattenedMneListResponse) Reset() {
 	}
 }
 
-func (x *GetFlattenedMneListResponse) String() string {
+func (x *GetAllNetworkElementRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetFlattenedMneListResponse) ProtoMessage() {}
+func (*GetAllNetworkElementRequest) ProtoMessage() {}
 
-func (x *GetFlattenedMneListResponse) ProtoReflect() protoreflect.Message {
+func (x *GetAllNetworkElementRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -705,44 +689,30 @@ func (x *GetFlattenedMneListResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetFlattenedMneListResponse.ProtoReflect.Descriptor instead.
-func (*GetFlattenedMneListResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetAllNetworkElementRequest.ProtoReflect.Descriptor instead.
+func (*GetAllNetworkElementRequest) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{5}
 }
 
-func (x *GetFlattenedMneListResponse) GetTimestamp() int64 {
+func (x *GetAllNetworkElementRequest) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *GetFlattenedMneListResponse) GetPnd() *PrincipalNetworkDomain {
-	if x != nil {
-		return x.Pnd
-	}
-	return nil
-}
-
-func (x *GetFlattenedMneListResponse) GetMne() []*FlattenedManagedNetworkElement {
-	if x != nil {
-		return x.Mne
-	}
-	return nil
-}
-
-type GetMneRequest struct {
+type GetAllNetworkElementResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Mneid     string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"`
-	Pid       string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"`
+	Timestamp      int64             `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	Status         Status            `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
+	NetworkElement []*NetworkElement `protobuf:"bytes,3,rep,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"`
 }
 
-func (x *GetMneRequest) Reset() {
-	*x = GetMneRequest{}
+func (x *GetAllNetworkElementResponse) Reset() {
+	*x = GetAllNetworkElementResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -750,13 +720,13 @@ func (x *GetMneRequest) Reset() {
 	}
 }
 
-func (x *GetMneRequest) String() string {
+func (x *GetAllNetworkElementResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetMneRequest) ProtoMessage() {}
+func (*GetAllNetworkElementResponse) ProtoMessage() {}
 
-func (x *GetMneRequest) ProtoReflect() protoreflect.Message {
+func (x *GetAllNetworkElementResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -768,46 +738,43 @@ func (x *GetMneRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMneRequest.ProtoReflect.Descriptor instead.
-func (*GetMneRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetAllNetworkElementResponse.ProtoReflect.Descriptor instead.
+func (*GetAllNetworkElementResponse) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{6}
 }
 
-func (x *GetMneRequest) GetTimestamp() int64 {
+func (x *GetAllNetworkElementResponse) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *GetMneRequest) GetMneid() string {
+func (x *GetAllNetworkElementResponse) GetStatus() Status {
 	if x != nil {
-		return x.Mneid
+		return x.Status
 	}
-	return ""
+	return Status_STATUS_UNSPECIFIED
 }
 
-func (x *GetMneRequest) GetPid() string {
+func (x *GetAllNetworkElementResponse) GetNetworkElement() []*NetworkElement {
 	if x != nil {
-		return x.Pid
+		return x.NetworkElement
 	}
-	return ""
+	return nil
 }
 
-type GetMneResponse struct {
+type UpdateNetworkElementRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
-	// is also sufficient.
-	Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
-	Mne *ManagedNetworkElement  `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"`
+	Timestamp      int64           `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	NetworkElement *NetworkElement `protobuf:"bytes,2,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"`
 }
 
-func (x *GetMneResponse) Reset() {
-	*x = GetMneResponse{}
+func (x *UpdateNetworkElementRequest) Reset() {
+	*x = UpdateNetworkElementRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -815,13 +782,13 @@ func (x *GetMneResponse) Reset() {
 	}
 }
 
-func (x *GetMneResponse) String() string {
+func (x *UpdateNetworkElementRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GetMneResponse) ProtoMessage() {}
+func (*UpdateNetworkElementRequest) ProtoMessage() {}
 
-func (x *GetMneResponse) ProtoReflect() protoreflect.Message {
+func (x *UpdateNetworkElementRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -833,45 +800,36 @@ func (x *GetMneResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GetMneResponse.ProtoReflect.Descriptor instead.
-func (*GetMneResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use UpdateNetworkElementRequest.ProtoReflect.Descriptor instead.
+func (*UpdateNetworkElementRequest) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{7}
 }
 
-func (x *GetMneResponse) GetTimestamp() int64 {
+func (x *UpdateNetworkElementRequest) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *GetMneResponse) GetPnd() *PrincipalNetworkDomain {
-	if x != nil {
-		return x.Pnd
-	}
-	return nil
-}
-
-func (x *GetMneResponse) GetMne() *ManagedNetworkElement {
+func (x *UpdateNetworkElementRequest) GetNetworkElement() *NetworkElement {
 	if x != nil {
-		return x.Mne
+		return x.NetworkElement
 	}
 	return nil
 }
 
-type SetMne struct {
+type UpdateNetworkElementResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Address         string                          `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
-	Sbi             *southbound.SouthboundInterface `protobuf:"bytes,2,opt,name=sbi,proto3" json:"sbi,omitempty"`
-	MneName         string                          `protobuf:"bytes,3,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"`
-	TransportOption *transport.TransportOption      `protobuf:"bytes,4,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"`
+	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	Status    Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
 }
 
-func (x *SetMne) Reset() {
-	*x = SetMne{}
+func (x *UpdateNetworkElementResponse) Reset() {
+	*x = UpdateNetworkElementResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -879,13 +837,13 @@ func (x *SetMne) Reset() {
 	}
 }
 
-func (x *SetMne) String() string {
+func (x *UpdateNetworkElementResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*SetMne) ProtoMessage() {}
+func (*UpdateNetworkElementResponse) ProtoMessage() {}
 
-func (x *SetMne) ProtoReflect() protoreflect.Message {
+func (x *UpdateNetworkElementResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -897,51 +855,36 @@ func (x *SetMne) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use SetMne.ProtoReflect.Descriptor instead.
-func (*SetMne) Descriptor() ([]byte, []int) {
+// Deprecated: Use UpdateNetworkElementResponse.ProtoReflect.Descriptor instead.
+func (*UpdateNetworkElementResponse) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{8}
 }
 
-func (x *SetMne) GetAddress() string {
-	if x != nil {
-		return x.Address
-	}
-	return ""
-}
-
-func (x *SetMne) GetSbi() *southbound.SouthboundInterface {
-	if x != nil {
-		return x.Sbi
-	}
-	return nil
-}
-
-func (x *SetMne) GetMneName() string {
+func (x *UpdateNetworkElementResponse) GetTimestamp() int64 {
 	if x != nil {
-		return x.MneName
+		return x.Timestamp
 	}
-	return ""
+	return 0
 }
 
-func (x *SetMne) GetTransportOption() *transport.TransportOption {
+func (x *UpdateNetworkElementResponse) GetStatus() Status {
 	if x != nil {
-		return x.TransportOption
+		return x.Status
 	}
-	return nil
+	return Status_STATUS_UNSPECIFIED
 }
 
-type SetMneListRequest struct {
+type DeleteNetworkElementRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64     `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Mne       []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"`
-	Pid       string    `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"`
+	Timestamp        int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	NetworkElementId string `protobuf:"bytes,2,opt,name=network_element_id,json=networkElementId,proto3" json:"network_element_id,omitempty"`
 }
 
-func (x *SetMneListRequest) Reset() {
-	*x = SetMneListRequest{}
+func (x *DeleteNetworkElementRequest) Reset() {
+	*x = DeleteNetworkElementRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -949,13 +892,13 @@ func (x *SetMneListRequest) Reset() {
 	}
 }
 
-func (x *SetMneListRequest) String() string {
+func (x *DeleteNetworkElementRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*SetMneListRequest) ProtoMessage() {}
+func (*DeleteNetworkElementRequest) ProtoMessage() {}
 
-func (x *SetMneListRequest) ProtoReflect() protoreflect.Message {
+func (x *DeleteNetworkElementRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -967,44 +910,36 @@ func (x *SetMneListRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use SetMneListRequest.ProtoReflect.Descriptor instead.
-func (*SetMneListRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use DeleteNetworkElementRequest.ProtoReflect.Descriptor instead.
+func (*DeleteNetworkElementRequest) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{9}
 }
 
-func (x *SetMneListRequest) GetTimestamp() int64 {
+func (x *DeleteNetworkElementRequest) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *SetMneListRequest) GetMne() []*SetMne {
-	if x != nil {
-		return x.Mne
-	}
-	return nil
-}
-
-func (x *SetMneListRequest) GetPid() string {
+func (x *DeleteNetworkElementRequest) GetNetworkElementId() string {
 	if x != nil {
-		return x.Pid
+		return x.NetworkElementId
 	}
 	return ""
 }
 
-type SetMneListResponse struct {
+type DeleteNetworkElementResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64          `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Status    Status         `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
-	Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"`
+	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	Status    Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
 }
 
-func (x *SetMneListResponse) Reset() {
-	*x = SetMneListResponse{}
+func (x *DeleteNetworkElementResponse) Reset() {
+	*x = DeleteNetworkElementResponse{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1012,13 +947,13 @@ func (x *SetMneListResponse) Reset() {
 	}
 }
 
-func (x *SetMneListResponse) String() string {
+func (x *DeleteNetworkElementResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*SetMneListResponse) ProtoMessage() {}
+func (*DeleteNetworkElementResponse) ProtoMessage() {}
 
-func (x *SetMneListResponse) ProtoReflect() protoreflect.Message {
+func (x *DeleteNetworkElementResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -1030,27 +965,834 @@ func (x *SetMneListResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use SetMneListResponse.ProtoReflect.Descriptor instead.
-func (*SetMneListResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use DeleteNetworkElementResponse.ProtoReflect.Descriptor instead.
+func (*DeleteNetworkElementResponse) Descriptor() ([]byte, []int) {
 	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{10}
 }
 
-func (x *SetMneListResponse) GetTimestamp() int64 {
+func (x *DeleteNetworkElementResponse) GetTimestamp() int64 {
 	if x != nil {
 		return x.Timestamp
 	}
 	return 0
 }
 
-func (x *SetMneListResponse) GetStatus() Status {
+func (x *DeleteNetworkElementResponse) GetStatus() Status {
 	if x != nil {
 		return x.Status
 	}
 	return Status_STATUS_UNSPECIFIED
 }
 
-func (x *SetMneListResponse) GetResponses() []*SetResponse {
-	if x != nil {
+//TODO(PND):remove this after ManagedNetworkElement is cleaned up
+type NetworkElement struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id               string             `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name             string             `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Model            string             `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"`
+	TransportAddress string             `protobuf:"bytes,4,opt,name=transport_address,json=transportAddress,proto3" json:"transport_address,omitempty"`
+	Metadata         *conflict.Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *NetworkElement) Reset() {
+	*x = NetworkElement{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *NetworkElement) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NetworkElement) ProtoMessage() {}
+
+func (x *NetworkElement) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use NetworkElement.ProtoReflect.Descriptor instead.
+func (*NetworkElement) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *NetworkElement) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *NetworkElement) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *NetworkElement) GetModel() string {
+	if x != nil {
+		return x.Model
+	}
+	return ""
+}
+
+func (x *NetworkElement) GetTransportAddress() string {
+	if x != nil {
+		return x.TransportAddress
+	}
+	return ""
+}
+
+func (x *NetworkElement) GetMetadata() *conflict.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+//TODO(PND): maybe need to clean this up!
+type ManagedNetworkElement struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id               string                          `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name             string                          `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Model            string                          `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"`
+	MneNotification  []*gnmi.Notification            `protobuf:"bytes,4,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"`
+	Sbi              *southbound.SouthboundInterface `protobuf:"bytes,5,opt,name=sbi,proto3" json:"sbi,omitempty"`
+	TransportAddress string                          `protobuf:"bytes,6,opt,name=transport_address,json=transportAddress,proto3" json:"transport_address,omitempty"`
+	Metadata         *conflict.Metadata              `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *ManagedNetworkElement) Reset() {
+	*x = ManagedNetworkElement{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ManagedNetworkElement) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ManagedNetworkElement) ProtoMessage() {}
+
+func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ManagedNetworkElement.ProtoReflect.Descriptor instead.
+func (*ManagedNetworkElement) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *ManagedNetworkElement) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *ManagedNetworkElement) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ManagedNetworkElement) GetModel() string {
+	if x != nil {
+		return x.Model
+	}
+	return ""
+}
+
+func (x *ManagedNetworkElement) GetMneNotification() []*gnmi.Notification {
+	if x != nil {
+		return x.MneNotification
+	}
+	return nil
+}
+
+func (x *ManagedNetworkElement) GetSbi() *southbound.SouthboundInterface {
+	if x != nil {
+		return x.Sbi
+	}
+	return nil
+}
+
+func (x *ManagedNetworkElement) GetTransportAddress() string {
+	if x != nil {
+		return x.TransportAddress
+	}
+	return ""
+}
+
+func (x *ManagedNetworkElement) GetMetadata() *conflict.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+type FlattenedManagedNetworkElement struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id   string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Sbi  string `protobuf:"bytes,3,opt,name=sbi,proto3" json:"sbi,omitempty"`
+}
+
+func (x *FlattenedManagedNetworkElement) Reset() {
+	*x = FlattenedManagedNetworkElement{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FlattenedManagedNetworkElement) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FlattenedManagedNetworkElement) ProtoMessage() {}
+
+func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FlattenedManagedNetworkElement.ProtoReflect.Descriptor instead.
+func (*FlattenedManagedNetworkElement) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *FlattenedManagedNetworkElement) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *FlattenedManagedNetworkElement) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *FlattenedManagedNetworkElement) GetSbi() string {
+	if x != nil {
+		return x.Sbi
+	}
+	return ""
+}
+
+// //TODO(PND): this is maybe only temporary, need to figure out how to include without cycle or duplication
+type PrincipalNetworkDomain struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name        string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (x *PrincipalNetworkDomain) Reset() {
+	*x = PrincipalNetworkDomain{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PrincipalNetworkDomain) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PrincipalNetworkDomain) ProtoMessage() {}
+
+func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PrincipalNetworkDomain.ProtoReflect.Descriptor instead.
+func (*PrincipalNetworkDomain) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *PrincipalNetworkDomain) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *PrincipalNetworkDomain) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *PrincipalNetworkDomain) GetDescription() string {
+	if x != nil {
+		return x.Description
+	}
+	return ""
+}
+
+type GetMneListRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	Pid       string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"`
+}
+
+func (x *GetMneListRequest) Reset() {
+	*x = GetMneListRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetMneListRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMneListRequest) ProtoMessage() {}
+
+func (x *GetMneListRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMneListRequest.ProtoReflect.Descriptor instead.
+func (*GetMneListRequest) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *GetMneListRequest) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *GetMneListRequest) GetPid() string {
+	if x != nil {
+		return x.Pid
+	}
+	return ""
+}
+
+type GetMneListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
+	// is also sufficient.
+	Pnd *PrincipalNetworkDomain  `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
+	Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"`
+}
+
+func (x *GetMneListResponse) Reset() {
+	*x = GetMneListResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetMneListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMneListResponse) ProtoMessage() {}
+
+func (x *GetMneListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMneListResponse.ProtoReflect.Descriptor instead.
+func (*GetMneListResponse) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *GetMneListResponse) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *GetMneListResponse) GetPnd() *PrincipalNetworkDomain {
+	if x != nil {
+		return x.Pnd
+	}
+	return nil
+}
+
+func (x *GetMneListResponse) GetMne() []*ManagedNetworkElement {
+	if x != nil {
+		return x.Mne
+	}
+	return nil
+}
+
+//TODO(PND): add request here
+type GetFlattenedMneListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
+	// is also sufficient.
+	Pnd *PrincipalNetworkDomain           `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
+	Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"`
+}
+
+func (x *GetFlattenedMneListResponse) Reset() {
+	*x = GetFlattenedMneListResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetFlattenedMneListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetFlattenedMneListResponse) ProtoMessage() {}
+
+func (x *GetFlattenedMneListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetFlattenedMneListResponse.ProtoReflect.Descriptor instead.
+func (*GetFlattenedMneListResponse) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *GetFlattenedMneListResponse) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *GetFlattenedMneListResponse) GetPnd() *PrincipalNetworkDomain {
+	if x != nil {
+		return x.Pnd
+	}
+	return nil
+}
+
+func (x *GetFlattenedMneListResponse) GetMne() []*FlattenedManagedNetworkElement {
+	if x != nil {
+		return x.Mne
+	}
+	return nil
+}
+
+type GetMneRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	Mneid     string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"`
+	Pid       string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"`
+}
+
+func (x *GetMneRequest) Reset() {
+	*x = GetMneRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetMneRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMneRequest) ProtoMessage() {}
+
+func (x *GetMneRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMneRequest.ProtoReflect.Descriptor instead.
+func (*GetMneRequest) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *GetMneRequest) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *GetMneRequest) GetMneid() string {
+	if x != nil {
+		return x.Mneid
+	}
+	return ""
+}
+
+func (x *GetMneRequest) GetPid() string {
+	if x != nil {
+		return x.Pid
+	}
+	return ""
+}
+
+type GetMneResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	// TODO: Check if this is really needed. Perhaps a reference to the PND's ID
+	// is also sufficient.
+	Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"`
+	Mne *ManagedNetworkElement  `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"`
+}
+
+func (x *GetMneResponse) Reset() {
+	*x = GetMneResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetMneResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMneResponse) ProtoMessage() {}
+
+func (x *GetMneResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMneResponse.ProtoReflect.Descriptor instead.
+func (*GetMneResponse) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *GetMneResponse) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *GetMneResponse) GetPnd() *PrincipalNetworkDomain {
+	if x != nil {
+		return x.Pnd
+	}
+	return nil
+}
+
+func (x *GetMneResponse) GetMne() *ManagedNetworkElement {
+	if x != nil {
+		return x.Mne
+	}
+	return nil
+}
+
+type SetMne struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Address         string                          `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	Sbi             *southbound.SouthboundInterface `protobuf:"bytes,2,opt,name=sbi,proto3" json:"sbi,omitempty"`
+	MneName         string                          `protobuf:"bytes,3,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"`
+	TransportOption *transport.TransportOption      `protobuf:"bytes,4,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"`
+}
+
+func (x *SetMne) Reset() {
+	*x = SetMne{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetMne) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetMne) ProtoMessage() {}
+
+func (x *SetMne) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetMne.ProtoReflect.Descriptor instead.
+func (*SetMne) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *SetMne) GetAddress() string {
+	if x != nil {
+		return x.Address
+	}
+	return ""
+}
+
+func (x *SetMne) GetSbi() *southbound.SouthboundInterface {
+	if x != nil {
+		return x.Sbi
+	}
+	return nil
+}
+
+func (x *SetMne) GetMneName() string {
+	if x != nil {
+		return x.MneName
+	}
+	return ""
+}
+
+func (x *SetMne) GetTransportOption() *transport.TransportOption {
+	if x != nil {
+		return x.TransportOption
+	}
+	return nil
+}
+
+type SetMneListRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64     `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	Mne       []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"`
+	Pid       string    `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"`
+}
+
+func (x *SetMneListRequest) Reset() {
+	*x = SetMneListRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetMneListRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetMneListRequest) ProtoMessage() {}
+
+func (x *SetMneListRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetMneListRequest.ProtoReflect.Descriptor instead.
+func (*SetMneListRequest) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *SetMneListRequest) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *SetMneListRequest) GetMne() []*SetMne {
+	if x != nil {
+		return x.Mne
+	}
+	return nil
+}
+
+func (x *SetMneListRequest) GetPid() string {
+	if x != nil {
+		return x.Pid
+	}
+	return ""
+}
+
+type SetMneListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Timestamp int64          `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	Status    Status         `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"`
+	Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"`
+}
+
+func (x *SetMneListResponse) Reset() {
+	*x = SetMneListResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetMneListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetMneListResponse) ProtoMessage() {}
+
+func (x *SetMneListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetMneListResponse.ProtoReflect.Descriptor instead.
+func (*SetMneListResponse) Descriptor() ([]byte, []int) {
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *SetMneListResponse) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *SetMneListResponse) GetStatus() Status {
+	if x != nil {
+		return x.Status
+	}
+	return Status_STATUS_UNSPECIFIED
+}
+
+func (x *SetMneListResponse) GetResponses() []*SetResponse {
+	if x != nil {
 		return x.Responses
 	}
 	return nil
@@ -1070,7 +1812,7 @@ type GetPathRequest struct {
 func (x *GetPathRequest) Reset() {
 	*x = GetPathRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1083,7 +1825,7 @@ func (x *GetPathRequest) String() string {
 func (*GetPathRequest) ProtoMessage() {}
 
 func (x *GetPathRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1096,7 +1838,7 @@ func (x *GetPathRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetPathRequest.ProtoReflect.Descriptor instead.
 func (*GetPathRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{11}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *GetPathRequest) GetTimestamp() int64 {
@@ -1142,7 +1884,7 @@ type GetPathResponse struct {
 func (x *GetPathResponse) Reset() {
 	*x = GetPathResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1155,7 +1897,7 @@ func (x *GetPathResponse) String() string {
 func (*GetPathResponse) ProtoMessage() {}
 
 func (x *GetPathResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1168,7 +1910,7 @@ func (x *GetPathResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetPathResponse.ProtoReflect.Descriptor instead.
 func (*GetPathResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{12}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *GetPathResponse) GetTimestamp() int64 {
@@ -1205,7 +1947,7 @@ type SetResponse struct {
 func (x *SetResponse) Reset() {
 	*x = SetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1218,7 +1960,7 @@ func (x *SetResponse) String() string {
 func (*SetResponse) ProtoMessage() {}
 
 func (x *SetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1231,7 +1973,7 @@ func (x *SetResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetResponse.ProtoReflect.Descriptor instead.
 func (*SetResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{13}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{25}
 }
 
 func (x *SetResponse) GetTimestamp() int64 {
@@ -1268,7 +2010,7 @@ type SetPathListRequest struct {
 func (x *SetPathListRequest) Reset() {
 	*x = SetPathListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1281,7 +2023,7 @@ func (x *SetPathListRequest) String() string {
 func (*SetPathListRequest) ProtoMessage() {}
 
 func (x *SetPathListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1294,7 +2036,7 @@ func (x *SetPathListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetPathListRequest.ProtoReflect.Descriptor instead.
 func (*SetPathListRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{14}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{26}
 }
 
 func (x *SetPathListRequest) GetTimestamp() int64 {
@@ -1331,7 +2073,7 @@ type SetPathListResponse struct {
 func (x *SetPathListResponse) Reset() {
 	*x = SetPathListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1344,7 +2086,7 @@ func (x *SetPathListResponse) String() string {
 func (*SetPathListResponse) ProtoMessage() {}
 
 func (x *SetPathListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1357,7 +2099,7 @@ func (x *SetPathListResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetPathListResponse.ProtoReflect.Descriptor instead.
 func (*SetPathListResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{15}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{27}
 }
 
 func (x *SetPathListResponse) GetTimestamp() int64 {
@@ -1394,7 +2136,7 @@ type DeleteMneRequest struct {
 func (x *DeleteMneRequest) Reset() {
 	*x = DeleteMneRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1407,7 +2149,7 @@ func (x *DeleteMneRequest) String() string {
 func (*DeleteMneRequest) ProtoMessage() {}
 
 func (x *DeleteMneRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1420,7 +2162,7 @@ func (x *DeleteMneRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteMneRequest.ProtoReflect.Descriptor instead.
 func (*DeleteMneRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{16}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *DeleteMneRequest) GetTimestamp() int64 {
@@ -1456,7 +2198,7 @@ type DeleteMneResponse struct {
 func (x *DeleteMneResponse) Reset() {
 	*x = DeleteMneResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1469,7 +2211,7 @@ func (x *DeleteMneResponse) String() string {
 func (*DeleteMneResponse) ProtoMessage() {}
 
 func (x *DeleteMneResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1482,7 +2224,7 @@ func (x *DeleteMneResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteMneResponse.ProtoReflect.Descriptor instead.
 func (*DeleteMneResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{17}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *DeleteMneResponse) GetTimestamp() int64 {
@@ -1513,7 +2255,7 @@ type Change struct {
 func (x *Change) Reset() {
 	*x = Change{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1526,7 +2268,7 @@ func (x *Change) String() string {
 func (*Change) ProtoMessage() {}
 
 func (x *Change) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1539,7 +2281,7 @@ func (x *Change) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Change.ProtoReflect.Descriptor instead.
 func (*Change) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{18}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{30}
 }
 
 func (x *Change) GetId() string {
@@ -1585,7 +2327,7 @@ type ChangeRequest struct {
 func (x *ChangeRequest) Reset() {
 	*x = ChangeRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1598,7 +2340,7 @@ func (x *ChangeRequest) String() string {
 func (*ChangeRequest) ProtoMessage() {}
 
 func (x *ChangeRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1611,7 +2353,7 @@ func (x *ChangeRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ChangeRequest.ProtoReflect.Descriptor instead.
 func (*ChangeRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{19}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *ChangeRequest) GetMneid() string {
@@ -1654,7 +2396,7 @@ type SetChange struct {
 func (x *SetChange) Reset() {
 	*x = SetChange{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1667,7 +2409,7 @@ func (x *SetChange) String() string {
 func (*SetChange) ProtoMessage() {}
 
 func (x *SetChange) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1680,7 +2422,7 @@ func (x *SetChange) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetChange.ProtoReflect.Descriptor instead.
 func (*SetChange) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{20}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{32}
 }
 
 func (x *SetChange) GetCuid() string {
@@ -1709,7 +2451,7 @@ type GetChangeListRequest struct {
 func (x *GetChangeListRequest) Reset() {
 	*x = GetChangeListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1722,7 +2464,7 @@ func (x *GetChangeListRequest) String() string {
 func (*GetChangeListRequest) ProtoMessage() {}
 
 func (x *GetChangeListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1735,7 +2477,7 @@ func (x *GetChangeListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChangeListRequest.ProtoReflect.Descriptor instead.
 func (*GetChangeListRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{21}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{33}
 }
 
 func (x *GetChangeListRequest) GetTimestamp() int64 {
@@ -1767,7 +2509,7 @@ type GetChangeListResponse struct {
 func (x *GetChangeListResponse) Reset() {
 	*x = GetChangeListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1780,7 +2522,7 @@ func (x *GetChangeListResponse) String() string {
 func (*GetChangeListResponse) ProtoMessage() {}
 
 func (x *GetChangeListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1793,7 +2535,7 @@ func (x *GetChangeListResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChangeListResponse.ProtoReflect.Descriptor instead.
 func (*GetChangeListResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{22}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{34}
 }
 
 func (x *GetChangeListResponse) GetTimestamp() int64 {
@@ -1830,7 +2572,7 @@ type GetChangeRequest struct {
 func (x *GetChangeRequest) Reset() {
 	*x = GetChangeRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1843,7 +2585,7 @@ func (x *GetChangeRequest) String() string {
 func (*GetChangeRequest) ProtoMessage() {}
 
 func (x *GetChangeRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1856,7 +2598,7 @@ func (x *GetChangeRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChangeRequest.ProtoReflect.Descriptor instead.
 func (*GetChangeRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{23}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{35}
 }
 
 func (x *GetChangeRequest) GetTimestamp() int64 {
@@ -1895,7 +2637,7 @@ type GetChangeResponse struct {
 func (x *GetChangeResponse) Reset() {
 	*x = GetChangeResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1908,7 +2650,7 @@ func (x *GetChangeResponse) String() string {
 func (*GetChangeResponse) ProtoMessage() {}
 
 func (x *GetChangeResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1921,7 +2663,7 @@ func (x *GetChangeResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChangeResponse.ProtoReflect.Descriptor instead.
 func (*GetChangeResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{24}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{36}
 }
 
 func (x *GetChangeResponse) GetTimestamp() int64 {
@@ -1958,7 +2700,7 @@ type SetChangeListRequest struct {
 func (x *SetChangeListRequest) Reset() {
 	*x = SetChangeListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1971,7 +2713,7 @@ func (x *SetChangeListRequest) String() string {
 func (*SetChangeListRequest) ProtoMessage() {}
 
 func (x *SetChangeListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1984,7 +2726,7 @@ func (x *SetChangeListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetChangeListRequest.ProtoReflect.Descriptor instead.
 func (*SetChangeListRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{25}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{37}
 }
 
 func (x *SetChangeListRequest) GetTimestamp() int64 {
@@ -2021,7 +2763,7 @@ type SetChangeListResponse struct {
 func (x *SetChangeListResponse) Reset() {
 	*x = SetChangeListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2034,7 +2776,7 @@ func (x *SetChangeListResponse) String() string {
 func (*SetChangeListResponse) ProtoMessage() {}
 
 func (x *SetChangeListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2047,7 +2789,7 @@ func (x *SetChangeListResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetChangeListResponse.ProtoReflect.Descriptor instead.
 func (*SetChangeListResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{26}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{38}
 }
 
 func (x *SetChangeListResponse) GetTimestamp() int64 {
@@ -2085,7 +2827,7 @@ type SubscriptionList struct {
 func (x *SubscriptionList) Reset() {
 	*x = SubscriptionList{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[39]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2098,7 +2840,7 @@ func (x *SubscriptionList) String() string {
 func (*SubscriptionList) ProtoMessage() {}
 
 func (x *SubscriptionList) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[39]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2111,7 +2853,7 @@ func (x *SubscriptionList) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead.
 func (*SubscriptionList) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{27}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{39}
 }
 
 func (x *SubscriptionList) GetSubscription() []*Subscription {
@@ -2141,7 +2883,7 @@ type Subscription struct {
 func (x *Subscription) Reset() {
 	*x = Subscription{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[40]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2154,7 +2896,7 @@ func (x *Subscription) String() string {
 func (*Subscription) ProtoMessage() {}
 
 func (x *Subscription) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[40]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2167,7 +2909,7 @@ func (x *Subscription) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Subscription.ProtoReflect.Descriptor instead.
 func (*Subscription) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{28}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{40}
 }
 
 func (x *Subscription) GetPath() string {
@@ -2205,7 +2947,7 @@ type SubscribePathRequest struct {
 func (x *SubscribePathRequest) Reset() {
 	*x = SubscribePathRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[41]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2218,7 +2960,7 @@ func (x *SubscribePathRequest) String() string {
 func (*SubscribePathRequest) ProtoMessage() {}
 
 func (x *SubscribePathRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[41]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2231,7 +2973,7 @@ func (x *SubscribePathRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SubscribePathRequest.ProtoReflect.Descriptor instead.
 func (*SubscribePathRequest) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{29}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{41}
 }
 
 func (x *SubscribePathRequest) GetTimestamp() int64 {
@@ -2275,7 +3017,7 @@ type SubscribePathResponse struct {
 func (x *SubscribePathResponse) Reset() {
 	*x = SubscribePathResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30]
+		mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[42]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2288,7 +3030,7 @@ func (x *SubscribePathResponse) String() string {
 func (*SubscribePathResponse) ProtoMessage() {}
 
 func (x *SubscribePathResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30]
+	mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[42]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2301,7 +3043,7 @@ func (x *SubscribePathResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SubscribePathResponse.ProtoReflect.Descriptor instead.
 func (*SubscribePathResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{30}
+	return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{42}
 }
 
 func (x *SubscribePathResponse) GetTimestamp() int64 {
@@ -2348,194 +3090,326 @@ var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{
 	0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68,
 	0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe9, 0x01, 0x0a, 0x15, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69,
-	0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
-	0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf2, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64,
+	0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f,
+	0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e,
+	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x30, 0x0a, 0x14,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b,
+	0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
+	0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e,
+	0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x01, 0x0a, 0x18,
+	0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x34, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x4e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22,
+	0xbe, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73,
+	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+	0x22, 0x3b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc1, 0x01,
+	0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x22, 0x8a, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
+	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x72,
+	0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x22, 0x69, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x72, 0x0a,
+	0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x22, 0xad, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65,
+	0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2b,
+	0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x70, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x6d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x22, 0xac, 0x02, 0x0a, 0x15, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74,
+	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62,
+	0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49,
+	0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x2b, 0x0a,
+	0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65,
+	0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70,
+	0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x4d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0x56, 0x0a, 0x1e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x62, 0x69, 0x22, 0x5e, 0x0a, 0x16, 0x50, 0x72, 0x69, 0x6e,
+	0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61,
+	0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d,
+	0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70,
+	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xb1, 0x01,
+	0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c,
+	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70,
+	0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e,
+	0x65, 0x22, 0xc3, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e,
+	0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12,
+	0x46, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0x55, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4d, 0x6e,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03,
+	0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xad,
+	0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12,
+	0x3d, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0xc3,
+	0x01, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64,
+	0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f,
 	0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e,
-	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x34, 0x0a, 0x08,
-	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e,
-	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x22, 0x56, 0x0a, 0x1e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x62, 0x69, 0x22, 0x5e, 0x0a, 0x16, 0x50, 0x72,
-	0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f,
-	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11, 0x47, 0x65,
-	0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a,
-	0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22,
-	0xb1, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70,
-	0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52,
-	0x03, 0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03,
-	0x6d, 0x6e, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74,
-	0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e,
-	0x64, 0x12, 0x46, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65,
-	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0x55, 0x0a, 0x0d, 0x47, 0x65, 0x74,
-	0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10,
-	0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64,
-	0x22, 0xad, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c,
+	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x19, 0x0a, 0x08,
+	0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+	0x6d, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70,
+	0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x22, 0x73, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d,
+	0x6e, 0x65, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x53, 0x65,
+	0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c,
 	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e,
-	0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53,
+	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70,
+	0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
+	0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69,
+	0x64, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61,
+	0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03,
+	0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66,
+	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+	0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x22, 0x71, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
+	0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74,
+	0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09,
+	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x0e, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74,
+	0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c,
 	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65,
-	0x22, 0xc3, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61,
-	0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64,
-	0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, 0x75, 0x74, 0x68,
-	0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64,
-	0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x19,
-	0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x6d, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, 0x72, 0x61,
-	0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e,
-	0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74,
-	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x73, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x6e, 0x65,
-	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65,
-	0x74, 0x4d, 0x6e, 0x65, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x12,
-	0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
-	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
-	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61,
-	0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53,
+	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d,
+	0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
 	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a,
-	0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
-	0x68, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x70, 0x69, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65,
+	0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x22,
+	0x67, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x06, 0x43, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26,
+	0x0a, 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67,
+	0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12,
+	0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
+	0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f,
+	0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
+	0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x61, 0x70,
+	0x69, 0x4f, 0x70, 0x22, 0x50, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x75, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x02, 0x6f, 0x70, 0x22, 0x46, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70,
+	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xab, 0x01,
+	0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52,
 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
 	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
 	0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
 	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
 	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69,
 	0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
-	0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74,
-	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x22, 0x71, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
-	0x64, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x50,
-	0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
-	0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x0e,
-	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x67,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x13, 0x53,
-	0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
-	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
-	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d,
-	0x6e, 0x65, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69,
-	0x64, 0x22, 0x67, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x06, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
-	0x12, 0x26, 0x0a, 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
-	0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61,
-	0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e,
-	0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64,
-	0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x61, 0x70,
-	0x69, 0x5f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73,
-	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-	0x74, 0x2e, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05,
-	0x61, 0x70, 0x69, 0x4f, 0x70, 0x22, 0x50, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x63, 0x75, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x70, 0x22, 0x46, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x56, 0x0a, 0x10, 0x47,
+	0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
 	0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a,
-	0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22,
-	0xab, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+	0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a,
+	0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x75, 0x69,
+	0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x70, 0x69, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
 	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69,
 	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02,
 	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
@@ -2544,221 +3418,240 @@ var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{
 	0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67,
 	0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
 	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x56, 0x0a,
-	0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
-	0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63,
-	0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61,
-	0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x03, 0x70, 0x6e, 0x64,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72,
-	0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f,
-	0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x61,
-	0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22,
-	0x7f, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
-	0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18,
-	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74,
-	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10,
-	0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64,
-	0x22, 0xac, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69,
-	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x7f, 0x0a,
+	0x14, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03,
+	0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xac,
+	0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09,
+	0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x96, 0x01,
+	0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
 	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
-	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f,
-	0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22,
-	0x96, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
-	0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73,
-	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-	0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c,
-	0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04,
-	0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73,
-	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-	0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f,
-	0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74,
-	0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x41, 0x0a,
-	0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
-	0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65,
-	0x12, 0x27, 0x0a, 0x0f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72,
-	0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x61, 0x6d, 0x70, 0x6c,
-	0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x53, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
+	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75,
+	0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04, 0x6d, 0x6f,
+	0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
+	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65,
+	0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x41, 0x0a, 0x0b, 0x73,
+	0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f,
+	0x64, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27,
+	0x0a, 0x0f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
+	0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x49,
+	0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73,
+	0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14,
+	0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d,
+	0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53,
+	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xaa, 0x01, 0x0a, 0x15, 0x53, 0x75, 0x62,
+	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
 	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6c,
-	0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73,
-	0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xaa, 0x01, 0x0a, 0x15, 0x53,
-	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
-	0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f,
-	0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69,
-	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66,
-	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x41, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50,
-	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41,
-	0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54,
-	0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x9c, 0x01, 0x0a, 0x0b, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48,
-	0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
-	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4e,
-	0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47,
-	0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41,
-	0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a,
-	0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43,
-	0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48,
-	0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4e,
-	0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x04, 0x2a, 0x7c, 0x0a, 0x0c, 0x41, 0x70, 0x69,
-	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x49,
-	0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
-	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f,
-	0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
-	0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54,
-	0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a,
-	0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44,
-	0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x69, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f,
-	0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
-	0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45,
-	0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49,
-	0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4f,
-	0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d,
-	0x10, 0x03, 0x2a, 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43,
-	0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53,
-	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55,
-	0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f,
-	0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52,
-	0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45,
-	0x41, 0x4d, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50,
-	0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x10, 0x03,
-	0x2a, 0x7c, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b,
-	0x0a, 0x17, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e,
-	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x53,
-	0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45,
-	0x54, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53,
-	0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, 0x48,
-	0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d,
-	0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x03, 0x32, 0x8e,
-	0x0b, 0x0a, 0x15, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-	0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d,
-	0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65,
-	0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
-	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x13, 0x47, 0x65,
-	0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x73,
-	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-	0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e,
-	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82,
-	0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69,
-	0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x74, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4d, 0x6e,
-	0x65, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65,
-	0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64,
-	0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x12, 0x7c, 0x0a,
-	0x0a, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f,
+	0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f,
+	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x41, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+	0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
+	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, 0x55,
+	0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53,
+	0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x9c, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e,
+	0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45,
+	0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01,
+	0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45,
+	0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16,
+	0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e,
+	0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x4e,
+	0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4e, 0x53, 0x49,
+	0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x04, 0x2a, 0x7c, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x4f, 0x70,
+	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x49, 0x5f, 0x4f,
+	0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50,
+	0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01,
+	0x12, 0x19, 0x0a, 0x15, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f,
+	0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x41,
+	0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c,
+	0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x69, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f,
+	0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a,
+	0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54,
+	0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
+	0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x50, 0x45,
+	0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x03,
+	0x2a, 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49,
+	0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53,
+	0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e,
+	0x43, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50,
+	0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d,
+	0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49,
+	0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x10, 0x03, 0x2a, 0x7c,
+	0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17,
+	0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50,
+	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x52,
+	0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f,
+	0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x52,
+	0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e,
+	0x47, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d,
+	0x4f, 0x44, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x03, 0x32, 0xc4, 0x0f, 0x0a,
+	0x15, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x2e,
+	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f,
+	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+	0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x6f,
 	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
-	0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d,
-	0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x70, 0x6e, 0x64, 0x73,
-	0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x07,
-	0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
-	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47,
-	0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
-	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65,
-	0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x70,
-	0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x7b,
-	0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x2f, 0x7b, 0x70, 0x61,
-	0x74, 0x68, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c,
-	0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77,
-	0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61,
-	0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
-	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65,
-	0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b,
-	0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d,
-	0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x7e, 0x0a, 0x09, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c,
+	0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41,
+	0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16,
+	0x12, 0x14, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x93, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c,
+	0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x0a,
+	0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73,
+	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01,
+	0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74,
+	0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31,
+	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e,
+	0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x6e, 0x64, 0x73,
+	0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x74, 0x0a, 0x06, 0x47,
+	0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74,
+	0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x6f, 0x73,
+	0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f,
+	0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64,
+	0x7d, 0x12, 0x7c, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65,
+	0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
 	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
-	0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x1a, 0x2a, 0x18, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d,
-	0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0d,
-	0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e,
+	0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f,
+	0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12,
+	0x85, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27,
+	0x12, 0x25, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e,
+	0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73,
+	0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50,
+	0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53,
+	0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x29, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b,
+	0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12,
+	0x7e, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69,
+	0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x12,
+	0x85, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73,
+	0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e,
 	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65,
 	0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69,
-	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13,
+	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x15, 0x12, 0x13, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74,
+	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
+	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65,
+	0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a,
 	0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67,
-	0x65, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-	0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x6e, 0x64,
-	0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2f,
-	0x7b, 0x63, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x43, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x67, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0d, 0x53,
+	0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x67,
+	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d,
+	0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
 	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
-	0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x70,
-	0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
-	0x73, 0x12, 0x6c, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61,
-	0x74, 0x68, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a,
+	0x22, 0x13, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
+	0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75,
+	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
 	0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50,
-	0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42,
-	0x3a, 0x5a, 0x38, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61,
-	0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f,
-	0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74,
-	0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e,
+	0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -2774,7 +3667,7 @@ func file_gosdn_networkelement_networkelement_proto_rawDescGZIP() []byte {
 }
 
 var file_gosdn_networkelement_networkelement_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
-var file_gosdn_networkelement_networkelement_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
+var file_gosdn_networkelement_networkelement_proto_msgTypes = make([]protoimpl.MessageInfo, 43)
 var file_gosdn_networkelement_networkelement_proto_goTypes = []interface{}{
 	(Status)(0),                            // 0: gosdn.networkelement.Status
 	(ChangeState)(0),                       // 1: gosdn.networkelement.ChangeState
@@ -2782,108 +3675,140 @@ var file_gosdn_networkelement_networkelement_proto_goTypes = []interface{}{
 	(Operation)(0),                         // 3: gosdn.networkelement.Operation
 	(SubscriptionMode)(0),                  // 4: gosdn.networkelement.SubscriptionMode
 	(StreamMode)(0),                        // 5: gosdn.networkelement.StreamMode
-	(*ManagedNetworkElement)(nil),          // 6: gosdn.networkelement.ManagedNetworkElement
-	(*FlattenedManagedNetworkElement)(nil), // 7: gosdn.networkelement.FlattenedManagedNetworkElement
-	(*PrincipalNetworkDomain)(nil),         // 8: gosdn.networkelement.PrincipalNetworkDomain
-	(*GetMneListRequest)(nil),              // 9: gosdn.networkelement.GetMneListRequest
-	(*GetMneListResponse)(nil),             // 10: gosdn.networkelement.GetMneListResponse
-	(*GetFlattenedMneListResponse)(nil),    // 11: gosdn.networkelement.GetFlattenedMneListResponse
-	(*GetMneRequest)(nil),                  // 12: gosdn.networkelement.GetMneRequest
-	(*GetMneResponse)(nil),                 // 13: gosdn.networkelement.GetMneResponse
-	(*SetMne)(nil),                         // 14: gosdn.networkelement.SetMne
-	(*SetMneListRequest)(nil),              // 15: gosdn.networkelement.SetMneListRequest
-	(*SetMneListResponse)(nil),             // 16: gosdn.networkelement.SetMneListResponse
-	(*GetPathRequest)(nil),                 // 17: gosdn.networkelement.GetPathRequest
-	(*GetPathResponse)(nil),                // 18: gosdn.networkelement.GetPathResponse
-	(*SetResponse)(nil),                    // 19: gosdn.networkelement.SetResponse
-	(*SetPathListRequest)(nil),             // 20: gosdn.networkelement.SetPathListRequest
-	(*SetPathListResponse)(nil),            // 21: gosdn.networkelement.SetPathListResponse
-	(*DeleteMneRequest)(nil),               // 22: gosdn.networkelement.DeleteMneRequest
-	(*DeleteMneResponse)(nil),              // 23: gosdn.networkelement.DeleteMneResponse
-	(*Change)(nil),                         // 24: gosdn.networkelement.Change
-	(*ChangeRequest)(nil),                  // 25: gosdn.networkelement.ChangeRequest
-	(*SetChange)(nil),                      // 26: gosdn.networkelement.SetChange
-	(*GetChangeListRequest)(nil),           // 27: gosdn.networkelement.GetChangeListRequest
-	(*GetChangeListResponse)(nil),          // 28: gosdn.networkelement.GetChangeListResponse
-	(*GetChangeRequest)(nil),               // 29: gosdn.networkelement.GetChangeRequest
-	(*GetChangeResponse)(nil),              // 30: gosdn.networkelement.GetChangeResponse
-	(*SetChangeListRequest)(nil),           // 31: gosdn.networkelement.SetChangeListRequest
-	(*SetChangeListResponse)(nil),          // 32: gosdn.networkelement.SetChangeListResponse
-	(*SubscriptionList)(nil),               // 33: gosdn.networkelement.SubscriptionList
-	(*Subscription)(nil),                   // 34: gosdn.networkelement.Subscription
-	(*SubscribePathRequest)(nil),           // 35: gosdn.networkelement.SubscribePathRequest
-	(*SubscribePathResponse)(nil),          // 36: gosdn.networkelement.SubscribePathResponse
-	(*gnmi.Notification)(nil),              // 37: gnmi.Notification
-	(*southbound.SouthboundInterface)(nil), // 38: gosdn.southbound.SouthboundInterface
-	(*conflict.Metadata)(nil),              // 39: gosdn.conflict.Metadata
-	(*transport.TransportOption)(nil),      // 40: gosdn.transport.TransportOption
+	(*AddNetworkElementConfiguration)(nil), // 6: gosdn.networkelement.AddNetworkElementConfiguration
+	(*AddNetworkElementRequest)(nil),       // 7: gosdn.networkelement.AddNetworkElementRequest
+	(*AddNetworkElementResponse)(nil),      // 8: gosdn.networkelement.AddNetworkElementResponse
+	(*GetNetworkElementRequest)(nil),       // 9: gosdn.networkelement.GetNetworkElementRequest
+	(*GetNetworkElementResponse)(nil),      // 10: gosdn.networkelement.GetNetworkElementResponse
+	(*GetAllNetworkElementRequest)(nil),    // 11: gosdn.networkelement.GetAllNetworkElementRequest
+	(*GetAllNetworkElementResponse)(nil),   // 12: gosdn.networkelement.GetAllNetworkElementResponse
+	(*UpdateNetworkElementRequest)(nil),    // 13: gosdn.networkelement.UpdateNetworkElementRequest
+	(*UpdateNetworkElementResponse)(nil),   // 14: gosdn.networkelement.UpdateNetworkElementResponse
+	(*DeleteNetworkElementRequest)(nil),    // 15: gosdn.networkelement.DeleteNetworkElementRequest
+	(*DeleteNetworkElementResponse)(nil),   // 16: gosdn.networkelement.DeleteNetworkElementResponse
+	(*NetworkElement)(nil),                 // 17: gosdn.networkelement.NetworkElement
+	(*ManagedNetworkElement)(nil),          // 18: gosdn.networkelement.ManagedNetworkElement
+	(*FlattenedManagedNetworkElement)(nil), // 19: gosdn.networkelement.FlattenedManagedNetworkElement
+	(*PrincipalNetworkDomain)(nil),         // 20: gosdn.networkelement.PrincipalNetworkDomain
+	(*GetMneListRequest)(nil),              // 21: gosdn.networkelement.GetMneListRequest
+	(*GetMneListResponse)(nil),             // 22: gosdn.networkelement.GetMneListResponse
+	(*GetFlattenedMneListResponse)(nil),    // 23: gosdn.networkelement.GetFlattenedMneListResponse
+	(*GetMneRequest)(nil),                  // 24: gosdn.networkelement.GetMneRequest
+	(*GetMneResponse)(nil),                 // 25: gosdn.networkelement.GetMneResponse
+	(*SetMne)(nil),                         // 26: gosdn.networkelement.SetMne
+	(*SetMneListRequest)(nil),              // 27: gosdn.networkelement.SetMneListRequest
+	(*SetMneListResponse)(nil),             // 28: gosdn.networkelement.SetMneListResponse
+	(*GetPathRequest)(nil),                 // 29: gosdn.networkelement.GetPathRequest
+	(*GetPathResponse)(nil),                // 30: gosdn.networkelement.GetPathResponse
+	(*SetResponse)(nil),                    // 31: gosdn.networkelement.SetResponse
+	(*SetPathListRequest)(nil),             // 32: gosdn.networkelement.SetPathListRequest
+	(*SetPathListResponse)(nil),            // 33: gosdn.networkelement.SetPathListResponse
+	(*DeleteMneRequest)(nil),               // 34: gosdn.networkelement.DeleteMneRequest
+	(*DeleteMneResponse)(nil),              // 35: gosdn.networkelement.DeleteMneResponse
+	(*Change)(nil),                         // 36: gosdn.networkelement.Change
+	(*ChangeRequest)(nil),                  // 37: gosdn.networkelement.ChangeRequest
+	(*SetChange)(nil),                      // 38: gosdn.networkelement.SetChange
+	(*GetChangeListRequest)(nil),           // 39: gosdn.networkelement.GetChangeListRequest
+	(*GetChangeListResponse)(nil),          // 40: gosdn.networkelement.GetChangeListResponse
+	(*GetChangeRequest)(nil),               // 41: gosdn.networkelement.GetChangeRequest
+	(*GetChangeResponse)(nil),              // 42: gosdn.networkelement.GetChangeResponse
+	(*SetChangeListRequest)(nil),           // 43: gosdn.networkelement.SetChangeListRequest
+	(*SetChangeListResponse)(nil),          // 44: gosdn.networkelement.SetChangeListResponse
+	(*SubscriptionList)(nil),               // 45: gosdn.networkelement.SubscriptionList
+	(*Subscription)(nil),                   // 46: gosdn.networkelement.Subscription
+	(*SubscribePathRequest)(nil),           // 47: gosdn.networkelement.SubscribePathRequest
+	(*SubscribePathResponse)(nil),          // 48: gosdn.networkelement.SubscribePathResponse
+	(*southbound.SouthboundInterface)(nil), // 49: gosdn.southbound.SouthboundInterface
+	(*transport.TransportOption)(nil),      // 50: gosdn.transport.TransportOption
+	(*conflict.Metadata)(nil),              // 51: gosdn.conflict.Metadata
+	(*gnmi.Notification)(nil),              // 52: gnmi.Notification
 }
 var file_gosdn_networkelement_networkelement_proto_depIdxs = []int32{
-	37, // 0: gosdn.networkelement.ManagedNetworkElement.mne_notification:type_name -> gnmi.Notification
-	38, // 1: gosdn.networkelement.ManagedNetworkElement.sbi:type_name -> gosdn.southbound.SouthboundInterface
-	39, // 2: gosdn.networkelement.ManagedNetworkElement.metadata:type_name -> gosdn.conflict.Metadata
-	8,  // 3: gosdn.networkelement.GetMneListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	6,  // 4: gosdn.networkelement.GetMneListResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement
-	8,  // 5: gosdn.networkelement.GetFlattenedMneListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	7,  // 6: gosdn.networkelement.GetFlattenedMneListResponse.mne:type_name -> gosdn.networkelement.FlattenedManagedNetworkElement
-	8,  // 7: gosdn.networkelement.GetMneResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	6,  // 8: gosdn.networkelement.GetMneResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement
-	38, // 9: gosdn.networkelement.SetMne.sbi:type_name -> gosdn.southbound.SouthboundInterface
-	40, // 10: gosdn.networkelement.SetMne.transport_option:type_name -> gosdn.transport.TransportOption
-	14, // 11: gosdn.networkelement.SetMneListRequest.mne:type_name -> gosdn.networkelement.SetMne
-	0,  // 12: gosdn.networkelement.SetMneListResponse.status:type_name -> gosdn.networkelement.Status
-	19, // 13: gosdn.networkelement.SetMneListResponse.responses:type_name -> gosdn.networkelement.SetResponse
-	8,  // 14: gosdn.networkelement.GetPathResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	37, // 15: gosdn.networkelement.GetPathResponse.mne_notification:type_name -> gnmi.Notification
-	0,  // 16: gosdn.networkelement.SetResponse.status:type_name -> gosdn.networkelement.Status
-	25, // 17: gosdn.networkelement.SetPathListRequest.change_request:type_name -> gosdn.networkelement.ChangeRequest
-	0,  // 18: gosdn.networkelement.SetPathListResponse.status:type_name -> gosdn.networkelement.Status
-	19, // 19: gosdn.networkelement.SetPathListResponse.responses:type_name -> gosdn.networkelement.SetResponse
-	0,  // 20: gosdn.networkelement.DeleteMneResponse.status:type_name -> gosdn.networkelement.Status
-	1,  // 21: gosdn.networkelement.Change.state:type_name -> gosdn.networkelement.ChangeState
-	37, // 22: gosdn.networkelement.Change.diff:type_name -> gnmi.Notification
-	2,  // 23: gosdn.networkelement.ChangeRequest.api_op:type_name -> gosdn.networkelement.ApiOperation
-	3,  // 24: gosdn.networkelement.SetChange.op:type_name -> gosdn.networkelement.Operation
-	8,  // 25: gosdn.networkelement.GetChangeListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	24, // 26: gosdn.networkelement.GetChangeListResponse.change:type_name -> gosdn.networkelement.Change
-	8,  // 27: gosdn.networkelement.GetChangeResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
-	24, // 28: gosdn.networkelement.GetChangeResponse.change:type_name -> gosdn.networkelement.Change
-	26, // 29: gosdn.networkelement.SetChangeListRequest.change:type_name -> gosdn.networkelement.SetChange
-	0,  // 30: gosdn.networkelement.SetChangeListResponse.status:type_name -> gosdn.networkelement.Status
-	19, // 31: gosdn.networkelement.SetChangeListResponse.responses:type_name -> gosdn.networkelement.SetResponse
-	34, // 32: gosdn.networkelement.SubscriptionList.subscription:type_name -> gosdn.networkelement.Subscription
-	4,  // 33: gosdn.networkelement.SubscriptionList.mode:type_name -> gosdn.networkelement.SubscriptionMode
-	5,  // 34: gosdn.networkelement.Subscription.stream_mode:type_name -> gosdn.networkelement.StreamMode
-	33, // 35: gosdn.networkelement.SubscribePathRequest.sublist:type_name -> gosdn.networkelement.SubscriptionList
-	0,  // 36: gosdn.networkelement.SubscribePathResponse.status:type_name -> gosdn.networkelement.Status
-	37, // 37: gosdn.networkelement.SubscribePathResponse.mne_notification:type_name -> gnmi.Notification
-	9,  // 38: gosdn.networkelement.NetworkElementService.GetMneList:input_type -> gosdn.networkelement.GetMneListRequest
-	9,  // 39: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:input_type -> gosdn.networkelement.GetMneListRequest
-	12, // 40: gosdn.networkelement.NetworkElementService.GetMne:input_type -> gosdn.networkelement.GetMneRequest
-	15, // 41: gosdn.networkelement.NetworkElementService.SetMneList:input_type -> gosdn.networkelement.SetMneListRequest
-	17, // 42: gosdn.networkelement.NetworkElementService.GetPath:input_type -> gosdn.networkelement.GetPathRequest
-	20, // 43: gosdn.networkelement.NetworkElementService.SetPathList:input_type -> gosdn.networkelement.SetPathListRequest
-	22, // 44: gosdn.networkelement.NetworkElementService.DeleteMne:input_type -> gosdn.networkelement.DeleteMneRequest
-	27, // 45: gosdn.networkelement.NetworkElementService.GetChangeList:input_type -> gosdn.networkelement.GetChangeListRequest
-	29, // 46: gosdn.networkelement.NetworkElementService.GetChange:input_type -> gosdn.networkelement.GetChangeRequest
-	31, // 47: gosdn.networkelement.NetworkElementService.SetChangeList:input_type -> gosdn.networkelement.SetChangeListRequest
-	35, // 48: gosdn.networkelement.NetworkElementService.SubscribePath:input_type -> gosdn.networkelement.SubscribePathRequest
-	10, // 49: gosdn.networkelement.NetworkElementService.GetMneList:output_type -> gosdn.networkelement.GetMneListResponse
-	11, // 50: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:output_type -> gosdn.networkelement.GetFlattenedMneListResponse
-	13, // 51: gosdn.networkelement.NetworkElementService.GetMne:output_type -> gosdn.networkelement.GetMneResponse
-	16, // 52: gosdn.networkelement.NetworkElementService.SetMneList:output_type -> gosdn.networkelement.SetMneListResponse
-	18, // 53: gosdn.networkelement.NetworkElementService.GetPath:output_type -> gosdn.networkelement.GetPathResponse
-	21, // 54: gosdn.networkelement.NetworkElementService.SetPathList:output_type -> gosdn.networkelement.SetPathListResponse
-	23, // 55: gosdn.networkelement.NetworkElementService.DeleteMne:output_type -> gosdn.networkelement.DeleteMneResponse
-	28, // 56: gosdn.networkelement.NetworkElementService.GetChangeList:output_type -> gosdn.networkelement.GetChangeListResponse
-	30, // 57: gosdn.networkelement.NetworkElementService.GetChange:output_type -> gosdn.networkelement.GetChangeResponse
-	32, // 58: gosdn.networkelement.NetworkElementService.SetChangeList:output_type -> gosdn.networkelement.SetChangeListResponse
-	36, // 59: gosdn.networkelement.NetworkElementService.SubscribePath:output_type -> gosdn.networkelement.SubscribePathResponse
-	49, // [49:60] is the sub-list for method output_type
-	38, // [38:49] is the sub-list for method input_type
-	38, // [38:38] is the sub-list for extension type_name
-	38, // [38:38] is the sub-list for extension extendee
-	0,  // [0:38] is the sub-list for field type_name
+	49, // 0: gosdn.networkelement.AddNetworkElementConfiguration.sbi:type_name -> gosdn.southbound.SouthboundInterface
+	50, // 1: gosdn.networkelement.AddNetworkElementConfiguration.transport_option:type_name -> gosdn.transport.TransportOption
+	6,  // 2: gosdn.networkelement.AddNetworkElementRequest.network_element:type_name -> gosdn.networkelement.AddNetworkElementConfiguration
+	0,  // 3: gosdn.networkelement.AddNetworkElementResponse.status:type_name -> gosdn.networkelement.Status
+	0,  // 4: gosdn.networkelement.GetNetworkElementResponse.status:type_name -> gosdn.networkelement.Status
+	17, // 5: gosdn.networkelement.GetNetworkElementResponse.network_element:type_name -> gosdn.networkelement.NetworkElement
+	0,  // 6: gosdn.networkelement.GetAllNetworkElementResponse.status:type_name -> gosdn.networkelement.Status
+	17, // 7: gosdn.networkelement.GetAllNetworkElementResponse.network_element:type_name -> gosdn.networkelement.NetworkElement
+	17, // 8: gosdn.networkelement.UpdateNetworkElementRequest.network_element:type_name -> gosdn.networkelement.NetworkElement
+	0,  // 9: gosdn.networkelement.UpdateNetworkElementResponse.status:type_name -> gosdn.networkelement.Status
+	0,  // 10: gosdn.networkelement.DeleteNetworkElementResponse.status:type_name -> gosdn.networkelement.Status
+	51, // 11: gosdn.networkelement.NetworkElement.metadata:type_name -> gosdn.conflict.Metadata
+	52, // 12: gosdn.networkelement.ManagedNetworkElement.mne_notification:type_name -> gnmi.Notification
+	49, // 13: gosdn.networkelement.ManagedNetworkElement.sbi:type_name -> gosdn.southbound.SouthboundInterface
+	51, // 14: gosdn.networkelement.ManagedNetworkElement.metadata:type_name -> gosdn.conflict.Metadata
+	20, // 15: gosdn.networkelement.GetMneListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	18, // 16: gosdn.networkelement.GetMneListResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement
+	20, // 17: gosdn.networkelement.GetFlattenedMneListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	19, // 18: gosdn.networkelement.GetFlattenedMneListResponse.mne:type_name -> gosdn.networkelement.FlattenedManagedNetworkElement
+	20, // 19: gosdn.networkelement.GetMneResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	18, // 20: gosdn.networkelement.GetMneResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement
+	49, // 21: gosdn.networkelement.SetMne.sbi:type_name -> gosdn.southbound.SouthboundInterface
+	50, // 22: gosdn.networkelement.SetMne.transport_option:type_name -> gosdn.transport.TransportOption
+	26, // 23: gosdn.networkelement.SetMneListRequest.mne:type_name -> gosdn.networkelement.SetMne
+	0,  // 24: gosdn.networkelement.SetMneListResponse.status:type_name -> gosdn.networkelement.Status
+	31, // 25: gosdn.networkelement.SetMneListResponse.responses:type_name -> gosdn.networkelement.SetResponse
+	20, // 26: gosdn.networkelement.GetPathResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	52, // 27: gosdn.networkelement.GetPathResponse.mne_notification:type_name -> gnmi.Notification
+	0,  // 28: gosdn.networkelement.SetResponse.status:type_name -> gosdn.networkelement.Status
+	37, // 29: gosdn.networkelement.SetPathListRequest.change_request:type_name -> gosdn.networkelement.ChangeRequest
+	0,  // 30: gosdn.networkelement.SetPathListResponse.status:type_name -> gosdn.networkelement.Status
+	31, // 31: gosdn.networkelement.SetPathListResponse.responses:type_name -> gosdn.networkelement.SetResponse
+	0,  // 32: gosdn.networkelement.DeleteMneResponse.status:type_name -> gosdn.networkelement.Status
+	1,  // 33: gosdn.networkelement.Change.state:type_name -> gosdn.networkelement.ChangeState
+	52, // 34: gosdn.networkelement.Change.diff:type_name -> gnmi.Notification
+	2,  // 35: gosdn.networkelement.ChangeRequest.api_op:type_name -> gosdn.networkelement.ApiOperation
+	3,  // 36: gosdn.networkelement.SetChange.op:type_name -> gosdn.networkelement.Operation
+	20, // 37: gosdn.networkelement.GetChangeListResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	36, // 38: gosdn.networkelement.GetChangeListResponse.change:type_name -> gosdn.networkelement.Change
+	20, // 39: gosdn.networkelement.GetChangeResponse.pnd:type_name -> gosdn.networkelement.PrincipalNetworkDomain
+	36, // 40: gosdn.networkelement.GetChangeResponse.change:type_name -> gosdn.networkelement.Change
+	38, // 41: gosdn.networkelement.SetChangeListRequest.change:type_name -> gosdn.networkelement.SetChange
+	0,  // 42: gosdn.networkelement.SetChangeListResponse.status:type_name -> gosdn.networkelement.Status
+	31, // 43: gosdn.networkelement.SetChangeListResponse.responses:type_name -> gosdn.networkelement.SetResponse
+	46, // 44: gosdn.networkelement.SubscriptionList.subscription:type_name -> gosdn.networkelement.Subscription
+	4,  // 45: gosdn.networkelement.SubscriptionList.mode:type_name -> gosdn.networkelement.SubscriptionMode
+	5,  // 46: gosdn.networkelement.Subscription.stream_mode:type_name -> gosdn.networkelement.StreamMode
+	45, // 47: gosdn.networkelement.SubscribePathRequest.sublist:type_name -> gosdn.networkelement.SubscriptionList
+	0,  // 48: gosdn.networkelement.SubscribePathResponse.status:type_name -> gosdn.networkelement.Status
+	52, // 49: gosdn.networkelement.SubscribePathResponse.mne_notification:type_name -> gnmi.Notification
+	7,  // 50: gosdn.networkelement.NetworkElementService.Add:input_type -> gosdn.networkelement.AddNetworkElementRequest
+	9,  // 51: gosdn.networkelement.NetworkElementService.Get:input_type -> gosdn.networkelement.GetNetworkElementRequest
+	11, // 52: gosdn.networkelement.NetworkElementService.GetAll:input_type -> gosdn.networkelement.GetAllNetworkElementRequest
+	13, // 53: gosdn.networkelement.NetworkElementService.Update:input_type -> gosdn.networkelement.UpdateNetworkElementRequest
+	21, // 54: gosdn.networkelement.NetworkElementService.GetMneList:input_type -> gosdn.networkelement.GetMneListRequest
+	21, // 55: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:input_type -> gosdn.networkelement.GetMneListRequest
+	24, // 56: gosdn.networkelement.NetworkElementService.GetMne:input_type -> gosdn.networkelement.GetMneRequest
+	27, // 57: gosdn.networkelement.NetworkElementService.SetMneList:input_type -> gosdn.networkelement.SetMneListRequest
+	29, // 58: gosdn.networkelement.NetworkElementService.GetPath:input_type -> gosdn.networkelement.GetPathRequest
+	32, // 59: gosdn.networkelement.NetworkElementService.SetPathList:input_type -> gosdn.networkelement.SetPathListRequest
+	34, // 60: gosdn.networkelement.NetworkElementService.DeleteMne:input_type -> gosdn.networkelement.DeleteMneRequest
+	39, // 61: gosdn.networkelement.NetworkElementService.GetChangeList:input_type -> gosdn.networkelement.GetChangeListRequest
+	41, // 62: gosdn.networkelement.NetworkElementService.GetChange:input_type -> gosdn.networkelement.GetChangeRequest
+	43, // 63: gosdn.networkelement.NetworkElementService.SetChangeList:input_type -> gosdn.networkelement.SetChangeListRequest
+	47, // 64: gosdn.networkelement.NetworkElementService.SubscribePath:input_type -> gosdn.networkelement.SubscribePathRequest
+	8,  // 65: gosdn.networkelement.NetworkElementService.Add:output_type -> gosdn.networkelement.AddNetworkElementResponse
+	10, // 66: gosdn.networkelement.NetworkElementService.Get:output_type -> gosdn.networkelement.GetNetworkElementResponse
+	12, // 67: gosdn.networkelement.NetworkElementService.GetAll:output_type -> gosdn.networkelement.GetAllNetworkElementResponse
+	14, // 68: gosdn.networkelement.NetworkElementService.Update:output_type -> gosdn.networkelement.UpdateNetworkElementResponse
+	22, // 69: gosdn.networkelement.NetworkElementService.GetMneList:output_type -> gosdn.networkelement.GetMneListResponse
+	23, // 70: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:output_type -> gosdn.networkelement.GetFlattenedMneListResponse
+	25, // 71: gosdn.networkelement.NetworkElementService.GetMne:output_type -> gosdn.networkelement.GetMneResponse
+	28, // 72: gosdn.networkelement.NetworkElementService.SetMneList:output_type -> gosdn.networkelement.SetMneListResponse
+	30, // 73: gosdn.networkelement.NetworkElementService.GetPath:output_type -> gosdn.networkelement.GetPathResponse
+	33, // 74: gosdn.networkelement.NetworkElementService.SetPathList:output_type -> gosdn.networkelement.SetPathListResponse
+	35, // 75: gosdn.networkelement.NetworkElementService.DeleteMne:output_type -> gosdn.networkelement.DeleteMneResponse
+	40, // 76: gosdn.networkelement.NetworkElementService.GetChangeList:output_type -> gosdn.networkelement.GetChangeListResponse
+	42, // 77: gosdn.networkelement.NetworkElementService.GetChange:output_type -> gosdn.networkelement.GetChangeResponse
+	44, // 78: gosdn.networkelement.NetworkElementService.SetChangeList:output_type -> gosdn.networkelement.SetChangeListResponse
+	48, // 79: gosdn.networkelement.NetworkElementService.SubscribePath:output_type -> gosdn.networkelement.SubscribePathResponse
+	65, // [65:80] is the sub-list for method output_type
+	50, // [50:65] 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
 }
 
 func init() { file_gosdn_networkelement_networkelement_proto_init() }
@@ -2893,7 +3818,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 	}
 	if !protoimpl.UnsafeEnabled {
 		file_gosdn_networkelement_networkelement_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ManagedNetworkElement); i {
+			switch v := v.(*AddNetworkElementConfiguration); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2905,7 +3830,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FlattenedManagedNetworkElement); i {
+			switch v := v.(*AddNetworkElementRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2917,7 +3842,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PrincipalNetworkDomain); i {
+			switch v := v.(*AddNetworkElementResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2929,7 +3854,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMneListRequest); i {
+			switch v := v.(*GetNetworkElementRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2941,7 +3866,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMneListResponse); i {
+			switch v := v.(*GetNetworkElementResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2953,7 +3878,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetFlattenedMneListResponse); i {
+			switch v := v.(*GetAllNetworkElementRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2965,7 +3890,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMneRequest); i {
+			switch v := v.(*GetAllNetworkElementResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2977,7 +3902,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetMneResponse); i {
+			switch v := v.(*UpdateNetworkElementRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -2989,7 +3914,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetMne); i {
+			switch v := v.(*UpdateNetworkElementResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3001,7 +3926,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetMneListRequest); i {
+			switch v := v.(*DeleteNetworkElementRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3013,7 +3938,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetMneListResponse); i {
+			switch v := v.(*DeleteNetworkElementResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3025,7 +3950,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPathRequest); i {
+			switch v := v.(*NetworkElement); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3037,7 +3962,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPathResponse); i {
+			switch v := v.(*ManagedNetworkElement); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3049,7 +3974,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetResponse); i {
+			switch v := v.(*FlattenedManagedNetworkElement); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3061,7 +3986,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetPathListRequest); i {
+			switch v := v.(*PrincipalNetworkDomain); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3073,7 +3998,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetPathListResponse); i {
+			switch v := v.(*GetMneListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3085,7 +4010,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteMneRequest); i {
+			switch v := v.(*GetMneListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3097,7 +4022,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteMneResponse); i {
+			switch v := v.(*GetFlattenedMneListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3109,7 +4034,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Change); i {
+			switch v := v.(*GetMneRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3121,7 +4046,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChangeRequest); i {
+			switch v := v.(*GetMneResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3133,7 +4058,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetChange); i {
+			switch v := v.(*SetMne); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3145,7 +4070,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetChangeListRequest); i {
+			switch v := v.(*SetMneListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3157,7 +4082,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetChangeListResponse); i {
+			switch v := v.(*SetMneListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3169,7 +4094,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetChangeRequest); i {
+			switch v := v.(*GetPathRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3181,7 +4106,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetChangeResponse); i {
+			switch v := v.(*GetPathResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3193,7 +4118,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetChangeListRequest); i {
+			switch v := v.(*SetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3205,7 +4130,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetChangeListResponse); i {
+			switch v := v.(*SetPathListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3217,7 +4142,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscriptionList); i {
+			switch v := v.(*SetPathListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3229,7 +4154,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Subscription); i {
+			switch v := v.(*DeleteMneRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3241,7 +4166,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscribePathRequest); i {
+			switch v := v.(*DeleteMneResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3253,6 +4178,150 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			}
 		}
 		file_gosdn_networkelement_networkelement_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Change); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ChangeRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetChange); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetChangeListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetChangeListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetChangeRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetChangeResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetChangeListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetChangeListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SubscriptionList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Subscription); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SubscribePathRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdn_networkelement_networkelement_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*SubscribePathResponse); i {
 			case 0:
 				return &v.state
@@ -3271,7 +4340,7 @@ func file_gosdn_networkelement_networkelement_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_gosdn_networkelement_networkelement_proto_rawDesc,
 			NumEnums:      6,
-			NumMessages:   31,
+			NumMessages:   43,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/api/go/gosdn/networkelement/networkelement.pb.gw.go b/api/go/gosdn/networkelement/networkelement.pb.gw.go
index d803ea38cd6958197a12ce6ab05d73e89d2636fd..bc54ecd353acaf84a72d0ec783bf1bb3f14a1161 100644
--- a/api/go/gosdn/networkelement/networkelement.pb.gw.go
+++ b/api/go/gosdn/networkelement/networkelement.pb.gw.go
@@ -31,6 +31,146 @@ var _ = runtime.String
 var _ = utilities.NewDoubleArray
 var _ = metadata.Join
 
+func request_NetworkElementService_Add_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq AddNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.Add(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_NetworkElementService_Add_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq AddNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.Add(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+var (
+	filter_NetworkElementService_Get_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
+)
+
+func request_NetworkElementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Get_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.Get(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_NetworkElementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Get_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.Get(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+var (
+	filter_NetworkElementService_GetAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
+)
+
+func request_NetworkElementService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetAllNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetAll_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.GetAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_NetworkElementService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetAllNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetAll_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.GetAll(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_NetworkElementService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq UpdateNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_NetworkElementService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq UpdateNetworkElementRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.Update(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 var (
 	filter_NetworkElementService_GetFlattenedMneList_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
 )
@@ -761,6 +901,98 @@ func local_request_NetworkElementService_SetChangeList_0(ctx context.Context, ma
 // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterNetworkElementServiceHandlerFromEndpoint instead.
 func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server NetworkElementServiceServer) error {
 
+	mux.Handle("POST", pattern_NetworkElementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Add", runtime.WithHTTPPathPattern("/network-element/create"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_NetworkElementService_Add_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Add_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/network-element"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_NetworkElementService_Get_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Get_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_NetworkElementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAll", runtime.WithHTTPPathPattern("/network-element/all"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_NetworkElementService_GetAll_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_GetAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_NetworkElementService_Update_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("GET", pattern_NetworkElementService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1009,6 +1241,86 @@ func RegisterNetworkElementServiceHandler(ctx context.Context, mux *runtime.Serv
 // "NetworkElementServiceClient" to call the correct interceptors.
 func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client NetworkElementServiceClient) error {
 
+	mux.Handle("POST", pattern_NetworkElementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Add", runtime.WithHTTPPathPattern("/network-element/create"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_NetworkElementService_Add_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Add_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/network-element"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_NetworkElementService_Get_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Get_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_NetworkElementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAll", runtime.WithHTTPPathPattern("/network-element/all"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_NetworkElementService_GetAll_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_GetAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_NetworkElementService_Update_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_NetworkElementService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("GET", pattern_NetworkElementService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1193,6 +1505,14 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim
 }
 
 var (
+	pattern_NetworkElementService_Add_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "create"}, ""))
+
+	pattern_NetworkElementService_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"network-element"}, ""))
+
+	pattern_NetworkElementService_GetAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "all"}, ""))
+
+	pattern_NetworkElementService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "update"}, ""))
+
 	pattern_NetworkElementService_GetFlattenedMneList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "mnes"}, ""))
 
 	pattern_NetworkElementService_GetMne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "mne", "mneid"}, ""))
@@ -1213,6 +1533,14 @@ var (
 )
 
 var (
+	forward_NetworkElementService_Add_0 = runtime.ForwardResponseMessage
+
+	forward_NetworkElementService_Get_0 = runtime.ForwardResponseMessage
+
+	forward_NetworkElementService_GetAll_0 = runtime.ForwardResponseMessage
+
+	forward_NetworkElementService_Update_0 = runtime.ForwardResponseMessage
+
 	forward_NetworkElementService_GetFlattenedMneList_0 = runtime.ForwardResponseMessage
 
 	forward_NetworkElementService_GetMne_0 = runtime.ForwardResponseMessage
diff --git a/api/go/gosdn/networkelement/networkelement_grpc.pb.go b/api/go/gosdn/networkelement/networkelement_grpc.pb.go
index 963f5e20002ed3c42f3751f77d530019b16f9019..10d29b3d051a2edd4c626fa774513fa69f16d0af 100644
--- a/api/go/gosdn/networkelement/networkelement_grpc.pb.go
+++ b/api/go/gosdn/networkelement/networkelement_grpc.pb.go
@@ -18,6 +18,10 @@ const _ = grpc.SupportPackageIsVersion7
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type NetworkElementServiceClient interface {
+	Add(ctx context.Context, in *AddNetworkElementRequest, opts ...grpc.CallOption) (*AddNetworkElementResponse, error)
+	Get(ctx context.Context, in *GetNetworkElementRequest, opts ...grpc.CallOption) (*GetNetworkElementResponse, error)
+	GetAll(ctx context.Context, in *GetAllNetworkElementRequest, opts ...grpc.CallOption) (*GetAllNetworkElementResponse, error)
+	Update(ctx context.Context, in *UpdateNetworkElementRequest, opts ...grpc.CallOption) (*UpdateNetworkElementResponse, error)
 	// Allows to request all Managed Network Elements (MNE) which are
 	// managed by a specific Principal Network Domain.
 	// Full MNEs are provided, which also includes the MNE config as gNMI
@@ -64,6 +68,42 @@ func NewNetworkElementServiceClient(cc grpc.ClientConnInterface) NetworkElementS
 	return &networkElementServiceClient{cc}
 }
 
+func (c *networkElementServiceClient) Add(ctx context.Context, in *AddNetworkElementRequest, opts ...grpc.CallOption) (*AddNetworkElementResponse, error) {
+	out := new(AddNetworkElementResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/Add", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkElementServiceClient) Get(ctx context.Context, in *GetNetworkElementRequest, opts ...grpc.CallOption) (*GetNetworkElementResponse, error) {
+	out := new(GetNetworkElementResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/Get", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkElementServiceClient) GetAll(ctx context.Context, in *GetAllNetworkElementRequest, opts ...grpc.CallOption) (*GetAllNetworkElementResponse, error) {
+	out := new(GetAllNetworkElementResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetAll", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkElementServiceClient) Update(ctx context.Context, in *UpdateNetworkElementRequest, opts ...grpc.CallOption) (*UpdateNetworkElementResponse, error) {
+	out := new(UpdateNetworkElementResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/Update", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *networkElementServiceClient) GetMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetMneListResponse, error) {
 	out := new(GetMneListResponse)
 	err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetMneList", in, out, opts...)
@@ -190,6 +230,10 @@ func (x *networkElementServiceSubscribePathClient) Recv() (*SubscribePathRespons
 // All implementations must embed UnimplementedNetworkElementServiceServer
 // for forward compatibility
 type NetworkElementServiceServer interface {
+	Add(context.Context, *AddNetworkElementRequest) (*AddNetworkElementResponse, error)
+	Get(context.Context, *GetNetworkElementRequest) (*GetNetworkElementResponse, error)
+	GetAll(context.Context, *GetAllNetworkElementRequest) (*GetAllNetworkElementResponse, error)
+	Update(context.Context, *UpdateNetworkElementRequest) (*UpdateNetworkElementResponse, error)
 	// Allows to request all Managed Network Elements (MNE) which are
 	// managed by a specific Principal Network Domain.
 	// Full MNEs are provided, which also includes the MNE config as gNMI
@@ -233,6 +277,18 @@ type NetworkElementServiceServer interface {
 type UnimplementedNetworkElementServiceServer struct {
 }
 
+func (UnimplementedNetworkElementServiceServer) Add(context.Context, *AddNetworkElementRequest) (*AddNetworkElementResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Add not implemented")
+}
+func (UnimplementedNetworkElementServiceServer) Get(context.Context, *GetNetworkElementRequest) (*GetNetworkElementResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedNetworkElementServiceServer) GetAll(context.Context, *GetAllNetworkElementRequest) (*GetAllNetworkElementResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAll not implemented")
+}
+func (UnimplementedNetworkElementServiceServer) Update(context.Context, *UpdateNetworkElementRequest) (*UpdateNetworkElementResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Update not implemented")
+}
 func (UnimplementedNetworkElementServiceServer) GetMneList(context.Context, *GetMneListRequest) (*GetMneListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetMneList not implemented")
 }
@@ -279,6 +335,78 @@ func RegisterNetworkElementServiceServer(s grpc.ServiceRegistrar, srv NetworkEle
 	s.RegisterService(&NetworkElementService_ServiceDesc, srv)
 }
 
+func _NetworkElementService_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AddNetworkElementRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkElementServiceServer).Add(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.networkelement.NetworkElementService/Add",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkElementServiceServer).Add(ctx, req.(*AddNetworkElementRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NetworkElementService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetNetworkElementRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkElementServiceServer).Get(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.networkelement.NetworkElementService/Get",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkElementServiceServer).Get(ctx, req.(*GetNetworkElementRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NetworkElementService_GetAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAllNetworkElementRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkElementServiceServer).GetAll(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.networkelement.NetworkElementService/GetAll",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkElementServiceServer).GetAll(ctx, req.(*GetAllNetworkElementRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NetworkElementService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateNetworkElementRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkElementServiceServer).Update(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.networkelement.NetworkElementService/Update",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkElementServiceServer).Update(ctx, req.(*UpdateNetworkElementRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _NetworkElementService_GetMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(GetMneListRequest)
 	if err := dec(in); err != nil {
@@ -487,6 +615,22 @@ var NetworkElementService_ServiceDesc = grpc.ServiceDesc{
 	ServiceName: "gosdn.networkelement.NetworkElementService",
 	HandlerType: (*NetworkElementServiceServer)(nil),
 	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Add",
+			Handler:    _NetworkElementService_Add_Handler,
+		},
+		{
+			MethodName: "Get",
+			Handler:    _NetworkElementService_Get_Handler,
+		},
+		{
+			MethodName: "GetAll",
+			Handler:    _NetworkElementService_GetAll_Handler,
+		},
+		{
+			MethodName: "Update",
+			Handler:    _NetworkElementService_Update_Handler,
+		},
 		{
 			MethodName: "GetMneList",
 			Handler:    _NetworkElementService_GetMneList_Handler,
diff --git a/api/openapiv2/gosdn_northbound.swagger.json b/api/openapiv2/gosdn_northbound.swagger.json
index 5704748baa9f52dba2a16da12e469f9a83c67e92..9d897f1e77e2de32bc6993ba0f1706553717a99c 100644
--- a/api/openapiv2/gosdn_northbound.swagger.json
+++ b/api/openapiv2/gosdn_northbound.swagger.json
@@ -168,6 +168,138 @@
         ]
       }
     },
+    "/network-element": {
+      "get": {
+        "operationId": "NetworkElementService_Get",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/networkelementGetNetworkElementResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "timestamp",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "networkElementId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "NetworkElementService"
+        ]
+      }
+    },
+    "/network-element/all": {
+      "get": {
+        "operationId": "NetworkElementService_GetAll",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/networkelementGetAllNetworkElementResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "timestamp",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "NetworkElementService"
+        ]
+      }
+    },
+    "/network-element/create": {
+      "post": {
+        "operationId": "NetworkElementService_Add",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/networkelementAddNetworkElementResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/networkelementAddNetworkElementRequest"
+            }
+          }
+        ],
+        "tags": [
+          "NetworkElementService"
+        ]
+      }
+    },
+    "/network-element/update": {
+      "post": {
+        "operationId": "NetworkElementService_Update",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/networkelementUpdateNetworkElementResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/networkelementUpdateNetworkElementRequest"
+            }
+          }
+        ],
+        "tags": [
+          "NetworkElementService"
+        ]
+      }
+    },
     "/pnd/{pid}": {
       "get": {
         "summary": "Allows to request a specific Principal Network Domain.",
@@ -3040,6 +3172,53 @@
       ],
       "default": "STATUS_UNSPECIFIED"
     },
+    "networkelementAddNetworkElementConfiguration": {
+      "type": "object",
+      "properties": {
+        "address": {
+          "type": "string"
+        },
+        "sbi": {
+          "$ref": "#/definitions/southboundSouthboundInterface"
+        },
+        "networkElementName": {
+          "type": "string"
+        },
+        "transportOption": {
+          "$ref": "#/definitions/transportTransportOption"
+        }
+      }
+    },
+    "networkelementAddNetworkElementRequest": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "networkElement": {
+          "$ref": "#/definitions/networkelementAddNetworkElementConfiguration"
+        },
+        "pid": {
+          "type": "string"
+        }
+      }
+    },
+    "networkelementAddNetworkElementResponse": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "status": {
+          "$ref": "#/definitions/gosdnnetworkelementStatus"
+        },
+        "networkElementId": {
+          "type": "string"
+        }
+      }
+    },
     "networkelementApiOperation": {
       "type": "string",
       "enum": [
@@ -3123,6 +3302,24 @@
         }
       }
     },
+    "networkelementGetAllNetworkElementResponse": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "status": {
+          "$ref": "#/definitions/gosdnnetworkelementStatus"
+        },
+        "networkElement": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/networkelementNetworkElement"
+          }
+        }
+      }
+    },
     "networkelementGetChangeListResponse": {
       "type": "object",
       "properties": {
@@ -3216,6 +3413,21 @@
         }
       }
     },
+    "networkelementGetNetworkElementResponse": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "status": {
+          "$ref": "#/definitions/gosdnnetworkelementStatus"
+        },
+        "networkElement": {
+          "$ref": "#/definitions/networkelementNetworkElement"
+        }
+      }
+    },
     "networkelementGetPathResponse": {
       "type": "object",
       "properties": {
@@ -3244,6 +3456,9 @@
         "name": {
           "type": "string"
         },
+        "model": {
+          "type": "string"
+        },
         "mneNotification": {
           "type": "array",
           "items": {
@@ -3253,10 +3468,35 @@
         "sbi": {
           "$ref": "#/definitions/southboundSouthboundInterface"
         },
+        "transportAddress": {
+          "type": "string"
+        },
         "metadata": {
           "$ref": "#/definitions/conflictMetadata"
         }
-      }
+      },
+      "title": "TODO(PND): maybe need to clean this up!"
+    },
+    "networkelementNetworkElement": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "model": {
+          "type": "string"
+        },
+        "transportAddress": {
+          "type": "string"
+        },
+        "metadata": {
+          "$ref": "#/definitions/conflictMetadata"
+        }
+      },
+      "title": "TODO(PND):remove this after ManagedNetworkElement is cleaned up"
     },
     "networkelementSetChange": {
       "type": "object",
@@ -3368,6 +3608,30 @@
         }
       }
     },
+    "networkelementUpdateNetworkElementRequest": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "networkElement": {
+          "$ref": "#/definitions/networkelementNetworkElement"
+        }
+      }
+    },
+    "networkelementUpdateNetworkElementResponse": {
+      "type": "object",
+      "properties": {
+        "timestamp": {
+          "type": "string",
+          "format": "int64"
+        },
+        "status": {
+          "$ref": "#/definitions/gosdnnetworkelementStatus"
+        }
+      }
+    },
     "pndGetSbiListResponse": {
       "type": "object",
       "properties": {
diff --git a/api/proto/gosdn/networkelement/networkelement.proto b/api/proto/gosdn/networkelement/networkelement.proto
index fa4e668d35081032d7b537ac4f12a06beb8afd55..559d606a3ddca28cb39f9d2e03c8ed5c9ac9f41e 100644
--- a/api/proto/gosdn/networkelement/networkelement.proto
+++ b/api/proto/gosdn/networkelement/networkelement.proto
@@ -15,6 +15,39 @@ option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement";
 
 //TODO(PND): add option to update our stored MNE (e.g. name,  descr)instead of only being able to change YANG
 service NetworkElementService {
+    rpc Add(AddNetworkElementRequest) returns (AddNetworkElementResponse) {
+        option (google.api.http) = {
+            post: "/network-element/create"
+            body: "*"
+        };
+    }
+
+    rpc Get(GetNetworkElementRequest) returns (GetNetworkElementResponse) {
+        option (google.api.http) = {
+            get: "/network-element"
+        };
+    }
+
+    rpc GetAll(GetAllNetworkElementRequest) returns (GetAllNetworkElementResponse) {
+        option (google.api.http) = {
+            get: "/network-element/all"
+        };
+    }
+
+    rpc Update(UpdateNetworkElementRequest) returns (UpdateNetworkElementResponse) {
+        option (google.api.http) = {
+            post: "/network-element/update"
+            body: "*"
+        };
+    }
+
+    // TODO: not implemented yet!
+    // rpc Delete(DeleteNetworkElementRequest) returns (DeleteNetworkElementRequest) {
+    //     option (google.api.http) = {
+    //         delete: "/network-element"
+    //     };
+    // }
+
   // Allows to request all Managed Network Elements (MNE) which are
   // managed by a specific Principal Network Domain.
   // Full MNEs are provided, which also includes the MNE config as gNMI
@@ -99,20 +132,87 @@ enum Status {
     STATUS_ERROR = 2;
 }
 
-// message NetworkElement {
-//     string id = 1;
-//     string name = 2;
-//     string model = 3;
-//     string transport_address = 4;
-//     conflict.Metadata metadata = 5;
-// }
+message AddNetworkElementConfiguration {
+    string address = 1;
+    .gosdn.southbound.SouthboundInterface sbi = 2;
+    string network_element_name = 3;
+    .gosdn.transport.TransportOption transport_option = 4;
+}
+
+message AddNetworkElementRequest {
+    int64 timestamp = 1;
+    AddNetworkElementConfiguration network_element = 2;
+    string pid = 3;
+}
 
-message ManagedNetworkElement {
+message AddNetworkElementResponse {
+    int64 timestamp = 1;
+    Status status = 2;
+    string network_element_id = 3;
+}
+
+message GetNetworkElementRequest {
+    int64 timestamp = 1;
+    string network_element_id = 2;
+}
+
+message GetNetworkElementResponse {
+    int64 timestamp = 1;
+    Status status = 2;
+    NetworkElement network_element = 3;
+}
+
+message GetAllNetworkElementRequest {
+    int64 timestamp = 1;
+}
+
+message GetAllNetworkElementResponse {
+    int64 timestamp = 1;
+    Status status = 2;
+    repeated NetworkElement network_element = 3;
+}
+
+message UpdateNetworkElementRequest {
+    int64 timestamp = 1;
+    NetworkElement network_element = 2;
+}
+
+message UpdateNetworkElementResponse {
+    int64 timestamp = 1;
+    Status status = 2;
+}
+
+message DeleteNetworkElementRequest {
+    int64 timestamp = 1;
+    string network_element_id = 2;
+}
+
+message DeleteNetworkElementResponse {
+    int64 timestamp = 1;
+    Status status = 2;
+}
+
+
+
+//TODO(PND):remove this after ManagedNetworkElement is cleaned up
+message NetworkElement {
     string id = 1;
     string name = 2;
-    repeated gnmi.Notification mne_notification = 3;
-    .gosdn.southbound.SouthboundInterface sbi = 4;
+    string model = 3;
+    string transport_address = 4;
     conflict.Metadata metadata = 5;
+}
+
+//TODO(PND): maybe need to clean this up!
+//TODO(PND): add pnd id to this object, for reference
+message ManagedNetworkElement {
+    string id = 1;
+    string name = 2;
+    string model = 3;
+    repeated gnmi.Notification mne_notification = 4;
+    .gosdn.southbound.SouthboundInterface sbi = 5;
+    string transport_address = 6;
+    conflict.Metadata metadata = 7;
  }
 
 message FlattenedManagedNetworkElement {
diff --git a/cli/adapter/PndAdapter.go b/cli/adapter/PndAdapter.go
index 305869cda7aaef001935ef5ac8383b79d17aa621..2f346c73e6a5b9b219917cf16930c743bce7e137 100644
--- a/cli/adapter/PndAdapter.go
+++ b/cli/adapter/PndAdapter.go
@@ -4,6 +4,7 @@ import (
 	"context"
 
 	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
 	"code.fbi.h-da.de/danet/gosdn/controller/api"
@@ -47,7 +48,7 @@ func (p *PndAdapter) RemoveSbi(uuid.UUID) error {
 
 // AddNetworkElement adds a new device to the controller. The device name is optional.
 // If no name is provided a name will be generated upon device creation.
-func (p *PndAdapter) AddNetworkElement(ctx context.Context, name string, opts *tpb.TransportOption, sid uuid.UUID) (*ppb.SetMneListResponse, error) {
+func (p *PndAdapter) AddNetworkElement(ctx context.Context, name string, opts *tpb.TransportOption, sid uuid.UUID) (*mnepb.SetMneListResponse, error) {
 	resp, err := api.AddNetworkElement(ctx, p.endpoint, name, opts, sid, p.ID())
 	if err != nil {
 		return nil, err
@@ -66,7 +67,7 @@ func (p *PndAdapter) GetSbiSchemaTree(ctx context.Context, sid uuid.UUID) (map[s
 
 // GetNetworkElement requests one or multiple devices belonging to a given
 // PrincipalNetworkDomain from the controller.
-func (p *PndAdapter) GetNetworkElement(ctx context.Context, identifier string) (*ppb.GetMneResponse, error) {
+func (p *PndAdapter) GetNetworkElement(ctx context.Context, identifier string) (*mnepb.GetMneResponse, error) {
 	resp, err := api.GetNetworkElement(ctx, p.endpoint, p.id.String(), identifier)
 	if err != nil {
 		return nil, err
@@ -77,7 +78,7 @@ func (p *PndAdapter) GetNetworkElement(ctx context.Context, identifier string) (
 // GetFlattenedNetworkElements requests all devices belonging to the PrincipalNetworkDomain
 // attached to this adapter. The requested devices also contain their config
 // information as gNMI notifications.
-func (p *PndAdapter) GetFlattenedNetworkElements(ctx context.Context) (*ppb.GetFlattenedMneListResponse, error) {
+func (p *PndAdapter) GetFlattenedNetworkElements(ctx context.Context) (*mnepb.GetFlattenedMneListResponse, error) {
 	resp, err := api.GetFlattenedNetworkElements(ctx, p.endpoint, p.id.String())
 	if err != nil {
 		return nil, err
@@ -86,7 +87,7 @@ func (p *PndAdapter) GetFlattenedNetworkElements(ctx context.Context) (*ppb.GetF
 }
 
 // RemoveNetworkElement removes a device from the controller.
-func (p *PndAdapter) RemoveNetworkElement(ctx context.Context, did uuid.UUID) (*ppb.DeleteMneResponse, error) {
+func (p *PndAdapter) RemoveNetworkElement(ctx context.Context, did uuid.UUID) (*mnepb.DeleteMneResponse, error) {
 	resp, err := api.DeleteNetworkElement(ctx, p.endpoint, p.id.String(), did.String())
 	if err != nil {
 		return nil, err
@@ -106,7 +107,7 @@ func (p *PndAdapter) RemovePnd(ctx context.Context, pid uuid.UUID) (*core.Delete
 // ChangeMNE sends an API call to the controller requesting the creation of
 // a change from the provided Operation, path and value. The Change is marked
 // as Pending and times out after the specified timeout period.
-func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation ppb.ApiOperation, path string, value ...string) (*ppb.SetPathListResponse, error) {
+func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation mnepb.ApiOperation, path string, value ...string) (*mnepb.SetPathListResponse, error) {
 	var v string
 	if len(value) != 0 {
 		v = value[0]
@@ -120,7 +121,7 @@ func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation pp
 
 // Request sends an API call to the controller requesting the specified path
 // for the specified device.
-func (p *PndAdapter) Request(ctx context.Context, did uuid.UUID, path string) (*ppb.GetPathResponse, error) {
+func (p *PndAdapter) Request(ctx context.Context, did uuid.UUID, path string) (*mnepb.GetPathResponse, error) {
 	resp, err := api.GetPath(ctx, p.endpoint, p.id.String(), did.String(), path)
 	if err != nil {
 		return nil, err
@@ -130,7 +131,7 @@ func (p *PndAdapter) Request(ctx context.Context, did uuid.UUID, path string) (*
 
 // SubscribeMNEPath sends an API call to the controller requesting to subscribe
 // to a specific path of a specifc device.
-func (p *PndAdapter) SubscribeMNEPath(ctx context.Context, did uuid.UUID, slist *ppb.SubscriptionList) (ppb.PndService_SubscribePathClient, error) {
+func (p *PndAdapter) SubscribeMNEPath(ctx context.Context, did uuid.UUID, slist *mnepb.SubscriptionList) (mnepb.NetworkElementService_SubscribePathClient, error) {
 	resp, err := api.SubscribePath(ctx, p.endpoint, p.id.String(), did.String(), slist)
 	if err != nil {
 		return nil, err
@@ -206,37 +207,37 @@ func (p *PndAdapter) Endpoint() string {
 
 // PendingChanges sends an API call to the controller requesting
 // the UUIDs of all pending changes.
-func (p *PndAdapter) PendingChanges(ctx context.Context) ([]*ppb.Change, error) {
+func (p *PndAdapter) PendingChanges(ctx context.Context) ([]*mnepb.Change, error) {
 	resp, err := api.GetChanges(ctx, p.endpoint, p.id.String())
 	if err != nil {
 		return nil, err
 	}
-	return filterChanges(ppb.ChangeState_CHANGE_STATE_PENDING, resp), nil
+	return filterChanges(mnepb.ChangeState_CHANGE_STATE_PENDING, resp), nil
 }
 
 // CommittedChanges sends an API call to the controller requesting
 // the UUIDs of all committed changes.
-func (p *PndAdapter) CommittedChanges(ctx context.Context) ([]*ppb.Change, error) {
+func (p *PndAdapter) CommittedChanges(ctx context.Context) ([]*mnepb.Change, error) {
 	resp, err := api.GetChanges(ctx, p.endpoint, p.id.String())
 	if err != nil {
 		return nil, err
 	}
-	return filterChanges(ppb.ChangeState_CHANGE_STATE_COMMITTED, resp), nil
+	return filterChanges(mnepb.ChangeState_CHANGE_STATE_COMMITTED, resp), nil
 }
 
 // ConfirmedChanges sends an API call to the controller requesting
 // the UUIDs of all confirmed changes.
-func (p *PndAdapter) ConfirmedChanges(ctx context.Context) ([]*ppb.Change, error) {
+func (p *PndAdapter) ConfirmedChanges(ctx context.Context) ([]*mnepb.Change, error) {
 	resp, err := api.GetChanges(ctx, p.endpoint, p.id.String())
 	if err != nil {
 		return nil, err
 	}
-	return filterChanges(ppb.ChangeState_CHANGE_STATE_CONFIRMED, resp), nil
+	return filterChanges(mnepb.ChangeState_CHANGE_STATE_CONFIRMED, resp), nil
 }
 
 // GetChange sends an API call to the controller requesting one or more changes
 // for the specific PND.
-func (p *PndAdapter) GetChange(ctx context.Context, identifier ...string) (*ppb.GetChangeResponse, error) {
+func (p *PndAdapter) GetChange(ctx context.Context, identifier ...string) (*mnepb.GetChangeResponse, error) {
 	resp, err := api.GetChange(ctx, p.endpoint, p.id.String(), identifier...)
 	if err != nil {
 		return nil, err
@@ -245,7 +246,7 @@ func (p *PndAdapter) GetChange(ctx context.Context, identifier ...string) (*ppb.
 }
 
 // Commit sends an API call to the controller committing the specified change.
-func (p *PndAdapter) Commit(ctx context.Context, cuid uuid.UUID) (*ppb.SetChangeListResponse, error) {
+func (p *PndAdapter) Commit(ctx context.Context, cuid uuid.UUID) (*mnepb.SetChangeListResponse, error) {
 	resp, err := api.Commit(ctx, p.endpoint, p.id.String(), cuid.String())
 	if err != nil {
 		return nil, err
@@ -254,7 +255,7 @@ func (p *PndAdapter) Commit(ctx context.Context, cuid uuid.UUID) (*ppb.SetChange
 }
 
 // Confirm sends an API call to the controller confirming the specified change.
-func (p *PndAdapter) Confirm(ctx context.Context, cuid uuid.UUID) (*ppb.SetChangeListResponse, error) {
+func (p *PndAdapter) Confirm(ctx context.Context, cuid uuid.UUID) (*mnepb.SetChangeListResponse, error) {
 	resp, err := api.Confirm(ctx, p.endpoint, p.id.String(), cuid.String())
 	if err != nil {
 		return nil, err
@@ -262,8 +263,8 @@ func (p *PndAdapter) Confirm(ctx context.Context, cuid uuid.UUID) (*ppb.SetChang
 	return resp, nil
 }
 
-func filterChanges(state ppb.ChangeState, resp *ppb.GetChangeListResponse) []*ppb.Change {
-	changes := make([]*ppb.Change, 0)
+func filterChanges(state mnepb.ChangeState, resp *mnepb.GetChangeListResponse) []*mnepb.Change {
+	changes := make([]*mnepb.Change, 0)
 	for _, ch := range resp.Change {
 		if ch.State == state {
 			changes = append(changes, ch)
diff --git a/cli/adapter/PndAdapter_test.go b/cli/adapter/PndAdapter_test.go
index c4e3ebefed4649f384a09cddd2e761c2f4712512..1ff0c39a16f501de66513728b1caec8afca83c4c 100644
--- a/cli/adapter/PndAdapter_test.go
+++ b/cli/adapter/PndAdapter_test.go
@@ -6,7 +6,6 @@ import (
 	"testing"
 
 	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
-	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/change"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
@@ -143,7 +142,7 @@ func TestPndAdapter_GetNetworkElement(t *testing.T) {
 		name    string
 		fields  fields
 		args    args
-		want    *mnepb.NetworkElement
+		want    *mnepb.ManagedNetworkElement
 		wantErr bool
 	}{
 		// TODO: Add test cases.
@@ -202,7 +201,7 @@ func TestPndAdapter_ChangeMNE(t *testing.T) {
 	}
 	type args struct {
 		uuid      uuid.UUID
-		operation ppb.ApiOperation
+		operation mnepb.ApiOperation
 		path      string
 		value     []string
 	}
@@ -512,8 +511,8 @@ func TestPndAdapter_Confirm(t *testing.T) {
 
 func Test_filterChanges(t *testing.T) {
 	type args struct {
-		state ppb.ChangeState
-		resp  *ppb.GetChangeListResponse
+		state mnepb.ChangeState
+		resp  *mnepb.GetChangeListResponse
 	}
 	tests := []struct {
 		name string
diff --git a/cli/cmd/networkElementDelete.go b/cli/cmd/networkElementDelete.go
index 134972c4eca504afdb8210dc99c3688ea1636656..4b9c2221d3376e232f8fcb54cfbf27ac24a2dbff 100644
--- a/cli/cmd/networkElementDelete.go
+++ b/cli/cmd/networkElementDelete.go
@@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE.
 package cmd
 
 import (
-	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	"github.com/google/uuid"
 	"github.com/pterm/pterm"
 	"github.com/spf13/cobra"
@@ -57,7 +57,7 @@ The network element UUID and request path must be specified as a positional argu
 		resp, err := pndAdapter.ChangeMNE(
 			createContextWithAuthorization(),
 			mneid,
-			ppb.ApiOperation_API_OPERATION_DELETE,
+			mnepb.ApiOperation_API_OPERATION_DELETE,
 			args[1],
 		)
 		if err != nil {
@@ -66,7 +66,7 @@ The network element UUID and request path must be specified as a positional argu
 		}
 
 		for _, r := range resp.Responses {
-			if r.Status == ppb.Status_STATUS_OK {
+			if r.Status == mnepb.Status_STATUS_OK {
 				spinner.Success("A change for path deletion for network element: ", mneid.String(), "has been created -> Change ID: ", r.GetId())
 			} else {
 				spinner.Fail("An error occurred while creating a path deletion request for network element with ID: ", r.GetId(), r.GetStatus())
diff --git a/cli/cmd/networkElementSet.go b/cli/cmd/networkElementSet.go
index faa0040e0d7c00fefc82b29c5e41a2beabf93a53..c548f001dda4cc932fb70899c5d905a827099aef 100644
--- a/cli/cmd/networkElementSet.go
+++ b/cli/cmd/networkElementSet.go
@@ -34,7 +34,7 @@ package cmd
 import (
 	"os"
 
-	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	"github.com/google/uuid"
 	"github.com/pterm/pterm"
 	"github.com/spf13/cobra"
@@ -62,12 +62,12 @@ To enable replacing behaviour (destructive!), set the --replace flag."`,
 			spinner.Fail(err)
 		}
 		var value string
-		var operation ppb.ApiOperation
+		var operation mnepb.ApiOperation
 		if replace {
-			operation = ppb.ApiOperation_API_OPERATION_REPLACE
+			operation = mnepb.ApiOperation_API_OPERATION_REPLACE
 			spinner.UpdateText("Replace generated and sent")
 		} else {
-			operation = ppb.ApiOperation_API_OPERATION_UPDATE
+			operation = mnepb.ApiOperation_API_OPERATION_UPDATE
 			spinner.UpdateText("Update generated and sent")
 		}
 
diff --git a/cli/cmd/networkElementSubscribe.go b/cli/cmd/networkElementSubscribe.go
index e2b98b2c51ee58578f1cc239c41de8d4bee29318..245d9f6fb8c4820d65719cda5a5d3087bd4fe0da 100644
--- a/cli/cmd/networkElementSubscribe.go
+++ b/cli/cmd/networkElementSubscribe.go
@@ -35,7 +35,7 @@ import (
 	"errors"
 	"io"
 
-	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	"github.com/google/uuid"
 	"github.com/pterm/pterm"
 	log "github.com/sirupsen/logrus"
@@ -60,15 +60,15 @@ The device UUID and requested paths must be specified as a positional arguments.
 		subClient, err := pndAdapter.SubscribeMNEPath(
 			createContextWithAuthorization(),
 			did,
-			&pnd.SubscriptionList{
-				Subscription: []*pnd.Subscription{
+			&mnepb.SubscriptionList{
+				Subscription: []*mnepb.Subscription{
 					{
 						Path:           args[1],
-						StreamMode:     pnd.StreamMode_STREAM_MODE_SAMPLE,
+						StreamMode:     mnepb.StreamMode_STREAM_MODE_SAMPLE,
 						SampleInterval: 1000000000,
 					},
 				},
-				Mode: pnd.SubscriptionMode_SUBSCRIPTION_MODE_STREAM,
+				Mode: mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM,
 			},
 		)
 		if err != nil {
diff --git a/controller/api/change.go b/controller/api/change.go
index dfd3115581eb3ae87633d89cc3d3effcb1ec5bf3..afcf113b07452cc9bd0f4e14003277999c33d5ef 100644
--- a/controller/api/change.go
+++ b/controller/api/change.go
@@ -11,7 +11,7 @@ import (
 
 // GetChanges requests all pending and unconfirmed changes from the controller.
 func GetChanges(ctx context.Context, addr, pnd string) (*mnepb.GetChangeListResponse, error) {
-	client, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -24,7 +24,7 @@ func GetChanges(ctx context.Context, addr, pnd string) (*mnepb.GetChangeListResp
 
 // GetChange requests one or more changes from the controller.
 func GetChange(ctx context.Context, addr string, pnd string, args ...string) (*mnepb.GetChangeResponse, error) {
-	client, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -67,7 +67,7 @@ func Confirm(ctx context.Context, addr, pnd string, cuids ...string) (*mnepb.Set
 
 // CommitConfirm confirms a commit.
 func CommitConfirm(ctx context.Context, addr, pnd string, changes []*mnepb.SetChange) (*mnepb.SetChangeListResponse, error) {
-	client, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -96,7 +96,7 @@ func ChangeRequest(ctx context.Context, addr, mneid, pid, path, value string, op
 
 // SendChangeRequest sends a change request.
 func SendChangeRequest(ctx context.Context, addr, pid string, req *mnepb.ChangeRequest) (*mnepb.SetPathListResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -106,5 +106,5 @@ func SendChangeRequest(ctx context.Context, addr, pid string, req *mnepb.ChangeR
 		ChangeRequest: []*mnepb.ChangeRequest{req},
 		Pid:           pid,
 	}
-	return pndClient.SetPathList(ctx, r)
+	return client.SetPathList(ctx, r)
 }
diff --git a/controller/api/initialise_test.go b/controller/api/initialise_test.go
index b0baf7dab8b8e147de75603b8a6b648428a55e67..c3c4ff76a60f1ff82a08e65972579abbfaa34c46 100644
--- a/controller/api/initialise_test.go
+++ b/controller/api/initialise_test.go
@@ -8,7 +8,6 @@ import (
 
 	"time"
 
-	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict"
 	cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
 	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
@@ -16,6 +15,7 @@ import (
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
 	"code.fbi.h-da.de/danet/gosdn/controller/app"
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
+	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
 	eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
@@ -26,6 +26,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto"
 	rbacImpl "code.fbi.h-da.de/danet/gosdn/controller/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology/links"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology/nodes"
@@ -123,6 +124,7 @@ func bootstrapUnitTest() {
 	})
 
 	sbi := &nucleus.OpenConfig{}
+	sbi.SetID(sbiUUID)
 
 	mockNetworkElement := &mocks.NetworkElement{}
 	mockNetworkElement.On("SBI").Return(sbi)
@@ -171,6 +173,26 @@ func bootstrapUnitTest() {
 	routeStore := store.NewGenericStore[routingtables.RoutingTable]()
 	routeService := routingtables.NewRoutingTableService(routeStore, nodeService, portService, eventService)
 
+	sbiService := nucleus.NewSbiService(sbiStore, eventService)
+	_ = sbiService.Add(sbi)
+
+	networkElementStore := nucleus.NewNetworkElementStore(pndUUID)
+	networkElementService := nucleus.NewNetworkElementService(networkElementStore, sbiService, eventService)
+
+	//TODO(PND): check/fix api_test: getdevice/adddevice, maybe the mne here is not necessary!
+
+	mne, _ := nucleus.NewNetworkElement("test", mneUUID, &tpb.TransportOption{
+		Address:  "test",
+		Username: "test",
+		Password: "test",
+		TransportOption: &tpb.TransportOption_GnmiTransportOption{
+			GnmiTransportOption: &tpb.GnmiTransportOption{},
+		},
+	}, sbi, conflict.Metadata{ResourceVersion: 0})
+	_ = networkElementService.Add(mne)
+
+	serviceManager := servmgmt.ServiceManager{MneService: networkElementService, SbiService: sbiService, PNDStore: pndStore}
+
 	northbound := nbi.NewNBI(
 		pndStore,
 		userService,
@@ -182,6 +204,7 @@ func bootstrapUnitTest() {
 		routeService,
 		appService,
 		&mockPnd,
+		serviceManager,
 	)
 
 	cpb.RegisterCoreServiceServer(s, northbound.Core)
@@ -189,6 +212,7 @@ func bootstrapUnitTest() {
 	apb.RegisterAuthServiceServer(s, northbound.Auth)
 	apb.RegisterUserServiceServer(s, northbound.User)
 	apb.RegisterRoleServiceServer(s, northbound.Role)
+	mnepb.RegisterNetworkElementServiceServer(s, northbound.NetworkElement)
 
 	go func() {
 		if err := s.Serve(lis); err != nil {
diff --git a/controller/api/managedNetworkElement.go b/controller/api/managedNetworkElement.go
index 5bd1bb8f1e9537296aae77fee9f3385e0f5045f0..48ecebea3c55719df85b8272430c52b878c8ba7c 100644
--- a/controller/api/managedNetworkElement.go
+++ b/controller/api/managedNetworkElement.go
@@ -20,7 +20,7 @@ import (
 // AddNetworkElement adds a new network element to the controller. The network element name is optional.
 // If no name is provided a name will be generated upon network element creation.
 func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.TransportOption, sid, pid uuid.UUID) (*mnepb.SetMneListResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -47,14 +47,14 @@ func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.Trans
 	default:
 	}
 
-	return pndClient.SetMneList(ctx, req)
+	return client.SetMneList(ctx, req)
 }
 
 // GetNetworkElement requests one network element belonging to a given
 // PrincipalNetworkDomain from the controller. If no network element identifier
 // is provided, an error is thrown.
 func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mnepb.GetMneResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -69,7 +69,7 @@ func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mn
 		Pid:       pid,
 	}
 
-	return pndClient.GetMne(ctx, req)
+	return client.GetMne(ctx, req)
 }
 
 // GetSbiSchemaTree gets the sbi tree for a sbi.
@@ -123,7 +123,7 @@ func GetSbiSchemaTree(ctx context.Context, addr string, pid, sid uuid.UUID) (map
 // GetFlattenedNetworkElements requests all network elements belonging to a given
 // PrincipalNetworkDomain from the controller.
 func GetFlattenedNetworkElements(ctx context.Context, addr, pid string) (*mnepb.GetFlattenedMneListResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -133,12 +133,12 @@ func GetFlattenedNetworkElements(ctx context.Context, addr, pid string) (*mnepb.
 		Pid:       pid,
 	}
 
-	return pndClient.GetFlattenedMneList(ctx, req)
+	return client.GetFlattenedMneList(ctx, req)
 }
 
 // GetPath requests a specific path.
 func GetPath(ctx context.Context, addr, pid, mneid, path string) (*mnepb.GetPathResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -150,13 +150,13 @@ func GetPath(ctx context.Context, addr, pid, mneid, path string) (*mnepb.GetPath
 		Path:      path,
 	}
 
-	return pndClient.GetPath(ctx, req)
+	return client.GetPath(ctx, req)
 }
 
 // SubscribePath subscribes to paths on a network element.
 func SubscribePath(ctx context.Context, addr, pid, mneid string, slist *mnepb.SubscriptionList) (mnepb.NetworkElementService_SubscribePathClient, error) {
 	log.Println("subscribePath called")
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -168,12 +168,12 @@ func SubscribePath(ctx context.Context, addr, pid, mneid string, slist *mnepb.Su
 		Sublist:   slist,
 	}
 
-	return pndClient.SubscribePath(ctx, req)
+	return client.SubscribePath(ctx, req)
 }
 
 // DeleteNetworkElement deletes a network element.
 func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb.DeleteMneResponse, error) {
-	pndClient, err := nbi.PndClient(addr, dialOptions...)
+	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
 	}
@@ -184,5 +184,5 @@ func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb.
 		Pid:       pid,
 	}
 
-	return pndClient.DeleteMne(ctx, req)
+	return client.DeleteMne(ctx, req)
 }
diff --git a/controller/controller.go b/controller/controller.go
index b025135c9d12900b9792789717a962e53d8d7b9d..4573046bb3cddd6f2ad044ed4f5f7b2f9fb0311e 100644
--- a/controller/controller.go
+++ b/controller/controller.go
@@ -28,8 +28,10 @@ import (
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
 
+	//TODO: check if both of 'app' are necessary?
 	"code.fbi.h-da.de/danet/gosdn/controller/app"
 	apps "code.fbi.h-da.de/danet/gosdn/controller/app"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/config"
 	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
@@ -72,6 +74,8 @@ type Core struct {
 	stopChan              chan os.Signal
 
 	csbiClient cpb.CsbiServiceClient
+
+	serviceManager servmgmt.ServiceManager
 }
 
 var c *Core
@@ -102,6 +106,8 @@ func initialize() error {
 		eventService,
 	)
 
+	serviveManager := initServiceManager(eventService)
+
 	c = &Core{
 		pndStore:    nucleus.NewPndStore(),
 		userService: rbacImpl.NewUserService(rbacImpl.NewUserStore(), eventService),
@@ -112,12 +118,13 @@ func initialize() error {
 			portService,
 			eventService,
 		),
-		nodeService:  nodeService,
-		portService:  portService,
-		routeService: routeService,
-		eventService: eventService,
-		appService:   apps.NewAppService(apps.NewAppStore()),
-		stopChan:     make(chan os.Signal, 1),
+		nodeService:    nodeService,
+		portService:    portService,
+		routeService:   routeService,
+		eventService:   eventService,
+		appService:     apps.NewAppService(apps.NewAppStore()),
+		stopChan:       make(chan os.Signal, 1),
+		serviceManager: serviveManager,
 	}
 
 	// Setting up signal capturing
@@ -128,7 +135,7 @@ func initialize() error {
 		return err
 	}
 
-	c.networkElementWatcher = nucleus.NewNetworkElementWatcher(c.pndStore, c.eventService)
+	c.networkElementWatcher = nucleus.NewNetworkElementWatcher(c.serviceManager, c.eventService)
 	c.networkElementWatcher.SubToNetworkElements(config.GetGnmiSubscriptionPaths(), nil)
 
 	err = ensureDefaultRoleExists()
@@ -163,7 +170,7 @@ func startGrpc() error {
 	jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration)
 	setupGRPCServerWithCorrectSecurityLevel(jwtManager, c.userService, c.roleService)
 
-	basePnd, err := c.pndStore.Get(store.Query{ID: config.BasePndUUID})
+	basePnd, err := c.serviceManager.PndService.Get(store.Query{ID: config.BasePndUUID})
 	if err != nil {
 		panic(err)
 	}
@@ -179,6 +186,7 @@ func startGrpc() error {
 		c.routeService,
 		c.appService,
 		basePnd,
+		c.serviceManager,
 	)
 
 	pb.RegisterCoreServiceServer(c.grpcServer, c.nbi.Core)
@@ -210,7 +218,7 @@ func startGrpc() error {
 
 // createPrincipalNetworkDomain initializes the controller with an initial PND.
 func createPrincipalNetworkDomain() error {
-	basePnd, err := c.pndStore.Get(store.Query{ID: config.BasePndUUID})
+	basePnd, err := c.serviceManager.PndService.Get(store.Query{ID: config.BasePndUUID})
 	if err != nil {
 		log.Info(err)
 	}
@@ -375,3 +383,56 @@ func setupGRPCServerWithCorrectSecurityLevel(jwt *rbacImpl.JWTManager, userServi
 		log.Info("set up grpc server in secure mode")
 	}
 }
+
+// TODO(PND): add changeStore here?!
+func initServiceManager(eventService eventInterfaces.Service) servmgmt.ServiceManager {
+
+	pndStore := nucleus.NewPndStore()
+	pndService := nucleus.NewPndService(pndStore)
+
+	sbiStore := nucleus.NewSbiStore(uuid.New())
+	sbiService := nucleus.NewSbiService(sbiStore, eventService)
+
+	networkElementStore := nucleus.NewNetworkElementStore(uuid.New())
+	networkElementService := nucleus.NewNetworkElementService(
+		networkElementStore,
+		sbiService,
+		eventService,
+	)
+
+	userService := rbacImpl.NewUserService(rbacImpl.NewUserStore(), eventService)
+	roleService := rbacImpl.NewRoleService(rbacImpl.NewRoleStore(), eventService)
+
+	nodeService := nodes.NewNodeService(nodes.NewDatabaseNodeStore(), eventService)
+	portService := ports.NewPortService(ports.NewDatabasePortStore(), eventService)
+
+	//TODO(PND): find way to add servicemanager here instead of having al the extra services in constructor?!
+	routeService := routingtables.NewRoutingTableService(
+		routingtables.NewDatabaseRoutingTableStore(),
+		nodeService,
+		portService,
+		eventService,
+	)
+	topologyService := topology.NewTopologyService(
+		topology.NewDatabaseTopologyStore(),
+		nodeService,
+		portService,
+		eventService,
+	)
+
+	appService := app.NewAppService(app.NewAppStore())
+
+	//TODO(PND): add real change store!?
+	return *servmgmt.NewServiceManager(pndService, pndStore,
+		store.ChangeStore{},
+		sbiService,
+		networkElementService,
+		userService,
+		roleService,
+		nodeService,
+		portService,
+		topologyService,
+		routeService,
+		appService,
+	)
+}
diff --git a/controller/interfaces/networkdomain/pnd.go b/controller/interfaces/networkdomain/pnd.go
index 2431c445f960cfefbdb9ed016c51d7860be15a10..256e3ec43ff8c6278cfd8bded7451b3cde90901c 100644
--- a/controller/interfaces/networkdomain/pnd.go
+++ b/controller/interfaces/networkdomain/pnd.go
@@ -38,3 +38,10 @@ type NetworkDomain interface {
 	Confirm(uuid.UUID) error
 	SubscribePath(uuid.UUID, *mnepb.SubscriptionList) error
 }
+
+// LoadedPnd represents a PND that was loaded.
+type LoadedPnd struct {
+	ID          string `json:"_id" bson:"_id"`
+	Name        string `json:"name,omitempty"`
+	Description string `json:"description,omitempty"`
+}
diff --git a/controller/interfaces/networkdomain/pndService.go b/controller/interfaces/networkdomain/pndService.go
new file mode 100644
index 0000000000000000000000000000000000000000..a6894bc731fab2bb9c99eca1ad429b2a77113685
--- /dev/null
+++ b/controller/interfaces/networkdomain/pndService.go
@@ -0,0 +1,17 @@
+package networkdomain
+
+import (
+	"code.fbi.h-da.de/danet/gosdn/controller/store"
+)
+
+// PndService describes an interface for PND service implementation.
+type PndService interface {
+	Add(NetworkDomain) error
+	Delete(NetworkDomain) error
+	Get(store.Query) (NetworkDomain, error)
+	GetAll() ([]NetworkDomain, error)
+	// Note: Implement these in case we want to use cSBI again.
+	// PendingChannels(id uuid.UUID, parseErrors ...error) (chan networkelement.Details, error)
+	// AddPendingChannel(id uuid.UUID, ch chan networkelement.Details)
+	// RemovePendingChannel(id uuid.UUID)
+}
diff --git a/controller/interfaces/networkdomain/pndStore.go b/controller/interfaces/networkdomain/pndStore.go
index aca76af93577510fd0b1bc412a7f34500229957e..c031c1fec113246f02aa613cc402cc6d31b48fbe 100644
--- a/controller/interfaces/networkdomain/pndStore.go
+++ b/controller/interfaces/networkdomain/pndStore.go
@@ -10,8 +10,8 @@ import (
 type PndStore interface {
 	Add(NetworkDomain) error
 	Delete(NetworkDomain) error
-	Get(store.Query) (NetworkDomain, error)
-	GetAll() ([]NetworkDomain, error)
+	Get(store.Query) (LoadedPnd, error)
+	GetAll() ([]LoadedPnd, error)
 	PendingChannels(id uuid.UUID, parseErrors ...error) (chan networkelement.Details, error)
 	AddPendingChannel(id uuid.UUID, ch chan networkelement.Details)
 	RemovePendingChannel(id uuid.UUID)
diff --git a/controller/interfaces/rbac/rbacService.go b/controller/interfaces/rbac/rbacService.go
index 8aadf7f09d6ac1a79761d1caa97f37400abfdccb..39645f269225e2ff05abe256269002ce947823bd 100644
--- a/controller/interfaces/rbac/rbacService.go
+++ b/controller/interfaces/rbac/rbacService.go
@@ -1,7 +1,6 @@
 package rbac
 
 import (
-	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 )
 
@@ -14,17 +13,6 @@ type UserService interface {
 	GetAll() ([]User, error)
 }
 
-// LoadedUser represents a User that was loaded.
-type LoadedUser struct {
-	ID       string            `json:"_id" bson:"_id"`
-	UserName string            `json:"username"`
-	Roles    map[string]string `json:"roles,omitempty"`
-	Password string            `json:"password"`
-	Token    string            `json:"token,omitempty"`
-	Salt     string            `json:"salt" bson:"salt"`
-	Metadata conflict.Metadata `json:"metadata" bson:"metadata"`
-}
-
 // RoleService describes an interface for role service implementations.
 type RoleService interface {
 	Add(Role) error
@@ -33,11 +21,3 @@ type RoleService interface {
 	Get(store.Query) (Role, error)
 	GetAll() ([]Role, error)
 }
-
-// LoadedRole represents a Role that was loaded.
-type LoadedRole struct {
-	ID          string   `json:"_id" bson:"_id"`
-	RoleName    string   `json:"rolename"`
-	Description string   `json:"description,omitempty"`
-	Permissions []string `json:"permissions,omitempty"`
-}
diff --git a/controller/interfaces/rbac/role.go b/controller/interfaces/rbac/role.go
index d08884215ccaee7231554df76ed946298c65eea8..85658265b7b931f84785cb6c92c6738793cffe94 100644
--- a/controller/interfaces/rbac/role.go
+++ b/controller/interfaces/rbac/role.go
@@ -10,3 +10,11 @@ type Role interface {
 	GetPermissions() []string
 	RemovePermissionsFromRole([]string)
 }
+
+// LoadedRole represents a Role that was loaded.
+type LoadedRole struct {
+	ID          string   `json:"_id" bson:"_id"`
+	RoleName    string   `json:"rolename"`
+	Description string   `json:"description,omitempty"`
+	Permissions []string `json:"permissions,omitempty"`
+}
diff --git a/controller/interfaces/rbac/user.go b/controller/interfaces/rbac/user.go
index 51051b4dda64cc0d8d1d4dd94304d67945112827..2116e73be7c3346c43281812e167bc33d2504a5b 100644
--- a/controller/interfaces/rbac/user.go
+++ b/controller/interfaces/rbac/user.go
@@ -17,3 +17,14 @@ type User interface {
 	GetSalt() string
 	GetMetadata() conflict.Metadata
 }
+
+// LoadedUser represents a User that was loaded.
+type LoadedUser struct {
+	ID       string            `json:"_id" bson:"_id"`
+	UserName string            `json:"username"`
+	Roles    map[string]string `json:"roles,omitempty"`
+	Password string            `json:"password"`
+	Token    string            `json:"token,omitempty"`
+	Salt     string            `json:"salt" bson:"salt"`
+	Metadata conflict.Metadata `json:"metadata" bson:"metadata"`
+}
diff --git a/controller/mocks/PndService.go b/controller/mocks/PndService.go
new file mode 100644
index 0000000000000000000000000000000000000000..563ef3ce56ff72dae8cb7e228aa49beca41e0b97
--- /dev/null
+++ b/controller/mocks/PndService.go
@@ -0,0 +1,103 @@
+// Code generated by mockery v2.14.0. DO NOT EDIT.
+
+package mocks
+
+import (
+	networkdomain "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	store "code.fbi.h-da.de/danet/gosdn/controller/store"
+	mock "github.com/stretchr/testify/mock"
+)
+
+// PndService is an autogenerated mock type for the PndService type
+type PndService struct {
+	mock.Mock
+}
+
+// Add provides a mock function with given fields: _a0
+func (_m *PndService) Add(_a0 networkdomain.NetworkDomain) error {
+	ret := _m.Called(_a0)
+
+	var r0 error
+	if rf, ok := ret.Get(0).(func(networkdomain.NetworkDomain) error); ok {
+		r0 = rf(_a0)
+	} else {
+		r0 = ret.Error(0)
+	}
+
+	return r0
+}
+
+// Delete provides a mock function with given fields: _a0
+func (_m *PndService) Delete(_a0 networkdomain.NetworkDomain) error {
+	ret := _m.Called(_a0)
+
+	var r0 error
+	if rf, ok := ret.Get(0).(func(networkdomain.NetworkDomain) error); ok {
+		r0 = rf(_a0)
+	} else {
+		r0 = ret.Error(0)
+	}
+
+	return r0
+}
+
+// Get provides a mock function with given fields: _a0
+func (_m *PndService) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) {
+	ret := _m.Called(_a0)
+
+	var r0 networkdomain.NetworkDomain
+	if rf, ok := ret.Get(0).(func(store.Query) networkdomain.NetworkDomain); ok {
+		r0 = rf(_a0)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(networkdomain.NetworkDomain)
+		}
+	}
+
+	var r1 error
+	if rf, ok := ret.Get(1).(func(store.Query) error); ok {
+		r1 = rf(_a0)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// GetAll provides a mock function with given fields:
+func (_m *PndService) GetAll() ([]networkdomain.NetworkDomain, error) {
+	ret := _m.Called()
+
+	var r0 []networkdomain.NetworkDomain
+	if rf, ok := ret.Get(0).(func() []networkdomain.NetworkDomain); ok {
+		r0 = rf()
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).([]networkdomain.NetworkDomain)
+		}
+	}
+
+	var r1 error
+	if rf, ok := ret.Get(1).(func() error); ok {
+		r1 = rf()
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+type mockConstructorTestingTNewPndService interface {
+	mock.TestingT
+	Cleanup(func())
+}
+
+// NewPndService creates a new instance of PndService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+func NewPndService(t mockConstructorTestingTNewPndService) *PndService {
+	mock := &PndService{}
+	mock.Mock.Test(t)
+
+	t.Cleanup(func() { mock.AssertExpectations(t) })
+
+	return mock
+}
diff --git a/controller/mocks/PndStore.go b/controller/mocks/PndStore.go
index ba943d8d39cd5254621abf22e08fe6ced7530443..8995c85de412e4752cedc5fb89abe511a440e13e 100644
--- a/controller/mocks/PndStore.go
+++ b/controller/mocks/PndStore.go
@@ -51,16 +51,14 @@ func (_m *PndStore) Delete(_a0 networkdomain.NetworkDomain) error {
 }
 
 // Get provides a mock function with given fields: _a0
-func (_m *PndStore) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) {
+func (_m *PndStore) Get(_a0 store.Query) (networkdomain.LoadedPnd, error) {
 	ret := _m.Called(_a0)
 
-	var r0 networkdomain.NetworkDomain
-	if rf, ok := ret.Get(0).(func(store.Query) networkdomain.NetworkDomain); ok {
+	var r0 networkdomain.LoadedPnd
+	if rf, ok := ret.Get(0).(func(store.Query) networkdomain.LoadedPnd); ok {
 		r0 = rf(_a0)
 	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(networkdomain.NetworkDomain)
-		}
+		r0 = ret.Get(0).(networkdomain.LoadedPnd)
 	}
 
 	var r1 error
@@ -74,15 +72,15 @@ func (_m *PndStore) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) {
 }
 
 // GetAll provides a mock function with given fields:
-func (_m *PndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
+func (_m *PndStore) GetAll() ([]networkdomain.LoadedPnd, error) {
 	ret := _m.Called()
 
-	var r0 []networkdomain.NetworkDomain
-	if rf, ok := ret.Get(0).(func() []networkdomain.NetworkDomain); ok {
+	var r0 []networkdomain.LoadedPnd
+	if rf, ok := ret.Get(0).(func() []networkdomain.LoadedPnd); ok {
 		r0 = rf()
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]networkdomain.NetworkDomain)
+			r0 = ret.Get(0).([]networkdomain.LoadedPnd)
 		}
 	}
 
diff --git a/controller/northbound/client/networkElement.go b/controller/northbound/client/networkElement.go
new file mode 100644
index 0000000000000000000000000000000000000000..58267f6ba3aac5650566c6ad04dce7f962957649
--- /dev/null
+++ b/controller/northbound/client/networkElement.go
@@ -0,0 +1,17 @@
+package client
+
+import (
+	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
+	"google.golang.org/grpc"
+)
+
+// NetworkElementClient returns a client for the gRPC NetworkElement service. It takes
+// the address of the gRPC endpoint and optional grpc.DialOption
+// as argument.
+func NetworkElementClient(addr string, opts ...grpc.DialOption) (mnepb.NetworkElementServiceClient, error) {
+	conn, err := grpc.Dial(addr, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return mnepb.NewNetworkElementServiceClient(conn), nil
+}
diff --git a/controller/northbound/server/auth_interceptor_test.go b/controller/northbound/server/auth_interceptor_test.go
index 89d8169b545b6a06bff182d49dae5cc9210592dc..cddec3a1694001f0a5ed0a82c2a8798828bbfcda 100644
--- a/controller/northbound/server/auth_interceptor_test.go
+++ b/controller/northbound/server/auth_interceptor_test.go
@@ -12,6 +12,7 @@ import (
 	eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
 	"code.fbi.h-da.de/danet/gosdn/controller/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
 	"google.golang.org/grpc/metadata"
@@ -36,10 +37,12 @@ func getTestAuthInterceptorServer(t *testing.T) (*AuthInterceptor, *UserServer,
 		t.Fatal(err)
 	}
 
+	serviceManager := &servmgmt.ServiceManager{PNDStore: pndStore}
+
 	s := NewAuthInterceptor(jwtManager, userService, roleService)
 	u := NewUserServer(jwtManager, userService)
 	r := NewRoleServer(jwtManager, roleService)
-	sbiServer := NewSbiServer(pndStore)
+	sbiServer := NewSbiServer(*serviceManager)
 
 	if err := clearAndCreateAuthTestSetup(userService, roleService); err != nil {
 		t.Fatal(err)
diff --git a/controller/northbound/server/core.go b/controller/northbound/server/core.go
index 388b3ad8f94ddd4e2ed478f4d419aa36655b5f49..c20c8c7b168476e5ab7344c3e591f6b679a48a95 100644
--- a/controller/northbound/server/core.go
+++ b/controller/northbound/server/core.go
@@ -6,9 +6,9 @@ import (
 
 	pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
-	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/metrics"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/prometheus/client_golang/prometheus"
@@ -17,13 +17,13 @@ import (
 // CoreServer represents a core server.
 type CoreServer struct {
 	pb.UnimplementedCoreServiceServer
-	pndStore networkdomain.PndStore
+	serviceManager servmgmt.ServiceManager
 }
 
 // NewCoreServer receives a pndStore and returns a new coreServer.
-func NewCoreServer(pndStore networkdomain.PndStore) *CoreServer {
+func NewCoreServer(serviceManager servmgmt.ServiceManager) *CoreServer {
 	return &CoreServer{
-		pndStore: pndStore,
+		serviceManager: serviceManager,
 	}
 }
 
@@ -38,7 +38,7 @@ func (s CoreServer) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb.
 		return nil, handleRPCError(labels, err)
 	}
 
-	storedPnd, err := s.pndStore.Get(store.Query{ID: pndID})
+	storedPnd, err := s.serviceManager.PndService.Get(store.Query{ID: pndID})
 	if err != nil {
 		return nil, err
 	}
@@ -61,7 +61,7 @@ func (s CoreServer) GetPndList(ctx context.Context, request *pb.GetPndListReques
 	start := metrics.StartHook(labels, grpcRequestsTotal)
 	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
 
-	pndList, err := s.pndStore.GetAll()
+	pndList, err := s.serviceManager.PndService.GetAll()
 	if err != nil {
 		return nil, err
 	}
@@ -90,7 +90,7 @@ func (s CoreServer) CreatePndList(ctx context.Context, request *pb.CreatePndList
 		if err != nil {
 			return nil, handleRPCError(labels, err)
 		}
-		if err := s.pndStore.Add(pnd); err != nil {
+		if err := s.serviceManager.PndService.Add(pnd); err != nil {
 			return nil, handleRPCError(labels, err)
 		}
 	}
@@ -111,11 +111,11 @@ func (s CoreServer) DeletePnd(ctx context.Context, request *pb.DeletePndRequest)
 		return nil, handleRPCError(labels, err)
 	}
 
-	pnd, err := s.pndStore.Get(store.Query{ID: pndID})
+	pnd, err := s.serviceManager.PndService.Get(store.Query{ID: pndID})
 	if err != nil {
 		return nil, handleRPCError(labels, err)
 	}
-	err = s.pndStore.Delete(pnd)
+	err = s.serviceManager.PndService.Delete(pnd)
 	if err != nil {
 		return &pb.DeletePndResponse{
 			Timestamp: time.Now().UnixNano(),
diff --git a/controller/northbound/server/core_test.go b/controller/northbound/server/core_test.go
index 432aa0d52da8b67a33b7bf274781cc2fd6234998..05a30452c56a995b5f713c8b1055a807c044948b 100644
--- a/controller/northbound/server/core_test.go
+++ b/controller/northbound/server/core_test.go
@@ -11,6 +11,7 @@ import (
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/mocks"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 	"github.com/google/uuid"
 	"github.com/stretchr/testify/mock"
@@ -93,7 +94,13 @@ func getTestCoreServer(t *testing.T) *CoreServer {
 		t.Fatal(err)
 	}
 
-	c := NewCoreServer(pndStore)
+	pndService := nucleus.NewPndService(pndStore)
+
+	serviceManager := servmgmt.ServiceManager{
+		PndService: pndService,
+	}
+
+	c := NewCoreServer(serviceManager)
 
 	return c
 }
diff --git a/controller/northbound/server/nbi.go b/controller/northbound/server/nbi.go
index a9314781ade93b3a30f465992236633c949001d1..aaec1e2aa2e1b4c4636b9d10f2467a44745a8cf6 100644
--- a/controller/northbound/server/nbi.go
+++ b/controller/northbound/server/nbi.go
@@ -5,6 +5,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
 	"code.fbi.h-da.de/danet/gosdn/controller/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology/nodes"
 	"code.fbi.h-da.de/danet/gosdn/controller/topology/ports"
@@ -45,19 +46,19 @@ func NewNBI(
 	routeService routingtables.Service,
 	apps app.ManagementService,
 	networkDomain networkdomain.NetworkDomain,
-
+	serviceManager servmgmt.ServiceManager,
 ) *NorthboundInterface {
 	return &NorthboundInterface{
-		Pnd:            NewPndServer(pnds),
-		Core:           NewCoreServer(pnds),
+		Pnd:            NewPndServer(serviceManager),
+		Core:           NewCoreServer(serviceManager),
 		Csbi:           NewCsbiServer(pnds),
-		Sbi:            NewSbiServer(pnds),
+		Sbi:            NewSbiServer(serviceManager),
 		Auth:           NewAuthServer(&jwt, users),
 		User:           NewUserServer(&jwt, users),
 		Role:           NewRoleServer(&jwt, roles),
 		Topology:       NewTopologyServer(topologyService, nodeService, portService),
 		App:            NewAppServer(apps),
-		NetworkElement: NewNetworkElementServer(networkDomain),
+		NetworkElement: NewNetworkElementServer(networkDomain, serviceManager),
 		Routes:         NewRoutingTableServiceServer(routeService, nodeService, portService),
 	}
 }
diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go
index 8014f79fb10f886429c8539c6e806bfe17f83dd4..0fd870faadedeaf59639ba306b5faeeeb90c0b02 100644
--- a/controller/northbound/server/networkElement.go
+++ b/controller/northbound/server/networkElement.go
@@ -1,119 +1,873 @@
 package server
 
 import (
+	"context"
+	"fmt"
+	"strings"
+	"time"
+
 	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
+	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
+	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
+	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
+	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
+	"code.fbi.h-da.de/danet/gosdn/controller/metrics"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
+	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
+	"code.fbi.h-da.de/danet/gosdn/controller/store"
+	aGNMI "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
+	"github.com/google/uuid"
+	"github.com/openconfig/gnmi/proto/gnmi"
+	"github.com/openconfig/ygot/ygot"
+	"github.com/openconfig/ygot/ytypes"
+	"github.com/prometheus/client_golang/prometheus"
+	log "github.com/sirupsen/logrus"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/proto"
 )
 
 // NetworkElementServer represents a NetworkElementServer.
 type NetworkElementServer struct {
 	mnepb.UnimplementedNetworkElementServiceServer
-	networkDomain networkdomain.NetworkDomain
+	networkDomain  networkdomain.NetworkDomain
+	serviceManager servmgmt.ServiceManager
 }
 
 // NewNetworkElementServer returns a new NetWorkElementServer.
-func NewNetworkElementServer(networkDomain networkdomain.NetworkDomain) *NetworkElementServer {
+func NewNetworkElementServer(networkDomain networkdomain.NetworkDomain, serviceManager servmgmt.ServiceManager) *NetworkElementServer {
 	return &NetworkElementServer{
-		networkDomain: networkDomain,
-	}
-}
-
-// // Add adds a new network element.
-// func (s *NetworkElementServer) Add(ctx context.Context, request *mnepb.AddNetworkElementRequest) (*mnepb.AddNetworkElementResponse, error) {
-// 	sbiID, err := uuid.Parse(request.NetworkElement.Sbi.Id)
-// 	if err != nil {
-// 		return nil, status.Errorf(codes.Aborted, "%v", err)
-// 	}
-
-// 	id, err := s.networkDomain.AddNetworkElement(
-// 		request.NetworkElement.NetworkElementName,
-// 		request.NetworkElement.TransportOption,
-// 		sbiID,
-// 	)
-// 	if err != nil {
-// 		return nil, status.Errorf(codes.Aborted, "%v", err)
-// 	}
-
-// 	return &mnepb.AddNetworkElementResponse{
-// 		Timestamp:        time.Now().UnixNano(),
-// 		Status:           mnepb.Status_STATUS_OK,
-// 		NetworkElementId: id.String(),
-// 	}, nil
-// }
-
-// // GetAll returns all stored network elements.
-// func (s *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAllNetworkElementRequest) (*mnepb.GetAllNetworkElementResponse, error) {
-// 	networkElements := s.networkDomain.NetworkElements()
-
-// 	mnes := []*mnepb.NetworkElement{}
-// 	for _, mne := range networkElements {
-// 		ygotStructAsJSON, err := mne.GetModelAsString()
-// 		if err != nil {
-// 			log.Error(err)
-// 			return nil, status.Errorf(codes.Aborted, "%v", err)
-// 		}
-
-// 		mnes = append(mnes, &mnepb.NetworkElement{
-// 			Id:    mne.ID().String(),
-// 			Name:  mne.Name(),
-// 			Model: ygotStructAsJSON,
-// 		})
-// 	}
-
-// 	return &mnepb.GetAllNetworkElementResponse{
-// 		Timestamp:      time.Now().UnixNano(),
-// 		Status:         mnepb.Status_STATUS_OK,
-// 		NetworkElement: mnes,
-// 	}, nil
-// }
-
-// // Get returns a network element.
-// func (s *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetworkElementRequest) (*mnepb.GetNetworkElementResponse, error) {
-// 	mne, err := s.networkDomain.GetNetworkElement(request.NetworkElementId)
-// 	if err != nil {
-// 		return nil, status.Errorf(codes.Aborted, "%v", err)
-// 	}
-
-// 	ygotStructAsJSON, err := mne.GetModelAsString()
-// 	if err != nil {
-// 		log.Error(err)
-// 		return nil, status.Errorf(codes.Aborted, "%v", err)
-// 	}
-
-// 	networkElement := &mnepb.NetworkElement{
-// 		Id:               mne.ID().String(),
-// 		Name:             mne.Name(),
-// 		Model:            ygotStructAsJSON,
-// 		TransportAddress: mne.TransportAddress(),
-// 	}
-
-// 	return &mnepb.GetNetworkElementResponse{
-// 		Timestamp:      time.Now().UnixNano(),
-// 		Status:         mnepb.Status_STATUS_OK,
-// 		NetworkElement: networkElement,
-// 	}, nil
-// }
-
-// // Update updates a network element.
-// func (s *NetworkElementServer) Update(ctx context.Context, request *mnepb.UpdateNetworkElementRequest) (*mnepb.UpdateNetworkElementResponse, error) {
-// 	mneID, err := uuid.Parse(request.NetworkElement.Id)
-// 	if err != nil {
-// 		return &mnepb.UpdateNetworkElementResponse{
-// 			Timestamp: time.Now().UnixNano(),
-// 			Status:    mnepb.Status_STATUS_OK,
-// 		}, err
-// 	}
-
-// 	err = s.networkDomain.UpdateNetworkElement(mneID, request.NetworkElement.Model)
-// 	if err != nil {
-// 		return &mnepb.UpdateNetworkElementResponse{
-// 			Timestamp: time.Now().UnixNano(),
-// 			Status:    mnepb.Status_STATUS_OK,
-// 		}, err
-// 	}
-
-// 	return &mnepb.UpdateNetworkElementResponse{
-// 		Timestamp: time.Now().UnixNano(),
-// 		Status:    mnepb.Status_STATUS_OK,
-// 	}, nil
-// }
+		networkDomain:  networkDomain,
+		serviceManager: serviceManager,
+	}
+}
+
+// Add adds a new network element.
+func (n *NetworkElementServer) Add(ctx context.Context, request *mnepb.AddNetworkElementRequest) (*mnepb.AddNetworkElementResponse, error) {
+	sbiID, err := uuid.Parse(request.NetworkElement.Sbi.Id)
+	if err != nil {
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	id, err := n.networkDomain.AddNetworkElement(
+		request.NetworkElement.NetworkElementName,
+		request.NetworkElement.TransportOption,
+		sbiID,
+	)
+	if err != nil {
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	return &mnepb.AddNetworkElementResponse{
+		Timestamp:        time.Now().UnixNano(),
+		Status:           mnepb.Status_STATUS_OK,
+		NetworkElementId: id.String(),
+	}, nil
+}
+
+// GetAll returns all stored network elements.
+func (n *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAllNetworkElementRequest) (*mnepb.GetAllNetworkElementResponse, error) {
+	networkElements := n.networkDomain.NetworkElements()
+
+	mnes := []*mnepb.NetworkElement{}
+	for _, mne := range networkElements {
+		ygotStructAsJSON, err := mne.GetModelAsString()
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+
+		mnes = append(mnes, &mnepb.NetworkElement{
+			Id:    mne.ID().String(),
+			Name:  mne.Name(),
+			Model: ygotStructAsJSON,
+		})
+	}
+
+	return &mnepb.GetAllNetworkElementResponse{
+		Timestamp:      time.Now().UnixNano(),
+		Status:         mnepb.Status_STATUS_OK,
+		NetworkElement: mnes,
+	}, nil
+}
+
+// Get returns a network element.
+func (n *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetworkElementRequest) (*mnepb.GetNetworkElementResponse, error) {
+	mne, err := n.networkDomain.GetNetworkElement(request.NetworkElementId)
+	if err != nil {
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	ygotStructAsJSON, err := mne.GetModelAsString()
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	networkElement := &mnepb.NetworkElement{
+		Id:               mne.ID().String(),
+		Name:             mne.Name(),
+		Model:            ygotStructAsJSON,
+		TransportAddress: mne.TransportAddress(),
+	}
+
+	return &mnepb.GetNetworkElementResponse{
+		Timestamp:      time.Now().UnixNano(),
+		Status:         mnepb.Status_STATUS_OK,
+		NetworkElement: networkElement,
+	}, nil
+}
+
+// Update updates a network element.
+func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.UpdateNetworkElementRequest) (*mnepb.UpdateNetworkElementResponse, error) {
+	mneID, err := uuid.Parse(request.NetworkElement.Id)
+	if err != nil {
+		return &mnepb.UpdateNetworkElementResponse{
+			Timestamp: time.Now().UnixNano(),
+			Status:    mnepb.Status_STATUS_OK,
+		}, err
+	}
+
+	err = n.networkDomain.UpdateNetworkElement(mneID, request.NetworkElement.Model)
+	if err != nil {
+		return &mnepb.UpdateNetworkElementResponse{
+			Timestamp: time.Now().UnixNano(),
+			Status:    mnepb.Status_STATUS_OK,
+		}, err
+	}
+
+	return &mnepb.UpdateNetworkElementResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    mnepb.Status_STATUS_OK,
+	}, nil
+}
+
+// GetMne gets a specific mne.
+func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	networkElement, err := n.getMne(request.Mneid)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	// TODO(path): This needs some adjustments when we're switching towards a new
+	// path request handling.
+	mne, err := fillMneBySpecificPath(networkElement, "/")
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	return &mnepb.GetMneResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		Mne: mne,
+	}, nil
+}
+
+func (n *NetworkElementServer) getMne(identifier string) (networkelement.NetworkElement, error) {
+	id, err := uuid.Parse(identifier)
+	if err != nil {
+		id = uuid.Nil
+	}
+
+	mne, err := n.serviceManager.MneService.Get(store.Query{
+		ID: id,
+	})
+	if mne == nil {
+		return nil, fmt.Errorf("no network element found")
+	}
+	if err != nil {
+		return nil, err
+	}
+
+	return mne, nil
+}
+
+// GetMneList returns a list of existing mnes.
+func (n *NetworkElementServer) GetMneList(ctx context.Context, request *mnepb.GetMneListRequest) (*mnepb.GetMneListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	storedMNE, err := n.serviceManager.MneService.GetAll()
+	if err != nil {
+		return nil, err
+	}
+
+	mnes := make([]*mnepb.ManagedNetworkElement, len(storedMNE))
+	for i, networkElement := range storedMNE {
+		mne, err := fillMneBySpecificPath(networkElement, "/")
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		mnes[i] = mne
+	}
+
+	return &mnepb.GetMneListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		Mne: mnes,
+	}, nil
+}
+
+// GetFlattenedMneList returns a list of existing mnes.
+func (n *NetworkElementServer) GetFlattenedMneList(ctx context.Context, request *mnepb.GetMneListRequest) (*mnepb.GetFlattenedMneListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	mnes, err := n.serviceManager.MneService.GetAllAsLoaded()
+	if err != nil {
+		return nil, err
+	}
+
+	flattenedMnes := make([]*mnepb.FlattenedManagedNetworkElement, len(mnes))
+	for i, mne := range mnes {
+		mne := &mnepb.FlattenedManagedNetworkElement{
+			Id:   mne.ID,
+			Name: mne.Name,
+			Sbi:  mne.SBI,
+		}
+		flattenedMnes[i] = mne
+	}
+
+	return &mnepb.GetFlattenedMneListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		Mne: flattenedMnes,
+	}, nil
+}
+
+func fillMneBySpecificPath(nme networkelement.NetworkElement, path string) (*mnepb.ManagedNetworkElement, error) {
+	gnmiPath, err := ygot.StringToStructuredPath(path)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	opts := []ytypes.GetNodeOpt{
+		&ytypes.GetHandleWildcards{},
+		&ytypes.GetPartialKeyMatch{},
+	}
+	nodes, err := ytypes.GetNode(nme.SBI().Schema().RootSchema(), nme.GetModel(), gnmiPath, opts...)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	notifications := make([]*gnmi.Notification, len(nodes))
+	for i, node := range nodes {
+		mneNotification, err := genGnmiNotification(gnmiPath, node.Data)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+
+		notifications[i] = mneNotification
+	}
+
+	sbi := spb.SouthboundInterface{}
+	if nme.SBI() != nil {
+		sbi.Id = nme.SBI().ID().String()
+		sbi.Type = nme.SBI().Type()
+	}
+
+	mne := &mnepb.ManagedNetworkElement{
+		Id:              nme.ID().String(),
+		Name:            nme.Name(),
+		MneNotification: notifications,
+		Sbi:             &sbi,
+	}
+
+	return mne, nil
+}
+
+func genGnmiNotification(path *gnmi.Path, val any) (*gnmi.Notification, error) {
+	typedVal, err := ygot.EncodeTypedValue(val, gnmi.Encoding_JSON_IETF)
+	if err != nil {
+		return nil, err
+	}
+	return &gnmi.Notification{
+		Timestamp: time.Now().UnixNano(),
+		Update: []*gnmi.Update{
+			{
+				Path: &gnmi.Path{
+					Elem: path.GetElem(),
+				},
+				Val: typedVal,
+			},
+		},
+	}, nil
+}
+
+// GetPath gets a path on a mne.
+func (n *NetworkElementServer) GetPath(ctx context.Context, request *mnepb.GetPathRequest) (*mnepb.GetPathResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	mneuid, err := uuid.Parse(request.Mneid)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	// In case we get the path from grpc-gateway we have to replace
+	path := strings.ReplaceAll(request.Path, "||", "/")
+
+	resp, err := n.getPath(ctx, mneuid, path)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	return &mnepb.GetPathResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		MneNotification: resp.(*gnmi.GetResponse).Notification,
+	}, nil
+}
+
+func (n *NetworkElementServer) getPath(ctx context.Context, uuid uuid.UUID, path string) (proto.Message, error) {
+	mne, err := n.serviceManager.MneService.Get(store.Query{
+		ID:   uuid,
+		Name: uuid.String(),
+	})
+	if err != nil {
+		return nil, err
+	}
+	//TODO(PND): check if necessary?
+	if mne == nil {
+		return nil, fmt.Errorf("no network element found")
+	}
+
+	res, err := mne.Transport().Get(ctx, path)
+	if err != nil {
+		return nil, err
+	}
+	resp, ok := res.(proto.Message)
+	if !ok {
+		return nil, &customerrs.InvalidTypeAssertionError{
+			Value: res,
+			Type:  (*proto.Message)(nil),
+		}
+	}
+	err = mne.ProcessResponse(resp)
+	if err != nil {
+		return nil, err
+	}
+
+	modelAsString, err := mne.GetModelAsString()
+	if err != nil {
+		return nil, err
+	}
+
+	// TODO(path): We probably have to remove this when we address path request handling.
+	err = n.serviceManager.MneService.UpdateModel(uuid, modelAsString)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp, nil
+}
+
+// GetChange gets a specific change of a mne.
+func (n *NetworkElementServer) GetChange(ctx context.Context, request *mnepb.GetChangeRequest) (*mnepb.GetChangeResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	changes, err := fillChanges(pnd, false, request.Cuid...)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	return &mnepb.GetChangeResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		Change: changes,
+	}, nil
+}
+
+// GetChangeList gets all existing changes.
+func (n *NetworkElementServer) GetChangeList(ctx context.Context, request *mnepb.GetChangeListRequest) (*mnepb.GetChangeListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "get"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	changes, err := fillChanges(pnd, true, "")
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	return &mnepb.GetChangeListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Pnd: &mnepb.PrincipalNetworkDomain{
+			Id:          pnd.ID().String(),
+			Name:        pnd.GetName(),
+			Description: pnd.GetDescription(),
+		},
+		Change: changes,
+	}, nil
+}
+
+func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*mnepb.Change, error) {
+	var changeList []uuid.UUID
+
+	switch all {
+	case true:
+		changeList = pnd.PendingChanges()
+		changeList = append(changeList, pnd.CommittedChanges()...)
+	default:
+		var err error
+		if len(cuid) == 0 {
+			return nil, &customerrs.InvalidParametersError{
+				Func:  fillChanges,
+				Param: "length of 'mneID' cannot be '0' when 'all' is set to 'false'",
+			}
+		}
+		changeList, err = stringArrayToUUIDs(cuid)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+	}
+
+	changes := make([]*mnepb.Change, len(changeList))
+	for i, ch := range changeList {
+		c, err := pnd.GetChange(ch)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+
+		diff, err := ygot.Diff(c.PreviousState(), c.IntendedState())
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+
+		changes[i] = &mnepb.Change{
+			Id:    ch.String(),
+			Age:   c.Age().Microseconds(),
+			State: c.State(),
+			Diff:  diff,
+		}
+	}
+	return changes, nil
+}
+
+func stringArrayToUUIDs(sid []string) ([]uuid.UUID, error) {
+	UUIDs := make([]uuid.UUID, len(sid))
+	for i, id := range sid {
+		parsed, err := uuid.Parse(id)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		UUIDs[i] = parsed
+	}
+	return UUIDs, nil
+}
+
+// SetMneList updates the list of mnes.
+func (n *NetworkElementServer) SetMneList(ctx context.Context, request *mnepb.SetMneListRequest) (*mnepb.SetMneListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "set"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	networkElementIDs := make([]uuid.UUID, 0, len(request.Mne))
+	for _, r := range request.Mne {
+		sid, err := uuid.Parse(r.Sbi.Id)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		mneID, err := n.addMne(ctx, r.MneName, r.TransportOption, sid)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		networkElementIDs = append(networkElementIDs, mneID)
+	}
+
+	r := make([]*mnepb.SetResponse, len(networkElementIDs))
+	for i, mneID := range networkElementIDs {
+		r[i] = &mnepb.SetResponse{Id: mneID.String(), Status: mnepb.Status_STATUS_OK}
+	}
+
+	return &mnepb.SetMneListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    mnepb.Status_STATUS_OK,
+		Responses: r,
+	}, nil
+}
+
+func (n *NetworkElementServer) addMne(ctx context.Context, name string, opt *tpb.TransportOption, sid uuid.UUID) (uuid.UUID, error) {
+	var sbi southbound.SouthboundInterface
+	var err error
+
+	// TODO(PND): check how to handle this!
+
+	// switch t := opt.Type; t {
+	// case spb.Type_TYPE_CONTAINERISED:
+	// 	return n.handleCsbiEnrolment(name, opt)
+	// case spb.Type_TYPE_PLUGIN:
+	// 	sbi, err = n.requestPlugin(name, opt)
+	// 	if err != nil {
+	// 		return uuid.Nil, err
+	// 	}
+	// default:
+	// 	var err error
+	// 	sbi, err = pnd.southboundService.Get(store.Query{ID: sid})
+	// 	if err != nil {
+	// 		return uuid.Nil, err
+	// 	}
+	// }
+
+	sbi, err = n.serviceManager.SbiService.Get(store.Query{ID: sid})
+	if err != nil {
+		return uuid.Nil, err
+	}
+
+	mne, err := nucleus.NewNetworkElement(name, uuid.Nil, opt, sbi, conflict.Metadata{ResourceVersion: 0})
+	if err != nil {
+		return uuid.Nil, err
+	}
+
+	err = n.serviceManager.MneService.Add(mne)
+	if err != nil {
+		return uuid.Nil, err
+	}
+
+	if mne.IsTransportValid() {
+		_, err = n.getPath(ctx, mne.ID(), "/interfaces")
+		if err != nil {
+			return uuid.Nil, err
+		}
+	}
+
+	return mne.ID(), nil
+}
+
+// SetChangeList sets a list of changes.
+func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "set"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	responses := make([]*mnepb.SetResponse, len(request.Change))
+
+	for i, r := range request.Change {
+		cuid, err := uuid.Parse(r.Cuid)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		switch r.Op {
+		case mnepb.Operation_OPERATION_COMMIT:
+			if err := pnd.Commit(cuid); err != nil {
+				log.Error(err)
+				return nil, status.Errorf(codes.Aborted, "%v", err)
+			}
+		case mnepb.Operation_OPERATION_CONFIRM:
+			if err := pnd.Confirm(cuid); err != nil {
+				log.Error(err)
+				return nil, status.Errorf(codes.Aborted, "%v", err)
+			}
+		default:
+			return nil, &customerrs.InvalidParametersError{
+				Param: r.Op,
+			}
+		}
+
+		responses[i] = &mnepb.SetResponse{
+			Id:     cuid.String(),
+			Status: mnepb.Status_STATUS_OK,
+		}
+	}
+	return &mnepb.SetChangeListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    mnepb.Status_STATUS_OK,
+		Responses: responses,
+	}, nil
+}
+
+// SetPathList sets a list of paths.
+func (n *NetworkElementServer) SetPathList(ctx context.Context, request *mnepb.SetPathListRequest) (*mnepb.SetPathListResponse, error) {
+	labels := prometheus.Labels{"service": "mne", "rpc": "set"}
+	start := metrics.StartHook(labels, grpcRequestsTotal)
+	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
+
+	pid, err := uuid.Parse(request.Pid)
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pid})
+	if err != nil {
+		return nil, handleRPCError(labels, err)
+	}
+
+	responses := make([]*mnepb.SetResponse, len(request.ChangeRequest))
+
+	for i, r := range request.ChangeRequest {
+		mneID, err := uuid.Parse(r.Mneid)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+		cid, err := pnd.ChangeMNE(mneID, r.ApiOp, r.Path, r.Value)
+		if err != nil {
+			log.Error(err)
+			return nil, status.Errorf(codes.Aborted, "%v", err)
+		}
+
+		responses[i] = &mnepb.SetResponse{
+			Status: mnepb.Status_STATUS_OK,
+			Id:     cid.String(),
+		}
+	}
+	return &mnepb.SetPathListResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    mnepb.Status_STATUS_OK,
+		Responses: responses,
+	}, nil
+}
+
+// DeleteMne deletes a mne.
+func (n *NetworkElementServer) DeleteMne(ctx context.Context, request *mnepb.DeleteMneRequest) (*mnepb.DeleteMneResponse, error) {
+	//TODO(PND): decide if this should be added or not, requires some changes in controller/nucleus/metrics.go too
+	// labels := prometheus.Labels{"service": "mne", "rpc": "delete"}
+	// start := metrics.StartHook(labels, networkElementDeletionsTotal)
+	// defer metrics.FinishHook(labels, start, networkElementDeletionDurationSecondsTotal, networkElementDeletionDurationSeconds)
+
+	mneID, err := uuid.Parse(request.Mneid)
+	if err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+
+	if err := n.deleteMne(mneID); err != nil {
+		log.Error(err)
+		return nil, status.Errorf(codes.Aborted, "%v", err)
+	}
+	return &mnepb.DeleteMneResponse{
+		Timestamp: time.Now().UnixNano(),
+		Status:    mnepb.Status_STATUS_OK,
+	}, nil
+}
+
+func (n *NetworkElementServer) deleteMne(id uuid.UUID) error {
+	mne, err := n.serviceManager.MneService.Get(store.Query{
+		ID:   id,
+		Name: id.String(),
+	})
+
+	if err != nil {
+		return err
+	}
+
+	//TODO(PND): check if necessary!
+	if mne == nil {
+		return fmt.Errorf("no network element found")
+	}
+
+	// TODO(PND): check how to handle this!
+	// switch mne.(type) {
+	// case *CsbiNetworkElement:
+	// 	return pnd.handleCsbiDeletion(mne)
+	// default:
+	// 	return pnd.networkElementService.Delete(mne)
+	// }
+
+	return n.serviceManager.MneService.Delete(mne)
+}
+
+// SubscribePath subscribes to specifc paths of an mne.
+func (n *NetworkElementServer) SubscribePath(request *mnepb.SubscribePathRequest, stream mnepb.NetworkElementService_SubscribePathServer) error {
+	mneID, err := uuid.Parse(request.Mneid)
+	if err != nil {
+		return err
+	}
+
+	if err := n.subscribePath(mneID, request.Sublist); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (n *NetworkElementServer) subscribePath(uuid uuid.UUID, subList *mnepb.SubscriptionList) error {
+	mne, err := n.serviceManager.MneService.Get(store.Query{
+		ID: uuid,
+	})
+	if err != nil {
+		return err
+	}
+
+	mode, err := n.mapModeToAristaFork(subList.GetMode())
+	if err != nil {
+		return err
+	}
+
+	for _, sub := range subList.Subscription {
+		streamMode, err := n.mapStreamModeToAristaFork(sub.GetStreamMode())
+		if err != nil {
+			return err
+		}
+
+		opts := &aGNMI.SubscribeOptions{
+			Mode:           mode,
+			StreamMode:     streamMode,
+			Paths:          [][]string{n.splitStringPath(sub.GetPath())},
+			SampleInterval: sub.SampleInterval,
+		}
+
+		ctx := context.Background()
+		ctx = context.WithValue(ctx, types.CtxKeyOpts, opts)
+
+		if err = mne.Transport().Subscribe(ctx); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (n *NetworkElementServer) splitStringPath(s string) []string {
+	return strings.Split(s, "/")
+}
+
+func (n *NetworkElementServer) mapStreamModeToAristaFork(mode mnepb.StreamMode) (string, error) {
+	switch mode {
+	case mnepb.StreamMode_STREAM_MODE_TARGET_DEFINED:
+		return "target_defined", nil
+	case mnepb.StreamMode_STREAM_MODE_ON_CHANGE:
+		return "on_change", nil
+	case mnepb.StreamMode_STREAM_MODE_SAMPLE:
+		return "sample", nil
+	default:
+		return "", fmt.Errorf("StreamMode of type: %T is not supported", mode)
+	}
+}
+
+func (n *NetworkElementServer) mapModeToAristaFork(mode mnepb.SubscriptionMode) (string, error) {
+	switch mode {
+	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM:
+		return "stream", nil
+	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_ONCE:
+		return "once", nil
+	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_POLL:
+		return "poll", nil
+	default:
+		return "", fmt.Errorf("SubscriptionMode of type: %T is not supported", mode)
+	}
+}
diff --git a/controller/northbound/server/pnd.go b/controller/northbound/server/pnd.go
index e1ba41b9410b5bc7f65e4ae55effe1c1a7b84226..908c31fe8115f41b953d08737b41d42132edb5cf 100644
--- a/controller/northbound/server/pnd.go
+++ b/controller/northbound/server/pnd.go
@@ -2,22 +2,16 @@ package server
 
 import (
 	"context"
-	"strings"
 	"time"
 
-	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
 	ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
-	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/metrics"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
-	"github.com/openconfig/gnmi/proto/gnmi"
-	"github.com/openconfig/ygot/ygot"
-	"github.com/openconfig/ygot/ytypes"
 	"github.com/prometheus/client_golang/prometheus"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc/codes"
@@ -27,195 +21,16 @@ import (
 // PndServer implements a pnd server.
 type PndServer struct {
 	ppb.UnimplementedPndServiceServer
-	pndStore networkdomain.PndStore
+	serviceManager servmgmt.ServiceManager
 }
 
 // NewPndServer receives a pndStore and returns a new pndServer.
-func NewPndServer(pndStore networkdomain.PndStore) *PndServer {
+func NewPndServer(serviceManager servmgmt.ServiceManager) *PndServer {
 	return &PndServer{
-		pndStore: pndStore,
+		serviceManager: serviceManager,
 	}
 }
 
-// GetMne gets a specific mne.
-func (p PndServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	networkElement, err := pnd.GetNetworkElement(request.Mneid)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	// TODO(path): This needs some adjustments when we're switching towards a new
-	// path request handling.
-	mne, err := fillMneBySpecificPath(networkElement, "/")
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	return &mnepb.GetMneResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		Mne: mne,
-	}, nil
-}
-
-// GetMneList returns a list of existing mnes.
-func (p PndServer) GetMneList(ctx context.Context, request *mnepb.GetMneListRequest) (*mnepb.GetMneListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	mnes := make([]*mnepb.ManagedNetworkElement, len(pnd.NetworkElements()))
-	for i, networkElement := range pnd.NetworkElements() {
-		mne, err := fillMneBySpecificPath(networkElement, "/")
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		mnes[i] = mne
-	}
-
-	return &mnepb.GetMneListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		Mne: mnes,
-	}, nil
-}
-
-// GetFlattenedMneList returns a list of existing mnes.
-func (p PndServer) GetFlattenedMneList(ctx context.Context, request *mnepb.GetMneListRequest) (*mnepb.GetFlattenedMneListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	mnes := pnd.FlattenedNetworkElements()
-	flattenedMnes := make([]*mnepb.FlattenedManagedNetworkElement, len(mnes))
-	for i, mne := range mnes {
-		mne := &mnepb.FlattenedManagedNetworkElement{
-
-			Id:   mne.ID,
-			Name: mne.Name,
-			Sbi:  mne.SBI,
-		}
-		flattenedMnes[i] = mne
-	}
-
-	return &mnepb.GetFlattenedMneListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		Mne: flattenedMnes,
-	}, nil
-}
-
-func fillMneBySpecificPath(nme networkelement.NetworkElement, path string) (*mnepb.ManagedNetworkElement, error) {
-	gnmiPath, err := ygot.StringToStructuredPath(path)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	opts := []ytypes.GetNodeOpt{
-		&ytypes.GetHandleWildcards{},
-		&ytypes.GetPartialKeyMatch{},
-	}
-	nodes, err := ytypes.GetNode(nme.SBI().Schema().RootSchema(), nme.GetModel(), gnmiPath, opts...)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	notifications := make([]*gnmi.Notification, len(nodes))
-	for i, node := range nodes {
-		mneNotification, err := genGnmiNotification(gnmiPath, node.Data)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-
-		notifications[i] = mneNotification
-	}
-
-	sbi := spb.SouthboundInterface{}
-	if nme.SBI() != nil {
-		sbi.Id = nme.SBI().ID().String()
-		sbi.Type = nme.SBI().Type()
-	}
-
-	mne := &mnepb.ManagedNetworkElement{
-		Id:              nme.ID().String(),
-		Name:            nme.Name(),
-		MneNotification: notifications,
-		Sbi:             &sbi,
-	}
-
-	return mne, nil
-}
-
-func genGnmiNotification(path *gnmi.Path, val any) (*gnmi.Notification, error) {
-	typedVal, err := ygot.EncodeTypedValue(val, gnmi.Encoding_JSON_IETF)
-	if err != nil {
-		return nil, err
-	}
-	return &gnmi.Notification{
-		Timestamp: time.Now().UnixNano(),
-		Update: []*gnmi.Update{
-			{
-				Path: &gnmi.Path{
-					Elem: path.GetElem(),
-				},
-				Val: typedVal,
-			},
-		},
-	}, nil
-}
-
 // GetSbi gets a specific sbi.
 func (p PndServer) GetSbi(ctx context.Context, request *ppb.GetSbiRequest) (*ppb.GetSbiResponse, error) {
 	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
@@ -226,7 +41,7 @@ func (p PndServer) GetSbi(ctx context.Context, request *ppb.GetSbiRequest) (*ppb
 		return nil, handleRPCError(labels, err)
 	}
 
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
+	pnd, err := p.serviceManager.PndService.Get(store.Query{ID: pid})
 	if err != nil {
 		log.Error(err)
 		return nil, status.Errorf(codes.Aborted, "%v", err)
@@ -266,7 +81,7 @@ func (p PndServer) GetSbiList(ctx context.Context, request *ppb.GetSbiListReques
 		return nil, handleRPCError(labels, err)
 	}
 
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
+	pnd, err := p.serviceManager.PndService.Get(store.Query{ID: pid})
 	if err != nil {
 		log.Error(err)
 		return nil, status.Errorf(codes.Aborted, "%v", err)
@@ -304,304 +119,6 @@ func fillSbis(pnd networkdomain.NetworkDomain) ([]*spb.SouthboundInterface, erro
 	return sbisToReturn, nil
 }
 
-func stringArrayToUUIDs(sid []string) ([]uuid.UUID, error) {
-	UUIDs := make([]uuid.UUID, len(sid))
-	for i, id := range sid {
-		parsed, err := uuid.Parse(id)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		UUIDs[i] = parsed
-	}
-	return UUIDs, nil
-}
-
-// GetPath gets a path on a mne.
-func (p PndServer) GetPath(ctx context.Context, request *mnepb.GetPathRequest) (*mnepb.GetPathResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	mneuid, err := uuid.Parse(request.Mneid)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	// In case we get the path from grpc-gateway we have to replace
-	path := strings.ReplaceAll(request.Path, "||", "/")
-
-	resp, err := pnd.Request(mneuid, path)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	return &mnepb.GetPathResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		MneNotification: resp.(*gnmi.GetResponse).Notification,
-	}, nil
-}
-
-// GetChange gets a specific change of a mne.
-func (p PndServer) GetChange(ctx context.Context, request *mnepb.GetChangeRequest) (*mnepb.GetChangeResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	changes, err := fillChanges(pnd, false, request.Cuid...)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	return &mnepb.GetChangeResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		Change: changes,
-	}, nil
-}
-
-// GetChangeList gets all existing changes.
-func (p PndServer) GetChangeList(ctx context.Context, request *mnepb.GetChangeListRequest) (*mnepb.GetChangeListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "get"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	changes, err := fillChanges(pnd, true, "")
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	return &mnepb.GetChangeListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Pnd: &mnepb.PrincipalNetworkDomain{
-			Id:          pnd.ID().String(),
-			Name:        pnd.GetName(),
-			Description: pnd.GetDescription(),
-		},
-		Change: changes,
-	}, nil
-}
-
-func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*mnepb.Change, error) {
-	var changeList []uuid.UUID
-
-	switch all {
-	case true:
-		changeList = pnd.PendingChanges()
-		changeList = append(changeList, pnd.CommittedChanges()...)
-	default:
-		var err error
-		if len(cuid) == 0 {
-			return nil, &customerrs.InvalidParametersError{
-				Func:  fillChanges,
-				Param: "length of 'mneID' cannot be '0' when 'all' is set to 'false'",
-			}
-		}
-		changeList, err = stringArrayToUUIDs(cuid)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-	}
-
-	changes := make([]*mnepb.Change, len(changeList))
-	for i, ch := range changeList {
-		c, err := pnd.GetChange(ch)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-
-		diff, err := ygot.Diff(c.PreviousState(), c.IntendedState())
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-
-		changes[i] = &mnepb.Change{
-			Id:    ch.String(),
-			Age:   c.Age().Microseconds(),
-			State: c.State(),
-			Diff:  diff,
-		}
-	}
-	return changes, nil
-}
-
-// SetMneList updates the list of mnes.
-func (p PndServer) SetMneList(ctx context.Context, request *mnepb.SetMneListRequest) (*mnepb.SetMneListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	networkElementIDs := make([]uuid.UUID, 0, len(request.Mne))
-	for _, r := range request.Mne {
-		sid, err := uuid.Parse(r.Sbi.Id)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		mneID, err := pnd.AddNetworkElement(r.MneName, r.TransportOption, sid)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		networkElementIDs = append(networkElementIDs, mneID)
-	}
-
-	r := make([]*mnepb.SetResponse, len(networkElementIDs))
-	for i, mneID := range networkElementIDs {
-		r[i] = &mnepb.SetResponse{Id: mneID.String(), Status: mnepb.Status_STATUS_OK}
-	}
-
-	return &mnepb.SetMneListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Status:    mnepb.Status_STATUS_OK,
-		Responses: r,
-	}, nil
-}
-
-// SetChangeList sets a list of changes.
-func (p PndServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	responses := make([]*mnepb.SetResponse, len(request.Change))
-
-	for i, r := range request.Change {
-		cuid, err := uuid.Parse(r.Cuid)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		switch r.Op {
-		case mnepb.Operation_OPERATION_COMMIT:
-			if err := pnd.Commit(cuid); err != nil {
-				log.Error(err)
-				return nil, status.Errorf(codes.Aborted, "%v", err)
-			}
-		case mnepb.Operation_OPERATION_CONFIRM:
-			if err := pnd.Confirm(cuid); err != nil {
-				log.Error(err)
-				return nil, status.Errorf(codes.Aborted, "%v", err)
-			}
-		default:
-			return nil, &customerrs.InvalidParametersError{
-				Param: r.Op,
-			}
-		}
-
-		responses[i] = &mnepb.SetResponse{
-			Id:     cuid.String(),
-			Status: mnepb.Status_STATUS_OK,
-		}
-	}
-	return &mnepb.SetChangeListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Status:    mnepb.Status_STATUS_OK,
-		Responses: responses,
-	}, nil
-}
-
-// SetPathList sets a list of paths.
-func (p PndServer) SetPathList(ctx context.Context, request *mnepb.SetPathListRequest) (*mnepb.SetPathListResponse, error) {
-	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
-	start := metrics.StartHook(labels, grpcRequestsTotal)
-	defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds)
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		return nil, handleRPCError(labels, err)
-	}
-
-	responses := make([]*mnepb.SetResponse, len(request.ChangeRequest))
-
-	for i, r := range request.ChangeRequest {
-		mneID, err := uuid.Parse(r.Mneid)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-		cid, err := pnd.ChangeMNE(mneID, r.ApiOp, r.Path, r.Value)
-		if err != nil {
-			log.Error(err)
-			return nil, status.Errorf(codes.Aborted, "%v", err)
-		}
-
-		responses[i] = &mnepb.SetResponse{
-			Status: mnepb.Status_STATUS_OK,
-			Id:     cid.String(),
-		}
-	}
-	return &mnepb.SetPathListResponse{
-		Timestamp: time.Now().UnixNano(),
-		Status:    mnepb.Status_STATUS_OK,
-		Responses: responses,
-	}, nil
-}
-
 // SetSbiList sets a list of sbis.
 func (p PndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListRequest) (*ppb.SetSbiListResponse, error) {
 	labels := prometheus.Labels{"service": "pnd", "rpc": "set"}
@@ -612,7 +129,7 @@ func (p PndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListReques
 		return nil, handleRPCError(labels, err)
 	}
 
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
+	pnd, err := p.serviceManager.PndService.Get(store.Query{ID: pid})
 	if err != nil {
 		return nil, handleRPCError(labels, err)
 	}
@@ -657,55 +174,3 @@ func filterSbiType(sbiType ppb.SbiType) spb.Type {
 
 	return spbType
 }
-
-// DeleteMne deletes a mne.
-func (p PndServer) DeleteMne(ctx context.Context, request *mnepb.DeleteMneRequest) (*mnepb.DeleteMneResponse, error) {
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	mneID, err := uuid.Parse(request.Mneid)
-	if err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	if err := pnd.RemoveNetworkElement(mneID); err != nil {
-		log.Error(err)
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-	return &mnepb.DeleteMneResponse{
-		Timestamp: time.Now().UnixNano(),
-		Status:    mnepb.Status_STATUS_OK,
-	}, nil
-}
-
-// SubscribePath subscribes to specifc paths of an mne.
-func (p PndServer) SubscribePath(request *mnepb.SubscribePathRequest, stream mnepb.NetworkElementService_SubscribePathServer) error {
-	pid, err := uuid.Parse(request.Pid)
-	if err != nil {
-		return err
-	}
-
-	pnd, err := p.pndStore.Get(store.Query{ID: pid})
-	if err != nil {
-		return err
-	}
-
-	mneID, err := uuid.Parse(request.Mneid)
-	if err != nil {
-		return err
-	}
-
-	if err := pnd.SubscribePath(mneID, request.Sublist); err != nil {
-		return err
-	}
-
-	return nil
-}
diff --git a/controller/northbound/server/pnd_test.go b/controller/northbound/server/pnd_test.go
index fbf20c00d7c046bab578469006270c1475e68188..6608cd19ad99d4375f89dbef7a5d7e44b62a4a7f 100644
--- a/controller/northbound/server/pnd_test.go
+++ b/controller/northbound/server/pnd_test.go
@@ -9,12 +9,14 @@ import (
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/mocks"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
 	"github.com/google/uuid"
 	"github.com/openconfig/gnmi/proto/gnmi"
 	"github.com/stretchr/testify/mock"
 )
 
+// TODO(PND): this whole file needs to be reworked!
 func getTestPndServer(t *testing.T) *PndServer {
 	var err error
 	pndUUID, err = uuid.Parse(pndID)
@@ -92,7 +94,11 @@ func getTestPndServer(t *testing.T) *PndServer {
 		t.Fatal(err)
 	}
 
-	c := NewPndServer(pndStore)
+	pndService := nucleus.NewPndService(pndStore)
+
+	serviceManager := &servmgmt.ServiceManager{PndService: pndService}
+
+	c := NewPndServer(*serviceManager)
 
 	return c
 }
@@ -207,12 +213,12 @@ func Test_pnd_GetPath(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			s := getTestPndServer(t)
-			_, err := s.GetPath(tt.args.ctx, tt.args.request)
-			if (err != nil) != tt.wantErr {
-				t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
+			// s := getTestPndServer(t)
+			// _, err := s.GetPath(tt.args.ctx, tt.args.request)
+			// if (err != nil) != tt.wantErr {
+			// 	t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr)
+			// 	return
+			// }
 
 			//got := resp.GetMneNotification()
 
diff --git a/controller/northbound/server/sbi.go b/controller/northbound/server/sbi.go
index 32374d5265155ec4ef6c0595c245e367910e8b8b..8edfaae2357ea68f3c564f8f4d81a3a04b1bff4a 100644
--- a/controller/northbound/server/sbi.go
+++ b/controller/northbound/server/sbi.go
@@ -6,8 +6,8 @@ import (
 	"io"
 
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/metrics"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 	"github.com/prometheus/client_golang/prometheus"
@@ -27,13 +27,13 @@ const (
 // SbiServer represents a sbi server.
 type SbiServer struct {
 	spb.UnimplementedSbiServiceServer
-	pndStore networkdomain.PndStore
+	serviceManager servmgmt.ServiceManager
 }
 
 // NewSbiServer receives a pndStore and returns a new sbiServer.
-func NewSbiServer(pndStore networkdomain.PndStore) *SbiServer {
+func NewSbiServer(serviceManager servmgmt.ServiceManager) *SbiServer {
 	return &SbiServer{
-		pndStore: pndStore,
+		serviceManager: serviceManager,
 	}
 }
 
@@ -53,7 +53,7 @@ func (s SbiServer) GetSchema(request *spb.GetSchemaRequest, stream spb.SbiServic
 		return handleRPCError(labels, err)
 	}
 
-	pnd, err := s.pndStore.Get(store.Query{ID: pid})
+	pnd, err := s.serviceManager.PndService.Get(store.Query{ID: pid})
 	if err != nil {
 		return handleRPCError(labels, err)
 	}
diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go
index aa70d0fdf666f5783d6b73e4fc901999fe11afe0..8f30af9fce6f819ed092b4374bca1fe4ccd0efaf 100644
--- a/controller/nucleus/databasePndStore.go
+++ b/controller/nucleus/databasePndStore.go
@@ -28,9 +28,37 @@ type DatabasePndStore struct {
 
 // Get takes a PrincipalNetworkDomain's UUID or name and returns the PrincipalNetworkDomain. If the requested
 // PrincipalNetworkDomain does not exist an error is returned.
-func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.NetworkDomain, err error) {
-	var loadedPND LoadedPnd
+func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.LoadedPnd, err error) {
+	var loadedPND networkdomain.LoadedPnd
 
+	if query.ID != uuid.Nil {
+		loadedPND, err := s.getByID(query.ID)
+		if err != nil {
+			return loadedPND, err
+		}
+	}
+
+	loadedPND, err = s.getByName(query.Name)
+	if err != nil {
+		return loadedPND, err
+	}
+
+	// Note: add this if using cSBI agian
+	// csbiClient, err := s.getCsbiClient()
+	// if err != nil {
+	// 	return loadedPND, err
+	// }
+
+	// newPnd, err := NewPND(
+	// 	loadedPND.Name,
+	// 	loadedPND.Description,
+	// 	uuid.MustParse(loadedPND.ID),
+	// )
+
+	return loadedPND, nil
+}
+
+func (s *DatabasePndStore) getByID(idOfPnd uuid.UUID) (loadedPnd networkdomain.LoadedPnd, err error) {
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
 	defer func() {
@@ -39,42 +67,52 @@ func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.NetworkD
 			err = fmt.Errorf("InternalError=%w DeferError=%+s", err, fErrString)
 		}
 	}()
+
 	db := client.Database(database.DatabaseName)
 	collection := db.Collection(s.pndStoreName)
-	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.ID.String()}})
+	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfPnd.String()}})
 	if result == nil {
-		return nil, customerrs.CouldNotFindError{ID: query.ID}
+		return loadedPnd, customerrs.CouldNotFindError{ID: idOfPnd}
 	}
 
-	err = result.Decode(&loadedPND)
+	err = result.Decode(&loadedPnd)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-
-		return nil, customerrs.CouldNotMarshallError{Identifier: query.ID, Type: loadedPND, Err: err}
+		return loadedPnd, customerrs.CouldNotMarshallError{Identifier: idOfPnd, Type: loadedPnd, Err: err}
 	}
 
-	csbiClient, err := s.getCsbiClient()
-	if err != nil {
-		return nil, err
+	return loadedPnd, nil
+}
+
+func (s *DatabasePndStore) getByName(nameOfPnd string) (loadedPnd networkdomain.LoadedPnd, err error) {
+	client, ctx, cancel := database.GetMongoConnection()
+	defer cancel()
+	defer func() {
+		if ferr := client.Disconnect(ctx); ferr != nil {
+			fErrString := ferr.Error()
+			err = fmt.Errorf("InternalError=%w DeferError=%+s", err, fErrString)
+		}
+	}()
+
+	db := client.Database(database.DatabaseName)
+	collection := db.Collection(s.pndStoreName)
+	result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfPnd}})
+	if result == nil {
+		return loadedPnd, customerrs.CouldNotFindError{ID: nameOfPnd}
 	}
 
-	newPnd, err = NewPND(
-		loadedPND.Name,
-		loadedPND.Description,
-		uuid.MustParse(loadedPND.ID),
-		csbiClient,
-		s.callback,
-	)
+	err = result.Decode(&loadedPnd)
 	if err != nil {
-		return nil, err
+		log.Printf("Failed marshalling %v", err)
+		return loadedPnd, customerrs.CouldNotMarshallError{Identifier: nameOfPnd, Type: loadedPnd, Err: err}
 	}
 
-	return newPnd, nil
+	return loadedPnd, nil
 }
 
 // GetAll returns all stored pnds.
-func (s *DatabasePndStore) GetAll() (pnds []networkdomain.NetworkDomain, err error) {
-	var loadedPnds []LoadedPnd
+func (s *DatabasePndStore) GetAll() (pnds []networkdomain.LoadedPnd, err error) {
+	var loadedPnds []networkdomain.LoadedPnd
 
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
@@ -106,27 +144,28 @@ func (s *DatabasePndStore) GetAll() (pnds []networkdomain.NetworkDomain, err err
 		return nil, customerrs.CouldNotMarshallError{Type: loadedPnds, Err: err}
 	}
 
-	csbiClient, err := s.getCsbiClient()
-	if err != nil {
-		return nil, err
-	}
-
-	for _, loadedPND := range loadedPnds {
-		newPnd, err := NewPND(
-			loadedPND.Name,
-			loadedPND.Description,
-			uuid.MustParse(loadedPND.ID),
-			csbiClient,
-			s.callback,
-		)
-		if err != nil {
-			return nil, err
-		}
-
-		pnds = append(pnds, newPnd)
-	}
-
-	return pnds, nil
+	// Note: add this if using cSBI again
+	// csbiClient, err := s.getCsbiClient()
+	// if err != nil {
+	// 	return nil, err
+	// }
+
+	// for _, loadedPND := range loadedPnds {
+	// 	newPnd, err := NewPND(
+	// 		loadedPND.Name,
+	// 		loadedPND.Description,
+	// 		uuid.MustParse(loadedPND.ID),
+	// 		csbiClient,
+	// 		s.callback,
+	// 	)
+	// 	if err != nil {
+	// 		return nil, err
+	// 	}
+
+	// 	pnds = append(pnds, newPnd)
+	// }
+
+	return loadedPnds, nil
 }
 
 // Add adds a pnd to the pnd store.
diff --git a/controller/nucleus/memoryPndStore.go b/controller/nucleus/memoryPndStore.go
index e454095a2c6da10dac1edb8d28c890d2dae91051..8fe4286e95ba819ccf099b38ae8f819364a6817b 100644
--- a/controller/nucleus/memoryPndStore.go
+++ b/controller/nucleus/memoryPndStore.go
@@ -1,6 +1,8 @@
 package nucleus
 
 import (
+	"encoding/json"
+
 	"code.fbi.h-da.de/danet/gosdn/controller/customerrs"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
@@ -10,26 +12,38 @@ import (
 
 // MemoryPndStore provides a in-memory implementation for a pnd store.
 type MemoryPndStore struct {
-	Store           map[uuid.UUID]networkdomain.NetworkDomain
+	Store           map[uuid.UUID]networkdomain.LoadedPnd
 	pendingChannels map[uuid.UUID]chan networkelement.Details
 }
 
 // NewMemoryPndStore returns a in-memory implementation for a pnd store.
 func NewMemoryPndStore() networkdomain.PndStore {
 	return &MemoryPndStore{
-		Store:           make(map[uuid.UUID]networkdomain.NetworkDomain),
+		Store:           make(map[uuid.UUID]networkdomain.LoadedPnd),
 		pendingChannels: make(map[uuid.UUID]chan networkelement.Details),
 	}
 }
 
 // Add adds a pnd to the store.
 func (t *MemoryPndStore) Add(item networkdomain.NetworkDomain) error {
-	_, ok := t.Store[item.ID()]
+	var pnd networkdomain.LoadedPnd
+
+	b, err := json.Marshal(item)
+	if err != nil {
+		return err
+	}
+
+	err = json.Unmarshal(b, &pnd)
+	if err != nil {
+		return err
+	}
+
+	_, ok := t.Store[uuid.MustParse(pnd.ID)]
 	if ok {
 		return nil
 	}
 
-	t.Store[item.ID()] = item
+	t.Store[item.ID()] = pnd
 
 	return nil
 }
@@ -42,18 +56,19 @@ func (t *MemoryPndStore) Delete(item networkdomain.NetworkDomain) error {
 }
 
 // Get provides a the query interface to find a stored pnd.
-func (t *MemoryPndStore) Get(query store.Query) (networkdomain.NetworkDomain, error) {
+func (t *MemoryPndStore) Get(query store.Query) (networkdomain.LoadedPnd, error) {
+	// First search for direct hit on UUID.
 	item, ok := t.Store[query.ID]
 	if !ok {
-		return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
+		return item, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 	}
 
 	return item, nil
 }
 
 // GetAll returns all pnds currently on the store.
-func (t *MemoryPndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
-	var allItems []networkdomain.NetworkDomain
+func (t *MemoryPndStore) GetAll() ([]networkdomain.LoadedPnd, error) {
+	var allItems []networkdomain.LoadedPnd
 
 	for _, item := range t.Store {
 		allItems = append(allItems, item)
diff --git a/controller/nucleus/networkElementStore.go b/controller/nucleus/networkElementStore.go
index 72b663adbe7a82750386736c77f0987b3e1a12bc..857b36bb232d7b85382cb1d7d9e26794cc9e997a 100644
--- a/controller/nucleus/networkElementStore.go
+++ b/controller/nucleus/networkElementStore.go
@@ -11,6 +11,7 @@ import (
 )
 
 // NewNetworkElementStore returns a NetworkElementStore.
+// TODO(PND): remove uuid from name!
 func NewNetworkElementStore(pndUUID uuid.UUID) networkelement.Store {
 	storeMode := store.GetStoreMode()
 	log.Debugf("StoreMode: %s", storeMode)
diff --git a/controller/nucleus/networkElementWatcher.go b/controller/nucleus/networkElementWatcher.go
index 44775ef8be72501132cfeed76e84997eee2ae867..2afb43c56caee13fd7c839bcf893918e44a83ef4 100644
--- a/controller/nucleus/networkElementWatcher.go
+++ b/controller/nucleus/networkElementWatcher.go
@@ -12,6 +12,7 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
 	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
+	"code.fbi.h-da.de/danet/gosdn/controller/servmgmt"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi"
 	"github.com/google/uuid"
@@ -29,7 +30,7 @@ const (
 // NetworkElementWatcher is a component that subscribes to network elements via gNMI from within the controller and handles
 // responses by triggering the internal event process.
 type NetworkElementWatcher struct {
-	pndStore                   networkdomain.PndStore
+	serviceManager             servmgmt.ServiceManager
 	networkelementSubcriptions map[uuid.UUID]*networkelementSubscriptionHelper
 	eventService               eventInterfaces.Service
 }
@@ -41,9 +42,9 @@ type networkelementSubscriptionHelper struct {
 }
 
 // NewNetworkElementWatcher takes a pndStore to subscribe to network element paths.
-func NewNetworkElementWatcher(pndStore networkdomain.PndStore, eventService eventInterfaces.Service) *NetworkElementWatcher {
+func NewNetworkElementWatcher(serviceManager servmgmt.ServiceManager, eventService eventInterfaces.Service) *NetworkElementWatcher {
 	return &NetworkElementWatcher{
-		pndStore:                   pndStore,
+		serviceManager:             serviceManager,
 		networkelementSubcriptions: make(map[uuid.UUID]*networkelementSubscriptionHelper),
 		eventService:               eventService,
 	}
@@ -62,7 +63,7 @@ func (n *NetworkElementWatcher) SubToNetworkElements(paths [][]string, opts *gnm
 		}
 	}
 
-	pnds, err := n.pndStore.GetAll()
+	pnds, err := n.serviceManager.PndService.GetAll()
 	if err != nil {
 		log.Error(err)
 	}
@@ -152,7 +153,7 @@ func (n *NetworkElementWatcher) handleSubscribeResponseUpdate(resp *gpb.Subscrib
 		log.Error(err)
 	}
 
-	pnd, err := n.pndStore.Get(store.Query{ID: pndID})
+	pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pndID})
 	if err != nil {
 		log.Error(err)
 	}
diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go
index d7fb1f5978e3ac04b3dadc2fbf3def280f864019..b739a52e8074cadc72b6632a51866007587beef5 100644
--- a/controller/nucleus/pndFilesystemStore.go
+++ b/controller/nucleus/pndFilesystemStore.go
@@ -38,8 +38,8 @@ func NewFilesystemPndStore() FilesystemPndStore {
 	}
 }
 
-func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.NetworkDomain, error) {
-	var loadedPnds []LoadedPnd
+func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.LoadedPnd, error) {
+	var loadedPnds []networkdomain.LoadedPnd
 
 	content, err := os.ReadFile(t.pathToPndFile)
 	if err != nil {
@@ -72,10 +72,10 @@ func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.NetworkDomai
 
 		pnds[i] = newPnd
 	}
-	return pnds, nil
+	return loadedPnds, nil
 }
 
-func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.NetworkDomain) error {
+func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.LoadedPnd) error {
 	serializedData, err := json.Marshal(pnds)
 	if err != nil {
 		return err
@@ -99,7 +99,13 @@ func (t *FilesystemPndStore) Add(pndToAdd networkdomain.NetworkDomain) error {
 		return err
 	}
 
-	pnds = append(pnds, pndToAdd)
+	var loadedPnd networkdomain.LoadedPnd
+	loadedPnd, err = store.TransformObjectToLoadedObject[networkdomain.NetworkDomain, networkdomain.LoadedPnd](pndToAdd)
+	if err != nil {
+		return err
+	}
+
+	pnds = append(pnds, loadedPnd)
 
 	err = t.writeAllPndsToFile(pnds)
 	if err != nil {
@@ -120,7 +126,7 @@ func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) err
 	}
 
 	for i, pnd := range pnds {
-		if pnd.ID() == pndToDelete.ID() {
+		if pnd.ID == pndToDelete.ID().String() {
 			//remove item from slice
 			pnds[i] = pnds[len(pnds)-1]
 			pnds = pnds[:len(pnds)-1]
@@ -138,26 +144,28 @@ func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) err
 }
 
 // Get provides a the query interface to find a stored pnd.
-func (t *FilesystemPndStore) Get(query store.Query) (networkdomain.NetworkDomain, error) {
+func (t *FilesystemPndStore) Get(query store.Query) (networkdomain.LoadedPnd, error) {
 	t.fileMutex.Lock()
 	defer t.fileMutex.Unlock()
 
+	var loadedPND networkdomain.LoadedPnd
+
 	pnds, err := t.readAllPndsFromFile()
 	if err != nil {
-		return nil, err
+		return loadedPND, err
 	}
 
 	for _, pnd := range pnds {
-		if pnd.ID() == query.ID || pnd.GetName() == query.Name {
+		if pnd.ID == query.ID.String() || pnd.Name == query.Name {
 			return pnd, nil
 		}
 	}
 
-	return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
+	return loadedPND, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name}
 }
 
 // GetAll returns all pnds currently on the store.
-func (t *FilesystemPndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
+func (t *FilesystemPndStore) GetAll() ([]networkdomain.LoadedPnd, error) {
 	t.fileMutex.Lock()
 	defer t.fileMutex.Unlock()
 
diff --git a/controller/nucleus/pndFilesystemStore_test.go b/controller/nucleus/pndFilesystemStore_test.go
index 420c9d27b69d63f22897cffb0ffdaf35fcd49a80..35c0c7ce0e5e25cf83f6e74053b1bdee8665274f 100644
--- a/controller/nucleus/pndFilesystemStore_test.go
+++ b/controller/nucleus/pndFilesystemStore_test.go
@@ -47,14 +47,14 @@ func TestGetAllPnds(t *testing.T) {
 	}
 
 	for i, pnd := range returnPnds {
-		if pnd.GetName() != inputPnds[i].GetName() {
-			t.Errorf("GetAll() = %v, want %v", pnd.GetName(), inputPnds[i].GetName())
+		if pnd.Name != inputPnds[i].GetName() {
+			t.Errorf("GetAll() = %v, want %v", pnd.Name, inputPnds[i].GetName())
 		}
-		if pnd.GetDescription() != inputPnds[i].GetDescription() {
-			t.Errorf("GetAll() = %v, want %v", pnd.GetDescription(), inputPnds[i].GetDescription())
+		if pnd.Description != inputPnds[i].GetDescription() {
+			t.Errorf("GetAll() = %v, want %v", pnd.Description, inputPnds[i].GetDescription())
 		}
-		if pnd.ID() != inputPnds[i].ID() {
-			t.Errorf("GetAll() = %v, want %v", pnd.ID(), inputPnds[i].ID())
+		if pnd.ID != inputPnds[i].ID().String() {
+			t.Errorf("GetAll() = %v, want %v", pnd.ID, inputPnds[i].ID())
 		}
 	}
 }
@@ -82,14 +82,14 @@ func TestGetPnd(t *testing.T) {
 		t.Error(err)
 	}
 
-	if returnPnd.GetName() != pnd2.GetName() {
-		t.Errorf("GetAll() = %v, want %v", pnd2.GetName(), returnPnd.GetName())
+	if returnPnd.Name != pnd2.GetName() {
+		t.Errorf("GetAll() = %v, want %v", pnd2.GetName(), returnPnd.Name)
 	}
-	if returnPnd.GetDescription() != pnd2.GetDescription() {
-		t.Errorf("GetAll() = %v, want %v", pnd2.GetDescription(), returnPnd.GetDescription())
+	if returnPnd.Description != pnd2.GetDescription() {
+		t.Errorf("GetAll() = %v, want %v", pnd2.GetDescription(), returnPnd.Description)
 	}
-	if returnPnd.ID() != pnd2.ID() {
-		t.Errorf("GetAll() = %v, want %v", pnd2.ID(), returnPnd.ID())
+	if returnPnd.ID != pnd2.ID().String() {
+		t.Errorf("GetAll() = %v, want %v", pnd2.ID(), returnPnd.ID)
 	}
 }
 
@@ -128,14 +128,14 @@ func TestDeletePnd(t *testing.T) {
 
 	//only check first element in this case
 	for i, pnd := range returnPnds[1:] {
-		if pnd.GetName() != inputPnds[i].GetName() {
-			t.Errorf("GetAll() = %v, want %v", pnd.GetName(), inputPnds[i].GetName())
+		if pnd.Name != inputPnds[i].GetName() {
+			t.Errorf("GetAll() = %v, want %v", pnd.Name, inputPnds[i].GetName())
 		}
-		if pnd.GetDescription() != inputPnds[i].GetDescription() {
-			t.Errorf("GetAll() = %v, want %v", pnd.GetDescription(), inputPnds[i].GetDescription())
+		if pnd.Description != inputPnds[i].GetDescription() {
+			t.Errorf("GetAll() = %v, want %v", pnd.Description, inputPnds[i].GetDescription())
 		}
-		if pnd.ID() != inputPnds[i].ID() {
-			t.Errorf("GetAll() = %v, want %v", pnd.ID(), inputPnds[i].ID())
+		if pnd.ID != inputPnds[i].ID().String() {
+			t.Errorf("GetAll() = %v, want %v", pnd.ID, inputPnds[i].ID())
 		}
 	}
 }
diff --git a/controller/nucleus/pndService.go b/controller/nucleus/pndService.go
new file mode 100644
index 0000000000000000000000000000000000000000..a8a6b1098c4683cd6fa45fdec075776fcc397391
--- /dev/null
+++ b/controller/nucleus/pndService.go
@@ -0,0 +1,74 @@
+package nucleus
+
+import (
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/controller/store"
+	"github.com/google/uuid"
+)
+
+// TODO(PND): add PND to event system?
+
+// PndService provides a PND service implementation.
+type PndService struct {
+	pndStore networkdomain.PndStore
+}
+
+// NewPndService creates a PND service.
+func NewPndService(pndStore networkdomain.PndStore) networkdomain.PndService {
+	pndService := &PndService{
+		pndStore: pndStore,
+	}
+
+	return pndService
+}
+
+// Add adds a PND to the PND store.
+func (p *PndService) Add(pndToAdd networkdomain.NetworkDomain) error {
+	err := p.pndStore.Add(pndToAdd)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// Delete deletes a PND from the PND store.
+func (p *PndService) Delete(pndToDelete networkdomain.NetworkDomain) error {
+	err := p.pndStore.Delete(pndToDelete)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// Get takes a PND's UUID or name and returns the PND.
+func (p *PndService) Get(query store.Query) (networkdomain.NetworkDomain, error) {
+	loadedPnd, err := p.pndStore.Get(query)
+	if err != nil {
+		return nil, err
+	}
+
+	return p.createPndFromStore(loadedPnd), nil
+}
+
+// GetAll returns all stores PNDs.
+func (p *PndService) GetAll() ([]networkdomain.NetworkDomain, error) {
+	var pnds []networkdomain.NetworkDomain
+
+	loadedPnds, err := p.pndStore.GetAll()
+	if err != nil {
+		return nil, err
+	}
+
+	for _, loadedPnd := range loadedPnds {
+		pnds = append(pnds, p.createPndFromStore(loadedPnd))
+	}
+
+	return pnds, nil
+}
+
+// TODO(PND): add missing pnd stuff!
+func (p *PndService) createPndFromStore(loadedPnd networkdomain.LoadedPnd) networkdomain.NetworkDomain {
+	return NewPNDEntity(uuid.MustParse(loadedPnd.ID), loadedPnd.Name, loadedPnd.Description)
+}
diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go
index 9f7ff1a0c8eebcb2d33a6fd499c35fb0f84130ff..fe5e765ae8f7e4de5e2e74bb76a8fe695b01bd55 100644
--- a/controller/nucleus/principalNetworkDomain.go
+++ b/controller/nucleus/principalNetworkDomain.go
@@ -108,6 +108,16 @@ func NewPND(
 	return pnd, nil
 }
 
+func NewPNDEntity(pndID uuid.UUID, name string, description string) networkdomain.NetworkDomain {
+	pnd := &pndImplementation{
+		Id:          pndID,
+		Name:        name,
+		Description: description,
+	}
+
+	return pnd
+}
+
 type pndImplementation struct {
 	Name                  string `json:"name,omitempty"`
 	Description           string `json:"description,omitempty"`
diff --git a/controller/nucleus/sbiStore.go b/controller/nucleus/sbiStore.go
index 81cfc077d2fd95198f244dafed5ba7257cea711c..24feec923199aa0fc291f69aff9cfa536167e9e6 100644
--- a/controller/nucleus/sbiStore.go
+++ b/controller/nucleus/sbiStore.go
@@ -10,6 +10,7 @@ import (
 )
 
 // NewSbiStore returns a sbiStore.
+// TODO(PND): remove uuid from name!
 func NewSbiStore(pndUUID uuid.UUID) southbound.Store {
 	storeMode := store.GetStoreMode()
 
diff --git a/controller/servmgmt/serviceManager.go b/controller/servmgmt/serviceManager.go
new file mode 100644
index 0000000000000000000000000000000000000000..c114941453fa82959d068336e5d697b36f5fe4b8
--- /dev/null
+++ b/controller/servmgmt/serviceManager.go
@@ -0,0 +1,57 @@
+package servmgmt
+
+import (
+	"code.fbi.h-da.de/danet/gosdn/controller/app"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
+	"code.fbi.h-da.de/danet/gosdn/controller/store"
+	"code.fbi.h-da.de/danet/gosdn/controller/topology"
+	"code.fbi.h-da.de/danet/gosdn/controller/topology/nodes"
+	"code.fbi.h-da.de/danet/gosdn/controller/topology/ports"
+	routingtables "code.fbi.h-da.de/danet/gosdn/controller/topology/routing-tables"
+	"github.com/google/uuid"
+)
+
+// NOTE: Until we've added database support for changes, we will hold
+// changeStores in memory for now.
+var changeStoreMap = make(map[uuid.UUID]*store.ChangeStore)
+
+// ServiceManager is an aggregation of all services which handle storage access.
+type ServiceManager struct {
+	//TODO(PND):change these to services!
+	PndService      networkdomain.PndService
+	PNDStore        networkdomain.PndStore
+	ChangeStore     store.ChangeStore
+	SbiService      southbound.Service
+	MneService      networkelement.Service
+	UserService     rbac.UserService
+	RoleService     rbac.RoleService
+	NodeService     nodes.Service
+	PortService     ports.Service
+	TopologyService topology.Service
+	RouteService    routingtables.Service
+	AppService      app.ManagementService
+}
+
+// NewServiceManager returns a ServiceManager.
+func NewServiceManager(pndService networkdomain.PndService, pndStore networkdomain.PndStore, changeStore store.ChangeStore, sbiServ southbound.Service,
+	mneServ networkelement.Service, userServ rbac.UserService, roleServ rbac.RoleService,
+	nodeServ nodes.Service, portServ ports.Service, topoServ topology.Service,
+	routeServ routingtables.Service, appServ app.ManagementService) *ServiceManager {
+	return &ServiceManager{
+		PndService:      pndService,
+		PNDStore:        pndStore,
+		ChangeStore:     changeStore,
+		SbiService:      sbiServ,
+		MneService:      mneServ,
+		UserService:     userServ,
+		RoleService:     roleServ,
+		NodeService:     nodeServ,
+		PortService:     portServ,
+		TopologyService: topoServ,
+		RouteService:    routeServ,
+		AppService:      appServ,
+	}
+}
diff --git a/controller/topology/topologyService.go b/controller/topology/topologyService.go
index 68530269302514decd0e15d262a6907d3ee99a77..c48824efa6f198a12b6d072a86f6e93eb968f6fc 100644
--- a/controller/topology/topologyService.go
+++ b/controller/topology/topologyService.go
@@ -24,8 +24,8 @@ type Service interface {
 	GetAll() ([]links.Link, error)
 }
 
-// service is a service for ports.
-type service struct {
+// TopoService is a TopoService for ports.
+type TopoService struct {
 	store        Store
 	nodeService  nodes.Service
 	portService  ports.Service
@@ -39,7 +39,7 @@ func NewTopologyService(
 	portService ports.Service,
 	eventService eventInterfaces.Service,
 ) Service {
-	return &service{
+	return &TopoService{
 		store:        store,
 		nodeService:  nodeService,
 		portService:  portService,
@@ -48,7 +48,7 @@ func NewTopologyService(
 }
 
 // AddLink adds a new link to the topology.
-func (t *service) AddLink(link links.Link) error {
+func (t *TopoService) AddLink(link links.Link) error {
 	// These checks are also happening in the current NBI implementation.
 	// This should be refactored to only to these checks here.
 	// _, err := t.nodeService.EnsureExists(link.SourceNode)
@@ -90,7 +90,7 @@ func (t *service) AddLink(link links.Link) error {
 }
 
 // UpdateLink updates an existing link.
-func (t *service) UpdateLink(link links.Link) error {
+func (t *TopoService) UpdateLink(link links.Link) error {
 	err := t.store.Update(link)
 	if err != nil {
 		return err
@@ -112,7 +112,7 @@ func (t *service) UpdateLink(link links.Link) error {
 }
 
 // DeleteLink deletes a link.
-func (t *service) DeleteLink(link links.Link) error {
+func (t *TopoService) DeleteLink(link links.Link) error {
 	// TODO: Delete should also check if a node or port is used somewhere else and
 	// if not, delete the node and its ports
 	err := t.store.Delete(link)
@@ -136,7 +136,7 @@ func (t *service) DeleteLink(link links.Link) error {
 }
 
 // GetAll returns the current topology.
-func (t *service) GetAll() ([]links.Link, error) {
+func (t *TopoService) GetAll() ([]links.Link, error) {
 	topo, err := t.store.GetAll()
 	if err != nil {
 		return topo, err
@@ -145,7 +145,7 @@ func (t *service) GetAll() ([]links.Link, error) {
 }
 
 // GetAll returns the current topology.
-func (t *service) Get(query query.Query) (links.Link, error) {
+func (t *TopoService) Get(query query.Query) (links.Link, error) {
 	link, err := t.store.Get(query)
 	if err != nil {
 		return link, err
diff --git a/controller/topology/topologyService_test.go b/controller/topology/topologyService_test.go
index 899acc98c4e31b5e5b89258843efb76cf5a1be4d..e28df6d9e6990c63528bbd7130c5ea5e0d7f1c98 100644
--- a/controller/topology/topologyService_test.go
+++ b/controller/topology/topologyService_test.go
@@ -185,7 +185,7 @@ func TestTopologyService_AddLink(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			p := &service{
+			p := &TopoService{
 				store:        tt.fields.store,
 				nodeService:  tt.fields.nodeService,
 				portService:  tt.fields.portService,
@@ -243,7 +243,7 @@ func TestTopologyService_Update(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			p := &service{
+			p := &TopoService{
 				store:        tt.fields.store,
 				nodeService:  tt.fields.nodeService,
 				portService:  tt.fields.portService,
@@ -312,7 +312,7 @@ func TestNodeService_Delete(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			p := &service{
+			p := &TopoService{
 				store:        tt.fields.store,
 				nodeService:  tt.fields.nodeService,
 				portService:  tt.fields.portService,
@@ -375,7 +375,7 @@ func TestTopologyService_Get(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			p := &service{
+			p := &TopoService{
 				store:        tt.fields.store,
 				nodeService:  tt.fields.nodeService,
 				portService:  tt.fields.portService,
@@ -420,7 +420,7 @@ func TestTopologyService_GetAll(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			p := &service{
+			p := &TopoService{
 				store:        tt.fields.store,
 				nodeService:  tt.fields.nodeService,
 				portService:  tt.fields.portService,