diff --git a/e2ap/lib/AMFName.c b/e2ap/lib/AMFName.c
new file mode 100644
index 0000000..ed2a6e7
--- /dev/null
+++ b/e2ap/lib/AMFName.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "AMFName.h"
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,	/* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,	/* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,	/*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,	/* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,	/*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,	/* pqrstuvwxyz      */
+};
+static const int permitted_alphabet_code2value_1[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122,};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+	const int *table = permitted_alphabet_table_1;
+	/* The underlying type is PrintableString */
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
+	
+	for(; ch < end; ch++) {
+		uint8_t cv = *ch;
+		if(!table[cv]) return -1;
+	}
+	return 0;
+}
+
+int
+AMFName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 150)
+		 && !check_permitted_alphabet_1(st)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int asn_PER_MAP_AMFName_1_v2c(unsigned int value) {
+	if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+		return -1;
+	return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_AMFName_1_c2v(unsigned int code) {
+	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+		return -1;
+	return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using PrintableString,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_AMFName_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..MAX)) */};
+asn_per_constraints_t asn_PER_type_AMFName_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
+	asn_PER_MAP_AMFName_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_AMFName_1_c2v	/* PER code to value map */
+};
+static const ber_tlv_tag_t asn_DEF_AMFName_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_AMFName = {
+	"AMFName",
+	"AMFName",
+	&asn_OP_PrintableString,
+	asn_DEF_AMFName_tags_1,
+	sizeof(asn_DEF_AMFName_tags_1)
+		/sizeof(asn_DEF_AMFName_tags_1[0]), /* 1 */
+	asn_DEF_AMFName_tags_1,	/* Same as above */
+	sizeof(asn_DEF_AMFName_tags_1)
+		/sizeof(asn_DEF_AMFName_tags_1[0]), /* 1 */
+	{ &asn_OER_type_AMFName_constr_1, &asn_PER_type_AMFName_constr_1, AMFName_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2ap/lib/Cause.c b/e2ap/lib/Cause.c
index bdb51be..15a29de 100644
--- a/e2ap/lib/Cause.c
+++ b/e2ap/lib/Cause.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "Cause.h"
@@ -11,7 +11,7 @@
 	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
@@ -19,7 +19,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_CauseRIC,
+		&asn_DEF_CauseRICrequest,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -34,9 +34,18 @@
 		0, 0, /* No default value */
 		"ricService"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport),
+	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.e2Node),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_CauseE2node,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2Node"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_CauseTransport,
 		0,
 		{ 0, 0, 0 },
@@ -44,7 +53,7 @@
 		"transport"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_CauseProtocol,
 		0,
@@ -53,7 +62,7 @@
 		"protocol"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc),
-		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_CauseMisc,
 		0,
@@ -65,9 +74,10 @@
 static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* misc */
 };
 asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = {
 	sizeof(struct Cause),
@@ -75,9 +85,9 @@
 	offsetof(struct Cause, present),
 	sizeof(((struct Cause *)0)->present),
 	asn_MAP_Cause_tag2el_1,
-	5,	/* Count of tags in the map */
+	6,	/* Count of tags in the map */
 	0, 0,
-	5	/* Extensions start */
+	6	/* Extensions start */
 };
 asn_TYPE_descriptor_t asn_DEF_Cause = {
 	"Cause",
@@ -89,7 +99,7 @@
 	0,	/* No tags (count) */
 	{ &asn_OER_type_Cause_constr_1, &asn_PER_type_Cause_constr_1, CHOICE_constraint },
 	asn_MBR_Cause_1,
-	5,	/* Elements count */
+	6,	/* Elements count */
 	&asn_SPC_Cause_specs_1	/* Additional specs */
 };
 
diff --git a/e2ap/lib/CauseE2node.c b/e2ap/lib/CauseE2node.c
new file mode 100644
index 0000000..72b7840
--- /dev/null
+++ b/e2ap/lib/CauseE2node.c
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CauseE2node.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_CauseE2node_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_CauseE2node_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_CauseE2node_value2enum_1[] = {
+	{ 0,	24,	"e2node-component-unknown" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_CauseE2node_enum2value_1[] = {
+	0	/* e2node-component-unknown(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_CauseE2node_specs_1 = {
+	asn_MAP_CauseE2node_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_CauseE2node_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_CauseE2node_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CauseE2node = {
+	"CauseE2node",
+	"CauseE2node",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_CauseE2node_tags_1,
+	sizeof(asn_DEF_CauseE2node_tags_1)
+		/sizeof(asn_DEF_CauseE2node_tags_1[0]), /* 1 */
+	asn_DEF_CauseE2node_tags_1,	/* Same as above */
+	sizeof(asn_DEF_CauseE2node_tags_1)
+		/sizeof(asn_DEF_CauseE2node_tags_1[0]), /* 1 */
+	{ &asn_OER_type_CauseE2node_constr_1, &asn_PER_type_CauseE2node_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_CauseE2node_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/CauseMisc.c b/e2ap/lib/CauseMisc.c
index e09c0b1..fbd8599 100644
--- a/e2ap/lib/CauseMisc.c
+++ b/e2ap/lib/CauseMisc.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CauseMisc.h"
diff --git a/e2ap/lib/CauseProtocol.c b/e2ap/lib/CauseProtocol.c
index 66bb383..f2e200b 100644
--- a/e2ap/lib/CauseProtocol.c
+++ b/e2ap/lib/CauseProtocol.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CauseProtocol.h"
diff --git a/e2ap/lib/CauseRIC.c b/e2ap/lib/CauseRIC.c
deleted file mode 100644
index 7d94696..0000000
--- a/e2ap/lib/CauseRIC.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
- */
-
-#include "CauseRIC.h"
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_CauseRIC_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  10 }	/* (0..10,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = {
-	{ 0,	23,	"ran-function-id-Invalid" },
-	{ 1,	20,	"action-not-supported" },
-	{ 2,	17,	"excessive-actions" },
-	{ 3,	16,	"duplicate-action" },
-	{ 4,	15,	"duplicate-event" },
-	{ 5,	23,	"function-resource-limit" },
-	{ 6,	18,	"request-id-unknown" },
-	{ 7,	46,	"inconsistent-action-subsequent-action-sequence" },
-	{ 8,	23,	"control-message-invalid" },
-	{ 9,	23,	"call-process-id-invalid" },
-	{ 10,	11,	"unspecified" }
-	/* This list is extensible */
-};
-static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = {
-	1,	/* action-not-supported(1) */
-	9,	/* call-process-id-invalid(9) */
-	8,	/* control-message-invalid(8) */
-	3,	/* duplicate-action(3) */
-	4,	/* duplicate-event(4) */
-	2,	/* excessive-actions(2) */
-	5,	/* function-resource-limit(5) */
-	7,	/* inconsistent-action-subsequent-action-sequence(7) */
-	0,	/* ran-function-id-Invalid(0) */
-	6,	/* request-id-unknown(6) */
-	10	/* unspecified(10) */
-	/* This list is extensible */
-};
-const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = {
-	asn_MAP_CauseRIC_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_CauseRIC_enum2value_1,	/* N => "tag"; sorted by N */
-	11,	/* Number of elements in the maps */
-	12,	/* Extensions before this member */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_CauseRIC = {
-	"CauseRIC",
-	"CauseRIC",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_CauseRIC_tags_1,
-	sizeof(asn_DEF_CauseRIC_tags_1)
-		/sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */
-	asn_DEF_CauseRIC_tags_1,	/* Same as above */
-	sizeof(asn_DEF_CauseRIC_tags_1)
-		/sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CauseRIC_constr_1, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint },
-	0, 0,	/* Defined elsewhere */
-	&asn_SPC_CauseRIC_specs_1	/* Additional specs */
-};
-
diff --git a/e2ap/lib/CauseRICrequest.c b/e2ap/lib/CauseRICrequest.c
new file mode 100644
index 0000000..2b0257a
--- /dev/null
+++ b/e2ap/lib/CauseRICrequest.c
@@ -0,0 +1,82 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CauseRICrequest.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_CauseRICrequest_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_CauseRICrequest_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  13 }	/* (0..13,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_CauseRICrequest_value2enum_1[] = {
+	{ 0,	23,	"ran-function-id-invalid" },
+	{ 1,	20,	"action-not-supported" },
+	{ 2,	17,	"excessive-actions" },
+	{ 3,	16,	"duplicate-action" },
+	{ 4,	23,	"duplicate-event-trigger" },
+	{ 5,	23,	"function-resource-limit" },
+	{ 6,	18,	"request-id-unknown" },
+	{ 7,	46,	"inconsistent-action-subsequent-action-sequence" },
+	{ 8,	23,	"control-message-invalid" },
+	{ 9,	27,	"ric-call-process-id-invalid" },
+	{ 10,	21,	"control-timer-expired" },
+	{ 11,	25,	"control-failed-to-execute" },
+	{ 12,	16,	"system-not-ready" },
+	{ 13,	11,	"unspecified" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_CauseRICrequest_enum2value_1[] = {
+	1,	/* action-not-supported(1) */
+	11,	/* control-failed-to-execute(11) */
+	8,	/* control-message-invalid(8) */
+	10,	/* control-timer-expired(10) */
+	3,	/* duplicate-action(3) */
+	4,	/* duplicate-event-trigger(4) */
+	2,	/* excessive-actions(2) */
+	5,	/* function-resource-limit(5) */
+	7,	/* inconsistent-action-subsequent-action-sequence(7) */
+	0,	/* ran-function-id-invalid(0) */
+	6,	/* request-id-unknown(6) */
+	9,	/* ric-call-process-id-invalid(9) */
+	12,	/* system-not-ready(12) */
+	13	/* unspecified(13) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_CauseRICrequest_specs_1 = {
+	asn_MAP_CauseRICrequest_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_CauseRICrequest_enum2value_1,	/* N => "tag"; sorted by N */
+	14,	/* Number of elements in the maps */
+	15,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_CauseRICrequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CauseRICrequest = {
+	"CauseRICrequest",
+	"CauseRICrequest",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_CauseRICrequest_tags_1,
+	sizeof(asn_DEF_CauseRICrequest_tags_1)
+		/sizeof(asn_DEF_CauseRICrequest_tags_1[0]), /* 1 */
+	asn_DEF_CauseRICrequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_CauseRICrequest_tags_1)
+		/sizeof(asn_DEF_CauseRICrequest_tags_1[0]), /* 1 */
+	{ &asn_OER_type_CauseRICrequest_constr_1, &asn_PER_type_CauseRICrequest_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_CauseRICrequest_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/CauseRICservice.c b/e2ap/lib/CauseRICservice.c
index c2cbccb..a09c74d 100644
--- a/e2ap/lib/CauseRICservice.c
+++ b/e2ap/lib/CauseRICservice.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CauseRICservice.h"
@@ -20,14 +20,14 @@
 	0, 0	/* No PER value map */
 };
 static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = {
-	{ 0,	21,	"function-not-required" },
+	{ 0,	26,	"ran-function-not-supported" },
 	{ 1,	19,	"excessive-functions" },
 	{ 2,	18,	"ric-resource-limit" }
 	/* This list is extensible */
 };
 static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = {
 	1,	/* excessive-functions(1) */
-	0,	/* function-not-required(0) */
+	0,	/* ran-function-not-supported(0) */
 	2	/* ric-resource-limit(2) */
 	/* This list is extensible */
 };
diff --git a/e2ap/lib/CauseTransport.c b/e2ap/lib/CauseTransport.c
index a0a5f38..bada442 100644
--- a/e2ap/lib/CauseTransport.c
+++ b/e2ap/lib/CauseTransport.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CauseTransport.h"
diff --git a/e2ap/lib/Criticality.c b/e2ap/lib/Criticality.c
index 9bfe1ca..3b33c9c 100644
--- a/e2ap/lib/Criticality.c
+++ b/e2ap/lib/Criticality.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "E2AP-CommonDataTypes-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "Criticality.h"
diff --git a/e2ap/lib/CriticalityDiagnostics-IE-Item.c b/e2ap/lib/CriticalityDiagnostics-IE-Item.c
index d950a0c..8a17bfc 100644
--- a/e2ap/lib/CriticalityDiagnostics-IE-Item.c
+++ b/e2ap/lib/CriticalityDiagnostics-IE-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CriticalityDiagnostics-IE-Item.h"
diff --git a/e2ap/lib/CriticalityDiagnostics-IE-List.c b/e2ap/lib/CriticalityDiagnostics-IE-List.c
index 29ae2dd..85b0d23 100644
--- a/e2ap/lib/CriticalityDiagnostics-IE-List.c
+++ b/e2ap/lib/CriticalityDiagnostics-IE-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CriticalityDiagnostics-IE-List.h"
diff --git a/e2ap/lib/CriticalityDiagnostics.c b/e2ap/lib/CriticalityDiagnostics.c
index c07926c..54b7bc4 100644
--- a/e2ap/lib/CriticalityDiagnostics.c
+++ b/e2ap/lib/CriticalityDiagnostics.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "CriticalityDiagnostics.h"
diff --git a/e2ap/lib/E2AP-PDU.c b/e2ap/lib/E2AP-PDU.c
index c8386c2..81aabdb 100644
--- a/e2ap/lib/E2AP-PDU.c
+++ b/e2ap/lib/E2AP-PDU.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "E2AP-PDU-Descriptions-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2AP-PDU.h"
diff --git a/e2ap/lib/E2RemovalFailure.c b/e2ap/lib/E2RemovalFailure.c
new file mode 100644
index 0000000..ecae6f5
--- /dev/null
+++ b/e2ap/lib/E2RemovalFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2RemovalFailure.h"
+
+static asn_TYPE_member_t asn_MBR_E2RemovalFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P23,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2RemovalFailure_specs_1 = {
+	sizeof(struct E2RemovalFailure),
+	offsetof(struct E2RemovalFailure, _asn_ctx),
+	asn_MAP_E2RemovalFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalFailure = {
+	"E2RemovalFailure",
+	"E2RemovalFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalFailure_tags_1,
+	sizeof(asn_DEF_E2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_E2RemovalFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2RemovalFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_E2RemovalFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2RemovalFailure_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2RemovalRequest.c b/e2ap/lib/E2RemovalRequest.c
new file mode 100644
index 0000000..7c505c7
--- /dev/null
+++ b/e2ap/lib/E2RemovalRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2RemovalRequest.h"
+
+static asn_TYPE_member_t asn_MBR_E2RemovalRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P21,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2RemovalRequest_specs_1 = {
+	sizeof(struct E2RemovalRequest),
+	offsetof(struct E2RemovalRequest, _asn_ctx),
+	asn_MAP_E2RemovalRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalRequest = {
+	"E2RemovalRequest",
+	"E2RemovalRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalRequest_tags_1,
+	sizeof(asn_DEF_E2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_E2RemovalRequest_tags_1[0]), /* 1 */
+	asn_DEF_E2RemovalRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_E2RemovalRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_E2RemovalRequest_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2RemovalResponse.c b/e2ap/lib/E2RemovalResponse.c
new file mode 100644
index 0000000..4e72a81
--- /dev/null
+++ b/e2ap/lib/E2RemovalResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2RemovalResponse.h"
+
+static asn_TYPE_member_t asn_MBR_E2RemovalResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P22,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2RemovalResponse_specs_1 = {
+	sizeof(struct E2RemovalResponse),
+	offsetof(struct E2RemovalResponse, _asn_ctx),
+	asn_MAP_E2RemovalResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalResponse = {
+	"E2RemovalResponse",
+	"E2RemovalResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalResponse_tags_1,
+	sizeof(asn_DEF_E2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_E2RemovalResponse_tags_1[0]), /* 1 */
+	asn_DEF_E2RemovalResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_E2RemovalResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_E2RemovalResponse_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigAddition-Item.c b/e2ap/lib/E2nodeComponentConfigAddition-Item.c
new file mode 100644
index 0000000..4672c3c
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigAddition-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigAddition-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAddition_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_Item, e2nodeComponentConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfiguration"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAddition_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigAddition_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfiguration */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigAddition_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigAddition_Item),
+	offsetof(struct E2nodeComponentConfigAddition_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigAddition_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAddition_Item = {
+	"E2nodeComponentConfigAddition-Item",
+	"E2nodeComponentConfigAddition-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigAddition_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAddition_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigAddition_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigAddition_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigAddition-List.c b/e2ap/lib/E2nodeComponentConfigAddition-List.c
new file mode 100644
index 0000000..471d6af
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigAddition-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigAddition-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigAddition_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigAddition_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAddition_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAddition_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigAddition_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigAddition_List),
+	offsetof(struct E2nodeComponentConfigAddition_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAddition_List = {
+	"E2nodeComponentConfigAddition-List",
+	"E2nodeComponentConfigAddition-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigAddition_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAddition_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigAddition_List_constr_1, &asn_PER_type_E2nodeComponentConfigAddition_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigAddition_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigAddition_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigAdditionAck-Item.c b/e2ap/lib/E2nodeComponentConfigAdditionAck-Item.c
new file mode 100644
index 0000000..48b9f39
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigAdditionAck-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigAdditionAck-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAdditionAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_Item, e2nodeComponentConfigurationAck),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigurationAck,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfigurationAck"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigAdditionAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfigurationAck */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigAdditionAck_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigAdditionAck_Item),
+	offsetof(struct E2nodeComponentConfigAdditionAck_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigAdditionAck_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAdditionAck_Item = {
+	"E2nodeComponentConfigAdditionAck-Item",
+	"E2nodeComponentConfigAdditionAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigAdditionAck_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigAdditionAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigAdditionAck-List.c b/e2ap/lib/E2nodeComponentConfigAdditionAck-List.c
new file mode 100644
index 0000000..11327e1
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigAdditionAck-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigAdditionAck-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigAdditionAck_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigAdditionAck_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAdditionAck_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigAdditionAck_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigAdditionAck_List),
+	offsetof(struct E2nodeComponentConfigAdditionAck_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAdditionAck_List = {
+	"E2nodeComponentConfigAdditionAck-List",
+	"E2nodeComponentConfigAdditionAck-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigAdditionAck_List_constr_1, &asn_PER_type_E2nodeComponentConfigAdditionAck_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigAdditionAck_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigAdditionAck_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigRemoval-Item.c b/e2ap/lib/E2nodeComponentConfigRemoval-Item.c
new file mode 100644
index 0000000..12a7605
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigRemoval-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigRemoval-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemoval_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigRemoval_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2nodeComponentID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigRemoval_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigRemoval_Item),
+	offsetof(struct E2nodeComponentConfigRemoval_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigRemoval_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemoval_Item = {
+	"E2nodeComponentConfigRemoval-Item",
+	"E2nodeComponentConfigRemoval-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemoval_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemoval_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigRemoval-List.c b/e2ap/lib/E2nodeComponentConfigRemoval-List.c
new file mode 100644
index 0000000..3e3ba53
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigRemoval-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigRemoval-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigRemoval_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigRemoval_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemoval_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemoval_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigRemoval_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigRemoval_List),
+	offsetof(struct E2nodeComponentConfigRemoval_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemoval_List = {
+	"E2nodeComponentConfigRemoval-List",
+	"E2nodeComponentConfigRemoval-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigRemoval_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemoval_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigRemoval_List_constr_1, &asn_PER_type_E2nodeComponentConfigRemoval_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigRemoval_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigRemoval_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigRemovalAck-Item.c b/e2ap/lib/E2nodeComponentConfigRemovalAck-Item.c
new file mode 100644
index 0000000..ea853cd
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigRemovalAck-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigRemovalAck-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemovalAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_Item, e2nodeComponentConfigurationAck),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigurationAck,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfigurationAck"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigRemovalAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfigurationAck */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigRemovalAck_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigRemovalAck_Item),
+	offsetof(struct E2nodeComponentConfigRemovalAck_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigRemovalAck_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemovalAck_Item = {
+	"E2nodeComponentConfigRemovalAck-Item",
+	"E2nodeComponentConfigRemovalAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemovalAck_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemovalAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigRemovalAck-List.c b/e2ap/lib/E2nodeComponentConfigRemovalAck-List.c
new file mode 100644
index 0000000..ec6dba3
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigRemovalAck-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigRemovalAck-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigRemovalAck_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigRemovalAck_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemovalAck_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigRemovalAck_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigRemovalAck_List),
+	offsetof(struct E2nodeComponentConfigRemovalAck_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemovalAck_List = {
+	"E2nodeComponentConfigRemovalAck-List",
+	"E2nodeComponentConfigRemovalAck-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigRemovalAck_List_constr_1, &asn_PER_type_E2nodeComponentConfigRemovalAck_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigRemovalAck_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigRemovalAck_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigUpdate-Item.c b/e2ap/lib/E2nodeComponentConfigUpdate-Item.c
new file mode 100644
index 0000000..e56ec2b
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigUpdate-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigUpdate-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_Item, e2nodeComponentConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfiguration"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdate_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfiguration */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdate_Item),
+	offsetof(struct E2nodeComponentConfigUpdate_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdate_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_Item = {
+	"E2nodeComponentConfigUpdate-Item",
+	"E2nodeComponentConfigUpdate-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdate_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigUpdate-List.c b/e2ap/lib/E2nodeComponentConfigUpdate-List.c
new file mode 100644
index 0000000..24474c2
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigUpdate-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigUpdate-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigUpdate_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdate_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdate_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigUpdate_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdate_List),
+	offsetof(struct E2nodeComponentConfigUpdate_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_List = {
+	"E2nodeComponentConfigUpdate-List",
+	"E2nodeComponentConfigUpdate-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigUpdate_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdate_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigUpdate_List_constr_1, &asn_PER_type_E2nodeComponentConfigUpdate_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigUpdate_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigUpdateAck-Item.c b/e2ap/lib/E2nodeComponentConfigUpdateAck-Item.c
new file mode 100644
index 0000000..839cb6e
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigUpdateAck-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigUpdateAck-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_Item, e2nodeComponentInterfaceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_Item, e2nodeComponentID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_Item, e2nodeComponentConfigurationAck),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigurationAck,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfigurationAck"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfigurationAck */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_Item_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck_Item),
+	offsetof(struct E2nodeComponentConfigUpdateAck_Item, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateAck_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_Item = {
+	"E2nodeComponentConfigUpdateAck-Item",
+	"E2nodeComponentConfigUpdateAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigUpdateAck-List.c b/e2ap/lib/E2nodeComponentConfigUpdateAck-List.c
new file mode 100644
index 0000000..9d119ca
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigUpdateAck-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigUpdateAck-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentConfigUpdateAck_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..1024)) */};
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdateAck_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P9,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_List_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck_List),
+	offsetof(struct E2nodeComponentConfigUpdateAck_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_List = {
+	"E2nodeComponentConfigUpdateAck-List",
+	"E2nodeComponentConfigUpdateAck-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentConfigUpdateAck_List_constr_1, &asn_PER_type_E2nodeComponentConfigUpdateAck_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfiguration.c b/e2ap/lib/E2nodeComponentConfiguration.c
new file mode 100644
index 0000000..f109080
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfiguration.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfiguration.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfiguration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfiguration, e2nodeComponentRequestPart),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentRequestPart"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfiguration, e2nodeComponentResponsePart),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentResponsePart"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfiguration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfiguration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentRequestPart */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2nodeComponentResponsePart */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfiguration_specs_1 = {
+	sizeof(struct E2nodeComponentConfiguration),
+	offsetof(struct E2nodeComponentConfiguration, _asn_ctx),
+	asn_MAP_E2nodeComponentConfiguration_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfiguration = {
+	"E2nodeComponentConfiguration",
+	"E2nodeComponentConfiguration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfiguration_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfiguration_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfiguration_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfiguration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfiguration_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfiguration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfiguration_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfiguration_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentConfigurationAck.c b/e2ap/lib/E2nodeComponentConfigurationAck.c
new file mode 100644
index 0000000..f562dee
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentConfigurationAck.c
@@ -0,0 +1,114 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentConfigurationAck.h"
+
+#include "Cause.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_updateOutcome_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_updateOutcome_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_updateOutcome_value2enum_2[] = {
+	{ 0,	7,	"success" },
+	{ 1,	7,	"failure" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_updateOutcome_enum2value_2[] = {
+	1,	/* failure(1) */
+	0	/* success(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_updateOutcome_specs_2 = {
+	asn_MAP_updateOutcome_value2enum_2,	/* "tag" => N; sorted by tag */
+	asn_MAP_updateOutcome_enum2value_2,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_updateOutcome_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_updateOutcome_2 = {
+	"updateOutcome",
+	"updateOutcome",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_updateOutcome_tags_2,
+	sizeof(asn_DEF_updateOutcome_tags_2)
+		/sizeof(asn_DEF_updateOutcome_tags_2[0]) - 1, /* 1 */
+	asn_DEF_updateOutcome_tags_2,	/* Same as above */
+	sizeof(asn_DEF_updateOutcome_tags_2)
+		/sizeof(asn_DEF_updateOutcome_tags_2[0]), /* 2 */
+	{ &asn_OER_type_updateOutcome_constr_2, &asn_PER_type_updateOutcome_constr_2, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_updateOutcome_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigurationAck_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigurationAck, updateOutcome),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_updateOutcome_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"updateOutcome"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentConfigurationAck, failureCause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"failureCause"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigurationAck_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigurationAck_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigurationAck_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* updateOutcome */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* failureCause */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigurationAck_specs_1 = {
+	sizeof(struct E2nodeComponentConfigurationAck),
+	offsetof(struct E2nodeComponentConfigurationAck, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigurationAck_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigurationAck_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigurationAck = {
+	"E2nodeComponentConfigurationAck",
+	"E2nodeComponentConfigurationAck",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigurationAck_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigurationAck_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigurationAck_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigurationAck_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigurationAck_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigurationAck_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigurationAck_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigurationAck_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentID.c b/e2ap/lib/E2nodeComponentID.c
new file mode 100644
index 0000000..9aff2ad
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentID.c
@@ -0,0 +1,122 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentID.h"
+
+#include "E2nodeComponentInterfaceNG.h"
+#include "E2nodeComponentInterfaceXn.h"
+#include "E2nodeComponentInterfaceE1.h"
+#include "E2nodeComponentInterfaceF1.h"
+#include "E2nodeComponentInterfaceW1.h"
+#include "E2nodeComponentInterfaceS1.h"
+#include "E2nodeComponentInterfaceX2.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_E2nodeComponentID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeNG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceNG,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeNG"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeXn),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceXn,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeXn"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeE1),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceE1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeE1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeF1),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceF1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeF1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeW1),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceW1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeW1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeS1),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceS1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeS1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentInterfaceTypeX2),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentInterfaceX2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentInterfaceTypeX2"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentInterfaceTypeNG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentInterfaceTypeXn */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e2nodeComponentInterfaceTypeE1 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e2nodeComponentInterfaceTypeF1 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* e2nodeComponentInterfaceTypeW1 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e2nodeComponentInterfaceTypeS1 */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* e2nodeComponentInterfaceTypeX2 */
+};
+asn_CHOICE_specifics_t asn_SPC_E2nodeComponentID_specs_1 = {
+	sizeof(struct E2nodeComponentID),
+	offsetof(struct E2nodeComponentID, _asn_ctx),
+	offsetof(struct E2nodeComponentID, present),
+	sizeof(((struct E2nodeComponentID *)0)->present),
+	asn_MAP_E2nodeComponentID_tag2el_1,
+	7,	/* Count of tags in the map */
+	0, 0,
+	7	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentID = {
+	"E2nodeComponentID",
+	"E2nodeComponentID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_E2nodeComponentID_constr_1, &asn_PER_type_E2nodeComponentID_constr_1, CHOICE_constraint },
+	asn_MBR_E2nodeComponentID_1,
+	7,	/* Elements count */
+	&asn_SPC_E2nodeComponentID_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceE1.c b/e2ap/lib/E2nodeComponentInterfaceE1.c
new file mode 100644
index 0000000..6df3636
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceE1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceE1.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceE1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceE1, gNB_CU_CP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-CP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceE1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceE1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-CP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceE1_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceE1),
+	offsetof(struct E2nodeComponentInterfaceE1, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceE1_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceE1 = {
+	"E2nodeComponentInterfaceE1",
+	"E2nodeComponentInterfaceE1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceE1_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceE1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceE1_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceE1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceE1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceE1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceE1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceE1_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceF1.c b/e2ap/lib/E2nodeComponentInterfaceF1.c
new file mode 100644
index 0000000..6c5f81a
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceF1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceF1.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceF1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceF1, gNB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-DU-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceF1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceF1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-DU-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceF1_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceF1),
+	offsetof(struct E2nodeComponentInterfaceF1, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceF1_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceF1 = {
+	"E2nodeComponentInterfaceF1",
+	"E2nodeComponentInterfaceF1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceF1_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceF1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceF1_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceF1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceF1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceF1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceF1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceF1_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceNG.c b/e2ap/lib/E2nodeComponentInterfaceNG.c
new file mode 100644
index 0000000..636076d
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceNG.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceNG.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceNG_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceNG, amf_name),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMFName,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"amf-name"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceNG_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceNG_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* amf-name */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceNG_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceNG),
+	offsetof(struct E2nodeComponentInterfaceNG, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceNG_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceNG = {
+	"E2nodeComponentInterfaceNG",
+	"E2nodeComponentInterfaceNG",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceNG_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceNG_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceNG_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceNG_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceNG_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceNG_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceNG_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceNG_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceS1.c b/e2ap/lib/E2nodeComponentInterfaceS1.c
new file mode 100644
index 0000000..984e22d
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceS1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceS1.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceS1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceS1, mme_name),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MMEname,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mme-name"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceS1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceS1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mme-name */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceS1_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceS1),
+	offsetof(struct E2nodeComponentInterfaceS1, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceS1_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceS1 = {
+	"E2nodeComponentInterfaceS1",
+	"E2nodeComponentInterfaceS1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceS1_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceS1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceS1_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceS1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceS1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceS1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceS1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceS1_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceType.c b/e2ap/lib/E2nodeComponentInterfaceType.c
new file mode 100644
index 0000000..fec6a6a
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceType.c
@@ -0,0 +1,68 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_E2nodeComponentInterfaceType_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_E2nodeComponentInterfaceType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2nodeComponentInterfaceType_value2enum_1[] = {
+	{ 0,	2,	"ng" },
+	{ 1,	2,	"xn" },
+	{ 2,	2,	"e1" },
+	{ 3,	2,	"f1" },
+	{ 4,	2,	"w1" },
+	{ 5,	2,	"s1" },
+	{ 6,	2,	"x2" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2nodeComponentInterfaceType_enum2value_1[] = {
+	2,	/* e1(2) */
+	3,	/* f1(3) */
+	0,	/* ng(0) */
+	5,	/* s1(5) */
+	4,	/* w1(4) */
+	6,	/* x2(6) */
+	1	/* xn(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2nodeComponentInterfaceType_specs_1 = {
+	asn_MAP_E2nodeComponentInterfaceType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2nodeComponentInterfaceType_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceType = {
+	"E2nodeComponentInterfaceType",
+	"E2nodeComponentInterfaceType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2nodeComponentInterfaceType_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceType_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceType_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceType_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceType_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeComponentInterfaceType_constr_1, &asn_PER_type_E2nodeComponentInterfaceType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2nodeComponentInterfaceType_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceW1.c b/e2ap/lib/E2nodeComponentInterfaceW1.c
new file mode 100644
index 0000000..056d9fa
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceW1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceW1.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceW1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceW1, ng_eNB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NGENB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-DU-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceW1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceW1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ng-eNB-DU-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceW1_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceW1),
+	offsetof(struct E2nodeComponentInterfaceW1, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceW1_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceW1 = {
+	"E2nodeComponentInterfaceW1",
+	"E2nodeComponentInterfaceW1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceW1_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceW1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceW1_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceW1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceW1_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceW1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceW1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceW1_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceX2.c b/e2ap/lib/E2nodeComponentInterfaceX2.c
new file mode 100644
index 0000000..e7372c4
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceX2.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceX2.h"
+
+#include "GlobalENB-ID.h"
+#include "GlobalenGNB-ID.h"
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceX2_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct E2nodeComponentInterfaceX2, global_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-eNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentInterfaceX2, global_en_gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalenGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-en-gNB-ID"
+		},
+};
+static const int asn_MAP_E2nodeComponentInterfaceX2_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceX2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceX2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global-en-gNB-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceX2_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceX2),
+	offsetof(struct E2nodeComponentInterfaceX2, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceX2_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentInterfaceX2_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceX2 = {
+	"E2nodeComponentInterfaceX2",
+	"E2nodeComponentInterfaceX2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceX2_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceX2_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceX2_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceX2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceX2_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceX2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceX2_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceX2_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeComponentInterfaceXn.c b/e2ap/lib/E2nodeComponentInterfaceXn.c
new file mode 100644
index 0000000..92b3af5
--- /dev/null
+++ b/e2ap/lib/E2nodeComponentInterfaceXn.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeComponentInterfaceXn.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentInterfaceXn_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentInterfaceXn, global_NG_RAN_Node_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_GlobalNG_RANNode_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-NG-RAN-Node-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentInterfaceXn_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentInterfaceXn_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-NG-RAN-Node-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentInterfaceXn_specs_1 = {
+	sizeof(struct E2nodeComponentInterfaceXn),
+	offsetof(struct E2nodeComponentInterfaceXn, _asn_ctx),
+	asn_MAP_E2nodeComponentInterfaceXn_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentInterfaceXn = {
+	"E2nodeComponentInterfaceXn",
+	"E2nodeComponentInterfaceXn",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentInterfaceXn_tags_1,
+	sizeof(asn_DEF_E2nodeComponentInterfaceXn_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceXn_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentInterfaceXn_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentInterfaceXn_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentInterfaceXn_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentInterfaceXn_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentInterfaceXn_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeConfigurationUpdate.c b/e2ap/lib/E2nodeConfigurationUpdate.c
new file mode 100644
index 0000000..34992aa
--- /dev/null
+++ b/e2ap/lib/E2nodeConfigurationUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeConfigurationUpdate.h"
+
+static asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P15,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdate_specs_1 = {
+	sizeof(struct E2nodeConfigurationUpdate),
+	offsetof(struct E2nodeConfigurationUpdate, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdate_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdate = {
+	"E2nodeConfigurationUpdate",
+	"E2nodeConfigurationUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdate_tags_1,
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeConfigurationUpdateAcknowledge.c b/e2ap/lib/E2nodeConfigurationUpdateAcknowledge.c
new file mode 100644
index 0000000..e2d2171
--- /dev/null
+++ b/e2ap/lib/E2nodeConfigurationUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeConfigurationUpdateAcknowledge.h"
+
+static asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P16,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateAcknowledge_specs_1 = {
+	sizeof(struct E2nodeConfigurationUpdateAcknowledge),
+	offsetof(struct E2nodeConfigurationUpdateAcknowledge, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateAcknowledge = {
+	"E2nodeConfigurationUpdateAcknowledge",
+	"E2nodeConfigurationUpdateAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeConfigurationUpdateFailure.c b/e2ap/lib/E2nodeConfigurationUpdateFailure.c
new file mode 100644
index 0000000..913c107
--- /dev/null
+++ b/e2ap/lib/E2nodeConfigurationUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeConfigurationUpdateFailure.h"
+
+static asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P17,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateFailure_specs_1 = {
+	sizeof(struct E2nodeConfigurationUpdateFailure),
+	offsetof(struct E2nodeConfigurationUpdateFailure, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateFailure = {
+	"E2nodeConfigurationUpdateFailure",
+	"E2nodeConfigurationUpdateFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdateFailure_tags_1,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateFailure_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeTNLassociationRemoval-Item.c b/e2ap/lib/E2nodeTNLassociationRemoval-Item.c
new file mode 100644
index 0000000..4044aec
--- /dev/null
+++ b/e2ap/lib/E2nodeTNLassociationRemoval-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeTNLassociationRemoval-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeTNLassociationRemoval_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_Item, tnlInformation),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TNLinformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tnlInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_Item, tnlInformationRIC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TNLinformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tnlInformationRIC"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeTNLassociationRemoval_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tnlInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tnlInformationRIC */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeTNLassociationRemoval_Item_specs_1 = {
+	sizeof(struct E2nodeTNLassociationRemoval_Item),
+	offsetof(struct E2nodeTNLassociationRemoval_Item, _asn_ctx),
+	asn_MAP_E2nodeTNLassociationRemoval_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeTNLassociationRemoval_Item = {
+	"E2nodeTNLassociationRemoval-Item",
+	"E2nodeTNLassociationRemoval-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1,
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeTNLassociationRemoval_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeTNLassociationRemoval_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2nodeTNLassociationRemoval-List.c b/e2ap/lib/E2nodeTNLassociationRemoval-List.c
new file mode 100644
index 0000000..a729c78
--- /dev/null
+++ b/e2ap/lib/E2nodeTNLassociationRemoval-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2nodeTNLassociationRemoval-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_E2nodeTNLassociationRemoval_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..32)) */};
+asn_per_constraints_t asn_PER_type_E2nodeTNLassociationRemoval_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeTNLassociationRemoval_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeTNLassociationRemoval_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2nodeTNLassociationRemoval_List_specs_1 = {
+	sizeof(struct E2nodeTNLassociationRemoval_List),
+	offsetof(struct E2nodeTNLassociationRemoval_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeTNLassociationRemoval_List = {
+	"E2nodeTNLassociationRemoval-List",
+	"E2nodeTNLassociationRemoval-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2nodeTNLassociationRemoval_List_tags_1,
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_List_tags_1)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_List_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeTNLassociationRemoval_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_List_tags_1)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E2nodeTNLassociationRemoval_List_constr_1, &asn_PER_type_E2nodeTNLassociationRemoval_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2nodeTNLassociationRemoval_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2nodeTNLassociationRemoval_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/E2setupFailure.c b/e2ap/lib/E2setupFailure.c
index 1b0bd35..81f9ac9 100644
--- a/e2ap/lib/E2setupFailure.c
+++ b/e2ap/lib/E2setupFailure.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2setupFailure.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P13,
+		&asn_DEF_ProtocolIE_Container_185P14,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/E2setupRequest.c b/e2ap/lib/E2setupRequest.c
index 92fd09b..8a4e4c0 100644
--- a/e2ap/lib/E2setupRequest.c
+++ b/e2ap/lib/E2setupRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2setupRequest.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P11,
+		&asn_DEF_ProtocolIE_Container_185P12,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/E2setupResponse.c b/e2ap/lib/E2setupResponse.c
index b08bc06..e14d0e1 100644
--- a/e2ap/lib/E2setupResponse.c
+++ b/e2ap/lib/E2setupResponse.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2setupResponse.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P12,
+		&asn_DEF_ProtocolIE_Container_185P13,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/ENB-ID-Choice.c b/e2ap/lib/ENB-ID-Choice.c
index b95e5eb..f51f6b2 100644
--- a/e2ap/lib/ENB-ID-Choice.c
+++ b/e2ap/lib/ENB-ID-Choice.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ENB-ID-Choice.h"
diff --git a/e2ap/lib/ENB-ID.c b/e2ap/lib/ENB-ID.c
index 96b8cb5..c9a1c74 100644
--- a/e2ap/lib/ENB-ID.c
+++ b/e2ap/lib/ENB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ENB-ID.h"
diff --git a/e2ap/lib/ENGNB-ID.c b/e2ap/lib/ENGNB-ID.c
index 4bfdbd8..82cd43b 100644
--- a/e2ap/lib/ENGNB-ID.c
+++ b/e2ap/lib/ENGNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ENGNB-ID.h"
diff --git a/e2ap/lib/ErrorIndication.c b/e2ap/lib/ErrorIndication.c
index a47c6e0..1c18bc7 100644
--- a/e2ap/lib/ErrorIndication.c
+++ b/e2ap/lib/ErrorIndication.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ErrorIndication.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P10,
+		&asn_DEF_ProtocolIE_Container_185P11,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/GNB-CU-UP-ID.c b/e2ap/lib/GNB-CU-UP-ID.c
index 8f960e2..0505ab3 100644
--- a/e2ap/lib/GNB-CU-UP-ID.c
+++ b/e2ap/lib/GNB-CU-UP-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GNB-CU-UP-ID.h"
diff --git a/e2ap/lib/GNB-DU-ID.c b/e2ap/lib/GNB-DU-ID.c
index 6c0940d..8b1a66a 100644
--- a/e2ap/lib/GNB-DU-ID.c
+++ b/e2ap/lib/GNB-DU-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GNB-DU-ID.h"
diff --git a/e2ap/lib/GNB-ID-Choice.c b/e2ap/lib/GNB-ID-Choice.c
index 085a942..1dda293 100644
--- a/e2ap/lib/GNB-ID-Choice.c
+++ b/e2ap/lib/GNB-ID-Choice.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GNB-ID-Choice.h"
diff --git a/e2ap/lib/GlobalE2node-ID.c b/e2ap/lib/GlobalE2node-ID.c
index 13a8295..2a86c0a 100644
--- a/e2ap/lib/GlobalE2node-ID.c
+++ b/e2ap/lib/GlobalE2node-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalE2node-ID.h"
diff --git a/e2ap/lib/GlobalE2node-eNB-ID.c b/e2ap/lib/GlobalE2node-eNB-ID.c
index 7cb93f1..e7aacf0 100644
--- a/e2ap/lib/GlobalE2node-eNB-ID.c
+++ b/e2ap/lib/GlobalE2node-eNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalE2node-eNB-ID.h"
diff --git a/e2ap/lib/GlobalE2node-en-gNB-ID.c b/e2ap/lib/GlobalE2node-en-gNB-ID.c
index 6444325..46ddfa2 100644
--- a/e2ap/lib/GlobalE2node-en-gNB-ID.c
+++ b/e2ap/lib/GlobalE2node-en-gNB-ID.c
@@ -1,36 +1,58 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalE2node-en-gNB-ID.h"
 
 asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID),
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_en_gNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_GlobalenGNB_ID,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"global-gNB-ID"
+		"global-en-gNB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct GlobalE2node_en_gNB_ID, en_gNB_CU_UP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-gNB-CU-UP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct GlobalE2node_en_gNB_ID, en_gNB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-gNB-DU-ID"
 		},
 };
+static const int asn_MAP_GlobalE2node_en_gNB_ID_oms_1[] = { 1, 2 };
 static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-en-gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB-CU-UP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* en-gNB-DU-ID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = {
 	sizeof(struct GlobalE2node_en_gNB_ID),
 	offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx),
 	asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
+	3,	/* Count of tags in the map */
+	asn_MAP_GlobalE2node_en_gNB_ID_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = {
 	"GlobalE2node-en-gNB-ID",
@@ -44,7 +66,7 @@
 		/sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_GlobalE2node_en_gNB_ID_1,
-	1,	/* Elements count */
+	3,	/* Elements count */
 	&asn_SPC_GlobalE2node_en_gNB_ID_specs_1	/* Additional specs */
 };
 
diff --git a/e2ap/lib/GlobalE2node-gNB-ID.c b/e2ap/lib/GlobalE2node-gNB-ID.c
index 31bf024..039fb59 100644
--- a/e2ap/lib/GlobalE2node-gNB-ID.c
+++ b/e2ap/lib/GlobalE2node-gNB-ID.c
@@ -1,12 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalE2node-gNB-ID.h"
 
+#include "GlobalenGNB-ID.h"
 asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
@@ -17,9 +18,18 @@
 		0, 0, /* No default value */
 		"global-gNB-ID"
 		},
-	{ ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID),
+	{ ATF_POINTER, 3, offsetof(struct GlobalE2node_gNB_ID, global_en_gNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalenGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-en-gNB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_GNB_CU_UP_ID,
 		0,
 		{ 0, 0, 0 },
@@ -27,7 +37,7 @@
 		"gNB-CU-UP-ID"
 		},
 	{ ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_GNB_DU_ID,
 		0,
@@ -36,23 +46,24 @@
 		"gNB-DU-ID"
 		},
 };
-static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 };
+static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2, 3 };
 static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* global-en-gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gNB-CU-UP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* gNB-DU-ID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = {
 	sizeof(struct GlobalE2node_gNB_ID),
 	offsetof(struct GlobalE2node_gNB_ID, _asn_ctx),
 	asn_MAP_GlobalE2node_gNB_ID_tag2el_1,
-	3,	/* Count of tags in the map */
+	4,	/* Count of tags in the map */
 	asn_MAP_GlobalE2node_gNB_ID_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = {
 	"GlobalE2node-gNB-ID",
@@ -66,7 +77,7 @@
 		/sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_GlobalE2node_gNB_ID_1,
-	3,	/* Elements count */
+	4,	/* Elements count */
 	&asn_SPC_GlobalE2node_gNB_ID_specs_1	/* Additional specs */
 };
 
diff --git a/e2ap/lib/GlobalE2node-ng-eNB-ID.c b/e2ap/lib/GlobalE2node-ng-eNB-ID.c
index b3bb491..cbd82d0 100644
--- a/e2ap/lib/GlobalE2node-ng-eNB-ID.c
+++ b/e2ap/lib/GlobalE2node-ng-eNB-ID.c
@@ -1,12 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalE2node-ng-eNB-ID.h"
 
+#include "GlobalENB-ID.h"
 asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
@@ -17,20 +18,42 @@
 		0, 0, /* No default value */
 		"global-ng-eNB-ID"
 		},
+	{ ATF_POINTER, 2, offsetof(struct GlobalE2node_ng_eNB_ID, global_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-eNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct GlobalE2node_ng_eNB_ID, ngENB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NGENB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ngENB-DU-ID"
+		},
 };
+static const int asn_MAP_GlobalE2node_ng_eNB_ID_oms_1[] = { 1, 2 };
 static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-ng-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* global-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ngENB-DU-ID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = {
 	sizeof(struct GlobalE2node_ng_eNB_ID),
 	offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx),
 	asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
+	3,	/* Count of tags in the map */
+	asn_MAP_GlobalE2node_ng_eNB_ID_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = {
 	"GlobalE2node-ng-eNB-ID",
@@ -44,7 +67,7 @@
 		/sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_GlobalE2node_ng_eNB_ID_1,
-	1,	/* Elements count */
+	3,	/* Elements count */
 	&asn_SPC_GlobalE2node_ng_eNB_ID_specs_1	/* Additional specs */
 };
 
diff --git a/e2ap/lib/GlobalENB-ID.c b/e2ap/lib/GlobalENB-ID.c
index 9c34820..5da3873 100644
--- a/e2ap/lib/GlobalENB-ID.c
+++ b/e2ap/lib/GlobalENB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalENB-ID.h"
diff --git a/e2ap/lib/GlobalNG-RANNode-ID.c b/e2ap/lib/GlobalNG-RANNode-ID.c
new file mode 100644
index 0000000..fab4c83
--- /dev/null
+++ b/e2ap/lib/GlobalNG-RANNode-ID.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GlobalNG-RANNode-ID.h"
+
+#include "GlobalgNB-ID.h"
+#include "GlobalngeNB-ID.h"
+static asn_oer_constraints_t asn_OER_type_GlobalNG_RANNode_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_GlobalNG_RANNode_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_GlobalNG_RANNode_ID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct GlobalNG_RANNode_ID, choice.gNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalgNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct GlobalNG_RANNode_ID, choice.ng_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalngeNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_GlobalNG_RANNode_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ng-eNB */
+};
+asn_CHOICE_specifics_t asn_SPC_GlobalNG_RANNode_ID_specs_1 = {
+	sizeof(struct GlobalNG_RANNode_ID),
+	offsetof(struct GlobalNG_RANNode_ID, _asn_ctx),
+	offsetof(struct GlobalNG_RANNode_ID, present),
+	sizeof(((struct GlobalNG_RANNode_ID *)0)->present),
+	asn_MAP_GlobalNG_RANNode_ID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_GlobalNG_RANNode_ID = {
+	"GlobalNG-RANNode-ID",
+	"GlobalNG-RANNode-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_GlobalNG_RANNode_ID_constr_1, &asn_PER_type_GlobalNG_RANNode_ID_constr_1, CHOICE_constraint },
+	asn_MBR_GlobalNG_RANNode_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_GlobalNG_RANNode_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/GlobalRIC-ID.c b/e2ap/lib/GlobalRIC-ID.c
index c027c79..3e4ecd1 100644
--- a/e2ap/lib/GlobalRIC-ID.c
+++ b/e2ap/lib/GlobalRIC-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalRIC-ID.h"
diff --git a/e2ap/lib/GlobalenGNB-ID.c b/e2ap/lib/GlobalenGNB-ID.c
index 2599aae..56e2ebb 100644
--- a/e2ap/lib/GlobalenGNB-ID.c
+++ b/e2ap/lib/GlobalenGNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalenGNB-ID.h"
diff --git a/e2ap/lib/GlobalgNB-ID.c b/e2ap/lib/GlobalgNB-ID.c
index 2150089..cb49630 100644
--- a/e2ap/lib/GlobalgNB-ID.c
+++ b/e2ap/lib/GlobalgNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalgNB-ID.h"
diff --git a/e2ap/lib/GlobalngeNB-ID.c b/e2ap/lib/GlobalngeNB-ID.c
index 97d1f41..59c4874 100644
--- a/e2ap/lib/GlobalngeNB-ID.c
+++ b/e2ap/lib/GlobalngeNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalngeNB-ID.h"
diff --git a/e2ap/lib/InitiatingMessage.c b/e2ap/lib/InitiatingMessage.c
index 6a6bfdb..7b86826 100644
--- a/e2ap/lib/InitiatingMessage.c
+++ b/e2ap/lib/InitiatingMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "E2AP-PDU-Descriptions-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "InitiatingMessage.h"
@@ -11,20 +11,24 @@
 static const long asn_VAL_1_reject = 0;
 static const long asn_VAL_2_id_RICsubscriptionDelete = 9;
 static const long asn_VAL_2_reject = 0;
-static const long asn_VAL_3_id_RICserviceUpdate = 7;
+static const long asn_VAL_3_id_RICcontrol = 4;
 static const long asn_VAL_3_reject = 0;
-static const long asn_VAL_4_id_RICcontrol = 4;
+static const long asn_VAL_4_id_E2setup = 1;
 static const long asn_VAL_4_reject = 0;
-static const long asn_VAL_5_id_E2setup = 1;
+static const long asn_VAL_5_id_E2nodeConfigurationUpdate = 10;
 static const long asn_VAL_5_reject = 0;
 static const long asn_VAL_6_id_Reset = 3;
 static const long asn_VAL_6_reject = 0;
-static const long asn_VAL_7_id_RICindication = 5;
-static const long asn_VAL_7_ignore = 1;
-static const long asn_VAL_8_id_RICserviceQuery = 6;
+static const long asn_VAL_7_id_E2removal = 13;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_RICindication = 5;
 static const long asn_VAL_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_9_id_RICserviceQuery = 6;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_ErrorIndication = 2;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_RICsubscriptionDeleteRequired = 12;
+static const long asn_VAL_11_ignore = 1;
 static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse },
@@ -36,44 +40,54 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject },
-	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate },
-	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge },
-	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICcontrol },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_E2setup },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2nodeConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2nodeConfigurationUpdate },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse },
 	{ "&UnsuccessfulOutcome",  },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2removal },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICindication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_ErrorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequired },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_RICsubscriptionDeleteRequired },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }
 };
 static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = {
-	{ 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+	{ 11, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
 };
 static int
 memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
@@ -235,15 +249,6 @@
 		0, 0, /* No default value */
 		"RICsubscriptionDeleteRequest"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdate,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RICserviceUpdate"
-		},
 	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -262,6 +267,15 @@
 		0, 0, /* No default value */
 		"E2setupRequest"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2nodeConfigurationUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeConfigurationUpdate"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -271,6 +285,15 @@
 		0, 0, /* No default value */
 		"ResetRequest"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2RemovalRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2RemovalRequest"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -298,17 +321,28 @@
 		0, 0, /* No default value */
 		"ErrorIndication"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RICsubscriptionDeleteRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionDeleteRequired"
+		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 10 }, /* RICsubscriptionRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 9 }, /* RICsubscriptionDeleteRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 8 }, /* RICcontrolRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 7 }, /* E2setupRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 6 }, /* E2nodeConfigurationUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 5 }, /* ResetRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 4 }, /* E2RemovalRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 3 }, /* RICindication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 2 }, /* RICserviceQuery */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 1 }, /* ErrorIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 0 } /* RICsubscriptionDeleteRequired */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct InitiatingMessage__value),
@@ -316,7 +350,7 @@
 	offsetof(struct InitiatingMessage__value, present),
 	sizeof(((struct InitiatingMessage__value *)0)->present),
 	asn_MAP_value_tag2el_4,
-	9,	/* Count of tags in the map */
+	11,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
@@ -331,7 +365,7 @@
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
 	asn_MBR_value_4,
-	9,	/* Elements count */
+	11,	/* Elements count */
 	&asn_SPC_value_specs_4	/* Additional specs */
 };
 
diff --git a/e2ap/lib/MMEname.c b/e2ap/lib/MMEname.c
new file mode 100644
index 0000000..3218642
--- /dev/null
+++ b/e2ap/lib/MMEname.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MMEname.h"
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,	/* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,	/* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,	/*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,	/* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,	/*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,	/* pqrstuvwxyz      */
+};
+static const int permitted_alphabet_code2value_1[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122,};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+	const int *table = permitted_alphabet_table_1;
+	/* The underlying type is PrintableString */
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
+	
+	for(; ch < end; ch++) {
+		uint8_t cv = *ch;
+		if(!table[cv]) return -1;
+	}
+	return 0;
+}
+
+int
+MMEname_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 150)
+		 && !check_permitted_alphabet_1(st)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int asn_PER_MAP_MMEname_1_v2c(unsigned int value) {
+	if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+		return -1;
+	return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_MMEname_1_c2v(unsigned int code) {
+	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+		return -1;
+	return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using PrintableString,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_MMEname_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..MAX)) */};
+asn_per_constraints_t asn_PER_type_MMEname_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
+	asn_PER_MAP_MMEname_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_MMEname_1_c2v	/* PER code to value map */
+};
+static const ber_tlv_tag_t asn_DEF_MMEname_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MMEname = {
+	"MMEname",
+	"MMEname",
+	&asn_OP_PrintableString,
+	asn_DEF_MMEname_tags_1,
+	sizeof(asn_DEF_MMEname_tags_1)
+		/sizeof(asn_DEF_MMEname_tags_1[0]), /* 1 */
+	asn_DEF_MMEname_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MMEname_tags_1)
+		/sizeof(asn_DEF_MMEname_tags_1[0]), /* 1 */
+	{ &asn_OER_type_MMEname_constr_1, &asn_PER_type_MMEname_constr_1, MMEname_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2ap/lib/NGENB-DU-ID.c b/e2ap/lib/NGENB-DU-ID.c
new file mode 100644
index 0000000..1a8f48a
--- /dev/null
+++ b/e2ap/lib/NGENB-DU-ID.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NGENB-DU-ID.h"
+
+int
+NGENB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 68719476735)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NGENB_DU_ID_constr_1 CC_NOTUSED = {
+	{ 8, 1 }	/* (0..68719476735) */,
+	-1};
+asn_per_constraints_t asn_PER_type_NGENB_DU_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 36, -1,  0,  68719476735 }	/* (0..68719476735) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_NGENB_DU_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NGENB_DU_ID = {
+	"NGENB-DU-ID",
+	"NGENB-DU-ID",
+	&asn_OP_INTEGER,
+	asn_DEF_NGENB_DU_ID_tags_1,
+	sizeof(asn_DEF_NGENB_DU_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */
+	asn_DEF_NGENB_DU_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NGENB_DU_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NGENB_DU_ID_constr_1, &asn_PER_type_NGENB_DU_ID_constr_1, NGENB_DU_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2ap/lib/PLMN-Identity.c b/e2ap/lib/PLMN-Identity.c
index 24f3043..8be1dc8 100644
--- a/e2ap/lib/PLMN-Identity.c
+++ b/e2ap/lib/PLMN-Identity.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "PLMN-Identity.h"
diff --git a/e2ap/lib/Presence.c b/e2ap/lib/Presence.c
index c32f9e0..3377b10 100644
--- a/e2ap/lib/Presence.c
+++ b/e2ap/lib/Presence.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "E2AP-CommonDataTypes-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "Presence.h"
diff --git a/e2ap/lib/PrintableString.c b/e2ap/lib/PrintableString.c
new file mode 100644
index 0000000..8fc3939
--- /dev/null
+++ b/e2ap/lib/PrintableString.c
@@ -0,0 +1,130 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <PrintableString.h>
+
+/*
+ * ASN.1:1984 (X.409)
+ */
+static const int _PrintableString_alphabet[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,	/* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,	/* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,	/*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,	/* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,	/*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,	/* pqrstuvwxyz      */
+};
+static const int _PrintableString_code2value[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122};
+
+/*
+ * PrintableString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2)),	/* [UNIVERSAL 19] IMPLICIT ...*/
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))	/* ... OCTET STRING */
+};
+static int asn_DEF_PrintableString_v2c(unsigned int value) {
+	return _PrintableString_alphabet[value > 255 ? 0 : value] - 1;
+}
+static int asn_DEF_PrintableString_c2v(unsigned int code) {
+	if(code < 74)
+		return _PrintableString_code2value[code];
+	return -1;
+}
+static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = {
+	{ APC_CONSTRAINED, 4, 4, 0x20, 0x39 },	/* Value */
+	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
+	asn_DEF_PrintableString_v2c,
+	asn_DEF_PrintableString_c2v
+};
+asn_TYPE_operation_t asn_OP_PrintableString = {
+	OCTET_STRING_free,
+	OCTET_STRING_print_utf8,	/* ASCII subset */
+	OCTET_STRING_compare,
+	OCTET_STRING_decode_ber,      /* Implemented in terms of OCTET STRING */
+	OCTET_STRING_encode_der,
+	OCTET_STRING_decode_xer_utf8,
+	OCTET_STRING_encode_xer_utf8,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	OCTET_STRING_decode_oer,
+	OCTET_STRING_encode_oer,
+#endif	/* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	OCTET_STRING_decode_uper,
+	OCTET_STRING_encode_uper,
+	OCTET_STRING_decode_aper,
+	OCTET_STRING_encode_aper,
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	OCTET_STRING_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_PrintableString = {
+	"PrintableString",
+	"PrintableString",
+	&asn_OP_PrintableString,
+	asn_DEF_PrintableString_tags,
+	sizeof(asn_DEF_PrintableString_tags)
+	  / sizeof(asn_DEF_PrintableString_tags[0]) - 1,
+	asn_DEF_PrintableString_tags,
+	sizeof(asn_DEF_PrintableString_tags)
+	  / sizeof(asn_DEF_PrintableString_tags[0]),
+	{ 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+
+int
+PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const PrintableString_t *st = (const PrintableString_t *)sptr;
+
+	if(st && st->buf) {
+		uint8_t *buf = st->buf;
+		uint8_t *end = buf + st->size;
+
+		/*
+		 * Check the alphabet of the PrintableString.
+		 * ASN.1:1984 (X.409)
+		 */
+		for(; buf < end; buf++) {
+			if(!_PrintableString_alphabet[*buf]) {
+				ASN__CTFAIL(app_key, td, sptr,
+					"%s: value byte %ld (%d) "
+					"not in PrintableString alphabet "
+					"(%s:%d)",
+					td->name,
+					(long)((buf - st->buf) + 1),
+					*buf,
+					__FILE__, __LINE__);
+				return -1;
+			}
+		}
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
diff --git a/e2ap/lib/ProcedureCode.c b/e2ap/lib/ProcedureCode.c
index 8678080..ba5d14d 100644
--- a/e2ap/lib/ProcedureCode.c
+++ b/e2ap/lib/ProcedureCode.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "E2AP-CommonDataTypes-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProcedureCode.h"
diff --git a/e2ap/lib/ProtocolIE-Container.c b/e2ap/lib/ProtocolIE-Container.c
index 05014c6..e39d798 100644
--- a/e2ap/lib/ProtocolIE-Container.c
+++ b/e2ap/lib/ProtocolIE-Container.c
@@ -1,174 +1,206 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-Container.h"
 
 #include "ProtocolIE-Field.h"
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P0_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P0_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P0_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P0_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P1_constr_3 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P1_constr_3 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P1_constr_3 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P1_constr_3 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P2_constr_5 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P2_constr_5 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P2_constr_5 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P2_constr_5 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P3_constr_7 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P3_constr_7 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P3_constr_7 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P3_constr_7 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P4_constr_9 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P4_constr_9 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P4_constr_9 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P4_constr_9 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P5_constr_11 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P5_constr_11 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P5_constr_11 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P5_constr_11 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P6_constr_13 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P6_constr_13 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P6_constr_13 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P6_constr_13 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P7_constr_15 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P7_constr_15 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P7_constr_15 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P7_constr_15 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P8_constr_17 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P8_constr_17 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P8_constr_17 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P8_constr_17 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P9_constr_19 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P9_constr_19 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P9_constr_19 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P9_constr_19 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P10_constr_21 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P10_constr_21 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P10_constr_21 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P10_constr_21 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P11_constr_23 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P11_constr_23 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P11_constr_23 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P11_constr_23 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P12_constr_25 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P12_constr_25 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P12_constr_25 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P12_constr_25 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P13_constr_27 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P13_constr_27 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P13_constr_27 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P13_constr_27 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P14_constr_29 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P14_constr_29 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P14_constr_29 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P14_constr_29 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P15_constr_31 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P15_constr_31 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P15_constr_31 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P15_constr_31 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P16_constr_33 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P16_constr_33 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P16_constr_33 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P16_constr_33 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P17_constr_35 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P17_constr_35 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P17_constr_35 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P17_constr_35 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P18_constr_37 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P18_constr_37 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P18_constr_37 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P18_constr_37 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_87P19_constr_39 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P19_constr_39 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_87P19_constr_39 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P19_constr_39 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P0_1[] = {
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P20_constr_41 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P20_constr_41 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P21_constr_43 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P21_constr_43 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P22_constr_45 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P22_constr_45 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_185P23_constr_47 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_185P23_constr_47 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P0_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -179,31 +211,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P0_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P0_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P0_specs_1 = {
-	sizeof(struct ProtocolIE_Container_87P0),
-	offsetof(struct ProtocolIE_Container_87P0, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P0_specs_1 = {
+	sizeof(struct ProtocolIE_Container_185P0),
+	offsetof(struct ProtocolIE_Container_185P0, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P0 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P0 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P0_tags_1,
-	sizeof(asn_DEF_ProtocolIE_Container_87P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P0_tags_1[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P0_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P0_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P0_constr_1, &asn_PER_type_ProtocolIE_Container_87P0_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P0_1,
+	asn_DEF_ProtocolIE_Container_185P0_tags_1,
+	sizeof(asn_DEF_ProtocolIE_Container_185P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P0_tags_1[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P0_constr_1, &asn_PER_type_ProtocolIE_Container_185P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P0_1,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P0_specs_1	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P0_specs_1	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P1_3[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P1_3[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -214,31 +246,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P1_tags_3[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P1_tags_3[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P1_specs_3 = {
-	sizeof(struct ProtocolIE_Container_87P1),
-	offsetof(struct ProtocolIE_Container_87P1, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P1_specs_3 = {
+	sizeof(struct ProtocolIE_Container_185P1),
+	offsetof(struct ProtocolIE_Container_185P1, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P1 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P1 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P1_tags_3,
-	sizeof(asn_DEF_ProtocolIE_Container_87P1_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P1_tags_3[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P1_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P1_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P1_tags_3[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P1_constr_3, &asn_PER_type_ProtocolIE_Container_87P1_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P1_3,
+	asn_DEF_ProtocolIE_Container_185P1_tags_3,
+	sizeof(asn_DEF_ProtocolIE_Container_185P1_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P1_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P1_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P1_tags_3[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P1_constr_3, &asn_PER_type_ProtocolIE_Container_185P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P1_3,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P1_specs_3	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P1_specs_3	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P2_5[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P2_5[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -249,31 +281,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P2_tags_5[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P2_tags_5[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P2_specs_5 = {
-	sizeof(struct ProtocolIE_Container_87P2),
-	offsetof(struct ProtocolIE_Container_87P2, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P2_specs_5 = {
+	sizeof(struct ProtocolIE_Container_185P2),
+	offsetof(struct ProtocolIE_Container_185P2, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P2 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P2 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P2_tags_5,
-	sizeof(asn_DEF_ProtocolIE_Container_87P2_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P2_tags_5[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P2_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P2_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P2_tags_5[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P2_constr_5, &asn_PER_type_ProtocolIE_Container_87P2_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P2_5,
+	asn_DEF_ProtocolIE_Container_185P2_tags_5,
+	sizeof(asn_DEF_ProtocolIE_Container_185P2_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P2_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P2_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P2_tags_5[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P2_constr_5, &asn_PER_type_ProtocolIE_Container_185P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P2_5,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P2_specs_5	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P2_specs_5	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P3_7[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P3_7[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -284,31 +316,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P3_tags_7[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P3_tags_7[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P3_specs_7 = {
-	sizeof(struct ProtocolIE_Container_87P3),
-	offsetof(struct ProtocolIE_Container_87P3, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P3_specs_7 = {
+	sizeof(struct ProtocolIE_Container_185P3),
+	offsetof(struct ProtocolIE_Container_185P3, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P3 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P3 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P3_tags_7,
-	sizeof(asn_DEF_ProtocolIE_Container_87P3_tags_7)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P3_tags_7[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P3_tags_7,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P3_tags_7)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P3_tags_7[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P3_constr_7, &asn_PER_type_ProtocolIE_Container_87P3_constr_7, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P3_7,
+	asn_DEF_ProtocolIE_Container_185P3_tags_7,
+	sizeof(asn_DEF_ProtocolIE_Container_185P3_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P3_tags_7[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P3_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P3_tags_7[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P3_constr_7, &asn_PER_type_ProtocolIE_Container_185P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P3_7,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P3_specs_7	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P3_specs_7	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P4_9[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P4_9[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -319,31 +351,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P4_tags_9[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P4_tags_9[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P4_specs_9 = {
-	sizeof(struct ProtocolIE_Container_87P4),
-	offsetof(struct ProtocolIE_Container_87P4, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P4_specs_9 = {
+	sizeof(struct ProtocolIE_Container_185P4),
+	offsetof(struct ProtocolIE_Container_185P4, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P4 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P4 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P4_tags_9,
-	sizeof(asn_DEF_ProtocolIE_Container_87P4_tags_9)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P4_tags_9[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P4_tags_9,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P4_tags_9)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P4_tags_9[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P4_constr_9, &asn_PER_type_ProtocolIE_Container_87P4_constr_9, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P4_9,
+	asn_DEF_ProtocolIE_Container_185P4_tags_9,
+	sizeof(asn_DEF_ProtocolIE_Container_185P4_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P4_tags_9[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P4_tags_9,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P4_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P4_tags_9[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P4_constr_9, &asn_PER_type_ProtocolIE_Container_185P4_constr_9, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P4_9,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P4_specs_9	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P4_specs_9	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P5_11[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P5_11[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -354,31 +386,66 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P5_tags_11[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P5_tags_11[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P5_specs_11 = {
-	sizeof(struct ProtocolIE_Container_87P5),
-	offsetof(struct ProtocolIE_Container_87P5, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P5_specs_11 = {
+	sizeof(struct ProtocolIE_Container_185P5),
+	offsetof(struct ProtocolIE_Container_185P5, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P5 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P5 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P5_tags_11,
-	sizeof(asn_DEF_ProtocolIE_Container_87P5_tags_11)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P5_tags_11[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P5_tags_11,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P5_tags_11)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P5_tags_11[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P5_constr_11, &asn_PER_type_ProtocolIE_Container_87P5_constr_11, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P5_11,
+	asn_DEF_ProtocolIE_Container_185P5_tags_11,
+	sizeof(asn_DEF_ProtocolIE_Container_185P5_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P5_tags_11[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P5_tags_11,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P5_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P5_tags_11[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P5_constr_11, &asn_PER_type_ProtocolIE_Container_185P5_constr_11, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P5_11,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P5_specs_11	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P5_specs_11	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P6_13[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P6_13[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RICsubscriptionDeleteRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P6_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P6_specs_13 = {
+	sizeof(struct ProtocolIE_Container_185P6),
+	offsetof(struct ProtocolIE_Container_185P6, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P6 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P6_tags_13,
+	sizeof(asn_DEF_ProtocolIE_Container_185P6_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P6_tags_13[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P6_tags_13,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P6_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P6_tags_13[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P6_constr_13, &asn_PER_type_ProtocolIE_Container_185P6_constr_13, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P6_13,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P6_specs_13	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P7_15[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -389,31 +456,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P6_tags_13[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P7_tags_15[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P6_specs_13 = {
-	sizeof(struct ProtocolIE_Container_87P6),
-	offsetof(struct ProtocolIE_Container_87P6, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P7_specs_15 = {
+	sizeof(struct ProtocolIE_Container_185P7),
+	offsetof(struct ProtocolIE_Container_185P7, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P6 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P7 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P6_tags_13,
-	sizeof(asn_DEF_ProtocolIE_Container_87P6_tags_13)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P6_tags_13[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P6_tags_13,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P6_tags_13)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P6_tags_13[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P6_constr_13, &asn_PER_type_ProtocolIE_Container_87P6_constr_13, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P6_13,
+	asn_DEF_ProtocolIE_Container_185P7_tags_15,
+	sizeof(asn_DEF_ProtocolIE_Container_185P7_tags_15)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P7_tags_15[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P7_tags_15,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P7_tags_15)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P7_tags_15[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P7_constr_15, &asn_PER_type_ProtocolIE_Container_185P7_constr_15, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P7_15,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P6_specs_13	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P7_specs_15	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P7_15[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P8_17[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -424,31 +491,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P7_tags_15[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P8_tags_17[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P7_specs_15 = {
-	sizeof(struct ProtocolIE_Container_87P7),
-	offsetof(struct ProtocolIE_Container_87P7, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P8_specs_17 = {
+	sizeof(struct ProtocolIE_Container_185P8),
+	offsetof(struct ProtocolIE_Container_185P8, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P7 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P8 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P7_tags_15,
-	sizeof(asn_DEF_ProtocolIE_Container_87P7_tags_15)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P7_tags_15[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P7_tags_15,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P7_tags_15)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P7_tags_15[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P7_constr_15, &asn_PER_type_ProtocolIE_Container_87P7_constr_15, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P7_15,
+	asn_DEF_ProtocolIE_Container_185P8_tags_17,
+	sizeof(asn_DEF_ProtocolIE_Container_185P8_tags_17)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P8_tags_17[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P8_tags_17,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P8_tags_17)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P8_tags_17[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P8_constr_17, &asn_PER_type_ProtocolIE_Container_185P8_constr_17, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P8_17,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P7_specs_15	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P8_specs_17	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P8_17[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P9_19[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -459,31 +526,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P8_tags_17[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P9_tags_19[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P8_specs_17 = {
-	sizeof(struct ProtocolIE_Container_87P8),
-	offsetof(struct ProtocolIE_Container_87P8, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P9_specs_19 = {
+	sizeof(struct ProtocolIE_Container_185P9),
+	offsetof(struct ProtocolIE_Container_185P9, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P8 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P9 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P8_tags_17,
-	sizeof(asn_DEF_ProtocolIE_Container_87P8_tags_17)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P8_tags_17[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P8_tags_17,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P8_tags_17)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P8_tags_17[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P8_constr_17, &asn_PER_type_ProtocolIE_Container_87P8_constr_17, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P8_17,
+	asn_DEF_ProtocolIE_Container_185P9_tags_19,
+	sizeof(asn_DEF_ProtocolIE_Container_185P9_tags_19)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P9_tags_19[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P9_tags_19,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P9_tags_19)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P9_tags_19[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P9_constr_19, &asn_PER_type_ProtocolIE_Container_185P9_constr_19, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P9_19,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P8_specs_17	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P9_specs_19	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P9_19[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P10_21[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -494,31 +561,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P9_tags_19[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P10_tags_21[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P9_specs_19 = {
-	sizeof(struct ProtocolIE_Container_87P9),
-	offsetof(struct ProtocolIE_Container_87P9, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P10_specs_21 = {
+	sizeof(struct ProtocolIE_Container_185P10),
+	offsetof(struct ProtocolIE_Container_185P10, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P9 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P10 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P9_tags_19,
-	sizeof(asn_DEF_ProtocolIE_Container_87P9_tags_19)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P9_tags_19[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P9_tags_19,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P9_tags_19)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P9_tags_19[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P9_constr_19, &asn_PER_type_ProtocolIE_Container_87P9_constr_19, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P9_19,
+	asn_DEF_ProtocolIE_Container_185P10_tags_21,
+	sizeof(asn_DEF_ProtocolIE_Container_185P10_tags_21)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P10_tags_21[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P10_tags_21,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P10_tags_21)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P10_tags_21[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P10_constr_21, &asn_PER_type_ProtocolIE_Container_185P10_constr_21, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P10_21,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P9_specs_19	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P10_specs_21	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P10_21[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P11_23[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -529,31 +596,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P10_tags_21[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P11_tags_23[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P10_specs_21 = {
-	sizeof(struct ProtocolIE_Container_87P10),
-	offsetof(struct ProtocolIE_Container_87P10, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P11_specs_23 = {
+	sizeof(struct ProtocolIE_Container_185P11),
+	offsetof(struct ProtocolIE_Container_185P11, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P10 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P11 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P10_tags_21,
-	sizeof(asn_DEF_ProtocolIE_Container_87P10_tags_21)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P10_tags_21[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P10_tags_21,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P10_tags_21)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P10_tags_21[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P10_constr_21, &asn_PER_type_ProtocolIE_Container_87P10_constr_21, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P10_21,
+	asn_DEF_ProtocolIE_Container_185P11_tags_23,
+	sizeof(asn_DEF_ProtocolIE_Container_185P11_tags_23)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P11_tags_23[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P11_tags_23,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P11_tags_23)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P11_tags_23[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P11_constr_23, &asn_PER_type_ProtocolIE_Container_185P11_constr_23, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P11_23,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P10_specs_21	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P11_specs_23	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P11_23[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P12_25[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -564,31 +631,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P11_tags_23[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P12_tags_25[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P11_specs_23 = {
-	sizeof(struct ProtocolIE_Container_87P11),
-	offsetof(struct ProtocolIE_Container_87P11, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P12_specs_25 = {
+	sizeof(struct ProtocolIE_Container_185P12),
+	offsetof(struct ProtocolIE_Container_185P12, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P11 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P12 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P11_tags_23,
-	sizeof(asn_DEF_ProtocolIE_Container_87P11_tags_23)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P11_tags_23[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P11_tags_23,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P11_tags_23)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P11_tags_23[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P11_constr_23, &asn_PER_type_ProtocolIE_Container_87P11_constr_23, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P11_23,
+	asn_DEF_ProtocolIE_Container_185P12_tags_25,
+	sizeof(asn_DEF_ProtocolIE_Container_185P12_tags_25)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P12_tags_25[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P12_tags_25,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P12_tags_25)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P12_tags_25[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P12_constr_25, &asn_PER_type_ProtocolIE_Container_185P12_constr_25, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P12_25,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P11_specs_23	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P12_specs_25	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P12_25[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P13_27[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -599,31 +666,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P12_tags_25[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P13_tags_27[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P12_specs_25 = {
-	sizeof(struct ProtocolIE_Container_87P12),
-	offsetof(struct ProtocolIE_Container_87P12, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P13_specs_27 = {
+	sizeof(struct ProtocolIE_Container_185P13),
+	offsetof(struct ProtocolIE_Container_185P13, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P12 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P13 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P12_tags_25,
-	sizeof(asn_DEF_ProtocolIE_Container_87P12_tags_25)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P12_tags_25[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P12_tags_25,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P12_tags_25)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P12_tags_25[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P12_constr_25, &asn_PER_type_ProtocolIE_Container_87P12_constr_25, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P12_25,
+	asn_DEF_ProtocolIE_Container_185P13_tags_27,
+	sizeof(asn_DEF_ProtocolIE_Container_185P13_tags_27)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P13_tags_27[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P13_tags_27,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P13_tags_27)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P13_tags_27[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P13_constr_27, &asn_PER_type_ProtocolIE_Container_185P13_constr_27, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P13_27,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P12_specs_25	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P13_specs_27	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P13_27[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P14_29[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -634,31 +701,136 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P13_tags_27[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P14_tags_29[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P13_specs_27 = {
-	sizeof(struct ProtocolIE_Container_87P13),
-	offsetof(struct ProtocolIE_Container_87P13, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P14_specs_29 = {
+	sizeof(struct ProtocolIE_Container_185P14),
+	offsetof(struct ProtocolIE_Container_185P14, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P13 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P14 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P13_tags_27,
-	sizeof(asn_DEF_ProtocolIE_Container_87P13_tags_27)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P13_tags_27[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P13_tags_27,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P13_tags_27)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P13_tags_27[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P13_constr_27, &asn_PER_type_ProtocolIE_Container_87P13_constr_27, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P13_27,
+	asn_DEF_ProtocolIE_Container_185P14_tags_29,
+	sizeof(asn_DEF_ProtocolIE_Container_185P14_tags_29)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P14_tags_29[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P14_tags_29,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P14_tags_29)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P14_tags_29[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P14_constr_29, &asn_PER_type_ProtocolIE_Container_185P14_constr_29, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P14_29,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P13_specs_27	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P14_specs_29	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P14_29[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P15_31[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P15_tags_31[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P15_specs_31 = {
+	sizeof(struct ProtocolIE_Container_185P15),
+	offsetof(struct ProtocolIE_Container_185P15, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P15 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P15_tags_31,
+	sizeof(asn_DEF_ProtocolIE_Container_185P15_tags_31)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P15_tags_31[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P15_tags_31,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P15_tags_31)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P15_tags_31[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P15_constr_31, &asn_PER_type_ProtocolIE_Container_185P15_constr_31, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P15_31,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P15_specs_31	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P16_33[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P16_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P16_specs_33 = {
+	sizeof(struct ProtocolIE_Container_185P16),
+	offsetof(struct ProtocolIE_Container_185P16, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P16 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P16_tags_33,
+	sizeof(asn_DEF_ProtocolIE_Container_185P16_tags_33)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P16_tags_33[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P16_tags_33,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P16_tags_33)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P16_tags_33[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P16_constr_33, &asn_PER_type_ProtocolIE_Container_185P16_constr_33, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P16_33,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P16_specs_33	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P17_35[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdateFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P17_tags_35[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P17_specs_35 = {
+	sizeof(struct ProtocolIE_Container_185P17),
+	offsetof(struct ProtocolIE_Container_185P17, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P17 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P17_tags_35,
+	sizeof(asn_DEF_ProtocolIE_Container_185P17_tags_35)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P17_tags_35[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P17_tags_35,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P17_tags_35)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P17_tags_35[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P17_constr_35, &asn_PER_type_ProtocolIE_Container_185P17_constr_35, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P17_35,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P17_specs_35	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P18_37[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -669,31 +841,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P14_tags_29[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P18_tags_37[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P14_specs_29 = {
-	sizeof(struct ProtocolIE_Container_87P14),
-	offsetof(struct ProtocolIE_Container_87P14, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P18_specs_37 = {
+	sizeof(struct ProtocolIE_Container_185P18),
+	offsetof(struct ProtocolIE_Container_185P18, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P14 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P18 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P14_tags_29,
-	sizeof(asn_DEF_ProtocolIE_Container_87P14_tags_29)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P14_tags_29[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P14_tags_29,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P14_tags_29)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P14_tags_29[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P14_constr_29, &asn_PER_type_ProtocolIE_Container_87P14_constr_29, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P14_29,
+	asn_DEF_ProtocolIE_Container_185P18_tags_37,
+	sizeof(asn_DEF_ProtocolIE_Container_185P18_tags_37)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P18_tags_37[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P18_tags_37,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P18_tags_37)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P18_tags_37[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P18_constr_37, &asn_PER_type_ProtocolIE_Container_185P18_constr_37, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P18_37,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P14_specs_29	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P18_specs_37	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P15_31[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P19_39[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -704,136 +876,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P15_tags_31[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P19_tags_39[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P15_specs_31 = {
-	sizeof(struct ProtocolIE_Container_87P15),
-	offsetof(struct ProtocolIE_Container_87P15, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P19_specs_39 = {
+	sizeof(struct ProtocolIE_Container_185P19),
+	offsetof(struct ProtocolIE_Container_185P19, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P15 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P19 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P15_tags_31,
-	sizeof(asn_DEF_ProtocolIE_Container_87P15_tags_31)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P15_tags_31[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P15_tags_31,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P15_tags_31)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P15_tags_31[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P15_constr_31, &asn_PER_type_ProtocolIE_Container_87P15_constr_31, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P15_31,
+	asn_DEF_ProtocolIE_Container_185P19_tags_39,
+	sizeof(asn_DEF_ProtocolIE_Container_185P19_tags_39)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P19_tags_39[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P19_tags_39,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P19_tags_39)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P19_tags_39[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P19_constr_39, &asn_PER_type_ProtocolIE_Container_185P19_constr_39, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P19_39,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P15_specs_31	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P19_specs_39	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P16_33[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdate_IEs,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P16_tags_33[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P16_specs_33 = {
-	sizeof(struct ProtocolIE_Container_87P16),
-	offsetof(struct ProtocolIE_Container_87P16, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P16 = {
-	"ProtocolIE-Container",
-	"ProtocolIE-Container",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P16_tags_33,
-	sizeof(asn_DEF_ProtocolIE_Container_87P16_tags_33)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P16_tags_33[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P16_tags_33,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P16_tags_33)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P16_tags_33[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P16_constr_33, &asn_PER_type_ProtocolIE_Container_87P16_constr_33, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P16_33,
-	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P16_specs_33	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P17_35[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdateAcknowledge_IEs,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P17_tags_35[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P17_specs_35 = {
-	sizeof(struct ProtocolIE_Container_87P17),
-	offsetof(struct ProtocolIE_Container_87P17, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P17 = {
-	"ProtocolIE-Container",
-	"ProtocolIE-Container",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P17_tags_35,
-	sizeof(asn_DEF_ProtocolIE_Container_87P17_tags_35)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P17_tags_35[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P17_tags_35,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P17_tags_35)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P17_tags_35[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P17_constr_35, &asn_PER_type_ProtocolIE_Container_87P17_constr_35, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P17_35,
-	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P17_specs_35	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P18_37[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdateFailure_IEs,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P18_tags_37[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P18_specs_37 = {
-	sizeof(struct ProtocolIE_Container_87P18),
-	offsetof(struct ProtocolIE_Container_87P18, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P18 = {
-	"ProtocolIE-Container",
-	"ProtocolIE-Container",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P18_tags_37,
-	sizeof(asn_DEF_ProtocolIE_Container_87P18_tags_37)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P18_tags_37[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P18_tags_37,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P18_tags_37)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P18_tags_37[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P18_constr_37, &asn_PER_type_ProtocolIE_Container_87P18_constr_37, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P18_37,
-	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P18_specs_37	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_87P19_39[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P20_41[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -844,27 +911,132 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_87P19_tags_39[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P20_tags_41[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_87P19_specs_39 = {
-	sizeof(struct ProtocolIE_Container_87P19),
-	offsetof(struct ProtocolIE_Container_87P19, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P20_specs_41 = {
+	sizeof(struct ProtocolIE_Container_185P20),
+	offsetof(struct ProtocolIE_Container_185P20, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_87P19 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P20 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_87P19_tags_39,
-	sizeof(asn_DEF_ProtocolIE_Container_87P19_tags_39)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P19_tags_39[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_87P19_tags_39,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_87P19_tags_39)
-		/sizeof(asn_DEF_ProtocolIE_Container_87P19_tags_39[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_87P19_constr_39, &asn_PER_type_ProtocolIE_Container_87P19_constr_39, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_87P19_39,
+	asn_DEF_ProtocolIE_Container_185P20_tags_41,
+	sizeof(asn_DEF_ProtocolIE_Container_185P20_tags_41)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P20_tags_41[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P20_tags_41,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P20_tags_41)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P20_tags_41[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P20_constr_41, &asn_PER_type_ProtocolIE_Container_185P20_constr_41, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P20_41,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_87P19_specs_39	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_185P20_specs_41	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P21_43[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalRequestIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P21_tags_43[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P21_specs_43 = {
+	sizeof(struct ProtocolIE_Container_185P21),
+	offsetof(struct ProtocolIE_Container_185P21, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P21 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P21_tags_43,
+	sizeof(asn_DEF_ProtocolIE_Container_185P21_tags_43)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P21_tags_43[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P21_tags_43,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P21_tags_43)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P21_tags_43[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P21_constr_43, &asn_PER_type_ProtocolIE_Container_185P21_constr_43, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P21_43,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P21_specs_43	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P22_45[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalResponseIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P22_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P22_specs_45 = {
+	sizeof(struct ProtocolIE_Container_185P22),
+	offsetof(struct ProtocolIE_Container_185P22, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P22 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P22_tags_45,
+	sizeof(asn_DEF_ProtocolIE_Container_185P22_tags_45)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P22_tags_45[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P22_tags_45,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P22_tags_45)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P22_tags_45[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P22_constr_45, &asn_PER_type_ProtocolIE_Container_185P22_constr_45, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P22_45,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P22_specs_45	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_185P23_47[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalFailureIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_185P23_tags_47[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_185P23_specs_47 = {
+	sizeof(struct ProtocolIE_Container_185P23),
+	offsetof(struct ProtocolIE_Container_185P23, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_185P23 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_185P23_tags_47,
+	sizeof(asn_DEF_ProtocolIE_Container_185P23_tags_47)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P23_tags_47[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_185P23_tags_47,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_185P23_tags_47)
+		/sizeof(asn_DEF_ProtocolIE_Container_185P23_tags_47[0]), /* 1 */
+	{ &asn_OER_type_ProtocolIE_Container_185P23_constr_47, &asn_PER_type_ProtocolIE_Container_185P23_constr_47, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_185P23_47,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_185P23_specs_47	/* Additional specs */
 };
 
diff --git a/e2ap/lib/ProtocolIE-ContainerList.c b/e2ap/lib/ProtocolIE-ContainerList.c
index b43b010..366ff28 100644
--- a/e2ap/lib/ProtocolIE-ContainerList.c
+++ b/e2ap/lib/ProtocolIE-ContainerList.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-ContainerList.h"
diff --git a/e2ap/lib/ProtocolIE-ContainerPair.c b/e2ap/lib/ProtocolIE-ContainerPair.c
index 0bf1a47..06ee11d 100644
--- a/e2ap/lib/ProtocolIE-ContainerPair.c
+++ b/e2ap/lib/ProtocolIE-ContainerPair.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-ContainerPair.h"
diff --git a/e2ap/lib/ProtocolIE-ContainerPairList.c b/e2ap/lib/ProtocolIE-ContainerPairList.c
index dba4ec4..3b2f08c 100644
--- a/e2ap/lib/ProtocolIE-ContainerPairList.c
+++ b/e2ap/lib/ProtocolIE-ContainerPairList.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-ContainerPairList.h"
diff --git a/e2ap/lib/ProtocolIE-Field.c b/e2ap/lib/ProtocolIE-Field.c
index 80336e8..5dcb025 100644
--- a/e2ap/lib/ProtocolIE-Field.c
+++ b/e2ap/lib/ProtocolIE-Field.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-Field.h"
@@ -43,38 +43,134 @@
 static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = {
 	{ 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows }
 };
-static const long asn_VAL_64_id_RANfunction_Item = 8;
-static const long asn_VAL_64_ignore = 1;
-static const long asn_VAL_64_mandatory = 2;
+static const long asn_VAL_24_id_RICsubscription_withCause_Item = 61;
+static const long asn_VAL_24_ignore = 1;
+static const long asn_VAL_24_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_RICsubscription_withCause_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RICsubscription_withCause_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_ignore },
+	{ "&Value", aioc__type, &asn_DEF_RICsubscription_withCause_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_RICsubscription_withCause_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_RICsubscription_withCause_ItemIEs_1_rows }
+};
+static const long asn_VAL_73_id_E2nodeComponentConfigAddition_Item = 51;
+static const long asn_VAL_73_reject = 0;
+static const long asn_VAL_73_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigAddition_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_73_id_E2nodeComponentConfigAddition_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_73_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAddition_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_73_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigAddition_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigAddition_ItemIEs_1_rows }
+};
+static const long asn_VAL_74_id_E2nodeComponentConfigUpdate_Item = 34;
+static const long asn_VAL_74_reject = 0;
+static const long asn_VAL_74_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigUpdate_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_74_id_E2nodeComponentConfigUpdate_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_74_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdate_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_74_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigUpdate_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigUpdate_ItemIEs_1_rows }
+};
+static const long asn_VAL_75_id_E2nodeComponentConfigRemoval_Item = 55;
+static const long asn_VAL_75_reject = 0;
+static const long asn_VAL_75_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigRemoval_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_75_id_E2nodeComponentConfigRemoval_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_75_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigRemoval_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_75_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigRemoval_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigRemoval_ItemIEs_1_rows }
+};
+static const long asn_VAL_76_id_E2nodeTNLassociationRemoval_Item = 59;
+static const long asn_VAL_76_reject = 0;
+static const long asn_VAL_76_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeTNLassociationRemoval_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_76_id_E2nodeTNLassociationRemoval_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_76_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeTNLassociationRemoval_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_76_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeTNLassociationRemoval_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeTNLassociationRemoval_ItemIEs_1_rows }
+};
+static const long asn_VAL_81_id_E2nodeComponentConfigAdditionAck_Item = 53;
+static const long asn_VAL_81_reject = 0;
+static const long asn_VAL_81_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigAdditionAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_81_id_E2nodeComponentConfigAdditionAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_81_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAdditionAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_81_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigAdditionAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigAdditionAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_82_id_E2nodeComponentConfigUpdateAck_Item = 36;
+static const long asn_VAL_82_reject = 0;
+static const long asn_VAL_82_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_82_id_E2nodeComponentConfigUpdateAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_82_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdateAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_82_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_83_id_E2nodeComponentConfigRemovalAck_Item = 57;
+static const long asn_VAL_83_reject = 0;
+static const long asn_VAL_83_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigRemovalAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_83_id_E2nodeComponentConfigRemovalAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_83_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigRemovalAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_83_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeComponentConfigRemovalAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeComponentConfigRemovalAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_92_id_RANfunction_Item = 8;
+static const long asn_VAL_92_ignore = 1;
+static const long asn_VAL_92_mandatory = 2;
 static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_92_id_RANfunction_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_92_ignore },
 	{ "&Value", aioc__type, &asn_DEF_RANfunction_Item },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_92_mandatory }
 };
 static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = {
 	{ 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows }
 };
-static const long asn_VAL_65_id_RANfunctionID_Item = 6;
-static const long asn_VAL_65_ignore = 1;
-static const long asn_VAL_65_mandatory = 2;
+static const long asn_VAL_93_id_RANfunctionID_Item = 6;
+static const long asn_VAL_93_ignore = 1;
+static const long asn_VAL_93_mandatory = 2;
 static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_93_id_RANfunctionID_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_93_ignore },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionID_Item },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_93_mandatory }
 };
 static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = {
 	{ 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows }
 };
-static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7;
-static const long asn_VAL_68_ignore = 1;
-static const long asn_VAL_68_mandatory = 2;
+static const long asn_VAL_94_id_RANfunctionIEcause_Item = 7;
+static const long asn_VAL_94_ignore = 1;
+static const long asn_VAL_94_mandatory = 2;
 static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_94_id_RANfunctionIEcause_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_94_ignore },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_94_mandatory }
 };
 static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = {
 	{ 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows }
@@ -144,7 +240,7 @@
 static const long asn_VAL_12_id_RANfunctionID = 5;
 static const long asn_VAL_12_reject = 0;
 static const long asn_VAL_12_mandatory = 2;
-static const long asn_VAL_13_id_RICactions_NotAdmitted = 18;
+static const long asn_VAL_13_id_Cause = 1;
 static const long asn_VAL_13_reject = 0;
 static const long asn_VAL_13_mandatory = 2;
 static const long asn_VAL_14_id_CriticalityDiagnostics = 2;
@@ -159,9 +255,9 @@
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_Cause },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory },
 	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore },
@@ -242,404 +338,578 @@
 static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = {
 	{ 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows }
 };
-static const long asn_VAL_23_id_RICrequestID = 29;
-static const long asn_VAL_23_reject = 0;
+static const long asn_VAL_23_id_RICsubscriptionToBeRemoved = 60;
+static const long asn_VAL_23_ignore = 1;
 static const long asn_VAL_23_mandatory = 2;
-static const long asn_VAL_24_id_RANfunctionID = 5;
-static const long asn_VAL_24_reject = 0;
-static const long asn_VAL_24_mandatory = 2;
-static const long asn_VAL_25_id_RICactionID = 15;
+static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICsubscriptionToBeRemoved },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_ignore },
+	{ "&Value", aioc__type, &asn_DEF_RICsubscription_List_withCause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequired_IEs_1[] = {
+	{ 1, 4, asn_IOS_RICsubscriptionDeleteRequired_IEs_1_rows }
+};
+static const long asn_VAL_25_id_RICrequestID = 29;
 static const long asn_VAL_25_reject = 0;
 static const long asn_VAL_25_mandatory = 2;
-static const long asn_VAL_26_id_RICindicationSN = 27;
+static const long asn_VAL_26_id_RANfunctionID = 5;
 static const long asn_VAL_26_reject = 0;
-static const long asn_VAL_26_optional = 0;
-static const long asn_VAL_27_id_RICindicationType = 28;
+static const long asn_VAL_26_mandatory = 2;
+static const long asn_VAL_27_id_RICactionID = 15;
 static const long asn_VAL_27_reject = 0;
 static const long asn_VAL_27_mandatory = 2;
-static const long asn_VAL_28_id_RICindicationHeader = 25;
+static const long asn_VAL_28_id_RICindicationSN = 27;
 static const long asn_VAL_28_reject = 0;
-static const long asn_VAL_28_mandatory = 2;
-static const long asn_VAL_29_id_RICindicationMessage = 26;
+static const long asn_VAL_28_optional = 0;
+static const long asn_VAL_29_id_RICindicationType = 28;
 static const long asn_VAL_29_reject = 0;
 static const long asn_VAL_29_mandatory = 2;
-static const long asn_VAL_30_id_RICcallProcessID = 20;
+static const long asn_VAL_30_id_RICindicationHeader = 25;
 static const long asn_VAL_30_reject = 0;
-static const long asn_VAL_30_optional = 0;
+static const long asn_VAL_30_mandatory = 2;
+static const long asn_VAL_31_id_RICindicationMessage = 26;
+static const long asn_VAL_31_reject = 0;
+static const long asn_VAL_31_mandatory = 2;
+static const long asn_VAL_32_id_RICcallProcessID = 20;
+static const long asn_VAL_32_reject = 0;
+static const long asn_VAL_32_optional = 0;
 static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICrequestID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICactionID },
+	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RANfunctionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICindicationSN },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICactionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICindicationType },
+	{ "&Value", aioc__type, &asn_DEF_RICactionID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationSN },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICindicationHeader },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage },
+	{ "&Value", aioc__type, &asn_DEF_RICindicationSN },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationType },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICindicationMessage },
+	{ "&Value", aioc__type, &asn_DEF_RICindicationType },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICindicationHeader },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICindicationHeader },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICindicationMessage },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICindicationMessage },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject },
 	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_optional }
 };
 static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = {
 	{ 8, 4, asn_IOS_RICindication_IEs_1_rows }
 };
-static const long asn_VAL_31_id_RICrequestID = 29;
-static const long asn_VAL_31_reject = 0;
-static const long asn_VAL_31_mandatory = 2;
-static const long asn_VAL_32_id_RANfunctionID = 5;
-static const long asn_VAL_32_reject = 0;
-static const long asn_VAL_32_mandatory = 2;
-static const long asn_VAL_33_id_RICcallProcessID = 20;
+static const long asn_VAL_33_id_RICrequestID = 29;
 static const long asn_VAL_33_reject = 0;
-static const long asn_VAL_33_optional = 0;
-static const long asn_VAL_34_id_RICcontrolHeader = 22;
+static const long asn_VAL_33_mandatory = 2;
+static const long asn_VAL_34_id_RANfunctionID = 5;
 static const long asn_VAL_34_reject = 0;
 static const long asn_VAL_34_mandatory = 2;
-static const long asn_VAL_35_id_RICcontrolMessage = 23;
+static const long asn_VAL_35_id_RICcallProcessID = 20;
 static const long asn_VAL_35_reject = 0;
-static const long asn_VAL_35_mandatory = 2;
-static const long asn_VAL_36_id_RICcontrolAckRequest = 21;
+static const long asn_VAL_35_optional = 0;
+static const long asn_VAL_36_id_RICcontrolHeader = 22;
 static const long asn_VAL_36_reject = 0;
-static const long asn_VAL_36_optional = 0;
+static const long asn_VAL_36_mandatory = 2;
+static const long asn_VAL_37_id_RICcontrolMessage = 23;
+static const long asn_VAL_37_reject = 0;
+static const long asn_VAL_37_mandatory = 2;
+static const long asn_VAL_38_id_RICcontrolAckRequest = 21;
+static const long asn_VAL_38_reject = 0;
+static const long asn_VAL_38_optional = 0;
 static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICrequestID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader },
+	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RANfunctionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICcontrolHeader },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcallProcessID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICcontrolMessage },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest },
+	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolHeader },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICcontrolHeader },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICcontrolMessage },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICcontrolMessage },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RICcontrolAckRequest },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject },
 	{ "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_optional }
 };
 static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = {
 	{ 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows }
 };
-static const long asn_VAL_37_id_RICrequestID = 29;
-static const long asn_VAL_37_reject = 0;
-static const long asn_VAL_37_mandatory = 2;
-static const long asn_VAL_38_id_RANfunctionID = 5;
-static const long asn_VAL_38_reject = 0;
-static const long asn_VAL_38_mandatory = 2;
-static const long asn_VAL_39_id_RICcallProcessID = 20;
+static const long asn_VAL_39_id_RICrequestID = 29;
 static const long asn_VAL_39_reject = 0;
-static const long asn_VAL_39_optional = 0;
-static const long asn_VAL_40_id_RICcontrolStatus = 24;
+static const long asn_VAL_39_mandatory = 2;
+static const long asn_VAL_40_id_RANfunctionID = 5;
 static const long asn_VAL_40_reject = 0;
 static const long asn_VAL_40_mandatory = 2;
-static const long asn_VAL_41_id_RICcontrolOutcome = 32;
+static const long asn_VAL_41_id_RICcallProcessID = 20;
 static const long asn_VAL_41_reject = 0;
 static const long asn_VAL_41_optional = 0;
+static const long asn_VAL_42_id_RICcontrolOutcome = 32;
+static const long asn_VAL_42_reject = 0;
+static const long asn_VAL_42_optional = 0;
 static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICrequestID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus },
+	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RANfunctionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICcontrolStatus },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcallProcessID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICcontrolOutcome },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject },
 	{ "&Value", aioc__type, &asn_DEF_RICcontrolOutcome },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_optional }
 };
 static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = {
-	{ 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows }
+	{ 4, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows }
 };
-static const long asn_VAL_42_id_RICrequestID = 29;
-static const long asn_VAL_42_reject = 0;
-static const long asn_VAL_42_mandatory = 2;
-static const long asn_VAL_43_id_RANfunctionID = 5;
+static const long asn_VAL_43_id_RICrequestID = 29;
 static const long asn_VAL_43_reject = 0;
 static const long asn_VAL_43_mandatory = 2;
-static const long asn_VAL_44_id_RICcallProcessID = 20;
+static const long asn_VAL_44_id_RANfunctionID = 5;
 static const long asn_VAL_44_reject = 0;
-static const long asn_VAL_44_optional = 0;
-static const long asn_VAL_45_id_Cause = 1;
-static const long asn_VAL_45_ignore = 1;
-static const long asn_VAL_45_mandatory = 2;
-static const long asn_VAL_46_id_RICcontrolOutcome = 32;
-static const long asn_VAL_46_reject = 0;
-static const long asn_VAL_46_optional = 0;
+static const long asn_VAL_44_mandatory = 2;
+static const long asn_VAL_45_id_RICcallProcessID = 20;
+static const long asn_VAL_45_reject = 0;
+static const long asn_VAL_45_optional = 0;
+static const long asn_VAL_46_id_Cause = 1;
+static const long asn_VAL_46_ignore = 1;
+static const long asn_VAL_46_mandatory = 2;
+static const long asn_VAL_47_id_RICcontrolOutcome = 32;
+static const long asn_VAL_47_reject = 0;
+static const long asn_VAL_47_optional = 0;
 static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RICrequestID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
+	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RANfunctionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_reject },
 	{ "&Value", aioc__type, &asn_DEF_RICcallProcessID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_ignore },
 	{ "&Value", aioc__type, &asn_DEF_Cause },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICcontrolOutcome },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject },
 	{ "&Value", aioc__type, &asn_DEF_RICcontrolOutcome },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }
 };
 static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = {
 	{ 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows }
 };
-static const long asn_VAL_47_id_RICrequestID = 29;
-static const long asn_VAL_47_reject = 0;
-static const long asn_VAL_47_optional = 0;
-static const long asn_VAL_48_id_RANfunctionID = 5;
+static const long asn_VAL_48_id_TransactionID = 49;
 static const long asn_VAL_48_reject = 0;
 static const long asn_VAL_48_optional = 0;
-static const long asn_VAL_49_id_Cause = 1;
-static const long asn_VAL_49_ignore = 1;
+static const long asn_VAL_49_id_RICrequestID = 29;
+static const long asn_VAL_49_reject = 0;
 static const long asn_VAL_49_optional = 0;
-static const long asn_VAL_50_id_CriticalityDiagnostics = 2;
-static const long asn_VAL_50_ignore = 1;
+static const long asn_VAL_50_id_RANfunctionID = 5;
+static const long asn_VAL_50_reject = 0;
 static const long asn_VAL_50_optional = 0;
-static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject },
-	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore },
-	{ "&Value", aioc__type, &asn_DEF_Cause },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore },
-	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional }
-};
-static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = {
-	{ 4, 4, asn_IOS_ErrorIndication_IEs_1_rows }
-};
-static const long asn_VAL_51_id_GlobalE2node_ID = 3;
-static const long asn_VAL_51_reject = 0;
-static const long asn_VAL_51_mandatory = 2;
-static const long asn_VAL_52_id_RANfunctionsAdded = 10;
-static const long asn_VAL_52_reject = 0;
+static const long asn_VAL_51_id_Cause = 1;
+static const long asn_VAL_51_ignore = 1;
+static const long asn_VAL_51_optional = 0;
+static const long asn_VAL_52_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_52_ignore = 1;
 static const long asn_VAL_52_optional = 0;
-static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject },
-	{ "&Value", aioc__type, &asn_DEF_GlobalE2node_ID },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctions_List },
+static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_reject },
+	{ "&Value", aioc__type, &asn_DEF_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional }
 };
-static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = {
-	{ 2, 4, asn_IOS_E2setupRequestIEs_1_rows }
+static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = {
+	{ 5, 4, asn_IOS_ErrorIndication_IEs_1_rows }
 };
-static const long asn_VAL_53_id_GlobalRIC_ID = 4;
+static const long asn_VAL_53_id_TransactionID = 49;
 static const long asn_VAL_53_reject = 0;
 static const long asn_VAL_53_mandatory = 2;
-static const long asn_VAL_54_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_54_id_GlobalE2node_ID = 3;
 static const long asn_VAL_54_reject = 0;
-static const long asn_VAL_54_optional = 0;
-static const long asn_VAL_55_id_RANfunctionsRejected = 13;
+static const long asn_VAL_54_mandatory = 2;
+static const long asn_VAL_55_id_RANfunctionsAdded = 10;
 static const long asn_VAL_55_reject = 0;
-static const long asn_VAL_55_optional = 0;
-static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID },
+static const long asn_VAL_55_mandatory = 2;
+static const long asn_VAL_56_id_E2nodeComponentConfigAddition = 50;
+static const long asn_VAL_56_reject = 0;
+static const long asn_VAL_56_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_TransactionID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject },
-	{ "&Value", aioc__type, &asn_DEF_GlobalRIC_ID },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_GlobalE2node_ID },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected },
+	{ "&Value", aioc__type, &asn_DEF_GlobalE2node_ID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsAdded },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctions_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_E2nodeComponentConfigAddition },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAddition_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = {
+	{ 4, 4, asn_IOS_E2setupRequestIEs_1_rows }
+};
+static const long asn_VAL_57_id_TransactionID = 49;
+static const long asn_VAL_57_reject = 0;
+static const long asn_VAL_57_mandatory = 2;
+static const long asn_VAL_58_id_GlobalRIC_ID = 4;
+static const long asn_VAL_58_reject = 0;
+static const long asn_VAL_58_mandatory = 2;
+static const long asn_VAL_59_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_59_reject = 0;
+static const long asn_VAL_59_optional = 0;
+static const long asn_VAL_60_id_RANfunctionsRejected = 13;
+static const long asn_VAL_60_reject = 0;
+static const long asn_VAL_60_optional = 0;
+static const long asn_VAL_61_id_E2nodeComponentConfigAdditionAck = 52;
+static const long asn_VAL_61_reject = 0;
+static const long asn_VAL_61_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_GlobalRIC_ID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_reject },
+	{ "&Value", aioc__type, &asn_DEF_GlobalRIC_ID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_reject },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_E2nodeComponentConfigAdditionAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAdditionAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_mandatory }
 };
 static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = {
-	{ 3, 4, asn_IOS_E2setupResponseIEs_1_rows }
+	{ 5, 4, asn_IOS_E2setupResponseIEs_1_rows }
 };
-static const long asn_VAL_56_id_Cause = 1;
-static const long asn_VAL_56_ignore = 1;
-static const long asn_VAL_56_mandatory = 2;
-static const long asn_VAL_57_id_TimeToWait = 31;
-static const long asn_VAL_57_ignore = 1;
-static const long asn_VAL_57_optional = 0;
-static const long asn_VAL_58_id_CriticalityDiagnostics = 2;
-static const long asn_VAL_58_ignore = 1;
-static const long asn_VAL_58_optional = 0;
+static const long asn_VAL_62_id_TransactionID = 49;
+static const long asn_VAL_62_reject = 0;
+static const long asn_VAL_62_mandatory = 2;
+static const long asn_VAL_63_id_Cause = 1;
+static const long asn_VAL_63_ignore = 1;
+static const long asn_VAL_63_mandatory = 2;
+static const long asn_VAL_64_id_TimeToWait = 31;
+static const long asn_VAL_64_ignore = 1;
+static const long asn_VAL_64_optional = 0;
+static const long asn_VAL_65_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_65_ignore = 1;
+static const long asn_VAL_65_optional = 0;
+static const long asn_VAL_66_id_TNLinformation = 48;
+static const long asn_VAL_66_ignore = 1;
+static const long asn_VAL_66_optional = 0;
 static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_ignore },
 	{ "&Value", aioc__type, &asn_DEF_Cause },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore },
 	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore },
 	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_TNLinformation },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TNLinformation },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }
 };
 static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = {
-	{ 3, 4, asn_IOS_E2setupFailureIEs_1_rows }
+	{ 5, 4, asn_IOS_E2setupFailureIEs_1_rows }
 };
-static const long asn_VAL_59_id_Cause = 1;
-static const long asn_VAL_59_ignore = 1;
-static const long asn_VAL_59_mandatory = 2;
-static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore },
-	{ "&Value", aioc__type, &asn_DEF_Cause },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory }
-};
-static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = {
-	{ 1, 4, asn_IOS_ResetRequestIEs_1_rows }
-};
-static const long asn_VAL_60_id_CriticalityDiagnostics = 2;
-static const long asn_VAL_60_ignore = 1;
-static const long asn_VAL_60_optional = 0;
-static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore },
-	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional }
-};
-static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = {
-	{ 1, 4, asn_IOS_ResetResponseIEs_1_rows }
-};
-static const long asn_VAL_61_id_RANfunctionsAdded = 10;
-static const long asn_VAL_61_reject = 0;
-static const long asn_VAL_61_optional = 0;
-static const long asn_VAL_62_id_RANfunctionsModified = 12;
-static const long asn_VAL_62_reject = 0;
-static const long asn_VAL_62_optional = 0;
-static const long asn_VAL_63_id_RANfunctionsDeleted = 11;
-static const long asn_VAL_63_reject = 0;
-static const long asn_VAL_63_optional = 0;
-static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctions_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctions_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional }
-};
-static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = {
-	{ 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows }
-};
-static const long asn_VAL_66_id_RANfunctionsAccepted = 9;
-static const long asn_VAL_66_reject = 0;
-static const long asn_VAL_66_optional = 0;
-static const long asn_VAL_67_id_RANfunctionsRejected = 13;
+static const long asn_VAL_67_id_TransactionID = 49;
 static const long asn_VAL_67_reject = 0;
-static const long asn_VAL_67_optional = 0;
-static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional }
-};
-static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = {
-	{ 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows }
-};
-static const long asn_VAL_69_id_RANfunctionsRejected = 13;
-static const long asn_VAL_69_ignore = 1;
+static const long asn_VAL_67_mandatory = 2;
+static const long asn_VAL_68_id_GlobalE2node_ID = 3;
+static const long asn_VAL_68_reject = 0;
+static const long asn_VAL_68_optional = 0;
+static const long asn_VAL_69_id_E2nodeComponentConfigAddition = 50;
+static const long asn_VAL_69_reject = 0;
 static const long asn_VAL_69_optional = 0;
-static const long asn_VAL_70_id_TimeToWait = 31;
-static const long asn_VAL_70_ignore = 1;
+static const long asn_VAL_70_id_E2nodeComponentConfigUpdate = 33;
+static const long asn_VAL_70_reject = 0;
 static const long asn_VAL_70_optional = 0;
-static const long asn_VAL_71_id_CriticalityDiagnostics = 2;
-static const long asn_VAL_71_ignore = 1;
+static const long asn_VAL_71_id_E2nodeComponentConfigRemoval = 54;
+static const long asn_VAL_71_reject = 0;
 static const long asn_VAL_71_optional = 0;
-static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore },
-	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional },
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore },
-	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional }
-};
-static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = {
-	{ 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows }
-};
-static const long asn_VAL_72_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_72_id_E2nodeTNLassociationRemoval = 58;
 static const long asn_VAL_72_reject = 0;
 static const long asn_VAL_72_optional = 0;
-static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = {
-	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted },
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_GlobalE2node_ID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_reject },
+	{ "&Value", aioc__type, &asn_DEF_GlobalE2node_ID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_E2nodeComponentConfigAddition },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAddition_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_E2nodeComponentConfigUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_E2nodeComponentConfigRemoval },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigRemoval_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_E2nodeTNLassociationRemoval },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject },
-	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeTNLassociationRemoval_List },
 	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional }
 };
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdate_IEs_1[] = {
+	{ 6, 4, asn_IOS_E2nodeConfigurationUpdate_IEs_1_rows }
+};
+static const long asn_VAL_77_id_TransactionID = 49;
+static const long asn_VAL_77_reject = 0;
+static const long asn_VAL_77_mandatory = 2;
+static const long asn_VAL_78_id_E2nodeComponentConfigAdditionAck = 52;
+static const long asn_VAL_78_reject = 0;
+static const long asn_VAL_78_optional = 0;
+static const long asn_VAL_79_id_E2nodeComponentConfigUpdateAck = 35;
+static const long asn_VAL_79_reject = 0;
+static const long asn_VAL_79_optional = 0;
+static const long asn_VAL_80_id_E2nodeComponentConfigRemovalAck = 56;
+static const long asn_VAL_80_reject = 0;
+static const long asn_VAL_80_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_77_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_77_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_77_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_78_id_E2nodeComponentConfigAdditionAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_78_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigAdditionAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_78_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_79_id_E2nodeComponentConfigUpdateAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_79_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdateAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_79_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_80_id_E2nodeComponentConfigRemovalAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_80_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigRemovalAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_80_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_84_id_TransactionID = 49;
+static const long asn_VAL_84_reject = 0;
+static const long asn_VAL_84_mandatory = 2;
+static const long asn_VAL_85_id_Cause = 1;
+static const long asn_VAL_85_ignore = 1;
+static const long asn_VAL_85_mandatory = 2;
+static const long asn_VAL_86_id_TimeToWait = 31;
+static const long asn_VAL_86_ignore = 1;
+static const long asn_VAL_86_optional = 0;
+static const long asn_VAL_87_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_87_ignore = 1;
+static const long asn_VAL_87_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_84_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_84_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_84_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_85_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_85_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_85_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_86_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_86_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_86_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_87_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_87_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_87_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_88_id_TransactionID = 49;
+static const long asn_VAL_88_reject = 0;
+static const long asn_VAL_88_mandatory = 2;
+static const long asn_VAL_89_id_Cause = 1;
+static const long asn_VAL_89_ignore = 1;
+static const long asn_VAL_89_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_88_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_88_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_88_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_89_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_89_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_89_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = {
+	{ 2, 4, asn_IOS_ResetRequestIEs_1_rows }
+};
+static const long asn_VAL_90_id_TransactionID = 49;
+static const long asn_VAL_90_reject = 0;
+static const long asn_VAL_90_mandatory = 2;
+static const long asn_VAL_91_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_91_ignore = 1;
+static const long asn_VAL_91_optional = 0;
+static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_90_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_90_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_90_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_91_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_91_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_91_optional }
+};
+static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = {
+	{ 2, 4, asn_IOS_ResetResponseIEs_1_rows }
+};
+static const long asn_VAL_95_id_TransactionID = 49;
+static const long asn_VAL_95_reject = 0;
+static const long asn_VAL_95_mandatory = 2;
+static const long asn_VAL_96_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_96_reject = 0;
+static const long asn_VAL_96_optional = 0;
+static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_95_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_95_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_95_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_96_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_96_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_96_optional }
+};
 static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = {
-	{ 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows }
+	{ 2, 4, asn_IOS_RICserviceQuery_IEs_1_rows }
+};
+static const long asn_VAL_97_id_TransactionID = 49;
+static const long asn_VAL_97_reject = 0;
+static const long asn_VAL_97_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2RemovalRequestIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_97_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_97_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_97_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2RemovalRequestIEs_1[] = {
+	{ 1, 4, asn_IOS_E2RemovalRequestIEs_1_rows }
+};
+static const long asn_VAL_98_id_TransactionID = 49;
+static const long asn_VAL_98_reject = 0;
+static const long asn_VAL_98_mandatory = 2;
+static const long asn_VAL_99_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_99_ignore = 1;
+static const long asn_VAL_99_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2RemovalResponseIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_98_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_98_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_98_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_99_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_99_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_99_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2RemovalResponseIEs_1[] = {
+	{ 2, 4, asn_IOS_E2RemovalResponseIEs_1_rows }
+};
+static const long asn_VAL_100_id_TransactionID = 49;
+static const long asn_VAL_100_reject = 0;
+static const long asn_VAL_100_mandatory = 2;
+static const long asn_VAL_101_id_Cause = 1;
+static const long asn_VAL_101_ignore = 1;
+static const long asn_VAL_101_mandatory = 2;
+static const long asn_VAL_102_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_102_ignore = 1;
+static const long asn_VAL_102_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2RemovalFailureIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_100_id_TransactionID },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_100_reject },
+	{ "&Value", aioc__type, &asn_DEF_TransactionID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_100_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_101_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_101_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_101_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_102_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_102_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_102_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2RemovalFailureIEs_1[] = {
+	{ 3, 4, asn_IOS_E2RemovalFailureIEs_1_rows }
 };
 static int
 memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
@@ -1018,13 +1288,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscription_withCause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscription_withCause_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscription_withCause_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1064,13 +1334,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscription_withCause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscription_withCause_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscription_withCause_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1135,13 +1405,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigAddition_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigAddition_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigAddition_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1181,13 +1451,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigAddition_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigAddition_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigAddition_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1252,13 +1522,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigUpdate_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigUpdate_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1298,13 +1568,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigUpdate_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigUpdate_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1369,13 +1639,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigRemoval_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigRemoval_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1415,13 +1685,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigRemoval_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigRemoval_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1486,13 +1756,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeTNLassociationRemoval_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeTNLassociationRemoval_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1532,13 +1802,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeTNLassociationRemoval_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeTNLassociationRemoval_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1603,13 +1873,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigAdditionAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigAdditionAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1649,13 +1919,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigAdditionAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigAdditionAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1720,13 +1990,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigUpdateAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1766,13 +2036,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigUpdateAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1837,13 +2107,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigRemovalAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigRemovalAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1883,13 +2153,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2nodeComponentConfigRemovalAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeComponentConfigRemovalAck_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -1954,13 +2224,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2000,13 +2270,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2071,13 +2341,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2117,13 +2387,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2188,13 +2458,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2234,13 +2504,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2305,13 +2575,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2351,13 +2621,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2422,13 +2692,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2468,13 +2738,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2539,13 +2809,13 @@
 }
 
 static asn_type_selector_result_t
-select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2585,13 +2855,13 @@
 }
 
 static asn_type_selector_result_t
-select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2656,13 +2926,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2702,13 +2972,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2773,13 +3043,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2819,13 +3089,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2890,13 +3160,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -2936,13 +3206,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3007,13 +3277,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequired_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequired_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3053,13 +3323,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICsubscriptionDeleteRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequired_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequired_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3124,13 +3394,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3170,13 +3440,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3241,13 +3511,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3287,13 +3557,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3358,13 +3628,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3404,13 +3674,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3475,13 +3745,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 1; /* &criticality */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3521,13 +3791,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
-	const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1;
+	const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1;
 	size_t constraining_column = 0; /* &id */
 	size_t for_column = 2; /* &Value */
 	size_t row, presence_index = 0;
-	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id));
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id));
 	
 	for(row=0; row < itable->rows_count; row++) {
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
@@ -3592,6 +3862,1059 @@
 }
 
 static asn_type_selector_result_t
+select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2nodeConfigurationUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2nodeConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
 select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
 	asn_type_selector_result_t result = {0, 0};
 	const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1;
@@ -3619,7 +4942,7 @@
 }
 
 static int
-memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_criticality_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	
 	if(!sptr) {
@@ -3665,7 +4988,358 @@
 }
 
 static int
-memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_value_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2RemovalRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2RemovalRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalRequestIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalRequestIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2RemovalResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2RemovalResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalResponseIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalResponseIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_id_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E2RemovalFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalFailureIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalFailureIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_criticality_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E2RemovalFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2RemovalFailureIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2RemovalFailureIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_value_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	
 	if(!sptr) {
@@ -4307,6 +5981,294 @@
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
+static asn_oer_constraints_t asn_OER_memb_id_constr_106 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_106 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_107 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_107 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_108 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_108 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_110 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_110 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_111 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_111 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_112 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_112 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_114 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_114 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_115 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_115 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_116 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_116 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_118 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_118 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_119 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_119 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_120 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_120 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_122 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_122 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_123 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_123 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_124 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_124 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_126 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_126 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_127 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_127 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_128 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_128 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_130 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_130 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_131 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_131 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_132 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_132 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_134 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_134 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_135 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_135 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_136 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_136 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_138 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_138 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_139 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_139 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_140 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_140 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_142 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_142 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_143 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_143 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_144 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_144 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_146 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_146 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_147 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_147 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_148 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_148 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_id_constr_150 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_id_constr_150 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_criticality_constr_151 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_criticality_constr_151 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_value_constr_152 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_value_constr_152 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
 static asn_TYPE_member_t asn_MBR_value_4[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
@@ -4348,8 +6310,8 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_2, &asn_PER_memb_id_constr_2,  memb_id_constraint_1 },
@@ -4357,8 +6319,8 @@
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICaction_ToBeSetup_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
@@ -4366,8 +6328,8 @@
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_4,
 		select_RICaction_ToBeSetup_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
@@ -4379,14 +6341,15 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
 asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = {
 	sizeof(struct RICaction_ToBeSetup_ItemIEs),
 	offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1,
-	2,	/* Count of tags in the map */
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4447,8 +6410,8 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_6, &asn_PER_memb_id_constr_6,  memb_id_constraint_5 },
@@ -4456,8 +6419,8 @@
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICaction_Admitted_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_7, &asn_PER_memb_criticality_constr_7,  memb_criticality_constraint_5 },
@@ -4465,8 +6428,8 @@
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_8,
 		select_RICaction_Admitted_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_8, &asn_PER_memb_value_constr_8,  memb_value_constraint_5 },
@@ -4478,14 +6441,15 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
 asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = {
 	sizeof(struct RICaction_Admitted_ItemIEs),
 	offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5,
-	2,	/* Count of tags in the map */
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4546,8 +6510,8 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_10, &asn_PER_memb_id_constr_10,  memb_id_constraint_9 },
@@ -4555,8 +6519,8 @@
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICaction_NotAdmitted_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_11, &asn_PER_memb_criticality_constr_11,  memb_criticality_constraint_9 },
@@ -4564,8 +6528,8 @@
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_12,
 		select_RICaction_NotAdmitted_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_12, &asn_PER_memb_value_constr_12,  memb_value_constraint_9 },
@@ -4577,14 +6541,15 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
 asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = {
 	sizeof(struct RICaction_NotAdmitted_ItemIEs),
 	offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9,
-	2,	/* Count of tags in the map */
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4605,24 +6570,24 @@
 };
 
 static asn_TYPE_member_t asn_MBR_value_16[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item),
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_ItemIEs__value, choice.RICsubscription_withCause_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunction_Item,
+		&asn_DEF_RICsubscription_withCause_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunction-Item"
+		"RICsubscription-withCause-Item"
 		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICsubscription-withCause-Item */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = {
-	sizeof(struct RANfunction_ItemIEs__value),
-	offsetof(struct RANfunction_ItemIEs__value, _asn_ctx),
-	offsetof(struct RANfunction_ItemIEs__value, present),
-	sizeof(((struct RANfunction_ItemIEs__value *)0)->present),
+	sizeof(struct RICsubscription_withCause_ItemIEs__value),
+	offsetof(struct RICsubscription_withCause_ItemIEs__value, _asn_ctx),
+	offsetof(struct RICsubscription_withCause_ItemIEs__value, present),
+	sizeof(((struct RICsubscription_withCause_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_16,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4643,85 +6608,86 @@
 	&asn_SPC_value_specs_16	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+asn_TYPE_member_t asn_MBR_RICsubscription_withCause_ItemIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_14, &asn_PER_memb_id_constr_14,  memb_id_constraint_13 },
 		0, 0, /* No default value */
 		"id"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
-		select_RANfunction_ItemIEs_criticality_type,
+		select_RICsubscription_withCause_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_15, &asn_PER_memb_criticality_constr_15,  memb_criticality_constraint_13 },
 		0, 0, /* No default value */
 		"criticality"
 		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_16,
-		select_RANfunction_ItemIEs_value_type,
+		select_RICsubscription_withCause_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_16, &asn_PER_memb_value_constr_16,  memb_value_constraint_13 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscription_withCause_ItemIEs_tags_13[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscription_withCause_ItemIEs_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = {
-	sizeof(struct RANfunction_ItemIEs),
-	offsetof(struct RANfunction_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunction_ItemIEs_tag2el_13,
-	2,	/* Count of tags in the map */
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscription_withCause_ItemIEs_specs_13 = {
+	sizeof(struct RICsubscription_withCause_ItemIEs),
+	offsetof(struct RICsubscription_withCause_ItemIEs, _asn_ctx),
+	asn_MAP_RICsubscription_withCause_ItemIEs_tag2el_13,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
-asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = {
-	"RANfunction-ItemIEs",
-	"RANfunction-ItemIEs",
+asn_TYPE_descriptor_t asn_DEF_RICsubscription_withCause_ItemIEs = {
+	"RICsubscription-withCause-ItemIEs",
+	"RICsubscription-withCause-ItemIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RANfunction_ItemIEs_tags_13,
-	sizeof(asn_DEF_RANfunction_ItemIEs_tags_13)
-		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */
-	asn_DEF_RANfunction_ItemIEs_tags_13,	/* Same as above */
-	sizeof(asn_DEF_RANfunction_ItemIEs_tags_13)
-		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */
+	asn_DEF_RICsubscription_withCause_ItemIEs_tags_13,
+	sizeof(asn_DEF_RICsubscription_withCause_ItemIEs_tags_13)
+		/sizeof(asn_DEF_RICsubscription_withCause_ItemIEs_tags_13[0]), /* 1 */
+	asn_DEF_RICsubscription_withCause_ItemIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_RICsubscription_withCause_ItemIEs_tags_13)
+		/sizeof(asn_DEF_RICsubscription_withCause_ItemIEs_tags_13[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunction_ItemIEs_13,
+	asn_MBR_RICsubscription_withCause_ItemIEs_13,
 	3,	/* Elements count */
-	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
+	&asn_SPC_RICsubscription_withCause_ItemIEs_specs_13	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_value_20[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item),
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_ItemIEs__value, choice.E2nodeComponentConfigAddition_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunctionID_Item,
+		&asn_DEF_E2nodeComponentConfigAddition_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunctionID-Item"
+		"E2nodeComponentConfigAddition-Item"
 		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigAddition-Item */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = {
-	sizeof(struct RANfunctionID_ItemIEs__value),
-	offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx),
-	offsetof(struct RANfunctionID_ItemIEs__value, present),
-	sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present),
+	sizeof(struct E2nodeComponentConfigAddition_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigAddition_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigAddition_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigAddition_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_20,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4742,85 +6708,86 @@
 	&asn_SPC_value_specs_20	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAddition_ItemIEs_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_18, &asn_PER_memb_id_constr_18,  memb_id_constraint_17 },
 		0, 0, /* No default value */
 		"id"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
-		select_RANfunctionID_ItemIEs_criticality_type,
+		select_E2nodeComponentConfigAddition_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_19, &asn_PER_memb_criticality_constr_19,  memb_criticality_constraint_17 },
 		0, 0, /* No default value */
 		"criticality"
 		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAddition_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_20,
-		select_RANfunctionID_ItemIEs_value_type,
+		select_E2nodeComponentConfigAddition_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_20, &asn_PER_memb_value_constr_20,  memb_value_constraint_17 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = {
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigAddition_ItemIEs_tag2el_17[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = {
-	sizeof(struct RANfunctionID_ItemIEs),
-	offsetof(struct RANfunctionID_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunctionID_ItemIEs_tag2el_17,
-	2,	/* Count of tags in the map */
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigAddition_ItemIEs_specs_17 = {
+	sizeof(struct E2nodeComponentConfigAddition_ItemIEs),
+	offsetof(struct E2nodeComponentConfigAddition_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigAddition_ItemIEs_tag2el_17,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
-asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = {
-	"RANfunctionID-ItemIEs",
-	"RANfunctionID-ItemIEs",
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAddition_ItemIEs = {
+	"E2nodeComponentConfigAddition-ItemIEs",
+	"E2nodeComponentConfigAddition-ItemIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RANfunctionID_ItemIEs_tags_17,
-	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17)
-		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */
-	asn_DEF_RANfunctionID_ItemIEs_tags_17,	/* Same as above */
-	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17)
-		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17,
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2nodeComponentConfigAddition_ItemIEs_tags_17[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionID_ItemIEs_17,
+	asn_MBR_E2nodeComponentConfigAddition_ItemIEs_17,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+	&asn_SPC_E2nodeComponentConfigAddition_ItemIEs_specs_17	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_value_24[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item),
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs__value, choice.E2nodeComponentConfigUpdate_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunctionIDcause_Item,
+		&asn_DEF_E2nodeComponentConfigUpdate_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunctionIDcause-Item"
+		"E2nodeComponentConfigUpdate-Item"
 		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdate-Item */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = {
-	sizeof(struct RANfunctionIDcause_ItemIEs__value),
-	offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx),
-	offsetof(struct RANfunctionIDcause_ItemIEs__value, present),
-	sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present),
+	sizeof(struct E2nodeComponentConfigUpdate_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigUpdate_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigUpdate_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigUpdate_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_24,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4841,47 +6808,848 @@
 	&asn_SPC_value_specs_24	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_21[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
 		{ &asn_OER_memb_id_constr_22, &asn_PER_memb_id_constr_22,  memb_id_constraint_21 },
 		0, 0, /* No default value */
 		"id"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
-		select_RANfunctionIDcause_ItemIEs_criticality_type,
+		select_E2nodeComponentConfigUpdate_ItemIEs_criticality_type,
 		{ &asn_OER_memb_criticality_constr_23, &asn_PER_memb_criticality_constr_23,  memb_criticality_constraint_21 },
 		0, 0, /* No default value */
 		"criticality"
 		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_24,
-		select_RANfunctionIDcause_ItemIEs_value_type,
+		select_E2nodeComponentConfigUpdate_ItemIEs_value_type,
 		{ &asn_OER_memb_value_constr_24, &asn_PER_memb_value_constr_24,  memb_value_constraint_21 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = {
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdate_ItemIEs_tag2el_21[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_21 = {
+	sizeof(struct E2nodeComponentConfigUpdate_ItemIEs),
+	offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdate_ItemIEs_tag2el_21,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_ItemIEs = {
+	"E2nodeComponentConfigUpdate-ItemIEs",
+	"E2nodeComponentConfigUpdate-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_21	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_28[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_ItemIEs__value, choice.E2nodeComponentConfigRemoval_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigRemoval_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigRemoval-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigRemoval-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = {
+	sizeof(struct E2nodeComponentConfigRemoval_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigRemoval_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigRemoval_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigRemoval_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_28,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_28 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_28,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_28	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemoval_ItemIEs_25[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_26, &asn_PER_memb_id_constr_26,  memb_id_constraint_25 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigRemoval_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_27, &asn_PER_memb_criticality_constr_27,  memb_criticality_constraint_25 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_28,
+		select_E2nodeComponentConfigRemoval_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_28, &asn_PER_memb_value_constr_28,  memb_value_constraint_25 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigRemoval_ItemIEs_tag2el_25[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigRemoval_ItemIEs_specs_25 = {
+	sizeof(struct E2nodeComponentConfigRemoval_ItemIEs),
+	offsetof(struct E2nodeComponentConfigRemoval_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigRemoval_ItemIEs_tag2el_25,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemoval_ItemIEs = {
+	"E2nodeComponentConfigRemoval-ItemIEs",
+	"E2nodeComponentConfigRemoval-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25,
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemoval_ItemIEs_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemoval_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemoval_ItemIEs_specs_25	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_32[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_ItemIEs__value, choice.E2nodeTNLassociationRemoval_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeTNLassociationRemoval_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeTNLassociationRemoval-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeTNLassociationRemoval-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = {
+	sizeof(struct E2nodeTNLassociationRemoval_ItemIEs__value),
+	offsetof(struct E2nodeTNLassociationRemoval_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeTNLassociationRemoval_ItemIEs__value, present),
+	sizeof(((struct E2nodeTNLassociationRemoval_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_32,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_32 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_32,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_32	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeTNLassociationRemoval_ItemIEs_29[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_30, &asn_PER_memb_id_constr_30,  memb_id_constraint_29 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeTNLassociationRemoval_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_31, &asn_PER_memb_criticality_constr_31,  memb_criticality_constraint_29 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_32,
+		select_E2nodeTNLassociationRemoval_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_32, &asn_PER_memb_value_constr_32,  memb_value_constraint_29 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeTNLassociationRemoval_ItemIEs_tag2el_29[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeTNLassociationRemoval_ItemIEs_specs_29 = {
+	sizeof(struct E2nodeTNLassociationRemoval_ItemIEs),
+	offsetof(struct E2nodeTNLassociationRemoval_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeTNLassociationRemoval_ItemIEs_tag2el_29,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeTNLassociationRemoval_ItemIEs = {
+	"E2nodeTNLassociationRemoval-ItemIEs",
+	"E2nodeTNLassociationRemoval-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29,
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29[0]), /* 1 */
+	asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29,	/* Same as above */
+	sizeof(asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29)
+		/sizeof(asn_DEF_E2nodeTNLassociationRemoval_ItemIEs_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeTNLassociationRemoval_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeTNLassociationRemoval_ItemIEs_specs_29	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_36[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs__value, choice.E2nodeComponentConfigAdditionAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigAdditionAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigAdditionAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigAdditionAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = {
+	sizeof(struct E2nodeComponentConfigAdditionAck_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigAdditionAck_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_36,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_36 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_36,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_36	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigAdditionAck_ItemIEs_33[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_34, &asn_PER_memb_id_constr_34,  memb_id_constraint_33 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigAdditionAck_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_35, &asn_PER_memb_criticality_constr_35,  memb_criticality_constraint_33 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_36,
+		select_E2nodeComponentConfigAdditionAck_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_36, &asn_PER_memb_value_constr_36,  memb_value_constraint_33 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigAdditionAck_ItemIEs_tag2el_33[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigAdditionAck_ItemIEs_specs_33 = {
+	sizeof(struct E2nodeComponentConfigAdditionAck_ItemIEs),
+	offsetof(struct E2nodeComponentConfigAdditionAck_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigAdditionAck_ItemIEs_tag2el_33,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs = {
+	"E2nodeComponentConfigAdditionAck-ItemIEs",
+	"E2nodeComponentConfigAdditionAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33,
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33)
+		/sizeof(asn_DEF_E2nodeComponentConfigAdditionAck_ItemIEs_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigAdditionAck_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigAdditionAck_ItemIEs_specs_33	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_40[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs__value, choice.E2nodeComponentConfigUpdateAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigUpdateAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigUpdateAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdateAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigUpdateAck_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_40,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_40 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_40,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_40	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_37[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_38, &asn_PER_memb_id_constr_38,  memb_id_constraint_37 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigUpdateAck_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_39, &asn_PER_memb_criticality_constr_39,  memb_criticality_constraint_37 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_40,
+		select_E2nodeComponentConfigUpdateAck_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_40, &asn_PER_memb_value_constr_40,  memb_value_constraint_37 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateAck_ItemIEs_tag2el_37[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_37 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck_ItemIEs),
+	offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateAck_ItemIEs_tag2el_37,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs = {
+	"E2nodeComponentConfigUpdateAck-ItemIEs",
+	"E2nodeComponentConfigUpdateAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_37	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_44[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs__value, choice.E2nodeComponentConfigRemovalAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigRemovalAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigRemovalAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigRemovalAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = {
+	sizeof(struct E2nodeComponentConfigRemovalAck_ItemIEs__value),
+	offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs__value, present),
+	sizeof(((struct E2nodeComponentConfigRemovalAck_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_44,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_44 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_44,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_44	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigRemovalAck_ItemIEs_41[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_42, &asn_PER_memb_id_constr_42,  memb_id_constraint_41 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigRemovalAck_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_43, &asn_PER_memb_criticality_constr_43,  memb_criticality_constraint_41 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_44,
+		select_E2nodeComponentConfigRemovalAck_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_44, &asn_PER_memb_value_constr_44,  memb_value_constraint_41 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigRemovalAck_ItemIEs_tag2el_41[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigRemovalAck_ItemIEs_specs_41 = {
+	sizeof(struct E2nodeComponentConfigRemovalAck_ItemIEs),
+	offsetof(struct E2nodeComponentConfigRemovalAck_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigRemovalAck_ItemIEs_tag2el_41,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs = {
+	"E2nodeComponentConfigRemovalAck-ItemIEs",
+	"E2nodeComponentConfigRemovalAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41,
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41)
+		/sizeof(asn_DEF_E2nodeComponentConfigRemovalAck_ItemIEs_tags_41[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemovalAck_ItemIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemovalAck_ItemIEs_specs_41	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_48[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANfunction_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunction-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = {
+	sizeof(struct RANfunction_ItemIEs__value),
+	offsetof(struct RANfunction_ItemIEs__value, _asn_ctx),
+	offsetof(struct RANfunction_ItemIEs__value, present),
+	sizeof(((struct RANfunction_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_48,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_48 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_48,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_48	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_45[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_46, &asn_PER_memb_id_constr_46,  memb_id_constraint_45 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_RANfunction_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_47, &asn_PER_memb_criticality_constr_47,  memb_criticality_constraint_45 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_48,
+		select_RANfunction_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_48, &asn_PER_memb_value_constr_48,  memb_value_constraint_45 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_45[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_45 = {
+	sizeof(struct RANfunction_ItemIEs),
+	offsetof(struct RANfunction_ItemIEs, _asn_ctx),
+	asn_MAP_RANfunction_ItemIEs_tag2el_45,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = {
+	"RANfunction-ItemIEs",
+	"RANfunction-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANfunction_ItemIEs_tags_45,
+	sizeof(asn_DEF_RANfunction_ItemIEs_tags_45)
+		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_45[0]), /* 1 */
+	asn_DEF_RANfunction_ItemIEs_tags_45,	/* Same as above */
+	sizeof(asn_DEF_RANfunction_ItemIEs_tags_45)
+		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_45[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunction_ItemIEs_45,
+	3,	/* Elements count */
+	&asn_SPC_RANfunction_ItemIEs_specs_45	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_52[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANfunctionID_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = {
+	sizeof(struct RANfunctionID_ItemIEs__value),
+	offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx),
+	offsetof(struct RANfunctionID_ItemIEs__value, present),
+	sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_52,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_52 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_52,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_52	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_49[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_50, &asn_PER_memb_id_constr_50,  memb_id_constraint_49 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_RANfunctionID_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_51, &asn_PER_memb_criticality_constr_51,  memb_criticality_constraint_49 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_52,
+		select_RANfunctionID_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_52, &asn_PER_memb_value_constr_52,  memb_value_constraint_49 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_49[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_49 = {
+	sizeof(struct RANfunctionID_ItemIEs),
+	offsetof(struct RANfunctionID_ItemIEs, _asn_ctx),
+	asn_MAP_RANfunctionID_ItemIEs_tag2el_49,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = {
+	"RANfunctionID-ItemIEs",
+	"RANfunctionID-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANfunctionID_ItemIEs_tags_49,
+	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_49)
+		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_49[0]), /* 1 */
+	asn_DEF_RANfunctionID_ItemIEs_tags_49,	/* Same as above */
+	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_49)
+		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_49[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionID_ItemIEs_49,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionID_ItemIEs_specs_49	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_56[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANfunctionIDcause_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionIDcause-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = {
+	sizeof(struct RANfunctionIDcause_ItemIEs__value),
+	offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx),
+	offsetof(struct RANfunctionIDcause_ItemIEs__value, present),
+	sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present),
+	asn_MAP_value_tag2el_56,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_56 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_56,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_56	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_53[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_54, &asn_PER_memb_id_constr_54,  memb_id_constraint_53 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_RANfunctionIDcause_ItemIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_55, &asn_PER_memb_criticality_constr_55,  memb_criticality_constraint_53 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_56,
+		select_RANfunctionIDcause_ItemIEs_value_type,
+		{ &asn_OER_memb_value_constr_56, &asn_PER_memb_value_constr_56,  memb_value_constraint_53 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_53[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_53 = {
 	sizeof(struct RANfunctionIDcause_ItemIEs),
 	offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21,
-	2,	/* Count of tags in the map */
+	asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_53,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4889,19 +7657,19 @@
 	"RANfunctionIDcause-ItemIEs",
 	"RANfunctionIDcause-ItemIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RANfunctionIDcause_ItemIEs_tags_21,
-	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21)
-		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */
-	asn_DEF_RANfunctionIDcause_ItemIEs_tags_21,	/* Same as above */
-	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21)
-		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */
+	asn_DEF_RANfunctionIDcause_ItemIEs_tags_53,
+	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_53)
+		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_53[0]), /* 1 */
+	asn_DEF_RANfunctionIDcause_ItemIEs_tags_53,	/* Same as above */
+	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_53)
+		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_53[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionIDcause_ItemIEs_21,
+	asn_MBR_RANfunctionIDcause_ItemIEs_53,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_53	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_28[] = {
+static asn_TYPE_member_t asn_MBR_value_60[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -4930,26 +7698,26 @@
 		"RICsubscriptionDetails"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 };
-static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = {
+static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 0, 2 };
+static const unsigned asn_MAP_value_from_canonical_60[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = {
 	sizeof(struct RICsubscriptionRequest_IEs__value),
 	offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionRequest_IEs__value, present),
 	sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_28,
+	asn_MAP_value_tag2el_60,
 	3,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_28,
-	asn_MAP_value_from_canonical_28,
+	asn_MAP_value_to_canonical_60,
+	asn_MAP_value_from_canonical_60,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_28 = {
+asn_TYPE_descriptor_t asn_DEF_value_60 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -4958,52 +7726,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_28,
+	asn_MBR_value_60,
 	3,	/* Elements count */
-	&asn_SPC_value_specs_28	/* Additional specs */
+	&asn_SPC_value_specs_60	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_57[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_26, &asn_PER_memb_id_constr_26,  memb_id_constraint_25 },
+		{ &asn_OER_memb_id_constr_58, &asn_PER_memb_id_constr_58,  memb_id_constraint_57 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_27, &asn_PER_memb_criticality_constr_27,  memb_criticality_constraint_25 },
+		{ &asn_OER_memb_criticality_constr_59, &asn_PER_memb_criticality_constr_59,  memb_criticality_constraint_57 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_28,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_60,
 		select_RICsubscriptionRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_28, &asn_PER_memb_value_constr_28,  memb_value_constraint_25 },
+		{ &asn_OER_memb_value_constr_60, &asn_PER_memb_value_constr_60,  memb_value_constraint_57 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_57[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_57[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_57 = {
 	sizeof(struct RICsubscriptionRequest_IEs),
 	offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionRequest_IEs_tag2el_25,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionRequest_IEs_tag2el_57,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5011,19 +7780,19 @@
 	"RICsubscriptionRequest-IEs",
 	"RICsubscriptionRequest-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionRequest_IEs_tags_25,
-	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25)
-		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */
-	asn_DEF_RICsubscriptionRequest_IEs_tags_25,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25)
-		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */
+	asn_DEF_RICsubscriptionRequest_IEs_tags_57,
+	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_57)
+		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_57[0]), /* 1 */
+	asn_DEF_RICsubscriptionRequest_IEs_tags_57,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_57)
+		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_57[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionRequest_IEs_25,
+	asn_MBR_RICsubscriptionRequest_IEs_57,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionRequest_IEs_specs_25	/* Additional specs */
+	&asn_SPC_RICsubscriptionRequest_IEs_specs_57	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_32[] = {
+static asn_TYPE_member_t asn_MBR_value_64[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5061,27 +7830,27 @@
 		"RICaction-NotAdmitted-List"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 };
-static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = {
+static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 0, 2, 3 };
+static const unsigned asn_MAP_value_from_canonical_64[] = { 1, 0, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = {
 	sizeof(struct RICsubscriptionResponse_IEs__value),
 	offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionResponse_IEs__value, present),
 	sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_32,
+	asn_MAP_value_tag2el_64,
 	4,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_32,
-	asn_MAP_value_from_canonical_32,
+	asn_MAP_value_to_canonical_64,
+	asn_MAP_value_from_canonical_64,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_32 = {
+asn_TYPE_descriptor_t asn_DEF_value_64 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5090,52 +7859,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_32,
+	asn_MBR_value_64,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_32	/* Additional specs */
+	&asn_SPC_value_specs_64	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_61[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_30, &asn_PER_memb_id_constr_30,  memb_id_constraint_29 },
+		{ &asn_OER_memb_id_constr_62, &asn_PER_memb_id_constr_62,  memb_id_constraint_61 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionResponse_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_31, &asn_PER_memb_criticality_constr_31,  memb_criticality_constraint_29 },
+		{ &asn_OER_memb_criticality_constr_63, &asn_PER_memb_criticality_constr_63,  memb_criticality_constraint_61 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_32,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_64,
 		select_RICsubscriptionResponse_IEs_value_type,
-		{ &asn_OER_memb_value_constr_32, &asn_PER_memb_value_constr_32,  memb_value_constraint_29 },
+		{ &asn_OER_memb_value_constr_64, &asn_PER_memb_value_constr_64,  memb_value_constraint_61 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_61[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_61[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_61 = {
 	sizeof(struct RICsubscriptionResponse_IEs),
 	offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionResponse_IEs_tag2el_29,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionResponse_IEs_tag2el_61,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5143,19 +7913,19 @@
 	"RICsubscriptionResponse-IEs",
 	"RICsubscriptionResponse-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionResponse_IEs_tags_29,
-	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29)
-		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */
-	asn_DEF_RICsubscriptionResponse_IEs_tags_29,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29)
-		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */
+	asn_DEF_RICsubscriptionResponse_IEs_tags_61,
+	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_61)
+		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_61[0]), /* 1 */
+	asn_DEF_RICsubscriptionResponse_IEs_tags_61,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_61)
+		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_61[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionResponse_IEs_29,
+	asn_MBR_RICsubscriptionResponse_IEs_61,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionResponse_IEs_specs_29	/* Additional specs */
+	&asn_SPC_RICsubscriptionResponse_IEs_specs_61	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_36[] = {
+static asn_TYPE_member_t asn_MBR_value_68[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5174,14 +7944,14 @@
 		0, 0, /* No default value */
 		"RANfunctionID"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
-		&asn_DEF_RICaction_NotAdmitted_List,
+		&asn_DEF_Cause,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RICaction-NotAdmitted-List"
+		"Cause"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
@@ -5193,27 +7963,32 @@
 		"CriticalityDiagnostics"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 };
-static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = {
+static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 };
+static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 2, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = {
 	sizeof(struct RICsubscriptionFailure_IEs__value),
 	offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionFailure_IEs__value, present),
 	sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_36,
-	4,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_36,
-	asn_MAP_value_from_canonical_36,
+	asn_MAP_value_tag2el_68,
+	9,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_68,
+	asn_MAP_value_from_canonical_68,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_36 = {
+asn_TYPE_descriptor_t asn_DEF_value_68 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5222,52 +7997,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_36,
+	asn_MBR_value_68,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_36	/* Additional specs */
+	&asn_SPC_value_specs_68	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_65[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_34, &asn_PER_memb_id_constr_34,  memb_id_constraint_33 },
+		{ &asn_OER_memb_id_constr_66, &asn_PER_memb_id_constr_66,  memb_id_constraint_65 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_35, &asn_PER_memb_criticality_constr_35,  memb_criticality_constraint_33 },
+		{ &asn_OER_memb_criticality_constr_67, &asn_PER_memb_criticality_constr_67,  memb_criticality_constraint_65 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_36,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_68,
 		select_RICsubscriptionFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_36, &asn_PER_memb_value_constr_36,  memb_value_constraint_33 },
+		{ &asn_OER_memb_value_constr_68, &asn_PER_memb_value_constr_68,  memb_value_constraint_65 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_65[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_65[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_65 = {
 	sizeof(struct RICsubscriptionFailure_IEs),
 	offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionFailure_IEs_tag2el_33,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionFailure_IEs_tag2el_65,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5275,19 +8051,19 @@
 	"RICsubscriptionFailure-IEs",
 	"RICsubscriptionFailure-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionFailure_IEs_tags_33,
-	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33)
-		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */
-	asn_DEF_RICsubscriptionFailure_IEs_tags_33,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33)
-		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */
+	asn_DEF_RICsubscriptionFailure_IEs_tags_65,
+	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_65)
+		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_65[0]), /* 1 */
+	asn_DEF_RICsubscriptionFailure_IEs_tags_65,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_65)
+		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_65[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionFailure_IEs_33,
+	asn_MBR_RICsubscriptionFailure_IEs_65,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionFailure_IEs_specs_33	/* Additional specs */
+	&asn_SPC_RICsubscriptionFailure_IEs_specs_65	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_40[] = {
+static asn_TYPE_member_t asn_MBR_value_72[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5307,25 +8083,25 @@
 		"RANfunctionID"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 };
-static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = {
+static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 };
+static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = {
 	sizeof(struct RICsubscriptionDeleteRequest_IEs__value),
 	offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present),
 	sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_40,
+	asn_MAP_value_tag2el_72,
 	2,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_40,
-	asn_MAP_value_from_canonical_40,
+	asn_MAP_value_to_canonical_72,
+	asn_MAP_value_from_canonical_72,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_40 = {
+asn_TYPE_descriptor_t asn_DEF_value_72 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5334,52 +8110,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_40,
+	asn_MBR_value_72,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_40	/* Additional specs */
+	&asn_SPC_value_specs_72	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_69[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_38, &asn_PER_memb_id_constr_38,  memb_id_constraint_37 },
+		{ &asn_OER_memb_id_constr_70, &asn_PER_memb_id_constr_70,  memb_id_constraint_69 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_39, &asn_PER_memb_criticality_constr_39,  memb_criticality_constraint_37 },
+		{ &asn_OER_memb_criticality_constr_71, &asn_PER_memb_criticality_constr_71,  memb_criticality_constraint_69 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_40,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_72,
 		select_RICsubscriptionDeleteRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_40, &asn_PER_memb_value_constr_40,  memb_value_constraint_37 },
+		{ &asn_OER_memb_value_constr_72, &asn_PER_memb_value_constr_72,  memb_value_constraint_69 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_69[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_69 = {
 	sizeof(struct RICsubscriptionDeleteRequest_IEs),
 	offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_69,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5387,19 +8164,19 @@
 	"RICsubscriptionDeleteRequest-IEs",
 	"RICsubscriptionDeleteRequest-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37,
-	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37)
-		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */
-	asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37)
-		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69,
+	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_69[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteRequest_IEs_37,
+	asn_MBR_RICsubscriptionDeleteRequest_IEs_69,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_69	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_44[] = {
+static asn_TYPE_member_t asn_MBR_value_76[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5419,25 +8196,25 @@
 		"RANfunctionID"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 };
-static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = {
+static const unsigned asn_MAP_value_to_canonical_76[] = { 1, 0 };
+static const unsigned asn_MAP_value_from_canonical_76[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = {
 	sizeof(struct RICsubscriptionDeleteResponse_IEs__value),
 	offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present),
 	sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_44,
+	asn_MAP_value_tag2el_76,
 	2,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_44,
-	asn_MAP_value_from_canonical_44,
+	asn_MAP_value_to_canonical_76,
+	asn_MAP_value_from_canonical_76,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_44 = {
+asn_TYPE_descriptor_t asn_DEF_value_76 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5446,52 +8223,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_44,
+	asn_MBR_value_76,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_44	/* Additional specs */
+	&asn_SPC_value_specs_76	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_73[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_42, &asn_PER_memb_id_constr_42,  memb_id_constraint_41 },
+		{ &asn_OER_memb_id_constr_74, &asn_PER_memb_id_constr_74,  memb_id_constraint_73 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteResponse_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_43, &asn_PER_memb_criticality_constr_43,  memb_criticality_constraint_41 },
+		{ &asn_OER_memb_criticality_constr_75, &asn_PER_memb_criticality_constr_75,  memb_criticality_constraint_73 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_44,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_76,
 		select_RICsubscriptionDeleteResponse_IEs_value_type,
-		{ &asn_OER_memb_value_constr_44, &asn_PER_memb_value_constr_44,  memb_value_constraint_41 },
+		{ &asn_OER_memb_value_constr_76, &asn_PER_memb_value_constr_76,  memb_value_constraint_73 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_73[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_73 = {
 	sizeof(struct RICsubscriptionDeleteResponse_IEs),
 	offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_73,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5499,19 +8277,19 @@
 	"RICsubscriptionDeleteResponse-IEs",
 	"RICsubscriptionDeleteResponse-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41,
-	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41)
-		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */
-	asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41)
-		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73,
+	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73)
+		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73)
+		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_73[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteResponse_IEs_41,
+	asn_MBR_RICsubscriptionDeleteResponse_IEs_73,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_73	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_48[] = {
+static asn_TYPE_member_t asn_MBR_value_80[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5549,31 +8327,32 @@
 		"CriticalityDiagnostics"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 };
-static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = {
+static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 0, 3, 2 };
+static const unsigned asn_MAP_value_from_canonical_80[] = { 1, 0, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 2, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = {
 	sizeof(struct RICsubscriptionDeleteFailure_IEs__value),
 	offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx),
 	offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present),
 	sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_48,
-	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_48,
-	asn_MAP_value_from_canonical_48,
+	asn_MAP_value_tag2el_80,
+	9,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_80,
+	asn_MAP_value_from_canonical_80,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_48 = {
+asn_TYPE_descriptor_t asn_DEF_value_80 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5582,52 +8361,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_48,
+	asn_MBR_value_80,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_48	/* Additional specs */
+	&asn_SPC_value_specs_80	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_77[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_46, &asn_PER_memb_id_constr_46,  memb_id_constraint_45 },
+		{ &asn_OER_memb_id_constr_78, &asn_PER_memb_id_constr_78,  memb_id_constraint_77 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_47, &asn_PER_memb_criticality_constr_47,  memb_criticality_constraint_45 },
+		{ &asn_OER_memb_criticality_constr_79, &asn_PER_memb_criticality_constr_79,  memb_criticality_constraint_77 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_48,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_80,
 		select_RICsubscriptionDeleteFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_48, &asn_PER_memb_value_constr_48,  memb_value_constraint_45 },
+		{ &asn_OER_memb_value_constr_80, &asn_PER_memb_value_constr_80,  memb_value_constraint_77 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = {
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_77[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_77 = {
 	sizeof(struct RICsubscriptionDeleteFailure_IEs),
 	offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_77,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5635,19 +8415,119 @@
 	"RICsubscriptionDeleteFailure-IEs",
 	"RICsubscriptionDeleteFailure-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45,
-	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45)
-		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */
-	asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45,	/* Same as above */
-	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45)
-		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77,
+	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77)
+		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77)
+		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_77[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteFailure_IEs_45,
+	asn_MBR_RICsubscriptionDeleteFailure_IEs_77,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_77	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_52[] = {
+static asn_TYPE_member_t asn_MBR_value_84[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequired_IEs__value, choice.RICsubscription_List_withCause),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RICsubscription_List_withCause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscription-List-withCause"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICsubscription-List-withCause */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = {
+	sizeof(struct RICsubscriptionDeleteRequired_IEs__value),
+	offsetof(struct RICsubscriptionDeleteRequired_IEs__value, _asn_ctx),
+	offsetof(struct RICsubscriptionDeleteRequired_IEs__value, present),
+	sizeof(((struct RICsubscriptionDeleteRequired_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_84,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_84 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_84,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_84	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequired_IEs_81[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_82, &asn_PER_memb_id_constr_82,  memb_id_constraint_81 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_RICsubscriptionDeleteRequired_IEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_83, &asn_PER_memb_criticality_constr_83,  memb_criticality_constraint_81 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_84,
+		select_RICsubscriptionDeleteRequired_IEs_value_type,
+		{ &asn_OER_memb_value_constr_84, &asn_PER_memb_value_constr_84,  memb_value_constraint_81 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequired_IEs_tag2el_81[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequired_IEs_specs_81 = {
+	sizeof(struct RICsubscriptionDeleteRequired_IEs),
+	offsetof(struct RICsubscriptionDeleteRequired_IEs, _asn_ctx),
+	asn_MAP_RICsubscriptionDeleteRequired_IEs_tag2el_81,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequired_IEs = {
+	"RICsubscriptionDeleteRequired-IEs",
+	"RICsubscriptionDeleteRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81,
+	sizeof(asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequired_IEs_tags_81[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RICsubscriptionDeleteRequired_IEs_81,
+	3,	/* Elements count */
+	&asn_SPC_RICsubscriptionDeleteRequired_IEs_specs_81	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_88[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5721,9 +8601,9 @@
 		"RICcallProcessID"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 };
-static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = {
+static const unsigned asn_MAP_value_to_canonical_88[] = { 1, 2, 3, 5, 6, 7, 4, 0 };
+static const unsigned asn_MAP_value_from_canonical_88[] = { 7, 0, 1, 2, 6, 3, 4, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */
@@ -5733,19 +8613,19 @@
     { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = {
 	sizeof(struct RICindication_IEs__value),
 	offsetof(struct RICindication_IEs__value, _asn_ctx),
 	offsetof(struct RICindication_IEs__value, present),
 	sizeof(((struct RICindication_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_52,
+	asn_MAP_value_tag2el_88,
 	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_52,
-	asn_MAP_value_from_canonical_52,
+	asn_MAP_value_to_canonical_88,
+	asn_MAP_value_from_canonical_88,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_52 = {
+asn_TYPE_descriptor_t asn_DEF_value_88 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5754,52 +8634,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_52,
+	asn_MBR_value_88,
 	8,	/* Elements count */
-	&asn_SPC_value_specs_52	/* Additional specs */
+	&asn_SPC_value_specs_88	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = {
+asn_TYPE_member_t asn_MBR_RICindication_IEs_85[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_50, &asn_PER_memb_id_constr_50,  memb_id_constraint_49 },
+		{ &asn_OER_memb_id_constr_86, &asn_PER_memb_id_constr_86,  memb_id_constraint_85 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICindication_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_51, &asn_PER_memb_criticality_constr_51,  memb_criticality_constraint_49 },
+		{ &asn_OER_memb_criticality_constr_87, &asn_PER_memb_criticality_constr_87,  memb_criticality_constraint_85 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_52,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_88,
 		select_RICindication_IEs_value_type,
-		{ &asn_OER_memb_value_constr_52, &asn_PER_memb_value_constr_52,  memb_value_constraint_49 },
+		{ &asn_OER_memb_value_constr_88, &asn_PER_memb_value_constr_88,  memb_value_constraint_85 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = {
+static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_85[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_85[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_85 = {
 	sizeof(struct RICindication_IEs),
 	offsetof(struct RICindication_IEs, _asn_ctx),
-	asn_MAP_RICindication_IEs_tag2el_49,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICindication_IEs_tag2el_85,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5807,19 +8688,19 @@
 	"RICindication-IEs",
 	"RICindication-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICindication_IEs_tags_49,
-	sizeof(asn_DEF_RICindication_IEs_tags_49)
-		/sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */
-	asn_DEF_RICindication_IEs_tags_49,	/* Same as above */
-	sizeof(asn_DEF_RICindication_IEs_tags_49)
-		/sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */
+	asn_DEF_RICindication_IEs_tags_85,
+	sizeof(asn_DEF_RICindication_IEs_tags_85)
+		/sizeof(asn_DEF_RICindication_IEs_tags_85[0]), /* 1 */
+	asn_DEF_RICindication_IEs_tags_85,	/* Same as above */
+	sizeof(asn_DEF_RICindication_IEs_tags_85)
+		/sizeof(asn_DEF_RICindication_IEs_tags_85[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICindication_IEs_49,
+	asn_MBR_RICindication_IEs_85,
 	3,	/* Elements count */
-	&asn_SPC_RICindication_IEs_specs_49	/* Additional specs */
+	&asn_SPC_RICindication_IEs_specs_85	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_56[] = {
+static asn_TYPE_member_t asn_MBR_value_92[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5875,9 +8756,9 @@
 		"RICcontrolAckRequest"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 };
-static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = {
+static const unsigned asn_MAP_value_to_canonical_92[] = { 1, 2, 3, 4, 5, 0 };
+static const unsigned asn_MAP_value_from_canonical_92[] = { 5, 0, 1, 2, 3, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */
@@ -5885,19 +8766,19 @@
     { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = {
 	sizeof(struct RICcontrolRequest_IEs__value),
 	offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx),
 	offsetof(struct RICcontrolRequest_IEs__value, present),
 	sizeof(((struct RICcontrolRequest_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_56,
+	asn_MAP_value_tag2el_92,
 	6,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_56,
-	asn_MAP_value_from_canonical_56,
+	asn_MAP_value_to_canonical_92,
+	asn_MAP_value_from_canonical_92,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_56 = {
+asn_TYPE_descriptor_t asn_DEF_value_92 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5906,52 +8787,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_56,
+	asn_MBR_value_92,
 	6,	/* Elements count */
-	&asn_SPC_value_specs_56	/* Additional specs */
+	&asn_SPC_value_specs_92	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_89[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_54, &asn_PER_memb_id_constr_54,  memb_id_constraint_53 },
+		{ &asn_OER_memb_id_constr_90, &asn_PER_memb_id_constr_90,  memb_id_constraint_89 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICcontrolRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_55, &asn_PER_memb_criticality_constr_55,  memb_criticality_constraint_53 },
+		{ &asn_OER_memb_criticality_constr_91, &asn_PER_memb_criticality_constr_91,  memb_criticality_constraint_89 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_56,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_92,
 		select_RICcontrolRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_56, &asn_PER_memb_value_constr_56,  memb_value_constraint_53 },
+		{ &asn_OER_memb_value_constr_92, &asn_PER_memb_value_constr_92,  memb_value_constraint_89 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = {
+static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_89[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_89[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_89 = {
 	sizeof(struct RICcontrolRequest_IEs),
 	offsetof(struct RICcontrolRequest_IEs, _asn_ctx),
-	asn_MAP_RICcontrolRequest_IEs_tag2el_53,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICcontrolRequest_IEs_tag2el_89,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5959,19 +8841,19 @@
 	"RICcontrolRequest-IEs",
 	"RICcontrolRequest-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICcontrolRequest_IEs_tags_53,
-	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53)
-		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */
-	asn_DEF_RICcontrolRequest_IEs_tags_53,	/* Same as above */
-	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53)
-		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */
+	asn_DEF_RICcontrolRequest_IEs_tags_89,
+	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_89)
+		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_89[0]), /* 1 */
+	asn_DEF_RICcontrolRequest_IEs_tags_89,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_89)
+		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_89[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolRequest_IEs_53,
+	asn_MBR_RICcontrolRequest_IEs_89,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolRequest_IEs_specs_53	/* Additional specs */
+	&asn_SPC_RICcontrolRequest_IEs_specs_89	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_60[] = {
+static asn_TYPE_member_t asn_MBR_value_96[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5999,15 +8881,6 @@
 		0, 0, /* No default value */
 		"RICcallProcessID"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		&asn_DEF_RICcontrolStatus,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RICcontrolStatus"
-		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome),
 		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
 		0,
@@ -6018,28 +8891,27 @@
 		"RICcontrolOutcome"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 };
-static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = {
+static const unsigned asn_MAP_value_to_canonical_96[] = { 1, 2, 3, 0 };
+static const unsigned asn_MAP_value_from_canonical_96[] = { 3, 0, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 0 }, /* RICcontrolOutcome */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = {
 	sizeof(struct RICcontrolAcknowledge_IEs__value),
 	offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx),
 	offsetof(struct RICcontrolAcknowledge_IEs__value, present),
 	sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_60,
-	5,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_60,
-	asn_MAP_value_from_canonical_60,
+	asn_MAP_value_tag2el_96,
+	4,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_96,
+	asn_MAP_value_from_canonical_96,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_60 = {
+asn_TYPE_descriptor_t asn_DEF_value_96 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6048,52 +8920,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_60,
-	5,	/* Elements count */
-	&asn_SPC_value_specs_60	/* Additional specs */
+	asn_MBR_value_96,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_96	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_93[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_58, &asn_PER_memb_id_constr_58,  memb_id_constraint_57 },
+		{ &asn_OER_memb_id_constr_94, &asn_PER_memb_id_constr_94,  memb_id_constraint_93 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICcontrolAcknowledge_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_59, &asn_PER_memb_criticality_constr_59,  memb_criticality_constraint_57 },
+		{ &asn_OER_memb_criticality_constr_95, &asn_PER_memb_criticality_constr_95,  memb_criticality_constraint_93 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_60,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_96,
 		select_RICcontrolAcknowledge_IEs_value_type,
-		{ &asn_OER_memb_value_constr_60, &asn_PER_memb_value_constr_60,  memb_value_constraint_57 },
+		{ &asn_OER_memb_value_constr_96, &asn_PER_memb_value_constr_96,  memb_value_constraint_93 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = {
+static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_93[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_93[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_93 = {
 	sizeof(struct RICcontrolAcknowledge_IEs),
 	offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx),
-	asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICcontrolAcknowledge_IEs_tag2el_93,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6101,19 +8974,19 @@
 	"RICcontrolAcknowledge-IEs",
 	"RICcontrolAcknowledge-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICcontrolAcknowledge_IEs_tags_57,
-	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57)
-		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */
-	asn_DEF_RICcontrolAcknowledge_IEs_tags_57,	/* Same as above */
-	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57)
-		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */
+	asn_DEF_RICcontrolAcknowledge_IEs_tags_93,
+	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_93)
+		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_93[0]), /* 1 */
+	asn_DEF_RICcontrolAcknowledge_IEs_tags_93,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_93)
+		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_93[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolAcknowledge_IEs_57,
+	asn_MBR_RICcontrolAcknowledge_IEs_93,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolAcknowledge_IEs_specs_57	/* Additional specs */
+	&asn_SPC_RICcontrolAcknowledge_IEs_specs_93	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_64[] = {
+static asn_TYPE_member_t asn_MBR_value_100[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6160,32 +9033,33 @@
 		"RICcontrolOutcome"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 };
-static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = {
+static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 2, 4, 0, 3 };
+static const unsigned asn_MAP_value_from_canonical_100[] = { 3, 0, 1, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 3, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = {
 	sizeof(struct RICcontrolFailure_IEs__value),
 	offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx),
 	offsetof(struct RICcontrolFailure_IEs__value, present),
 	sizeof(((struct RICcontrolFailure_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_64,
-	9,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_64,
-	asn_MAP_value_from_canonical_64,
+	asn_MAP_value_tag2el_100,
+	10,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_100,
+	asn_MAP_value_from_canonical_100,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_64 = {
+asn_TYPE_descriptor_t asn_DEF_value_100 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6194,52 +9068,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_64,
+	asn_MBR_value_100,
 	5,	/* Elements count */
-	&asn_SPC_value_specs_64	/* Additional specs */
+	&asn_SPC_value_specs_100	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_97[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_62, &asn_PER_memb_id_constr_62,  memb_id_constraint_61 },
+		{ &asn_OER_memb_id_constr_98, &asn_PER_memb_id_constr_98,  memb_id_constraint_97 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICcontrolFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_63, &asn_PER_memb_criticality_constr_63,  memb_criticality_constraint_61 },
+		{ &asn_OER_memb_criticality_constr_99, &asn_PER_memb_criticality_constr_99,  memb_criticality_constraint_97 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_64,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_100,
 		select_RICcontrolFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_64, &asn_PER_memb_value_constr_64,  memb_value_constraint_61 },
+		{ &asn_OER_memb_value_constr_100, &asn_PER_memb_value_constr_100,  memb_value_constraint_97 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = {
+static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_97[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_97[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_97 = {
 	sizeof(struct RICcontrolFailure_IEs),
 	offsetof(struct RICcontrolFailure_IEs, _asn_ctx),
-	asn_MAP_RICcontrolFailure_IEs_tag2el_61,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICcontrolFailure_IEs_tag2el_97,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6247,19 +9122,28 @@
 	"RICcontrolFailure-IEs",
 	"RICcontrolFailure-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICcontrolFailure_IEs_tags_61,
-	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61)
-		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */
-	asn_DEF_RICcontrolFailure_IEs_tags_61,	/* Same as above */
-	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61)
-		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */
+	asn_DEF_RICcontrolFailure_IEs_tags_97,
+	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_97)
+		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_97[0]), /* 1 */
+	asn_DEF_RICcontrolFailure_IEs_tags_97,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_97)
+		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_97[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolFailure_IEs_61,
+	asn_MBR_RICcontrolFailure_IEs_97,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolFailure_IEs_specs_61	/* Additional specs */
+	&asn_SPC_RICcontrolFailure_IEs_specs_97	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_68[] = {
+static asn_TYPE_member_t asn_MBR_value_104[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6297,31 +9181,33 @@
 		"CriticalityDiagnostics"
 		},
 };
-static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 };
-static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */
+static const unsigned asn_MAP_value_to_canonical_104[] = { 0, 2, 1, 4, 3 };
+static const unsigned asn_MAP_value_from_canonical_104[] = { 0, 2, 1, 4, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 3, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = {
 	sizeof(struct ErrorIndication_IEs__value),
 	offsetof(struct ErrorIndication_IEs__value, _asn_ctx),
 	offsetof(struct ErrorIndication_IEs__value, present),
 	sizeof(((struct ErrorIndication_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_68,
-	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_68,
-	asn_MAP_value_from_canonical_68,
+	asn_MAP_value_tag2el_104,
+	10,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_104,
+	asn_MAP_value_from_canonical_104,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_68 = {
+asn_TYPE_descriptor_t asn_DEF_value_104 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6330,52 +9216,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_68,
-	4,	/* Elements count */
-	&asn_SPC_value_specs_68	/* Additional specs */
+	asn_MBR_value_104,
+	5,	/* Elements count */
+	&asn_SPC_value_specs_104	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = {
+asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_101[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_66, &asn_PER_memb_id_constr_66,  memb_id_constraint_65 },
+		{ &asn_OER_memb_id_constr_102, &asn_PER_memb_id_constr_102,  memb_id_constraint_101 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_ErrorIndication_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_67, &asn_PER_memb_criticality_constr_67,  memb_criticality_constraint_65 },
+		{ &asn_OER_memb_criticality_constr_103, &asn_PER_memb_criticality_constr_103,  memb_criticality_constraint_101 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_68,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_104,
 		select_ErrorIndication_IEs_value_type,
-		{ &asn_OER_memb_value_constr_68, &asn_PER_memb_value_constr_68,  memb_value_constraint_65 },
+		{ &asn_OER_memb_value_constr_104, &asn_PER_memb_value_constr_104,  memb_value_constraint_101 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = {
+static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_101[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_101[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = {
+asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_101 = {
 	sizeof(struct ErrorIndication_IEs),
 	offsetof(struct ErrorIndication_IEs, _asn_ctx),
-	asn_MAP_ErrorIndication_IEs_tag2el_65,
-	2,	/* Count of tags in the map */
+	asn_MAP_ErrorIndication_IEs_tag2el_101,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6383,19 +9270,28 @@
 	"ErrorIndication-IEs",
 	"ErrorIndication-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ErrorIndication_IEs_tags_65,
-	sizeof(asn_DEF_ErrorIndication_IEs_tags_65)
-		/sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */
-	asn_DEF_ErrorIndication_IEs_tags_65,	/* Same as above */
-	sizeof(asn_DEF_ErrorIndication_IEs_tags_65)
-		/sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */
+	asn_DEF_ErrorIndication_IEs_tags_101,
+	sizeof(asn_DEF_ErrorIndication_IEs_tags_101)
+		/sizeof(asn_DEF_ErrorIndication_IEs_tags_101[0]), /* 1 */
+	asn_DEF_ErrorIndication_IEs_tags_101,	/* Same as above */
+	sizeof(asn_DEF_ErrorIndication_IEs_tags_101)
+		/sizeof(asn_DEF_ErrorIndication_IEs_tags_101[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ErrorIndication_IEs_65,
+	asn_MBR_ErrorIndication_IEs_101,
 	3,	/* Elements count */
-	&asn_SPC_ErrorIndication_IEs_specs_65	/* Additional specs */
+	&asn_SPC_ErrorIndication_IEs_specs_101	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_72[] = {
+static asn_TYPE_member_t asn_MBR_value_108[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6414,29 +9310,40 @@
 		0, 0, /* No default value */
 		"RANfunctions-List"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.E2nodeComponentConfigAddition_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigAddition_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigAddition-List"
+		},
 };
-static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 };
-static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */
+static const unsigned asn_MAP_value_to_canonical_108[] = { 0, 2, 3, 1 };
+static const unsigned asn_MAP_value_from_canonical_108[] = { 0, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_108[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* RANfunctions-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* E2nodeComponentConfigAddition-List */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* ng-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* eNB */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_108 = {
 	sizeof(struct E2setupRequestIEs__value),
 	offsetof(struct E2setupRequestIEs__value, _asn_ctx),
 	offsetof(struct E2setupRequestIEs__value, present),
 	sizeof(((struct E2setupRequestIEs__value *)0)->present),
-	asn_MAP_value_tag2el_72,
-	5,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_72,
-	asn_MAP_value_from_canonical_72,
+	asn_MAP_value_tag2el_108,
+	7,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_108,
+	asn_MAP_value_from_canonical_108,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_72 = {
+asn_TYPE_descriptor_t asn_DEF_value_108 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6445,52 +9352,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_72,
-	2,	/* Elements count */
-	&asn_SPC_value_specs_72	/* Additional specs */
+	asn_MBR_value_108,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_108	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = {
+asn_TYPE_member_t asn_MBR_E2setupRequestIEs_105[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_70, &asn_PER_memb_id_constr_70,  memb_id_constraint_69 },
+		{ &asn_OER_memb_id_constr_106, &asn_PER_memb_id_constr_106,  memb_id_constraint_105 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_E2setupRequestIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_71, &asn_PER_memb_criticality_constr_71,  memb_criticality_constraint_69 },
+		{ &asn_OER_memb_criticality_constr_107, &asn_PER_memb_criticality_constr_107,  memb_criticality_constraint_105 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_72,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_108,
 		select_E2setupRequestIEs_value_type,
-		{ &asn_OER_memb_value_constr_72, &asn_PER_memb_value_constr_72,  memb_value_constraint_69 },
+		{ &asn_OER_memb_value_constr_108, &asn_PER_memb_value_constr_108,  memb_value_constraint_105 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = {
+static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_105[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_105[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_105 = {
 	sizeof(struct E2setupRequestIEs),
 	offsetof(struct E2setupRequestIEs, _asn_ctx),
-	asn_MAP_E2setupRequestIEs_tag2el_69,
-	2,	/* Count of tags in the map */
+	asn_MAP_E2setupRequestIEs_tag2el_105,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6498,19 +9406,28 @@
 	"E2setupRequestIEs",
 	"E2setupRequestIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_E2setupRequestIEs_tags_69,
-	sizeof(asn_DEF_E2setupRequestIEs_tags_69)
-		/sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */
-	asn_DEF_E2setupRequestIEs_tags_69,	/* Same as above */
-	sizeof(asn_DEF_E2setupRequestIEs_tags_69)
-		/sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */
+	asn_DEF_E2setupRequestIEs_tags_105,
+	sizeof(asn_DEF_E2setupRequestIEs_tags_105)
+		/sizeof(asn_DEF_E2setupRequestIEs_tags_105[0]), /* 1 */
+	asn_DEF_E2setupRequestIEs_tags_105,	/* Same as above */
+	sizeof(asn_DEF_E2setupRequestIEs_tags_105)
+		/sizeof(asn_DEF_E2setupRequestIEs_tags_105[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupRequestIEs_69,
+	asn_MBR_E2setupRequestIEs_105,
 	3,	/* Elements count */
-	&asn_SPC_E2setupRequestIEs_specs_69	/* Additional specs */
+	&asn_SPC_E2setupRequestIEs_specs_105	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_76[] = {
+static asn_TYPE_member_t asn_MBR_value_112[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6538,24 +9455,35 @@
 		0, 0, /* No default value */
 		"RANfunctionsIDcause-List"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.E2nodeComponentConfigAdditionAck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigAdditionAck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigAdditionAck-List"
+		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_112[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 3 }, /* GlobalRIC-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 2 }, /* RANfunctionsID-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 1 }, /* RANfunctionsIDcause-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -3, 0 } /* E2nodeComponentConfigAdditionAck-List */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_112 = {
 	sizeof(struct E2setupResponseIEs__value),
 	offsetof(struct E2setupResponseIEs__value, _asn_ctx),
 	offsetof(struct E2setupResponseIEs__value, present),
 	sizeof(((struct E2setupResponseIEs__value *)0)->present),
-	asn_MAP_value_tag2el_76,
-	3,	/* Count of tags in the map */
+	asn_MAP_value_tag2el_112,
+	5,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_76 = {
+asn_TYPE_descriptor_t asn_DEF_value_112 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6564,52 +9492,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_76,
-	3,	/* Elements count */
-	&asn_SPC_value_specs_76	/* Additional specs */
+	asn_MBR_value_112,
+	5,	/* Elements count */
+	&asn_SPC_value_specs_112	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = {
+asn_TYPE_member_t asn_MBR_E2setupResponseIEs_109[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_74, &asn_PER_memb_id_constr_74,  memb_id_constraint_73 },
+		{ &asn_OER_memb_id_constr_110, &asn_PER_memb_id_constr_110,  memb_id_constraint_109 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_E2setupResponseIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_75, &asn_PER_memb_criticality_constr_75,  memb_criticality_constraint_73 },
+		{ &asn_OER_memb_criticality_constr_111, &asn_PER_memb_criticality_constr_111,  memb_criticality_constraint_109 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_76,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_112,
 		select_E2setupResponseIEs_value_type,
-		{ &asn_OER_memb_value_constr_76, &asn_PER_memb_value_constr_76,  memb_value_constraint_73 },
+		{ &asn_OER_memb_value_constr_112, &asn_PER_memb_value_constr_112,  memb_value_constraint_109 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = {
+static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_109[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_109[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_109 = {
 	sizeof(struct E2setupResponseIEs),
 	offsetof(struct E2setupResponseIEs, _asn_ctx),
-	asn_MAP_E2setupResponseIEs_tag2el_73,
-	2,	/* Count of tags in the map */
+	asn_MAP_E2setupResponseIEs_tag2el_109,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6617,19 +9546,28 @@
 	"E2setupResponseIEs",
 	"E2setupResponseIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_E2setupResponseIEs_tags_73,
-	sizeof(asn_DEF_E2setupResponseIEs_tags_73)
-		/sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */
-	asn_DEF_E2setupResponseIEs_tags_73,	/* Same as above */
-	sizeof(asn_DEF_E2setupResponseIEs_tags_73)
-		/sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */
+	asn_DEF_E2setupResponseIEs_tags_109,
+	sizeof(asn_DEF_E2setupResponseIEs_tags_109)
+		/sizeof(asn_DEF_E2setupResponseIEs_tags_109[0]), /* 1 */
+	asn_DEF_E2setupResponseIEs_tags_109,	/* Same as above */
+	sizeof(asn_DEF_E2setupResponseIEs_tags_109)
+		/sizeof(asn_DEF_E2setupResponseIEs_tags_109[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupResponseIEs_73,
+	asn_MBR_E2setupResponseIEs_109,
 	3,	/* Elements count */
-	&asn_SPC_E2setupResponseIEs_specs_73	/* Additional specs */
+	&asn_SPC_E2setupResponseIEs_specs_109	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_80[] = {
+static asn_TYPE_member_t asn_MBR_value_116[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6657,31 +9595,43 @@
 		0, 0, /* No default value */
 		"CriticalityDiagnostics"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TNLinformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_TNLinformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TNLinformation"
+		},
 };
-static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 };
-static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */
+static const unsigned asn_MAP_value_to_canonical_116[] = { 0, 2, 3, 4, 1 };
+static const unsigned asn_MAP_value_from_canonical_116[] = { 0, 4, 1, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_116[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 }, /* TNLinformation */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 1, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_116 = {
 	sizeof(struct E2setupFailureIEs__value),
 	offsetof(struct E2setupFailureIEs__value, _asn_ctx),
 	offsetof(struct E2setupFailureIEs__value, present),
 	sizeof(((struct E2setupFailureIEs__value *)0)->present),
-	asn_MAP_value_tag2el_80,
-	7,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_80,
-	asn_MAP_value_from_canonical_80,
+	asn_MAP_value_tag2el_116,
+	10,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_116,
+	asn_MAP_value_from_canonical_116,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_80 = {
+asn_TYPE_descriptor_t asn_DEF_value_116 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6690,52 +9640,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_80,
-	3,	/* Elements count */
-	&asn_SPC_value_specs_80	/* Additional specs */
+	asn_MBR_value_116,
+	5,	/* Elements count */
+	&asn_SPC_value_specs_116	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = {
+asn_TYPE_member_t asn_MBR_E2setupFailureIEs_113[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_78, &asn_PER_memb_id_constr_78,  memb_id_constraint_77 },
+		{ &asn_OER_memb_id_constr_114, &asn_PER_memb_id_constr_114,  memb_id_constraint_113 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_E2setupFailureIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_79, &asn_PER_memb_criticality_constr_79,  memb_criticality_constraint_77 },
+		{ &asn_OER_memb_criticality_constr_115, &asn_PER_memb_criticality_constr_115,  memb_criticality_constraint_113 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_80,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_116,
 		select_E2setupFailureIEs_value_type,
-		{ &asn_OER_memb_value_constr_80, &asn_PER_memb_value_constr_80,  memb_value_constraint_77 },
+		{ &asn_OER_memb_value_constr_116, &asn_PER_memb_value_constr_116,  memb_value_constraint_113 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = {
+static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_113[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_113[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_113 = {
 	sizeof(struct E2setupFailureIEs),
 	offsetof(struct E2setupFailureIEs, _asn_ctx),
-	asn_MAP_E2setupFailureIEs_tag2el_77,
-	2,	/* Count of tags in the map */
+	asn_MAP_E2setupFailureIEs_tag2el_113,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6743,19 +9694,452 @@
 	"E2setupFailureIEs",
 	"E2setupFailureIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_E2setupFailureIEs_tags_77,
-	sizeof(asn_DEF_E2setupFailureIEs_tags_77)
-		/sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */
-	asn_DEF_E2setupFailureIEs_tags_77,	/* Same as above */
-	sizeof(asn_DEF_E2setupFailureIEs_tags_77)
-		/sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */
+	asn_DEF_E2setupFailureIEs_tags_113,
+	sizeof(asn_DEF_E2setupFailureIEs_tags_113)
+		/sizeof(asn_DEF_E2setupFailureIEs_tags_113[0]), /* 1 */
+	asn_DEF_E2setupFailureIEs_tags_113,	/* Same as above */
+	sizeof(asn_DEF_E2setupFailureIEs_tags_113)
+		/sizeof(asn_DEF_E2setupFailureIEs_tags_113[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupFailureIEs_77,
+	asn_MBR_E2setupFailureIEs_113,
 	3,	/* Elements count */
-	&asn_SPC_E2setupFailureIEs_specs_77	/* Additional specs */
+	&asn_SPC_E2setupFailureIEs_specs_113	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_84[] = {
+static asn_TYPE_member_t asn_MBR_value_120[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.GlobalE2node_ID),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_GlobalE2node_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalE2node-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.E2nodeComponentConfigAddition_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigAddition_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigAddition-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.E2nodeComponentConfigUpdate_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigUpdate_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigUpdate-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.E2nodeComponentConfigRemoval_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigRemoval_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigRemoval-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs__value, choice.E2nodeTNLassociationRemoval_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeTNLassociationRemoval_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeTNLassociationRemoval-List"
+		},
+};
+static const unsigned asn_MAP_value_to_canonical_120[] = { 0, 2, 3, 4, 5, 1 };
+static const unsigned asn_MAP_value_from_canonical_120[] = { 0, 5, 1, 2, 3, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_120[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 3 }, /* E2nodeComponentConfigAddition-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 2 }, /* E2nodeComponentConfigUpdate-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 1 }, /* E2nodeComponentConfigRemoval-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 0 }, /* E2nodeTNLassociationRemoval-List */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* ng-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* eNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_120 = {
+	sizeof(struct E2nodeConfigurationUpdate_IEs__value),
+	offsetof(struct E2nodeConfigurationUpdate_IEs__value, _asn_ctx),
+	offsetof(struct E2nodeConfigurationUpdate_IEs__value, present),
+	sizeof(((struct E2nodeConfigurationUpdate_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_120,
+	9,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_120,
+	asn_MAP_value_from_canonical_120,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_120 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_120,
+	6,	/* Elements count */
+	&asn_SPC_value_specs_120	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdate_IEs_117[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_118, &asn_PER_memb_id_constr_118,  memb_id_constraint_117 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdate_IEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_119, &asn_PER_memb_criticality_constr_119,  memb_criticality_constraint_117 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_120,
+		select_E2nodeConfigurationUpdate_IEs_value_type,
+		{ &asn_OER_memb_value_constr_120, &asn_PER_memb_value_constr_120,  memb_value_constraint_117 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdate_IEs_tag2el_117[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdate_IEs_specs_117 = {
+	sizeof(struct E2nodeConfigurationUpdate_IEs),
+	offsetof(struct E2nodeConfigurationUpdate_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdate_IEs_tag2el_117,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdate_IEs = {
+	"E2nodeConfigurationUpdate-IEs",
+	"E2nodeConfigurationUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117,
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_117[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdate_IEs_117,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdate_IEs_specs_117	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_124[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, choice.E2nodeComponentConfigAdditionAck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigAdditionAck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigAdditionAck-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, choice.E2nodeComponentConfigUpdateAck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigUpdateAck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigUpdateAck-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, choice.E2nodeComponentConfigRemovalAck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigRemovalAck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigRemovalAck-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_124[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 2 }, /* E2nodeComponentConfigAdditionAck-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* E2nodeComponentConfigUpdateAck-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* E2nodeComponentConfigRemovalAck-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_124 = {
+	sizeof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value),
+	offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs__value, present),
+	sizeof(((struct E2nodeConfigurationUpdateAcknowledge_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_124,
+	4,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_124 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_124,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_124	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateAcknowledge_IEs_121[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_122, &asn_PER_memb_id_constr_122,  memb_id_constraint_121 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdateAcknowledge_IEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_123, &asn_PER_memb_criticality_constr_123,  memb_criticality_constraint_121 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_124,
+		select_E2nodeConfigurationUpdateAcknowledge_IEs_value_type,
+		{ &asn_OER_memb_value_constr_124, &asn_PER_memb_value_constr_124,  memb_value_constraint_121 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateAcknowledge_IEs_tag2el_121[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateAcknowledge_IEs_specs_121 = {
+	sizeof(struct E2nodeConfigurationUpdateAcknowledge_IEs),
+	offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateAcknowledge_IEs_tag2el_121,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs = {
+	"E2nodeConfigurationUpdateAcknowledge-IEs",
+	"E2nodeConfigurationUpdateAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_121[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateAcknowledge_IEs_121,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateAcknowledge_IEs_specs_121	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_128[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_value_to_canonical_128[] = { 0, 2, 3, 1 };
+static const unsigned asn_MAP_value_from_canonical_128[] = { 0, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_128[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_128 = {
+	sizeof(struct E2nodeConfigurationUpdateFailure_IEs__value),
+	offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2nodeConfigurationUpdateFailure_IEs__value, present),
+	sizeof(((struct E2nodeConfigurationUpdateFailure_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_128,
+	9,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_128,
+	asn_MAP_value_from_canonical_128,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_128 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_128,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_128	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateFailure_IEs_125[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_126, &asn_PER_memb_id_constr_126,  memb_id_constraint_125 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdateFailure_IEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_127, &asn_PER_memb_criticality_constr_127,  memb_criticality_constraint_125 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_128,
+		select_E2nodeConfigurationUpdateFailure_IEs_value_type,
+		{ &asn_OER_memb_value_constr_128, &asn_PER_memb_value_constr_128,  memb_value_constraint_125 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateFailure_IEs_tag2el_125[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateFailure_IEs_specs_125 = {
+	sizeof(struct E2nodeConfigurationUpdateFailure_IEs),
+	offsetof(struct E2nodeConfigurationUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateFailure_IEs_tag2el_125,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateFailure_IEs = {
+	"E2nodeConfigurationUpdateFailure-IEs",
+	"E2nodeConfigurationUpdateFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_125[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateFailure_IEs_125,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateFailure_IEs_specs_125	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_132[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6766,25 +10150,27 @@
 		"Cause"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_132[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 1, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_132 = {
 	sizeof(struct ResetRequestIEs__value),
 	offsetof(struct ResetRequestIEs__value, _asn_ctx),
 	offsetof(struct ResetRequestIEs__value, present),
 	sizeof(((struct ResetRequestIEs__value *)0)->present),
-	asn_MAP_value_tag2el_84,
-	5,	/* Count of tags in the map */
+	asn_MAP_value_tag2el_132,
+	7,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_84 = {
+asn_TYPE_descriptor_t asn_DEF_value_132 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6793,52 +10179,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_84,
-	1,	/* Elements count */
-	&asn_SPC_value_specs_84	/* Additional specs */
+	asn_MBR_value_132,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_132	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = {
+asn_TYPE_member_t asn_MBR_ResetRequestIEs_129[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_82, &asn_PER_memb_id_constr_82,  memb_id_constraint_81 },
+		{ &asn_OER_memb_id_constr_130, &asn_PER_memb_id_constr_130,  memb_id_constraint_129 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_ResetRequestIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_83, &asn_PER_memb_criticality_constr_83,  memb_criticality_constraint_81 },
+		{ &asn_OER_memb_criticality_constr_131, &asn_PER_memb_criticality_constr_131,  memb_criticality_constraint_129 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_84,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_132,
 		select_ResetRequestIEs_value_type,
-		{ &asn_OER_memb_value_constr_84, &asn_PER_memb_value_constr_84,  memb_value_constraint_81 },
+		{ &asn_OER_memb_value_constr_132, &asn_PER_memb_value_constr_132,  memb_value_constraint_129 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = {
+static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_129[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_129[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = {
+asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_129 = {
 	sizeof(struct ResetRequestIEs),
 	offsetof(struct ResetRequestIEs, _asn_ctx),
-	asn_MAP_ResetRequestIEs_tag2el_81,
-	2,	/* Count of tags in the map */
+	asn_MAP_ResetRequestIEs_tag2el_129,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6846,19 +10233,28 @@
 	"ResetRequestIEs",
 	"ResetRequestIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ResetRequestIEs_tags_81,
-	sizeof(asn_DEF_ResetRequestIEs_tags_81)
-		/sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */
-	asn_DEF_ResetRequestIEs_tags_81,	/* Same as above */
-	sizeof(asn_DEF_ResetRequestIEs_tags_81)
-		/sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */
+	asn_DEF_ResetRequestIEs_tags_129,
+	sizeof(asn_DEF_ResetRequestIEs_tags_129)
+		/sizeof(asn_DEF_ResetRequestIEs_tags_129[0]), /* 1 */
+	asn_DEF_ResetRequestIEs_tags_129,	/* Same as above */
+	sizeof(asn_DEF_ResetRequestIEs_tags_129)
+		/sizeof(asn_DEF_ResetRequestIEs_tags_129[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResetRequestIEs_81,
+	asn_MBR_ResetRequestIEs_129,
 	3,	/* Elements count */
-	&asn_SPC_ResetRequestIEs_specs_81	/* Additional specs */
+	&asn_SPC_ResetRequestIEs_specs_129	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_88[] = {
+static asn_TYPE_member_t asn_MBR_value_136[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6869,21 +10265,22 @@
 		"CriticalityDiagnostics"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_136[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CriticalityDiagnostics */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_136 = {
 	sizeof(struct ResetResponseIEs__value),
 	offsetof(struct ResetResponseIEs__value, _asn_ctx),
 	offsetof(struct ResetResponseIEs__value, present),
 	sizeof(((struct ResetResponseIEs__value *)0)->present),
-	asn_MAP_value_tag2el_88,
-	1,	/* Count of tags in the map */
+	asn_MAP_value_tag2el_136,
+	2,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_88 = {
+asn_TYPE_descriptor_t asn_DEF_value_136 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6892,52 +10289,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_88,
-	1,	/* Elements count */
-	&asn_SPC_value_specs_88	/* Additional specs */
+	asn_MBR_value_136,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_136	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = {
+asn_TYPE_member_t asn_MBR_ResetResponseIEs_133[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_86, &asn_PER_memb_id_constr_86,  memb_id_constraint_85 },
+		{ &asn_OER_memb_id_constr_134, &asn_PER_memb_id_constr_134,  memb_id_constraint_133 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_ResetResponseIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_87, &asn_PER_memb_criticality_constr_87,  memb_criticality_constraint_85 },
+		{ &asn_OER_memb_criticality_constr_135, &asn_PER_memb_criticality_constr_135,  memb_criticality_constraint_133 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_88,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_136,
 		select_ResetResponseIEs_value_type,
-		{ &asn_OER_memb_value_constr_88, &asn_PER_memb_value_constr_88,  memb_value_constraint_85 },
+		{ &asn_OER_memb_value_constr_136, &asn_PER_memb_value_constr_136,  memb_value_constraint_133 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = {
+static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_133[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_133[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = {
+asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_133 = {
 	sizeof(struct ResetResponseIEs),
 	offsetof(struct ResetResponseIEs, _asn_ctx),
-	asn_MAP_ResetResponseIEs_tag2el_85,
-	2,	/* Count of tags in the map */
+	asn_MAP_ResetResponseIEs_tag2el_133,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6945,359 +10343,28 @@
 	"ResetResponseIEs",
 	"ResetResponseIEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ResetResponseIEs_tags_85,
-	sizeof(asn_DEF_ResetResponseIEs_tags_85)
-		/sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */
-	asn_DEF_ResetResponseIEs_tags_85,	/* Same as above */
-	sizeof(asn_DEF_ResetResponseIEs_tags_85)
-		/sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */
+	asn_DEF_ResetResponseIEs_tags_133,
+	sizeof(asn_DEF_ResetResponseIEs_tags_133)
+		/sizeof(asn_DEF_ResetResponseIEs_tags_133[0]), /* 1 */
+	asn_DEF_ResetResponseIEs_tags_133,	/* Same as above */
+	sizeof(asn_DEF_ResetResponseIEs_tags_133)
+		/sizeof(asn_DEF_ResetResponseIEs_tags_133[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResetResponseIEs_85,
+	asn_MBR_ResetResponseIEs_133,
 	3,	/* Elements count */
-	&asn_SPC_ResetResponseIEs_specs_85	/* Additional specs */
+	&asn_SPC_ResetResponseIEs_specs_133	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_92[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RANfunctions_List,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RANfunctions-List"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RANfunctionsID_List,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RANfunctionsID-List"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */
-};
-static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = {
-	sizeof(struct RICserviceUpdate_IEs__value),
-	offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx),
-	offsetof(struct RICserviceUpdate_IEs__value, present),
-	sizeof(((struct RICserviceUpdate_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_92,
-	2,	/* Count of tags in the map */
-	0, 0,
-	-1	/* Extensions start */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_92 = {
-	"value",
-	"value",
-	&asn_OP_OPEN_TYPE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_92,
-	2,	/* Elements count */
-	&asn_SPC_value_specs_92	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id),
+static asn_TYPE_member_t asn_MBR_value_140[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.TransactionID),
 		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_ID,
-		0,
-		{ &asn_OER_memb_id_constr_90, &asn_PER_memb_id_constr_90,  memb_id_constraint_89 },
-		0, 0, /* No default value */
-		"id"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		&asn_DEF_Criticality,
-		select_RICserviceUpdate_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_91, &asn_PER_memb_criticality_constr_91,  memb_criticality_constraint_89 },
-		0, 0, /* No default value */
-		"criticality"
-		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_92,
-		select_RICserviceUpdate_IEs_value_type,
-		{ &asn_OER_memb_value_constr_92, &asn_PER_memb_value_constr_92,  memb_value_constraint_89 },
-		0, 0, /* No default value */
-		"value"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = {
-	sizeof(struct RICserviceUpdate_IEs),
-	offsetof(struct RICserviceUpdate_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdate_IEs_tag2el_89,
-	2,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	-1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = {
-	"RICserviceUpdate-IEs",
-	"RICserviceUpdate-IEs",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdate_IEs_tags_89,
-	sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89)
-		/sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */
-	asn_DEF_RICserviceUpdate_IEs_tags_89,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89)
-		/sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdate_IEs_89,
-	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdate_IEs_specs_89	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_value_96[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RANfunctionsID_List,
+		&asn_DEF_TransactionID,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunctionsID-List"
+		"TransactionID"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RANfunctionsIDcause_List,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RANfunctionsIDcause-List"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */
-};
-static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = {
-	sizeof(struct RICserviceUpdateAcknowledge_IEs__value),
-	offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx),
-	offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present),
-	sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_96,
-	2,	/* Count of tags in the map */
-	0, 0,
-	-1	/* Extensions start */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_96 = {
-	"value",
-	"value",
-	&asn_OP_OPEN_TYPE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_96,
-	2,	/* Elements count */
-	&asn_SPC_value_specs_96	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		&asn_DEF_ProtocolIE_ID,
-		0,
-		{ &asn_OER_memb_id_constr_94, &asn_PER_memb_id_constr_94,  memb_id_constraint_93 },
-		0, 0, /* No default value */
-		"id"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		&asn_DEF_Criticality,
-		select_RICserviceUpdateAcknowledge_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_95, &asn_PER_memb_criticality_constr_95,  memb_criticality_constraint_93 },
-		0, 0, /* No default value */
-		"criticality"
-		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_96,
-		select_RICserviceUpdateAcknowledge_IEs_value_type,
-		{ &asn_OER_memb_value_constr_96, &asn_PER_memb_value_constr_96,  memb_value_constraint_93 },
-		0, 0, /* No default value */
-		"value"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = {
-	sizeof(struct RICserviceUpdateAcknowledge_IEs),
-	offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93,
-	2,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	-1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = {
-	"RICserviceUpdateAcknowledge-IEs",
-	"RICserviceUpdateAcknowledge-IEs",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93,
-	sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93)
-		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */
-	asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93)
-		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateAcknowledge_IEs_93,
-	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_value_100[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RANfunctionsIDcause_List,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RANfunctionsIDcause-List"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		&asn_DEF_TimeToWait,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"TimeToWait"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_CriticalityDiagnostics,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"CriticalityDiagnostics"
-		},
-};
-static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 };
-static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */
-};
-static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = {
-	sizeof(struct RICserviceUpdateFailure_IEs__value),
-	offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx),
-	offsetof(struct RICserviceUpdateFailure_IEs__value, present),
-	sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_100,
-	3,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_100,
-	asn_MAP_value_from_canonical_100,
-	-1	/* Extensions start */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_100 = {
-	"value",
-	"value",
-	&asn_OP_OPEN_TYPE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_100,
-	3,	/* Elements count */
-	&asn_SPC_value_specs_100	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		&asn_DEF_ProtocolIE_ID,
-		0,
-		{ &asn_OER_memb_id_constr_98, &asn_PER_memb_id_constr_98,  memb_id_constraint_97 },
-		0, 0, /* No default value */
-		"id"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		&asn_DEF_Criticality,
-		select_RICserviceUpdateFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_99, &asn_PER_memb_criticality_constr_99,  memb_criticality_constraint_97 },
-		0, 0, /* No default value */
-		"criticality"
-		},
-	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_100,
-		select_RICserviceUpdateFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_100, &asn_PER_memb_value_constr_100,  memb_value_constraint_97 },
-		0, 0, /* No default value */
-		"value"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = {
-	sizeof(struct RICserviceUpdateFailure_IEs),
-	offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97,
-	2,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	-1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = {
-	"RICserviceUpdateFailure-IEs",
-	"RICserviceUpdateFailure-IEs",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdateFailure_IEs_tags_97,
-	sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97)
-		/sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */
-	asn_DEF_RICserviceUpdateFailure_IEs_tags_97,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97)
-		/sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateFailure_IEs_97,
-	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdateFailure_IEs_specs_97	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_value_104[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -7308,21 +10375,22 @@
 		"RANfunctionsID-List"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_140[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* RANfunctionsID-List */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_140 = {
 	sizeof(struct RICserviceQuery_IEs__value),
 	offsetof(struct RICserviceQuery_IEs__value, _asn_ctx),
 	offsetof(struct RICserviceQuery_IEs__value, present),
 	sizeof(((struct RICserviceQuery_IEs__value *)0)->present),
-	asn_MAP_value_tag2el_104,
-	1,	/* Count of tags in the map */
+	asn_MAP_value_tag2el_140,
+	2,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_104 = {
+asn_TYPE_descriptor_t asn_DEF_value_140 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -7331,52 +10399,53 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_104,
-	1,	/* Elements count */
-	&asn_SPC_value_specs_104	/* Additional specs */
+	asn_MBR_value_140,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_140	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = {
+asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_137[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id),
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_102, &asn_PER_memb_id_constr_102,  memb_id_constraint_101 },
+		{ &asn_OER_memb_id_constr_138, &asn_PER_memb_id_constr_138,  memb_id_constraint_137 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality),
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_RICserviceQuery_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_103, &asn_PER_memb_criticality_constr_103,  memb_criticality_constraint_101 },
+		{ &asn_OER_memb_criticality_constr_139, &asn_PER_memb_criticality_constr_139,  memb_criticality_constraint_137 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value),
-		-1 /* Ambiguous tag (ANY?) */,
-		0,
-		&asn_DEF_value_104,
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_140,
 		select_RICserviceQuery_IEs_value_type,
-		{ &asn_OER_memb_value_constr_104, &asn_PER_memb_value_constr_104,  memb_value_constraint_101 },
+		{ &asn_OER_memb_value_constr_140, &asn_PER_memb_value_constr_140,  memb_value_constraint_137 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = {
+static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_137[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
-    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */
+static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_137[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
 };
-asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_137 = {
 	sizeof(struct RICserviceQuery_IEs),
 	offsetof(struct RICserviceQuery_IEs, _asn_ctx),
-	asn_MAP_RICserviceQuery_IEs_tag2el_101,
-	2,	/* Count of tags in the map */
+	asn_MAP_RICserviceQuery_IEs_tag2el_137,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -7384,15 +10453,353 @@
 	"RICserviceQuery-IEs",
 	"RICserviceQuery-IEs",
 	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceQuery_IEs_tags_101,
-	sizeof(asn_DEF_RICserviceQuery_IEs_tags_101)
-		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */
-	asn_DEF_RICserviceQuery_IEs_tags_101,	/* Same as above */
-	sizeof(asn_DEF_RICserviceQuery_IEs_tags_101)
-		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */
+	asn_DEF_RICserviceQuery_IEs_tags_137,
+	sizeof(asn_DEF_RICserviceQuery_IEs_tags_137)
+		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_137[0]), /* 1 */
+	asn_DEF_RICserviceQuery_IEs_tags_137,	/* Same as above */
+	sizeof(asn_DEF_RICserviceQuery_IEs_tags_137)
+		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_137[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceQuery_IEs_101,
+	asn_MBR_RICserviceQuery_IEs_137,
 	3,	/* Elements count */
-	&asn_SPC_RICserviceQuery_IEs_specs_101	/* Additional specs */
+	&asn_SPC_RICserviceQuery_IEs_specs_137	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_144[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalRequestIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_144[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* TransactionID */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_144 = {
+	sizeof(struct E2RemovalRequestIEs__value),
+	offsetof(struct E2RemovalRequestIEs__value, _asn_ctx),
+	offsetof(struct E2RemovalRequestIEs__value, present),
+	sizeof(((struct E2RemovalRequestIEs__value *)0)->present),
+	asn_MAP_value_tag2el_144,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_144 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_144,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_144	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2RemovalRequestIEs_141[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalRequestIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_142, &asn_PER_memb_id_constr_142,  memb_id_constraint_141 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalRequestIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2RemovalRequestIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_143, &asn_PER_memb_criticality_constr_143,  memb_criticality_constraint_141 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2RemovalRequestIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_144,
+		select_E2RemovalRequestIEs_value_type,
+		{ &asn_OER_memb_value_constr_144, &asn_PER_memb_value_constr_144,  memb_value_constraint_141 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalRequestIEs_tags_141[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalRequestIEs_tag2el_141[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2RemovalRequestIEs_specs_141 = {
+	sizeof(struct E2RemovalRequestIEs),
+	offsetof(struct E2RemovalRequestIEs, _asn_ctx),
+	asn_MAP_E2RemovalRequestIEs_tag2el_141,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalRequestIEs = {
+	"E2RemovalRequestIEs",
+	"E2RemovalRequestIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalRequestIEs_tags_141,
+	sizeof(asn_DEF_E2RemovalRequestIEs_tags_141)
+		/sizeof(asn_DEF_E2RemovalRequestIEs_tags_141[0]), /* 1 */
+	asn_DEF_E2RemovalRequestIEs_tags_141,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalRequestIEs_tags_141)
+		/sizeof(asn_DEF_E2RemovalRequestIEs_tags_141[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalRequestIEs_141,
+	3,	/* Elements count */
+	&asn_SPC_E2RemovalRequestIEs_specs_141	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_148[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponseIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponseIEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_148[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_148 = {
+	sizeof(struct E2RemovalResponseIEs__value),
+	offsetof(struct E2RemovalResponseIEs__value, _asn_ctx),
+	offsetof(struct E2RemovalResponseIEs__value, present),
+	sizeof(((struct E2RemovalResponseIEs__value *)0)->present),
+	asn_MAP_value_tag2el_148,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_148 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_148,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_148	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2RemovalResponseIEs_145[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponseIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_146, &asn_PER_memb_id_constr_146,  memb_id_constraint_145 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponseIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2RemovalResponseIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_147, &asn_PER_memb_criticality_constr_147,  memb_criticality_constraint_145 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2RemovalResponseIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_148,
+		select_E2RemovalResponseIEs_value_type,
+		{ &asn_OER_memb_value_constr_148, &asn_PER_memb_value_constr_148,  memb_value_constraint_145 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalResponseIEs_tags_145[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalResponseIEs_tag2el_145[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2RemovalResponseIEs_specs_145 = {
+	sizeof(struct E2RemovalResponseIEs),
+	offsetof(struct E2RemovalResponseIEs, _asn_ctx),
+	asn_MAP_E2RemovalResponseIEs_tag2el_145,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalResponseIEs = {
+	"E2RemovalResponseIEs",
+	"E2RemovalResponseIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalResponseIEs_tags_145,
+	sizeof(asn_DEF_E2RemovalResponseIEs_tags_145)
+		/sizeof(asn_DEF_E2RemovalResponseIEs_tags_145[0]), /* 1 */
+	asn_DEF_E2RemovalResponseIEs_tags_145,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalResponseIEs_tags_145)
+		/sizeof(asn_DEF_E2RemovalResponseIEs_tags_145[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalResponseIEs_145,
+	3,	/* Elements count */
+	&asn_SPC_E2RemovalResponseIEs_specs_145	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_152[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs__value, choice.TransactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_TransactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_value_to_canonical_152[] = { 0, 2, 1 };
+static const unsigned asn_MAP_value_from_canonical_152[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_152[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* TransactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* ricRequest */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* e2Node */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_152 = {
+	sizeof(struct E2RemovalFailureIEs__value),
+	offsetof(struct E2RemovalFailureIEs__value, _asn_ctx),
+	offsetof(struct E2RemovalFailureIEs__value, present),
+	sizeof(((struct E2RemovalFailureIEs__value *)0)->present),
+	asn_MAP_value_tag2el_152,
+	8,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_152,
+	asn_MAP_value_from_canonical_152,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_152 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_value_152,
+	3,	/* Elements count */
+	&asn_SPC_value_specs_152	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2RemovalFailureIEs_149[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ &asn_OER_memb_id_constr_150, &asn_PER_memb_id_constr_150,  memb_id_constraint_149 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Criticality,
+		select_E2RemovalFailureIEs_criticality_type,
+		{ &asn_OER_memb_criticality_constr_151, &asn_PER_memb_criticality_constr_151,  memb_criticality_constraint_149 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2RemovalFailureIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_value_152,
+		select_E2RemovalFailureIEs_value_type,
+		{ &asn_OER_memb_value_constr_152, &asn_PER_memb_value_constr_152,  memb_value_constraint_149 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2RemovalFailureIEs_tags_149[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2RemovalFailureIEs_tag2el_149[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2RemovalFailureIEs_specs_149 = {
+	sizeof(struct E2RemovalFailureIEs),
+	offsetof(struct E2RemovalFailureIEs, _asn_ctx),
+	asn_MAP_E2RemovalFailureIEs_tag2el_149,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2RemovalFailureIEs = {
+	"E2RemovalFailureIEs",
+	"E2RemovalFailureIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2RemovalFailureIEs_tags_149,
+	sizeof(asn_DEF_E2RemovalFailureIEs_tags_149)
+		/sizeof(asn_DEF_E2RemovalFailureIEs_tags_149[0]), /* 1 */
+	asn_DEF_E2RemovalFailureIEs_tags_149,	/* Same as above */
+	sizeof(asn_DEF_E2RemovalFailureIEs_tags_149)
+		/sizeof(asn_DEF_E2RemovalFailureIEs_tags_149[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2RemovalFailureIEs_149,
+	3,	/* Elements count */
+	&asn_SPC_E2RemovalFailureIEs_specs_149	/* Additional specs */
 };
 
diff --git a/e2ap/lib/ProtocolIE-FieldPair.c b/e2ap/lib/ProtocolIE-FieldPair.c
index fa909ca..3f08748 100644
--- a/e2ap/lib/ProtocolIE-FieldPair.c
+++ b/e2ap/lib/ProtocolIE-FieldPair.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-FieldPair.h"
diff --git a/e2ap/lib/ProtocolIE-ID.c b/e2ap/lib/ProtocolIE-ID.c
index b0e56de..4f18ffd 100644
--- a/e2ap/lib/ProtocolIE-ID.c
+++ b/e2ap/lib/ProtocolIE-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "E2AP-CommonDataTypes-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-ID.h"
diff --git a/e2ap/lib/ProtocolIE-SingleContainer.c b/e2ap/lib/ProtocolIE-SingleContainer.c
index 5b06b80..0954fe0 100644
--- a/e2ap/lib/ProtocolIE-SingleContainer.c
+++ b/e2ap/lib/ProtocolIE-SingleContainer.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-Containers"
- * 	found in "E2AP-Containers-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ProtocolIE-SingleContainer.h"
@@ -20,6 +20,38 @@
  * so here we adjust the DEF accordingly.
  */
 /*
+ * This type is implemented using RICsubscription_withCause_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigAddition_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigUpdate_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigRemoval_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeTNLassociationRemoval_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigAdditionAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigUpdateAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2nodeComponentConfigRemovalAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
  * This type is implemented using RANfunction_ItemIEs,
  * so here we adjust the DEF accordingly.
  */
@@ -31,117 +63,269 @@
  * This type is implemented using RANfunctionIDcause_ItemIEs,
  * so here we adjust the DEF accordingly.
  */
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P0 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P0 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P0_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_RICaction_ToBeSetup_ItemIEs_1,
 	3,	/* Elements count */
 	&asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P1 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P1 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P1_tags_2[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P1_tags_2[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_RICaction_Admitted_ItemIEs_5,
 	3,	/* Elements count */
 	&asn_SPC_RICaction_Admitted_ItemIEs_specs_5	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P2 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P2 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P2_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P2_tags_3[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_RICaction_NotAdmitted_ItemIEs_9,
 	3,	/* Elements count */
 	&asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P3 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P3 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P3_tags_4[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P3_tags_4[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunction_ItemIEs_13,
+	asn_MBR_RICsubscription_withCause_ItemIEs_13,
 	3,	/* Elements count */
-	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
+	&asn_SPC_RICsubscription_withCause_ItemIEs_specs_13	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P4 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P4 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P4_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P4_tags_5[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionID_ItemIEs_17,
+	asn_MBR_E2nodeComponentConfigAddition_ItemIEs_17,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+	&asn_SPC_E2nodeComponentConfigAddition_ItemIEs_specs_17	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_90P5 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P5 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_90P5_tags_6[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P5_tags_6[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionIDcause_ItemIEs_21,
+	asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_21,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+	&asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_21	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P6 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P6_tags_7[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemoval_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemoval_ItemIEs_specs_25	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P7 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P7_tags_8[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeTNLassociationRemoval_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeTNLassociationRemoval_ItemIEs_specs_29	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P8 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P8_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigAdditionAck_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigAdditionAck_ItemIEs_specs_33	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P9 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P9_tags_10[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_37	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P10 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P10_tags_11[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigRemovalAck_ItemIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigRemovalAck_ItemIEs_specs_41	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P11 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P11_tags_12[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunction_ItemIEs_45,
+	3,	/* Elements count */
+	&asn_SPC_RANfunction_ItemIEs_specs_45	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P12 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P12_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionID_ItemIEs_49,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionID_ItemIEs_specs_49	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_188P13 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_188P13_tags_14[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionIDcause_ItemIEs_53,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_53	/* Additional specs */
 };
 
diff --git a/e2ap/lib/RANfunction-Item.c b/e2ap/lib/RANfunction-Item.c
index f80753b..61e1b68 100644
--- a/e2ap/lib/RANfunction-Item.c
+++ b/e2ap/lib/RANfunction-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunction-Item.h"
@@ -35,6 +35,15 @@
 		0, 0, /* No default value */
 		"ranFunctionRevision"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionOID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANfunctionOID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionOID"
+		},
 };
 static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
@@ -42,15 +51,16 @@
 static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunctionRevision */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunctionOID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = {
 	sizeof(struct RANfunction_Item),
 	offsetof(struct RANfunction_Item, _asn_ctx),
 	asn_MAP_RANfunction_Item_tag2el_1,
-	3,	/* Count of tags in the map */
+	4,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
-	3,	/* First extension addition */
+	4,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = {
 	"RANfunction-Item",
@@ -64,7 +74,7 @@
 		/sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_RANfunction_Item_1,
-	3,	/* Elements count */
+	4,	/* Elements count */
 	&asn_SPC_RANfunction_Item_specs_1	/* Additional specs */
 };
 
diff --git a/e2ap/lib/RANfunctionDefinition.c b/e2ap/lib/RANfunctionDefinition.c
index 49c090f..f75adb9 100644
--- a/e2ap/lib/RANfunctionDefinition.c
+++ b/e2ap/lib/RANfunctionDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionDefinition.h"
diff --git a/e2ap/lib/RANfunctionID-Item.c b/e2ap/lib/RANfunctionID-Item.c
index fb2b6fc..b4af182 100644
--- a/e2ap/lib/RANfunctionID-Item.c
+++ b/e2ap/lib/RANfunctionID-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionID-Item.h"
diff --git a/e2ap/lib/RANfunctionID.c b/e2ap/lib/RANfunctionID.c
index d79a9d6..22eeb79 100644
--- a/e2ap/lib/RANfunctionID.c
+++ b/e2ap/lib/RANfunctionID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionID.h"
diff --git a/e2ap/lib/RANfunctionIDcause-Item.c b/e2ap/lib/RANfunctionIDcause-Item.c
index b74eb64..7f1ecf9 100644
--- a/e2ap/lib/RANfunctionIDcause-Item.c
+++ b/e2ap/lib/RANfunctionIDcause-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionIDcause-Item.h"
diff --git a/e2ap/lib/RANfunctionOID.c b/e2ap/lib/RANfunctionOID.c
new file mode 100644
index 0000000..53cc874
--- /dev/null
+++ b/e2ap/lib/RANfunctionOID.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANfunctionOID.h"
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,	/* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,	/* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,	/*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,	/* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,	/*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,	/* pqrstuvwxyz      */
+};
+static const int permitted_alphabet_code2value_1[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122,};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+	const int *table = permitted_alphabet_table_1;
+	/* The underlying type is PrintableString */
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
+	
+	for(; ch < end; ch++) {
+		uint8_t cv = *ch;
+		if(!table[cv]) return -1;
+	}
+	return 0;
+}
+
+int
+RANfunctionOID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const PrintableString_t *st = (const PrintableString_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 1000)
+		 && !check_permitted_alphabet_1(st)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int asn_PER_MAP_RANfunctionOID_1_v2c(unsigned int value) {
+	if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+		return -1;
+	return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_RANfunctionOID_1_c2v(unsigned int code) {
+	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+		return -1;
+	return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using PrintableString,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RANfunctionOID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..MAX)) */};
+asn_per_constraints_t asn_PER_type_RANfunctionOID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1000 }	/* (SIZE(1..1000,...)) */,
+	asn_PER_MAP_RANfunctionOID_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_RANfunctionOID_1_c2v	/* PER code to value map */
+};
+static const ber_tlv_tag_t asn_DEF_RANfunctionOID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RANfunctionOID = {
+	"RANfunctionOID",
+	"RANfunctionOID",
+	&asn_OP_PrintableString,
+	asn_DEF_RANfunctionOID_tags_1,
+	sizeof(asn_DEF_RANfunctionOID_tags_1)
+		/sizeof(asn_DEF_RANfunctionOID_tags_1[0]), /* 1 */
+	asn_DEF_RANfunctionOID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANfunctionOID_tags_1)
+		/sizeof(asn_DEF_RANfunctionOID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RANfunctionOID_constr_1, &asn_PER_type_RANfunctionOID_constr_1, RANfunctionOID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2ap/lib/RANfunctionRevision.c b/e2ap/lib/RANfunctionRevision.c
index 32cc4a5..dd84aaf 100644
--- a/e2ap/lib/RANfunctionRevision.c
+++ b/e2ap/lib/RANfunctionRevision.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionRevision.h"
diff --git a/e2ap/lib/RANfunctions-List.c b/e2ap/lib/RANfunctions-List.c
index cf01054..2d648d3 100644
--- a/e2ap/lib/RANfunctions-List.c
+++ b/e2ap/lib/RANfunctions-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctions-List.h"
@@ -10,17 +10,17 @@
 #include "ProtocolIE-SingleContainer.h"
 static asn_oer_constraints_t asn_OER_type_RANfunctions_List_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
+	-1	/* (SIZE(1..256)) */};
 asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
 asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P3,
+		&asn_DEF_ProtocolIE_SingleContainer_188P11,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RANfunctionsID-List.c b/e2ap/lib/RANfunctionsID-List.c
index b888995..d3712eb 100644
--- a/e2ap/lib/RANfunctionsID-List.c
+++ b/e2ap/lib/RANfunctionsID-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionsID-List.h"
@@ -10,17 +10,17 @@
 #include "ProtocolIE-SingleContainer.h"
 static asn_oer_constraints_t asn_OER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
+	-1	/* (SIZE(1..256)) */};
 asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
 asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P4,
+		&asn_DEF_ProtocolIE_SingleContainer_188P12,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RANfunctionsIDcause-List.c b/e2ap/lib/RANfunctionsIDcause-List.c
index e1ae0d2..5d90502 100644
--- a/e2ap/lib/RANfunctionsIDcause-List.c
+++ b/e2ap/lib/RANfunctionsIDcause-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANfunctionsIDcause-List.h"
@@ -10,17 +10,17 @@
 #include "ProtocolIE-SingleContainer.h"
 static asn_oer_constraints_t asn_OER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
+	-1	/* (SIZE(1..256)) */};
 asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
 asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P5,
+		&asn_DEF_ProtocolIE_SingleContainer_188P13,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICaction-Admitted-Item.c b/e2ap/lib/RICaction-Admitted-Item.c
index 27e741d..cb1efd3 100644
--- a/e2ap/lib/RICaction-Admitted-Item.c
+++ b/e2ap/lib/RICaction-Admitted-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICaction-Admitted-Item.h"
diff --git a/e2ap/lib/RICaction-Admitted-List.c b/e2ap/lib/RICaction-Admitted-List.c
index e9e8a5b..581859d 100644
--- a/e2ap/lib/RICaction-Admitted-List.c
+++ b/e2ap/lib/RICaction-Admitted-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICaction-Admitted-List.h"
@@ -20,7 +20,7 @@
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P1,
+		&asn_DEF_ProtocolIE_SingleContainer_188P1,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICaction-NotAdmitted-Item.c b/e2ap/lib/RICaction-NotAdmitted-Item.c
index 86212ed..5947c32 100644
--- a/e2ap/lib/RICaction-NotAdmitted-Item.c
+++ b/e2ap/lib/RICaction-NotAdmitted-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICaction-NotAdmitted-Item.h"
diff --git a/e2ap/lib/RICaction-NotAdmitted-List.c b/e2ap/lib/RICaction-NotAdmitted-List.c
index 7c7f6e2..fe3e04d 100644
--- a/e2ap/lib/RICaction-NotAdmitted-List.c
+++ b/e2ap/lib/RICaction-NotAdmitted-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICaction-NotAdmitted-List.h"
@@ -20,7 +20,7 @@
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P2,
+		&asn_DEF_ProtocolIE_SingleContainer_188P2,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICaction-ToBeSetup-Item.c b/e2ap/lib/RICaction-ToBeSetup-Item.c
index 1e78073..d597565 100644
--- a/e2ap/lib/RICaction-ToBeSetup-Item.c
+++ b/e2ap/lib/RICaction-ToBeSetup-Item.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICaction-ToBeSetup-Item.h"
diff --git a/e2ap/lib/RICactionDefinition.c b/e2ap/lib/RICactionDefinition.c
index 3f157ba..672f679 100644
--- a/e2ap/lib/RICactionDefinition.c
+++ b/e2ap/lib/RICactionDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICactionDefinition.h"
diff --git a/e2ap/lib/RICactionID.c b/e2ap/lib/RICactionID.c
index 73658f5..e4beeab 100644
--- a/e2ap/lib/RICactionID.c
+++ b/e2ap/lib/RICactionID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICactionID.h"
diff --git a/e2ap/lib/RICactionType.c b/e2ap/lib/RICactionType.c
index bfd33d5..b37a0af 100644
--- a/e2ap/lib/RICactionType.c
+++ b/e2ap/lib/RICactionType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICactionType.h"
diff --git a/e2ap/lib/RICactions-ToBeSetup-List.c b/e2ap/lib/RICactions-ToBeSetup-List.c
index 93905c3..52718f5 100644
--- a/e2ap/lib/RICactions-ToBeSetup-List.c
+++ b/e2ap/lib/RICactions-ToBeSetup-List.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICactions-ToBeSetup-List.h"
@@ -20,7 +20,7 @@
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_90P0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P0,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICcallProcessID.c b/e2ap/lib/RICcallProcessID.c
index fd2d0eb..676490c 100644
--- a/e2ap/lib/RICcallProcessID.c
+++ b/e2ap/lib/RICcallProcessID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcallProcessID.h"
diff --git a/e2ap/lib/RICcontrolAckRequest.c b/e2ap/lib/RICcontrolAckRequest.c
index 1db6bee..d29515d 100644
--- a/e2ap/lib/RICcontrolAckRequest.c
+++ b/e2ap/lib/RICcontrolAckRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolAckRequest.h"
@@ -15,27 +15,25 @@
 	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
 static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = {
 	{ 0,	5,	"noAck" },
-	{ 1,	3,	"ack" },
-	{ 2,	4,	"nAck" }
+	{ 1,	3,	"ack" }
 	/* This list is extensible */
 };
 static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = {
 	1,	/* ack(1) */
-	2,	/* nAck(2) */
 	0	/* noAck(0) */
 	/* This list is extensible */
 };
 const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = {
 	asn_MAP_RICcontrolAckRequest_value2enum_1,	/* "tag" => N; sorted by tag */
 	asn_MAP_RICcontrolAckRequest_enum2value_1,	/* N => "tag"; sorted by N */
-	3,	/* Number of elements in the maps */
-	4,	/* Extensions before this member */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
 	1,	/* Strict enumeration */
 	0,	/* Native long size */
 	0
diff --git a/e2ap/lib/RICcontrolAcknowledge.c b/e2ap/lib/RICcontrolAcknowledge.c
index 85011b6..ba86509 100644
--- a/e2ap/lib/RICcontrolAcknowledge.c
+++ b/e2ap/lib/RICcontrolAcknowledge.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolAcknowledge.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P8,
+		&asn_DEF_ProtocolIE_Container_185P9,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICcontrolFailure.c b/e2ap/lib/RICcontrolFailure.c
index a847f9f..cfcab05 100644
--- a/e2ap/lib/RICcontrolFailure.c
+++ b/e2ap/lib/RICcontrolFailure.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolFailure.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P9,
+		&asn_DEF_ProtocolIE_Container_185P10,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICcontrolHeader.c b/e2ap/lib/RICcontrolHeader.c
index 3accabb..3c5b52d 100644
--- a/e2ap/lib/RICcontrolHeader.c
+++ b/e2ap/lib/RICcontrolHeader.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolHeader.h"
diff --git a/e2ap/lib/RICcontrolMessage.c b/e2ap/lib/RICcontrolMessage.c
index d865706..b2b670f 100644
--- a/e2ap/lib/RICcontrolMessage.c
+++ b/e2ap/lib/RICcontrolMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolMessage.h"
diff --git a/e2ap/lib/RICcontrolOutcome.c b/e2ap/lib/RICcontrolOutcome.c
index 806038d..871d3a5 100644
--- a/e2ap/lib/RICcontrolOutcome.c
+++ b/e2ap/lib/RICcontrolOutcome.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolOutcome.h"
diff --git a/e2ap/lib/RICcontrolRequest.c b/e2ap/lib/RICcontrolRequest.c
index 43a04e2..ed96331 100644
--- a/e2ap/lib/RICcontrolRequest.c
+++ b/e2ap/lib/RICcontrolRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICcontrolRequest.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P7,
+		&asn_DEF_ProtocolIE_Container_185P8,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICcontrolStatus.c b/e2ap/lib/RICcontrolStatus.c
deleted file mode 100644
index d2873fc..0000000
--- a/e2ap/lib/RICcontrolStatus.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
- */
-
-#include "RICcontrolStatus.h"
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RICcontrolStatus_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = {
-	{ 0,	7,	"success" },
-	{ 1,	8,	"rejected" },
-	{ 2,	6,	"failed" }
-	/* This list is extensible */
-};
-static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = {
-	2,	/* failed(2) */
-	1,	/* rejected(1) */
-	0	/* success(0) */
-	/* This list is extensible */
-};
-const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = {
-	asn_MAP_RICcontrolStatus_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_RICcontrolStatus_enum2value_1,	/* N => "tag"; sorted by N */
-	3,	/* Number of elements in the maps */
-	4,	/* Extensions before this member */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = {
-	"RICcontrolStatus",
-	"RICcontrolStatus",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_RICcontrolStatus_tags_1,
-	sizeof(asn_DEF_RICcontrolStatus_tags_1)
-		/sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */
-	asn_DEF_RICcontrolStatus_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RICcontrolStatus_tags_1)
-		/sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICcontrolStatus_constr_1, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint },
-	0, 0,	/* Defined elsewhere */
-	&asn_SPC_RICcontrolStatus_specs_1	/* Additional specs */
-};
-
diff --git a/e2ap/lib/RICeventTriggerDefinition.c b/e2ap/lib/RICeventTriggerDefinition.c
index a13ddbd..7ddc77e 100644
--- a/e2ap/lib/RICeventTriggerDefinition.c
+++ b/e2ap/lib/RICeventTriggerDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICeventTriggerDefinition.h"
diff --git a/e2ap/lib/RICindication.c b/e2ap/lib/RICindication.c
index 5c40aa5..dfa4a62 100644
--- a/e2ap/lib/RICindication.c
+++ b/e2ap/lib/RICindication.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICindication.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P6,
+		&asn_DEF_ProtocolIE_Container_185P7,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICindicationHeader.c b/e2ap/lib/RICindicationHeader.c
index d252382..d5c04c7 100644
--- a/e2ap/lib/RICindicationHeader.c
+++ b/e2ap/lib/RICindicationHeader.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICindicationHeader.h"
diff --git a/e2ap/lib/RICindicationMessage.c b/e2ap/lib/RICindicationMessage.c
index bd0ac0f..d934db4 100644
--- a/e2ap/lib/RICindicationMessage.c
+++ b/e2ap/lib/RICindicationMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICindicationMessage.h"
diff --git a/e2ap/lib/RICindicationSN.c b/e2ap/lib/RICindicationSN.c
index efd2d48..f361be3 100644
--- a/e2ap/lib/RICindicationSN.c
+++ b/e2ap/lib/RICindicationSN.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICindicationSN.h"
diff --git a/e2ap/lib/RICindicationType.c b/e2ap/lib/RICindicationType.c
index 58935bb..3f59b37 100644
--- a/e2ap/lib/RICindicationType.c
+++ b/e2ap/lib/RICindicationType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICindicationType.h"
diff --git a/e2ap/lib/RICrequestID.c b/e2ap/lib/RICrequestID.c
index 1422a31..9c0f3c7 100644
--- a/e2ap/lib/RICrequestID.c
+++ b/e2ap/lib/RICrequestID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICrequestID.h"
diff --git a/e2ap/lib/RICserviceQuery.c b/e2ap/lib/RICserviceQuery.c
index a7d452e..63aa6ea 100644
--- a/e2ap/lib/RICserviceQuery.c
+++ b/e2ap/lib/RICserviceQuery.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICserviceQuery.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P19,
+		&asn_DEF_ProtocolIE_Container_185P20,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICserviceUpdate.c b/e2ap/lib/RICserviceUpdate.c
deleted file mode 100644
index a562e2f..0000000
--- a/e2ap/lib/RICserviceUpdate.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
- */
-
-#include "RICserviceUpdate.h"
-
-static asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P16,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"protocolIEs"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = {
-	sizeof(struct RICserviceUpdate),
-	offsetof(struct RICserviceUpdate, _asn_ctx),
-	asn_MAP_RICserviceUpdate_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = {
-	"RICserviceUpdate",
-	"RICserviceUpdate",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdate_tags_1,
-	sizeof(asn_DEF_RICserviceUpdate_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */
-	asn_DEF_RICserviceUpdate_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdate_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdate_1,
-	1,	/* Elements count */
-	&asn_SPC_RICserviceUpdate_specs_1	/* Additional specs */
-};
-
diff --git a/e2ap/lib/RICserviceUpdateAcknowledge.c b/e2ap/lib/RICserviceUpdateAcknowledge.c
deleted file mode 100644
index 845acb2..0000000
--- a/e2ap/lib/RICserviceUpdateAcknowledge.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
- */
-
-#include "RICserviceUpdateAcknowledge.h"
-
-static asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P17,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"protocolIEs"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = {
-	sizeof(struct RICserviceUpdateAcknowledge),
-	offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx),
-	asn_MAP_RICserviceUpdateAcknowledge_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = {
-	"RICserviceUpdateAcknowledge",
-	"RICserviceUpdateAcknowledge",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdateAcknowledge_tags_1,
-	sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */
-	asn_DEF_RICserviceUpdateAcknowledge_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateAcknowledge_1,
-	1,	/* Elements count */
-	&asn_SPC_RICserviceUpdateAcknowledge_specs_1	/* Additional specs */
-};
-
diff --git a/e2ap/lib/RICserviceUpdateFailure.c b/e2ap/lib/RICserviceUpdateFailure.c
deleted file mode 100644
index f54da69..0000000
--- a/e2ap/lib/RICserviceUpdateFailure.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
- */
-
-#include "RICserviceUpdateFailure.h"
-
-static asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P18,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"protocolIEs"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = {
-	sizeof(struct RICserviceUpdateFailure),
-	offsetof(struct RICserviceUpdateFailure, _asn_ctx),
-	asn_MAP_RICserviceUpdateFailure_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = {
-	"RICserviceUpdateFailure",
-	"RICserviceUpdateFailure",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RICserviceUpdateFailure_tags_1,
-	sizeof(asn_DEF_RICserviceUpdateFailure_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */
-	asn_DEF_RICserviceUpdateFailure_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RICserviceUpdateFailure_tags_1)
-		/sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateFailure_1,
-	1,	/* Elements count */
-	&asn_SPC_RICserviceUpdateFailure_specs_1	/* Additional specs */
-};
-
diff --git a/e2ap/lib/RICsubscription-List-withCause.c b/e2ap/lib/RICsubscription-List-withCause.c
new file mode 100644
index 0000000..7667e5f
--- /dev/null
+++ b/e2ap/lib/RICsubscription-List-withCause.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RICsubscription-List-withCause.h"
+
+#include "ProtocolIE-SingleContainer.h"
+static asn_oer_constraints_t asn_OER_type_RICsubscription_List_withCause_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..4294967295)) */};
+asn_per_constraints_t asn_PER_type_RICsubscription_List_withCause_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_RICsubscription_List_withCause_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_188P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RICsubscription_List_withCause_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_RICsubscription_List_withCause_specs_1 = {
+	sizeof(struct RICsubscription_List_withCause),
+	offsetof(struct RICsubscription_List_withCause, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RICsubscription_List_withCause = {
+	"RICsubscription-List-withCause",
+	"RICsubscription-List-withCause",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_RICsubscription_List_withCause_tags_1,
+	sizeof(asn_DEF_RICsubscription_List_withCause_tags_1)
+		/sizeof(asn_DEF_RICsubscription_List_withCause_tags_1[0]), /* 1 */
+	asn_DEF_RICsubscription_List_withCause_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RICsubscription_List_withCause_tags_1)
+		/sizeof(asn_DEF_RICsubscription_List_withCause_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RICsubscription_List_withCause_constr_1, &asn_PER_type_RICsubscription_List_withCause_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_RICsubscription_List_withCause_1,
+	1,	/* Single element */
+	&asn_SPC_RICsubscription_List_withCause_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/RICsubscription-withCause-Item.c b/e2ap/lib/RICsubscription-withCause-Item.c
new file mode 100644
index 0000000..4d5fcaa
--- /dev/null
+++ b/e2ap/lib/RICsubscription-withCause-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RICsubscription-withCause-Item.h"
+
+asn_TYPE_member_t asn_MBR_RICsubscription_withCause_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_Item, ricRequestID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricRequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_Item, ranFunctionID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscription_withCause_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RICsubscription_withCause_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscription_withCause_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cause */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscription_withCause_Item_specs_1 = {
+	sizeof(struct RICsubscription_withCause_Item),
+	offsetof(struct RICsubscription_withCause_Item, _asn_ctx),
+	asn_MAP_RICsubscription_withCause_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RICsubscription_withCause_Item = {
+	"RICsubscription-withCause-Item",
+	"RICsubscription-withCause-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RICsubscription_withCause_Item_tags_1,
+	sizeof(asn_DEF_RICsubscription_withCause_Item_tags_1)
+		/sizeof(asn_DEF_RICsubscription_withCause_Item_tags_1[0]), /* 1 */
+	asn_DEF_RICsubscription_withCause_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RICsubscription_withCause_Item_tags_1)
+		/sizeof(asn_DEF_RICsubscription_withCause_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RICsubscription_withCause_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RICsubscription_withCause_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/RICsubscriptionDeleteFailure.c b/e2ap/lib/RICsubscriptionDeleteFailure.c
index 88a9836..de13c57 100644
--- a/e2ap/lib/RICsubscriptionDeleteFailure.c
+++ b/e2ap/lib/RICsubscriptionDeleteFailure.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionDeleteFailure.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P5,
+		&asn_DEF_ProtocolIE_Container_185P5,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubscriptionDeleteRequest.c b/e2ap/lib/RICsubscriptionDeleteRequest.c
index 627f516..a16ea24 100644
--- a/e2ap/lib/RICsubscriptionDeleteRequest.c
+++ b/e2ap/lib/RICsubscriptionDeleteRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionDeleteRequest.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P3,
+		&asn_DEF_ProtocolIE_Container_185P3,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubscriptionDeleteRequired.c b/e2ap/lib/RICsubscriptionDeleteRequired.c
new file mode 100644
index 0000000..d5f03b3
--- /dev/null
+++ b/e2ap/lib/RICsubscriptionDeleteRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RICsubscriptionDeleteRequired.h"
+
+static asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_185P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequired_specs_1 = {
+	sizeof(struct RICsubscriptionDeleteRequired),
+	offsetof(struct RICsubscriptionDeleteRequired, _asn_ctx),
+	asn_MAP_RICsubscriptionDeleteRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequired = {
+	"RICsubscriptionDeleteRequired",
+	"RICsubscriptionDeleteRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RICsubscriptionDeleteRequired_tags_1,
+	sizeof(asn_DEF_RICsubscriptionDeleteRequired_tags_1)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequired_tags_1[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteRequired_tags_1)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RICsubscriptionDeleteRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_RICsubscriptionDeleteRequired_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/RICsubscriptionDeleteResponse.c b/e2ap/lib/RICsubscriptionDeleteResponse.c
index fc0f72d..6b8278d 100644
--- a/e2ap/lib/RICsubscriptionDeleteResponse.c
+++ b/e2ap/lib/RICsubscriptionDeleteResponse.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionDeleteResponse.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P4,
+		&asn_DEF_ProtocolIE_Container_185P4,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubscriptionDetails.c b/e2ap/lib/RICsubscriptionDetails.c
index 9033dc2..974ab3e 100644
--- a/e2ap/lib/RICsubscriptionDetails.c
+++ b/e2ap/lib/RICsubscriptionDetails.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionDetails.h"
diff --git a/e2ap/lib/RICsubscriptionFailure.c b/e2ap/lib/RICsubscriptionFailure.c
index f765319..035603c 100644
--- a/e2ap/lib/RICsubscriptionFailure.c
+++ b/e2ap/lib/RICsubscriptionFailure.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionFailure.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P2,
+		&asn_DEF_ProtocolIE_Container_185P2,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubscriptionRequest.c b/e2ap/lib/RICsubscriptionRequest.c
index 46c4fe8..10ced39 100644
--- a/e2ap/lib/RICsubscriptionRequest.c
+++ b/e2ap/lib/RICsubscriptionRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionRequest.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P0,
+		&asn_DEF_ProtocolIE_Container_185P0,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubscriptionResponse.c b/e2ap/lib/RICsubscriptionResponse.c
index 56c92ae..8b615e2 100644
--- a/e2ap/lib/RICsubscriptionResponse.c
+++ b/e2ap/lib/RICsubscriptionResponse.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubscriptionResponse.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P1,
+		&asn_DEF_ProtocolIE_Container_185P1,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/RICsubsequentAction.c b/e2ap/lib/RICsubsequentAction.c
index 8b3248c..4730601 100644
--- a/e2ap/lib/RICsubsequentAction.c
+++ b/e2ap/lib/RICsubsequentAction.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubsequentAction.h"
diff --git a/e2ap/lib/RICsubsequentActionType.c b/e2ap/lib/RICsubsequentActionType.c
index f88a331..a9c8bcf 100644
--- a/e2ap/lib/RICsubsequentActionType.c
+++ b/e2ap/lib/RICsubsequentActionType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICsubsequentActionType.h"
diff --git a/e2ap/lib/RICtimeToWait.c b/e2ap/lib/RICtimeToWait.c
index 94fc184..b7c5574 100644
--- a/e2ap/lib/RICtimeToWait.c
+++ b/e2ap/lib/RICtimeToWait.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RICtimeToWait.h"
@@ -15,57 +15,55 @@
 	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  17 }	/* (0..17,...) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  16 }	/* (0..16,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
 static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = {
-	{ 0,	4,	"zero" },
-	{ 1,	4,	"w1ms" },
-	{ 2,	4,	"w2ms" },
-	{ 3,	4,	"w5ms" },
-	{ 4,	5,	"w10ms" },
-	{ 5,	5,	"w20ms" },
-	{ 6,	5,	"w30ms" },
-	{ 7,	5,	"w40ms" },
-	{ 8,	5,	"w50ms" },
-	{ 9,	6,	"w100ms" },
-	{ 10,	6,	"w200ms" },
-	{ 11,	6,	"w500ms" },
-	{ 12,	3,	"w1s" },
-	{ 13,	3,	"w2s" },
-	{ 14,	3,	"w5s" },
-	{ 15,	4,	"w10s" },
-	{ 16,	4,	"w20s" },
-	{ 17,	4,	"w60s" }
+	{ 0,	4,	"w1ms" },
+	{ 1,	4,	"w2ms" },
+	{ 2,	4,	"w5ms" },
+	{ 3,	5,	"w10ms" },
+	{ 4,	5,	"w20ms" },
+	{ 5,	5,	"w30ms" },
+	{ 6,	5,	"w40ms" },
+	{ 7,	5,	"w50ms" },
+	{ 8,	6,	"w100ms" },
+	{ 9,	6,	"w200ms" },
+	{ 10,	6,	"w500ms" },
+	{ 11,	3,	"w1s" },
+	{ 12,	3,	"w2s" },
+	{ 13,	3,	"w5s" },
+	{ 14,	4,	"w10s" },
+	{ 15,	4,	"w20s" },
+	{ 16,	4,	"w60s" }
 	/* This list is extensible */
 };
 static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = {
-	9,	/* w100ms(9) */
-	4,	/* w10ms(4) */
-	15,	/* w10s(15) */
-	1,	/* w1ms(1) */
-	12,	/* w1s(12) */
-	10,	/* w200ms(10) */
-	5,	/* w20ms(5) */
-	16,	/* w20s(16) */
-	2,	/* w2ms(2) */
-	13,	/* w2s(13) */
-	6,	/* w30ms(6) */
-	7,	/* w40ms(7) */
-	11,	/* w500ms(11) */
-	8,	/* w50ms(8) */
-	3,	/* w5ms(3) */
-	14,	/* w5s(14) */
-	17,	/* w60s(17) */
-	0	/* zero(0) */
+	8,	/* w100ms(8) */
+	3,	/* w10ms(3) */
+	14,	/* w10s(14) */
+	0,	/* w1ms(0) */
+	11,	/* w1s(11) */
+	9,	/* w200ms(9) */
+	4,	/* w20ms(4) */
+	15,	/* w20s(15) */
+	1,	/* w2ms(1) */
+	12,	/* w2s(12) */
+	5,	/* w30ms(5) */
+	6,	/* w40ms(6) */
+	10,	/* w500ms(10) */
+	7,	/* w50ms(7) */
+	2,	/* w5ms(2) */
+	13,	/* w5s(13) */
+	16	/* w60s(16) */
 	/* This list is extensible */
 };
 const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = {
 	asn_MAP_RICtimeToWait_value2enum_1,	/* "tag" => N; sorted by tag */
 	asn_MAP_RICtimeToWait_enum2value_1,	/* N => "tag"; sorted by N */
-	18,	/* Number of elements in the maps */
-	19,	/* Extensions before this member */
+	17,	/* Number of elements in the maps */
+	18,	/* Extensions before this member */
 	1,	/* Strict enumeration */
 	0,	/* Native long size */
 	0
diff --git a/e2ap/lib/ResetRequest.c b/e2ap/lib/ResetRequest.c
index f40779f..fd0d659 100644
--- a/e2ap/lib/ResetRequest.c
+++ b/e2ap/lib/ResetRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ResetRequest.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P14,
+		&asn_DEF_ProtocolIE_Container_185P18,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/ResetResponse.c b/e2ap/lib/ResetResponse.c
index 47c433a..f6eeb56 100644
--- a/e2ap/lib/ResetResponse.c
+++ b/e2ap/lib/ResetResponse.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "E2AP-PDU-Contents-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "ResetResponse.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_87P15,
+		&asn_DEF_ProtocolIE_Container_185P19,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2ap/lib/SuccessfulOutcome.c b/e2ap/lib/SuccessfulOutcome.c
index 7328b32..7a31285 100644
--- a/e2ap/lib/SuccessfulOutcome.c
+++ b/e2ap/lib/SuccessfulOutcome.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "E2AP-PDU-Descriptions-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "SuccessfulOutcome.h"
@@ -11,20 +11,24 @@
 static const long asn_VAL_1_reject = 0;
 static const long asn_VAL_2_id_RICsubscriptionDelete = 9;
 static const long asn_VAL_2_reject = 0;
-static const long asn_VAL_3_id_RICserviceUpdate = 7;
+static const long asn_VAL_3_id_RICcontrol = 4;
 static const long asn_VAL_3_reject = 0;
-static const long asn_VAL_4_id_RICcontrol = 4;
+static const long asn_VAL_4_id_E2setup = 1;
 static const long asn_VAL_4_reject = 0;
-static const long asn_VAL_5_id_E2setup = 1;
+static const long asn_VAL_5_id_E2nodeConfigurationUpdate = 10;
 static const long asn_VAL_5_reject = 0;
 static const long asn_VAL_6_id_Reset = 3;
 static const long asn_VAL_6_reject = 0;
-static const long asn_VAL_7_id_RICindication = 5;
-static const long asn_VAL_7_ignore = 1;
-static const long asn_VAL_8_id_RICserviceQuery = 6;
+static const long asn_VAL_7_id_E2removal = 13;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_RICindication = 5;
 static const long asn_VAL_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_9_id_RICserviceQuery = 6;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_ErrorIndication = 2;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_RICsubscriptionDeleteRequired = 12;
+static const long asn_VAL_11_ignore = 1;
 static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse },
@@ -36,44 +40,54 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject },
-	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate },
-	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge },
-	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICcontrol },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_E2setup },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2nodeConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2nodeConfigurationUpdate },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse },
 	{ "&UnsuccessfulOutcome",  },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2removal },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICindication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_ErrorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequired },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_RICsubscriptionDeleteRequired },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }
 };
 static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = {
-	{ 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+	{ 11, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
 };
 static int
 memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
@@ -235,15 +249,6 @@
 		0, 0, /* No default value */
 		"RICsubscriptionDeleteResponse"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdateAcknowledge,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RICserviceUpdateAcknowledge"
-		},
 	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -262,6 +267,15 @@
 		0, 0, /* No default value */
 		"E2setupResponse"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2nodeConfigurationUpdateAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdateAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeConfigurationUpdateAcknowledge"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -271,14 +285,24 @@
 		0, 0, /* No default value */
 		"ResetResponse"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2RemovalResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2RemovalResponse"
+		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 6 }, /* RICsubscriptionResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 5 }, /* RICsubscriptionDeleteResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 4 }, /* RICcontrolAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 3 }, /* E2setupResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 2 }, /* E2nodeConfigurationUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 1 }, /* ResetResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 0 } /* E2RemovalResponse */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct SuccessfulOutcome__value),
@@ -286,7 +310,7 @@
 	offsetof(struct SuccessfulOutcome__value, present),
 	sizeof(((struct SuccessfulOutcome__value *)0)->present),
 	asn_MAP_value_tag2el_4,
-	6,	/* Count of tags in the map */
+	7,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
@@ -301,7 +325,7 @@
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
 	asn_MBR_value_4,
-	6,	/* Elements count */
+	7,	/* Elements count */
 	&asn_SPC_value_specs_4	/* Additional specs */
 };
 
diff --git a/e2ap/lib/TNLinformation.c b/e2ap/lib/TNLinformation.c
new file mode 100644
index 0000000..4fcb86f
--- /dev/null
+++ b/e2ap/lib/TNLinformation.c
@@ -0,0 +1,140 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TNLinformation.h"
+
+static int
+memb_tnlAddress_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 160)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_tnlPort_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_tnlAddress_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..MAX)) */};
+static asn_per_constraints_t asn_PER_memb_tnlAddress_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  160 }	/* (SIZE(1..160,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_tnlPort_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	16	/* (SIZE(16..16)) */};
+static asn_per_constraints_t asn_PER_memb_tnlPort_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  16,  16 }	/* (SIZE(16..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_TNLinformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct TNLinformation, tnlAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_tnlAddress_constr_2, &asn_PER_memb_tnlAddress_constr_2,  memb_tnlAddress_constraint_1 },
+		0, 0, /* No default value */
+		"tnlAddress"
+		},
+	{ ATF_POINTER, 1, offsetof(struct TNLinformation, tnlPort),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_tnlPort_constr_3, &asn_PER_memb_tnlPort_constr_3,  memb_tnlPort_constraint_1 },
+		0, 0, /* No default value */
+		"tnlPort"
+		},
+};
+static const int asn_MAP_TNLinformation_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_TNLinformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TNLinformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tnlAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tnlPort */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TNLinformation_specs_1 = {
+	sizeof(struct TNLinformation),
+	offsetof(struct TNLinformation, _asn_ctx),
+	asn_MAP_TNLinformation_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_TNLinformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_TNLinformation = {
+	"TNLinformation",
+	"TNLinformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_TNLinformation_tags_1,
+	sizeof(asn_DEF_TNLinformation_tags_1)
+		/sizeof(asn_DEF_TNLinformation_tags_1[0]), /* 1 */
+	asn_DEF_TNLinformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TNLinformation_tags_1)
+		/sizeof(asn_DEF_TNLinformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_TNLinformation_1,
+	2,	/* Elements count */
+	&asn_SPC_TNLinformation_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/TNLusage.c b/e2ap/lib/TNLusage.c
new file mode 100644
index 0000000..f26200a
--- /dev/null
+++ b/e2ap/lib/TNLusage.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TNLusage.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_TNLusage_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_TNLusage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_TNLusage_value2enum_1[] = {
+	{ 0,	11,	"ric-service" },
+	{ 1,	16,	"support-function" },
+	{ 2,	4,	"both" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_TNLusage_enum2value_1[] = {
+	2,	/* both(2) */
+	0,	/* ric-service(0) */
+	1	/* support-function(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_TNLusage_specs_1 = {
+	asn_MAP_TNLusage_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_TNLusage_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_TNLusage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_TNLusage = {
+	"TNLusage",
+	"TNLusage",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_TNLusage_tags_1,
+	sizeof(asn_DEF_TNLusage_tags_1)
+		/sizeof(asn_DEF_TNLusage_tags_1[0]), /* 1 */
+	asn_DEF_TNLusage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TNLusage_tags_1)
+		/sizeof(asn_DEF_TNLusage_tags_1[0]), /* 1 */
+	{ &asn_OER_type_TNLusage_constr_1, &asn_PER_type_TNLusage_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_TNLusage_specs_1	/* Additional specs */
+};
+
diff --git a/e2ap/lib/TimeToWait.c b/e2ap/lib/TimeToWait.c
index a969d55..4c82197 100644
--- a/e2ap/lib/TimeToWait.c
+++ b/e2ap/lib/TimeToWait.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "TimeToWait.h"
diff --git a/e2ap/lib/TransactionID.c b/e2ap/lib/TransactionID.c
new file mode 100644
index 0000000..88af0a2
--- /dev/null
+++ b/e2ap/lib/TransactionID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TransactionID.h"
+
+int
+TransactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_TransactionID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_TransactionID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  0,  255 }	/* (0..255,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_TransactionID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_TransactionID = {
+	"TransactionID",
+	"TransactionID",
+	&asn_OP_NativeInteger,
+	asn_DEF_TransactionID_tags_1,
+	sizeof(asn_DEF_TransactionID_tags_1)
+		/sizeof(asn_DEF_TransactionID_tags_1[0]), /* 1 */
+	asn_DEF_TransactionID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TransactionID_tags_1)
+		/sizeof(asn_DEF_TransactionID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_TransactionID_constr_1, &asn_PER_type_TransactionID_constr_1, TransactionID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2ap/lib/TriggeringMessage.c b/e2ap/lib/TriggeringMessage.c
index 7d1dbe8..bffc17b 100644
--- a/e2ap/lib/TriggeringMessage.c
+++ b/e2ap/lib/TriggeringMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "E2AP-CommonDataTypes-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "TriggeringMessage.h"
diff --git a/e2ap/lib/TypeOfError.c b/e2ap/lib/TypeOfError.c
index e37ab6b..dca810d 100644
--- a/e2ap/lib/TypeOfError.c
+++ b/e2ap/lib/TypeOfError.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-IEs"
- * 	found in "E2AP-IEs-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "TypeOfError.h"
diff --git a/e2ap/lib/UnsuccessfulOutcome.c b/e2ap/lib/UnsuccessfulOutcome.c
index 5c85aa8..2bd4abf 100644
--- a/e2ap/lib/UnsuccessfulOutcome.c
+++ b/e2ap/lib/UnsuccessfulOutcome.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "E2AP-PDU-Descriptions-v01.00.asn"
- * 	`asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
+ * From ASN.1 module "E2AP-CommonDataTypes"
+ * 	found in "e2ap.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "UnsuccessfulOutcome.h"
@@ -11,20 +11,24 @@
 static const long asn_VAL_1_reject = 0;
 static const long asn_VAL_2_id_RICsubscriptionDelete = 9;
 static const long asn_VAL_2_reject = 0;
-static const long asn_VAL_3_id_RICserviceUpdate = 7;
+static const long asn_VAL_3_id_RICcontrol = 4;
 static const long asn_VAL_3_reject = 0;
-static const long asn_VAL_4_id_RICcontrol = 4;
+static const long asn_VAL_4_id_E2setup = 1;
 static const long asn_VAL_4_reject = 0;
-static const long asn_VAL_5_id_E2setup = 1;
+static const long asn_VAL_5_id_E2nodeConfigurationUpdate = 10;
 static const long asn_VAL_5_reject = 0;
 static const long asn_VAL_6_id_Reset = 3;
 static const long asn_VAL_6_reject = 0;
-static const long asn_VAL_7_id_RICindication = 5;
-static const long asn_VAL_7_ignore = 1;
-static const long asn_VAL_8_id_RICserviceQuery = 6;
+static const long asn_VAL_7_id_E2removal = 13;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_RICindication = 5;
 static const long asn_VAL_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_9_id_RICserviceQuery = 6;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_ErrorIndication = 2;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_RICsubscriptionDeleteRequired = 12;
+static const long asn_VAL_11_ignore = 1;
 static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse },
@@ -36,44 +40,54 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject },
-	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate },
-	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge },
-	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICcontrol },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse },
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_E2setup },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2nodeConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2nodeConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2nodeConfigurationUpdate },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest },
 	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse },
 	{ "&UnsuccessfulOutcome",  },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2removal },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICindication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore },
 	{ "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication },
 	{ "&SuccessfulOutcome",  },
 	{ "&UnsuccessfulOutcome",  },
-	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_ErrorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequired },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_RICsubscriptionDeleteRequired },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }
 };
 static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = {
-	{ 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+	{ 11, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows }
 };
 static int
 memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
@@ -235,15 +249,6 @@
 		0, 0, /* No default value */
 		"RICsubscriptionDeleteFailure"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure),
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RICserviceUpdateFailure,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"RICserviceUpdateFailure"
-		},
 	{ ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -262,13 +267,32 @@
 		0, 0, /* No default value */
 		"E2setupFailure"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2nodeConfigurationUpdateFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeConfigurationUpdateFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeConfigurationUpdateFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2RemovalFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2RemovalFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2RemovalFailure"
+		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */
-    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICcontrolFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* E2setupFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2nodeConfigurationUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* E2RemovalFailure */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct UnsuccessfulOutcome__value),
@@ -276,7 +300,7 @@
 	offsetof(struct UnsuccessfulOutcome__value, present),
 	sizeof(((struct UnsuccessfulOutcome__value *)0)->present),
 	asn_MAP_value_tag2el_4,
-	5,	/* Count of tags in the map */
+	6,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
@@ -291,7 +315,7 @@
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
 	asn_MBR_value_4,
-	5,	/* Elements count */
+	6,	/* Elements count */
 	&asn_SPC_value_specs_4	/* Additional specs */
 };
 
diff --git a/e2ap/lib/asn_internal.c b/e2ap/lib/asn_internal.c
index 1aff95f..004660b 100644
--- a/e2ap/lib/asn_internal.c
+++ b/e2ap/lib/asn_internal.c
@@ -26,11 +26,12 @@
         buf_size <<= 1;
         if(buf == scratch) {
             buf = MALLOC(buf_size);
-            if(!buf) return -1;
+            if(!buf) { va_end(args); return -1; }
         } else {
             void *p = REALLOC(buf, buf_size);
             if(!p) {
                 FREEMEM(buf);
+		va_end(args);
                 return -1;
             }
             buf = p;
diff --git a/e2ap/lib/asn_random_fill.c b/e2ap/lib/asn_random_fill.c
index eb8ed8f..819cf70 100644
--- a/e2ap/lib/asn_random_fill.c
+++ b/e2ap/lib/asn_random_fill.c
@@ -48,11 +48,7 @@
 
         for(; got_entropy < range;) {
             got_entropy = (got_entropy << 24) | 0xffffff;
-#ifdef WIN32    //MCHECK
-            value = (value << 24) | (rand() % 0xffffff); 
-#else
             value = (value << 24) | (random() % 0xffffff);
-#endif
         }
 
         return lb + (intmax_t)(value % (range + 1));
diff --git a/e2ap/lib/per_support.c b/e2ap/lib/per_support.c
index 2285677..2c87a76 100644
--- a/e2ap/lib/per_support.c
+++ b/e2ap/lib/per_support.c
@@ -310,9 +310,12 @@
 
 	*repeat = 0;
 
-	if (range <= 65536 && range >= 0)
-		return aper_get_nsnnwn(pd, range);
-
+	// First check effective_bits parameter.
+	if (ebits >= 0) {
+	  if (range <= 65536 && range >= 0)
+	    return aper_get_nsnnwn(pd, range);
+	}
+	
 	if (aper_get_align(pd) < 0)
 		return -1;
 
