diff --git a/e2sim/src/ASN1c/Cause.c b/e2sim/src/ASN1c/Cause.c
index 294c0a7..2943b94 100644
--- a/e2sim/src/ASN1c/Cause.c
+++ b/e2sim/src/ASN1c/Cause.c
@@ -1,15 +1,12 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "Cause.h"
 
-static asn_oer_constraints_t asn_OER_type_Cause_constr_1 CC_NOTUSED = {
-	{ 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_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -87,7 +84,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_Cause_constr_1, &asn_PER_type_Cause_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint },
 	asn_MBR_Cause_1,
 	5,	/* Elements count */
 	&asn_SPC_Cause_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/Cause.h b/e2sim/src/ASN1c/Cause.h
index 1c168e7..d4a5362 100644
--- a/e2sim/src/ASN1c/Cause.h
+++ b/e2sim/src/ASN1c/Cause.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_Cause_H_
diff --git a/e2sim/src/ASN1c/CauseMisc.c b/e2sim/src/ASN1c/CauseMisc.c
index 11ade29..01b6dbd 100644
--- a/e2sim/src/ASN1c/CauseMisc.c
+++ b/e2sim/src/ASN1c/CauseMisc.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CauseMisc.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_CauseMisc_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -55,7 +52,7 @@
 	asn_DEF_CauseMisc_tags_1,	/* Same as above */
 	sizeof(asn_DEF_CauseMisc_tags_1)
 		/sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CauseMisc_constr_1, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_CauseMisc_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/CauseMisc.h b/e2sim/src/ASN1c/CauseMisc.h
index 44fb6b9..6432f33 100644
--- a/e2sim/src/ASN1c/CauseMisc.h
+++ b/e2sim/src/ASN1c/CauseMisc.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CauseMisc_H_
@@ -43,8 +43,6 @@
 der_type_encoder_f CauseMisc_encode_der;
 xer_type_decoder_f CauseMisc_decode_xer;
 xer_type_encoder_f CauseMisc_encode_xer;
-oer_type_decoder_f CauseMisc_decode_oer;
-oer_type_encoder_f CauseMisc_encode_oer;
 per_type_decoder_f CauseMisc_decode_uper;
 per_type_encoder_f CauseMisc_encode_uper;
 per_type_decoder_f CauseMisc_decode_aper;
diff --git a/e2sim/src/ASN1c/CauseProtocol.c b/e2sim/src/ASN1c/CauseProtocol.c
index d7d2008..bc0b0da 100644
--- a/e2sim/src/ASN1c/CauseProtocol.c
+++ b/e2sim/src/ASN1c/CauseProtocol.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CauseProtocol.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_CauseProtocol_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -61,7 +58,7 @@
 	asn_DEF_CauseProtocol_tags_1,	/* Same as above */
 	sizeof(asn_DEF_CauseProtocol_tags_1)
 		/sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CauseProtocol_constr_1, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_CauseProtocol_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/CauseProtocol.h b/e2sim/src/ASN1c/CauseProtocol.h
index 67008e3..b985a17 100644
--- a/e2sim/src/ASN1c/CauseProtocol.h
+++ b/e2sim/src/ASN1c/CauseProtocol.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CauseProtocol_H_
@@ -46,8 +46,6 @@
 der_type_encoder_f CauseProtocol_encode_der;
 xer_type_decoder_f CauseProtocol_decode_xer;
 xer_type_encoder_f CauseProtocol_encode_xer;
-oer_type_decoder_f CauseProtocol_decode_oer;
-oer_type_encoder_f CauseProtocol_encode_oer;
 per_type_decoder_f CauseProtocol_decode_uper;
 per_type_encoder_f CauseProtocol_encode_uper;
 per_type_decoder_f CauseProtocol_decode_aper;
diff --git a/e2sim/src/ASN1c/CauseRIC.c b/e2sim/src/ASN1c/CauseRIC.c
index b4a1dfb..dd41ce5 100644
--- a/e2sim/src/ASN1c/CauseRIC.c
+++ b/e2sim/src/ASN1c/CauseRIC.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CauseRIC.h"
@@ -11,9 +11,6 @@
  * 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 },
@@ -69,7 +66,7 @@
 	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, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_CauseRIC_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/CauseRIC.h b/e2sim/src/ASN1c/CauseRIC.h
index 187b6ec..f523945 100644
--- a/e2sim/src/ASN1c/CauseRIC.h
+++ b/e2sim/src/ASN1c/CauseRIC.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CauseRIC_H_
@@ -50,8 +50,6 @@
 der_type_encoder_f CauseRIC_encode_der;
 xer_type_decoder_f CauseRIC_decode_xer;
 xer_type_encoder_f CauseRIC_encode_xer;
-oer_type_decoder_f CauseRIC_decode_oer;
-oer_type_encoder_f CauseRIC_encode_oer;
 per_type_decoder_f CauseRIC_decode_uper;
 per_type_encoder_f CauseRIC_encode_uper;
 per_type_decoder_f CauseRIC_decode_aper;
diff --git a/e2sim/src/ASN1c/CauseRICservice.c b/e2sim/src/ASN1c/CauseRICservice.c
index 72dca60..a2ede9b 100644
--- a/e2sim/src/ASN1c/CauseRICservice.c
+++ b/e2sim/src/ASN1c/CauseRICservice.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CauseRICservice.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_CauseRICservice_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -53,7 +50,7 @@
 	asn_DEF_CauseRICservice_tags_1,	/* Same as above */
 	sizeof(asn_DEF_CauseRICservice_tags_1)
 		/sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CauseRICservice_constr_1, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_CauseRICservice_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/CauseRICservice.h b/e2sim/src/ASN1c/CauseRICservice.h
index a247216..8840d56 100644
--- a/e2sim/src/ASN1c/CauseRICservice.h
+++ b/e2sim/src/ASN1c/CauseRICservice.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CauseRICservice_H_
@@ -42,8 +42,6 @@
 der_type_encoder_f CauseRICservice_encode_der;
 xer_type_decoder_f CauseRICservice_decode_xer;
 xer_type_encoder_f CauseRICservice_encode_xer;
-oer_type_decoder_f CauseRICservice_decode_oer;
-oer_type_encoder_f CauseRICservice_encode_oer;
 per_type_decoder_f CauseRICservice_decode_uper;
 per_type_encoder_f CauseRICservice_encode_uper;
 per_type_decoder_f CauseRICservice_decode_aper;
diff --git a/e2sim/src/ASN1c/CauseTransport.c b/e2sim/src/ASN1c/CauseTransport.c
index 0ac9911..cbbd239 100644
--- a/e2sim/src/ASN1c/CauseTransport.c
+++ b/e2sim/src/ASN1c/CauseTransport.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CauseTransport.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_CauseTransport_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_CauseTransport_tags_1,	/* Same as above */
 	sizeof(asn_DEF_CauseTransport_tags_1)
 		/sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CauseTransport_constr_1, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_CauseTransport_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/CauseTransport.h b/e2sim/src/ASN1c/CauseTransport.h
index f92578e..eec71d1 100644
--- a/e2sim/src/ASN1c/CauseTransport.h
+++ b/e2sim/src/ASN1c/CauseTransport.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CauseTransport_H_
@@ -41,8 +41,6 @@
 der_type_encoder_f CauseTransport_encode_der;
 xer_type_decoder_f CauseTransport_decode_xer;
 xer_type_encoder_f CauseTransport_encode_xer;
-oer_type_decoder_f CauseTransport_decode_oer;
-oer_type_encoder_f CauseTransport_encode_oer;
 per_type_decoder_f CauseTransport_decode_uper;
 per_type_encoder_f CauseTransport_encode_uper;
 per_type_decoder_f CauseTransport_decode_aper;
diff --git a/e2sim/src/ASN1c/Criticality.c b/e2sim/src/ASN1c/Criticality.c
index 8f9f73b..59ba9d8 100644
--- a/e2sim/src/ASN1c/Criticality.c
+++ b/e2sim/src/ASN1c/Criticality.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "Criticality.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_Criticality_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_Criticality_tags_1,	/* Same as above */
 	sizeof(asn_DEF_Criticality_tags_1)
 		/sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */
-	{ &asn_OER_type_Criticality_constr_1, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_Criticality_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/Criticality.h b/e2sim/src/ASN1c/Criticality.h
index 76d1b89..b2a0acc 100644
--- a/e2sim/src/ASN1c/Criticality.h
+++ b/e2sim/src/ASN1c/Criticality.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_Criticality_H_
@@ -39,8 +39,6 @@
 der_type_encoder_f Criticality_encode_der;
 xer_type_decoder_f Criticality_decode_xer;
 xer_type_encoder_f Criticality_encode_xer;
-oer_type_decoder_f Criticality_decode_oer;
-oer_type_encoder_f Criticality_encode_oer;
 per_type_decoder_f Criticality_decode_uper;
 per_type_encoder_f Criticality_encode_uper;
 per_type_decoder_f Criticality_decode_aper;
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c
index c2350c2..52c8388 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CriticalityDiagnostics-IE-Item.h"
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h
index 3977363..ede043e 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h
+++ b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CriticalityDiagnostics_IE_Item_H_
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c
index d54f845..50f163a 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c
+++ b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c
@@ -1,16 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CriticalityDiagnostics-IE-List.h"
 
 #include "CriticalityDiagnostics-IE-Item.h"
-static asn_oer_constraints_t asn_OER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..256)) */};
 asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
@@ -45,7 +42,7 @@
 	asn_DEF_CriticalityDiagnostics_IE_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1)
 		/sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CriticalityDiagnostics_IE_List_constr_1, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_CriticalityDiagnostics_IE_List_1,
 	1,	/* Single element */
 	&asn_SPC_CriticalityDiagnostics_IE_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h
index 57f9cf4..3631dbf 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h
+++ b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CriticalityDiagnostics_IE_List_H_
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics.c b/e2sim/src/ASN1c/CriticalityDiagnostics.c
index ed81ffc..732642d 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics.c
+++ b/e2sim/src/ASN1c/CriticalityDiagnostics.c
@@ -1,15 +1,15 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "CriticalityDiagnostics.h"
 
 #include "RICrequestID.h"
 #include "CriticalityDiagnostics-IE-List.h"
-static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = {
+asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = {
 	{ ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -67,7 +67,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = {
 	sizeof(struct CriticalityDiagnostics),
 	offsetof(struct CriticalityDiagnostics, _asn_ctx),
 	asn_MAP_CriticalityDiagnostics_tag2el_1,
diff --git a/e2sim/src/ASN1c/CriticalityDiagnostics.h b/e2sim/src/ASN1c/CriticalityDiagnostics.h
index 9500793..67d4802 100644
--- a/e2sim/src/ASN1c/CriticalityDiagnostics.h
+++ b/e2sim/src/ASN1c/CriticalityDiagnostics.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_CriticalityDiagnostics_H_
@@ -43,6 +43,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics;
+extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1;
+extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[5];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/E2AP-PDU.c b/e2sim/src/ASN1c/E2AP-PDU.c
index 8d6888d..87b3320 100644
--- a/e2sim/src/ASN1c/E2AP-PDU.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "E2AP-PDU.h"
@@ -10,9 +10,6 @@
 #include "InitiatingMessage.h"
 #include "SuccessfulOutcome.h"
 #include "UnsuccessfulOutcome.h"
-static asn_oer_constraints_t asn_OER_type_E2AP_PDU_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -70,7 +67,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_E2AP_PDU_constr_1, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint },
 	asn_MBR_E2AP_PDU_1,
 	3,	/* Elements count */
 	&asn_SPC_E2AP_PDU_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/E2AP-PDU.h b/e2sim/src/ASN1c/E2AP-PDU.h
index 600e848..9edfbf3 100644
--- a/e2sim/src/ASN1c/E2AP-PDU.h
+++ b/e2sim/src/ASN1c/E2AP-PDU.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_E2AP_PDU_H_
diff --git a/e2sim/src/ASN1c/E2connectionSetupFailed-Item.c b/e2sim/src/ASN1c/E2connectionSetupFailed-Item.c
new file mode 100644
index 0000000..5792f7f
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionSetupFailed-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionSetupFailed-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionSetupFailed_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionSetupFailed_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 E2connectionSetupFailed_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 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_E2connectionSetupFailed_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionSetupFailed_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tnlInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionSetupFailed_Item_specs_1 = {
+	sizeof(struct E2connectionSetupFailed_Item),
+	offsetof(struct E2connectionSetupFailed_Item, _asn_ctx),
+	asn_MAP_E2connectionSetupFailed_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_E2connectionSetupFailed_Item = {
+	"E2connectionSetupFailed-Item",
+	"E2connectionSetupFailed-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionSetupFailed_Item_tags_1,
+	sizeof(asn_DEF_E2connectionSetupFailed_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionSetupFailed_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionSetupFailed_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionSetupFailed_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionSetupFailed_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionSetupFailed_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2connectionSetupFailed_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionSetupFailed-Item.h b/e2sim/src/ASN1c/E2connectionSetupFailed-Item.h
new file mode 100644
index 0000000..e062ce9
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionSetupFailed-Item.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionSetupFailed_Item_H_
+#define	_E2connectionSetupFailed_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "TNLinformation.h"
+#include "Cause.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionSetupFailed-Item */
+typedef struct E2connectionSetupFailed_Item {
+	TNLinformation_t	 tnlInformation;
+	Cause_t	 cause;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionSetupFailed_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionSetupFailed_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionSetupFailed_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionSetupFailed_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionSetupFailed_Item_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionSetupFailed-List.c b/e2sim/src/ASN1c/E2connectionSetupFailed-List.c
new file mode 100644
index 0000000..502490b
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionSetupFailed-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionSetupFailed-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+asn_per_constraints_t asn_PER_type_E2connectionSetupFailed_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_E2connectionSetupFailed_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_229P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionSetupFailed_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2connectionSetupFailed_List_specs_1 = {
+	sizeof(struct E2connectionSetupFailed_List),
+	offsetof(struct E2connectionSetupFailed_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionSetupFailed_List = {
+	"E2connectionSetupFailed-List",
+	"E2connectionSetupFailed-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2connectionSetupFailed_List_tags_1,
+	sizeof(asn_DEF_E2connectionSetupFailed_List_tags_1)
+		/sizeof(asn_DEF_E2connectionSetupFailed_List_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionSetupFailed_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionSetupFailed_List_tags_1)
+		/sizeof(asn_DEF_E2connectionSetupFailed_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2connectionSetupFailed_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2connectionSetupFailed_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2connectionSetupFailed_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionSetupFailed-List.h b/e2sim/src/ASN1c/E2connectionSetupFailed-List.h
new file mode 100644
index 0000000..6a5265c
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionSetupFailed-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionSetupFailed_List_H_
+#define	_E2connectionSetupFailed_List_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "asn_SEQUENCE_OF.h"
+#include "constr_SEQUENCE_OF.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct ProtocolIE_SingleContainer;
+
+/* E2connectionSetupFailed-List */
+typedef struct E2connectionSetupFailed_List {
+	A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionSetupFailed_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionSetupFailed_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2connectionSetupFailed_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionSetupFailed_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2connectionSetupFailed_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionSetupFailed_List_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdate-Item.c b/e2sim/src/ASN1c/E2connectionUpdate-Item.c
new file mode 100644
index 0000000..c109abf
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdate-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_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 E2connectionUpdate_Item, tnlUsage),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TNLusage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tnlUsage"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdate_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdate_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tnlInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tnlUsage */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_Item_specs_1 = {
+	sizeof(struct E2connectionUpdate_Item),
+	offsetof(struct E2connectionUpdate_Item, _asn_ctx),
+	asn_MAP_E2connectionUpdate_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_E2connectionUpdate_Item = {
+	"E2connectionUpdate-Item",
+	"E2connectionUpdate-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdate_Item_tags_1,
+	sizeof(asn_DEF_E2connectionUpdate_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdate_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdate_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdate_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2connectionUpdate_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdate-Item.h b/e2sim/src/ASN1c/E2connectionUpdate-Item.h
new file mode 100644
index 0000000..85f6ebb
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate-Item.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdate_Item_H_
+#define	_E2connectionUpdate_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "TNLinformation.h"
+#include "TNLusage.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionUpdate-Item */
+typedef struct E2connectionUpdate_Item {
+	TNLinformation_t	 tnlInformation;
+	TNLusage_t	 tnlUsage;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdate_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdate_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdate_Item_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdate-List.c b/e2sim/src/ASN1c/E2connectionUpdate-List.c
new file mode 100644
index 0000000..0f5f738
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdate-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+asn_per_constraints_t asn_PER_type_E2connectionUpdate_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_E2connectionUpdate_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_229P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdate_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2connectionUpdate_List_specs_1 = {
+	sizeof(struct E2connectionUpdate_List),
+	offsetof(struct E2connectionUpdate_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_List = {
+	"E2connectionUpdate-List",
+	"E2connectionUpdate-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2connectionUpdate_List_tags_1,
+	sizeof(asn_DEF_E2connectionUpdate_List_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_List_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdate_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdate_List_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2connectionUpdate_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2connectionUpdate_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2connectionUpdate_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdate-List.h b/e2sim/src/ASN1c/E2connectionUpdate-List.h
new file mode 100644
index 0000000..cb71b0a
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdate_List_H_
+#define	_E2connectionUpdate_List_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "asn_SEQUENCE_OF.h"
+#include "constr_SEQUENCE_OF.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct ProtocolIE_SingleContainer;
+
+/* E2connectionUpdate-List */
+typedef struct E2connectionUpdate_List {
+	A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdate_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2connectionUpdate_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdate_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2connectionUpdate_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdate_List_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdate.c b/e2sim/src/ASN1c/E2connectionUpdate.c
new file mode 100644
index 0000000..426676e
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdate.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_226P14,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_specs_1 = {
+	sizeof(struct E2connectionUpdate),
+	offsetof(struct E2connectionUpdate, _asn_ctx),
+	asn_MAP_E2connectionUpdate_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_E2connectionUpdate = {
+	"E2connectionUpdate",
+	"E2connectionUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdate_tags_1,
+	sizeof(asn_DEF_E2connectionUpdate_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdate_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_E2connectionUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdate.h b/e2sim/src/ASN1c/E2connectionUpdate.h
new file mode 100644
index 0000000..9426be7
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdate_H_
+#define	_E2connectionUpdate_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionUpdate */
+typedef struct E2connectionUpdate {
+	ProtocolIE_Container_226P14_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdate_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.c b/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.c
new file mode 100644
index 0000000..dbc443d
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdateAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdateAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_226P15,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateAcknowledge_specs_1 = {
+	sizeof(struct E2connectionUpdateAcknowledge),
+	offsetof(struct E2connectionUpdateAcknowledge, _asn_ctx),
+	asn_MAP_E2connectionUpdateAcknowledge_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_E2connectionUpdateAcknowledge = {
+	"E2connectionUpdateAcknowledge",
+	"E2connectionUpdateAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdateAcknowledge_tags_1,
+	sizeof(asn_DEF_E2connectionUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdateAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdateAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_E2connectionUpdateAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.h b/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.h
new file mode 100644
index 0000000..7dc879e
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdateAcknowledge_H_
+#define	_E2connectionUpdateAcknowledge_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionUpdateAcknowledge */
+typedef struct E2connectionUpdateAcknowledge {
+	ProtocolIE_Container_226P15_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdateAcknowledge_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdateFailure.c b/e2sim/src/ASN1c/E2connectionUpdateFailure.c
new file mode 100644
index 0000000..52c1908
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdateFailure.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdateFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ProtocolIE_Container_226P16,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateFailure_specs_1 = {
+	sizeof(struct E2connectionUpdateFailure),
+	offsetof(struct E2connectionUpdateFailure, _asn_ctx),
+	asn_MAP_E2connectionUpdateFailure_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_E2connectionUpdateFailure = {
+	"E2connectionUpdateFailure",
+	"E2connectionUpdateFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdateFailure_tags_1,
+	sizeof(asn_DEF_E2connectionUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdateFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdateFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2connectionUpdateFailure_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdateFailure.h b/e2sim/src/ASN1c/E2connectionUpdateFailure.h
new file mode 100644
index 0000000..0e357fd
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdateFailure_H_
+#define	_E2connectionUpdateFailure_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionUpdateFailure */
+typedef struct E2connectionUpdateFailure {
+	ProtocolIE_Container_226P16_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdateFailure_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.c b/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.c
new file mode 100644
index 0000000..45ae85e
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdateRemove-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdateRemove_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateRemove_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"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateRemove_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateRemove_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* tnlInformation */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateRemove_Item_specs_1 = {
+	sizeof(struct E2connectionUpdateRemove_Item),
+	offsetof(struct E2connectionUpdateRemove_Item, _asn_ctx),
+	asn_MAP_E2connectionUpdateRemove_Item_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_E2connectionUpdateRemove_Item = {
+	"E2connectionUpdateRemove-Item",
+	"E2connectionUpdateRemove-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdateRemove_Item_tags_1,
+	sizeof(asn_DEF_E2connectionUpdateRemove_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdateRemove_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateRemove_Item_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdateRemove_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_E2connectionUpdateRemove_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.h b/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.h
new file mode 100644
index 0000000..4a6800c
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateRemove-Item.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdateRemove_Item_H_
+#define	_E2connectionUpdateRemove_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "TNLinformation.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2connectionUpdateRemove-Item */
+typedef struct E2connectionUpdateRemove_Item {
+	TNLinformation_t	 tnlInformation;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateRemove_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateRemove_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateRemove_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateRemove_Item_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdateRemove_Item_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2connectionUpdateRemove-List.c b/e2sim/src/ASN1c/E2connectionUpdateRemove-List.c
new file mode 100644
index 0000000..c9a4624
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateRemove-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2connectionUpdateRemove-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+asn_per_constraints_t asn_PER_type_E2connectionUpdateRemove_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_E2connectionUpdateRemove_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_SingleContainer_229P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateRemove_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2connectionUpdateRemove_List_specs_1 = {
+	sizeof(struct E2connectionUpdateRemove_List),
+	offsetof(struct E2connectionUpdateRemove_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateRemove_List = {
+	"E2connectionUpdateRemove-List",
+	"E2connectionUpdateRemove-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2connectionUpdateRemove_List_tags_1,
+	sizeof(asn_DEF_E2connectionUpdateRemove_List_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_List_tags_1[0]), /* 1 */
+	asn_DEF_E2connectionUpdateRemove_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateRemove_List_tags_1)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2connectionUpdateRemove_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2connectionUpdateRemove_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2connectionUpdateRemove_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2connectionUpdateRemove-List.h b/e2sim/src/ASN1c/E2connectionUpdateRemove-List.h
new file mode 100644
index 0000000..f6dd3d2
--- /dev/null
+++ b/e2sim/src/ASN1c/E2connectionUpdateRemove-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2connectionUpdateRemove_List_H_
+#define	_E2connectionUpdateRemove_List_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "asn_SEQUENCE_OF.h"
+#include "constr_SEQUENCE_OF.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct ProtocolIE_SingleContainer;
+
+/* E2connectionUpdateRemove-List */
+typedef struct E2connectionUpdateRemove_List {
+	A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateRemove_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateRemove_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2connectionUpdateRemove_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateRemove_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2connectionUpdateRemove_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2connectionUpdateRemove_List_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.c
new file mode 100644
index 0000000..cc1a0bd
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdate-Item.h"
+
+#include "E2nodeComponentID.h"
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_Item, e2nodeComponentType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentType"
+		},
+	{ ATF_POINTER, 1, 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, e2nodeComponentConfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfigUpdate"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdate_Item_oms_1[] = { 1 };
+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 }, /* e2nodeComponentType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfigUpdate */
+};
+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 */
+	asn_MAP_E2nodeComponentConfigUpdate_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	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/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.h
new file mode 100644
index 0000000..c78aadf
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdate_Item_H_
+#define	_E2nodeComponentConfigUpdate_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "E2nodeComponentType.h"
+#include "E2nodeComponentConfigUpdate.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2nodeComponentID;
+
+/* E2nodeComponentConfigUpdate-Item */
+typedef struct E2nodeComponentConfigUpdate_Item {
+	E2nodeComponentType_t	 e2nodeComponentType;
+	struct E2nodeComponentID	*e2nodeComponentID;	/* OPTIONAL */
+	E2nodeComponentConfigUpdate_t	 e2nodeComponentConfigUpdate;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdate_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdate_Item_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.c
new file mode 100644
index 0000000..f982bb6
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdate-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+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_229P6,
+		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 */
+	{ 0, &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/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.h
new file mode 100644
index 0000000..4795cd5
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdate_List_H_
+#define	_E2nodeComponentConfigUpdate_List_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "asn_SEQUENCE_OF.h"
+#include "constr_SEQUENCE_OF.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct ProtocolIE_SingleContainer;
+
+/* E2nodeComponentConfigUpdate-List */
+typedef struct E2nodeComponentConfigUpdate_List {
+	A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdate_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigUpdate_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdate_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdate_List_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.c
new file mode 100644
index 0000000..10f6fa6
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.c
@@ -0,0 +1,86 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdate.h"
+
+#include "E2nodeComponentConfigUpdateGNB.h"
+#include "E2nodeComponentConfigUpdateENgNB.h"
+#include "E2nodeComponentConfigUpdateNGeNB.h"
+#include "E2nodeComponentConfigUpdateENB.h"
+asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentConfigUpdate, choice.gNBconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdateGNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNBconfigUpdate"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentConfigUpdate, choice.en_gNBconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdateENgNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-gNBconfigUpdate"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentConfigUpdate, choice.ng_eNBconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdateNGeNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNBconfigUpdate"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentConfigUpdate, choice.eNBconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdateENB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eNBconfigUpdate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNBconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNBconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNBconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNBconfigUpdate */
+};
+asn_CHOICE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdate),
+	offsetof(struct E2nodeComponentConfigUpdate, _asn_ctx),
+	offsetof(struct E2nodeComponentConfigUpdate, present),
+	sizeof(((struct E2nodeComponentConfigUpdate *)0)->present),
+	asn_MAP_E2nodeComponentConfigUpdate_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate = {
+	"E2nodeComponentConfigUpdate",
+	"E2nodeComponentConfigUpdate",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2nodeComponentConfigUpdate_constr_1, CHOICE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_1,
+	4,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.h
new file mode 100644
index 0000000..6e0ca4a
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdate.h
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdate_H_
+#define	_E2nodeComponentConfigUpdate_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "constr_CHOICE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2nodeComponentConfigUpdate_PR {
+	E2nodeComponentConfigUpdate_PR_NOTHING,	/* No components present */
+	E2nodeComponentConfigUpdate_PR_gNBconfigUpdate,
+	E2nodeComponentConfigUpdate_PR_en_gNBconfigUpdate,
+	E2nodeComponentConfigUpdate_PR_ng_eNBconfigUpdate,
+	E2nodeComponentConfigUpdate_PR_eNBconfigUpdate
+	/* Extensions may appear below */
+	
+} E2nodeComponentConfigUpdate_PR;
+
+/* Forward declarations */
+struct E2nodeComponentConfigUpdateGNB;
+struct E2nodeComponentConfigUpdateENgNB;
+struct E2nodeComponentConfigUpdateNGeNB;
+struct E2nodeComponentConfigUpdateENB;
+
+/* E2nodeComponentConfigUpdate */
+typedef struct E2nodeComponentConfigUpdate {
+	E2nodeComponentConfigUpdate_PR present;
+	union E2nodeComponentConfigUpdate_u {
+		struct E2nodeComponentConfigUpdateGNB	*gNBconfigUpdate;
+		struct E2nodeComponentConfigUpdateENgNB	*en_gNBconfigUpdate;
+		struct E2nodeComponentConfigUpdateNGeNB	*ng_eNBconfigUpdate;
+		struct E2nodeComponentConfigUpdateENB	*eNBconfigUpdate;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate;
+extern asn_CHOICE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_1[4];
+extern asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdate_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdate_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.c
new file mode 100644
index 0000000..77cdb1b
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateAck-Item.h"
+
+#include "E2nodeComponentID.h"
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_Item, e2nodeComponentType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentType"
+		},
+	{ ATF_POINTER, 1, 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, e2nodeComponentConfigUpdateAck),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentConfigUpdateAck,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentConfigUpdateAck"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdateAck_Item_oms_1[] = { 1 };
+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 }, /* e2nodeComponentType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2nodeComponentID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e2nodeComponentConfigUpdateAck */
+};
+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 */
+	asn_MAP_E2nodeComponentConfigUpdateAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	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/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.h
new file mode 100644
index 0000000..cfae915
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateAck_Item_H_
+#define	_E2nodeComponentConfigUpdateAck_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "E2nodeComponentType.h"
+#include "E2nodeComponentConfigUpdateAck.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2nodeComponentID;
+
+/* E2nodeComponentConfigUpdateAck-Item */
+typedef struct E2nodeComponentConfigUpdateAck_Item {
+	E2nodeComponentType_t	 e2nodeComponentType;
+	struct E2nodeComponentID	*e2nodeComponentID;	/* OPTIONAL */
+	E2nodeComponentConfigUpdateAck_t	 e2nodeComponentConfigUpdateAck;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateAck_Item_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.c
new file mode 100644
index 0000000..779f011
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateAck-List.h"
+
+#include "ProtocolIE-SingleContainer.h"
+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_229P7,
+		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 */
+	{ 0, &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/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.h
new file mode 100644
index 0000000..ff89f9e
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateAck_List_H_
+#define	_E2nodeComponentConfigUpdateAck_List_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "asn_SEQUENCE_OF.h"
+#include "constr_SEQUENCE_OF.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct ProtocolIE_SingleContainer;
+
+/* E2nodeComponentConfigUpdateAck-List */
+typedef struct E2nodeComponentConfigUpdateAck_List {
+	A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateAck_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2nodeComponentConfigUpdateAck_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateAck_List_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.c
new file mode 100644
index 0000000..ac7c6a0
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.c
@@ -0,0 +1,111 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateAck.h"
+
+#include "Cause.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+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 */
+	{ 0, &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_E2nodeComponentConfigUpdateAck_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck, 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 E2nodeComponentConfigUpdateAck, 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_E2nodeComponentConfigUpdateAck_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateAck_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateAck_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_E2nodeComponentConfigUpdateAck_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck),
+	offsetof(struct E2nodeComponentConfigUpdateAck, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateAck_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigUpdateAck_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck = {
+	"E2nodeComponentConfigUpdateAck",
+	"E2nodeComponentConfigUpdateAck",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateAck_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateAck_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.h
new file mode 100644
index 0000000..b9b5fbc
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateAck.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateAck_H_
+#define	_E2nodeComponentConfigUpdateAck_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "NativeEnumerated.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2nodeComponentConfigUpdateAck__updateOutcome {
+	E2nodeComponentConfigUpdateAck__updateOutcome_success	= 0,
+	E2nodeComponentConfigUpdateAck__updateOutcome_failure	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2nodeComponentConfigUpdateAck__updateOutcome;
+
+/* Forward declarations */
+struct Cause;
+
+/* E2nodeComponentConfigUpdateAck */
+typedef struct E2nodeComponentConfigUpdateAck {
+	long	 updateOutcome;
+	struct Cause	*failureCause;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateAck_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_updateOutcome_2;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateAck_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.c
new file mode 100644
index 0000000..b8ebed0
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateENB.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateENB_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct E2nodeComponentConfigUpdateENB, s1APconfigUpdate),
+		(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 */
+		"s1APconfigUpdate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentConfigUpdateENB, x2APconfigUpdate),
+		(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 */
+		"x2APconfigUpdate"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdateENB_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateENB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateENB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1APconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* x2APconfigUpdate */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateENB_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateENB),
+	offsetof(struct E2nodeComponentConfigUpdateENB, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateENB_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigUpdateENB_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateENB = {
+	"E2nodeComponentConfigUpdateENB",
+	"E2nodeComponentConfigUpdateENB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateENB_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateENB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateENB_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateENB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateENB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateENB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateENB_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateENB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.h
new file mode 100644
index 0000000..ad36d72
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENB.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateENB_H_
+#define	_E2nodeComponentConfigUpdateENB_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "OCTET_STRING.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentConfigUpdateENB */
+typedef struct E2nodeComponentConfigUpdateENB {
+	OCTET_STRING_t	*s1APconfigUpdate;	/* OPTIONAL */
+	OCTET_STRING_t	*x2APconfigUpdate;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateENB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateENB;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateENB_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateENB_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateENB_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.c
new file mode 100644
index 0000000..f490891
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.c
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateENgNB.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateENgNB_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentConfigUpdateENgNB, x2APconfigUpdate),
+		(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 */
+		"x2APconfigUpdate"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdateENgNB_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateENgNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* x2APconfigUpdate */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateENgNB_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateENgNB),
+	offsetof(struct E2nodeComponentConfigUpdateENgNB, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateENgNB_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigUpdateENgNB_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateENgNB = {
+	"E2nodeComponentConfigUpdateENgNB",
+	"E2nodeComponentConfigUpdateENgNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateENgNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateENgNB_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateENgNB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.h
new file mode 100644
index 0000000..9e5dc10
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateENgNB.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateENgNB_H_
+#define	_E2nodeComponentConfigUpdateENgNB_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "OCTET_STRING.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentConfigUpdateENgNB */
+typedef struct E2nodeComponentConfigUpdateENgNB {
+	OCTET_STRING_t	*x2APconfigUpdate;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateENgNB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateENgNB;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateENgNB_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateENgNB_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateENgNB_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.c
new file mode 100644
index 0000000..814e676
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.c
@@ -0,0 +1,82 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateGNB.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateGNB_1[] = {
+	{ ATF_POINTER, 4, offsetof(struct E2nodeComponentConfigUpdateGNB, ngAPconfigUpdate),
+		(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 */
+		"ngAPconfigUpdate"
+		},
+	{ ATF_POINTER, 3, offsetof(struct E2nodeComponentConfigUpdateGNB, xnAPconfigUpdate),
+		(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 */
+		"xnAPconfigUpdate"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2nodeComponentConfigUpdateGNB, e1APconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e1APconfigUpdate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentConfigUpdateGNB, f1APconfigUpdate),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"f1APconfigUpdate"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdateGNB_oms_1[] = { 0, 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateGNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ngAPconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* xnAPconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e1APconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* f1APconfigUpdate */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateGNB_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateGNB),
+	offsetof(struct E2nodeComponentConfigUpdateGNB, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateGNB_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigUpdateGNB_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateGNB = {
+	"E2nodeComponentConfigUpdateGNB",
+	"E2nodeComponentConfigUpdateGNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateGNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateGNB_1,
+	4,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateGNB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.h
new file mode 100644
index 0000000..ebdeae3
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateGNB.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateGNB_H_
+#define	_E2nodeComponentConfigUpdateGNB_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "OCTET_STRING.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentConfigUpdateGNB */
+typedef struct E2nodeComponentConfigUpdateGNB {
+	OCTET_STRING_t	*ngAPconfigUpdate;	/* OPTIONAL */
+	OCTET_STRING_t	*xnAPconfigUpdate;	/* OPTIONAL */
+	OCTET_STRING_t	*e1APconfigUpdate;	/* OPTIONAL */
+	OCTET_STRING_t	*f1APconfigUpdate;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateGNB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateGNB;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateGNB_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateGNB_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateGNB_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.c b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.c
new file mode 100644
index 0000000..3c726e9
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentConfigUpdateNGeNB.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateNGeNB_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct E2nodeComponentConfigUpdateNGeNB, ngAPconfigUpdate),
+		(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 */
+		"ngAPconfigUpdate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2nodeComponentConfigUpdateNGeNB, xnAPconfigUpdate),
+		(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 */
+		"xnAPconfigUpdate"
+		},
+};
+static const int asn_MAP_E2nodeComponentConfigUpdateNGeNB_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateNGeNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ngAPconfigUpdate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* xnAPconfigUpdate */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateNGeNB_specs_1 = {
+	sizeof(struct E2nodeComponentConfigUpdateNGeNB),
+	offsetof(struct E2nodeComponentConfigUpdateNGeNB, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateNGeNB_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2nodeComponentConfigUpdateNGeNB_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateNGeNB = {
+	"E2nodeComponentConfigUpdateNGeNB",
+	"E2nodeComponentConfigUpdateNGeNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateNGeNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateNGeNB_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateNGeNB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.h b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.h
new file mode 100644
index 0000000..116e211
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentConfigUpdateNGeNB.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentConfigUpdateNGeNB_H_
+#define	_E2nodeComponentConfigUpdateNGeNB_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "OCTET_STRING.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentConfigUpdateNGeNB */
+typedef struct E2nodeComponentConfigUpdateNGeNB {
+	OCTET_STRING_t	*ngAPconfigUpdate;	/* OPTIONAL */
+	OCTET_STRING_t	*xnAPconfigUpdate;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateNGeNB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateNGeNB;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateNGeNB_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateNGeNB_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentConfigUpdateNGeNB_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.c b/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.c
new file mode 100644
index 0000000..9d6da08
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentGNB-CU-UP-ID.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentGNB_CU_UP_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentGNB_CU_UP_ID, gNB_CU_UP_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-UP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentGNB_CU_UP_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-UP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentGNB_CU_UP_ID_specs_1 = {
+	sizeof(struct E2nodeComponentGNB_CU_UP_ID),
+	offsetof(struct E2nodeComponentGNB_CU_UP_ID, _asn_ctx),
+	asn_MAP_E2nodeComponentGNB_CU_UP_ID_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_E2nodeComponentGNB_CU_UP_ID = {
+	"E2nodeComponentGNB-CU-UP-ID",
+	"E2nodeComponentGNB-CU-UP-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1,
+	sizeof(asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentGNB_CU_UP_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentGNB_CU_UP_ID_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentGNB_CU_UP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.h b/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.h
new file mode 100644
index 0000000..314e9d4
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentGNB-CU-UP-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentGNB_CU_UP_ID_H_
+#define	_E2nodeComponentGNB_CU_UP_ID_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "GNB-CU-UP-ID.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentGNB-CU-UP-ID */
+typedef struct E2nodeComponentGNB_CU_UP_ID {
+	GNB_CU_UP_ID_t	 gNB_CU_UP_ID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentGNB_CU_UP_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentGNB_CU_UP_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentGNB_CU_UP_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentGNB_CU_UP_ID_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentGNB_CU_UP_ID_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.c b/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.c
new file mode 100644
index 0000000..f2ed742
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentGNB-DU-ID.h"
+
+asn_TYPE_member_t asn_MBR_E2nodeComponentGNB_DU_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentGNB_DU_ID, 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_E2nodeComponentGNB_DU_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentGNB_DU_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-DU-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentGNB_DU_ID_specs_1 = {
+	sizeof(struct E2nodeComponentGNB_DU_ID),
+	offsetof(struct E2nodeComponentGNB_DU_ID, _asn_ctx),
+	asn_MAP_E2nodeComponentGNB_DU_ID_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_E2nodeComponentGNB_DU_ID = {
+	"E2nodeComponentGNB-DU-ID",
+	"E2nodeComponentGNB-DU-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2nodeComponentGNB_DU_ID_tags_1,
+	sizeof(asn_DEF_E2nodeComponentGNB_DU_ID_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentGNB_DU_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentGNB_DU_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentGNB_DU_ID_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentGNB_DU_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentGNB_DU_ID_1,
+	1,	/* Elements count */
+	&asn_SPC_E2nodeComponentGNB_DU_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.h b/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.h
new file mode 100644
index 0000000..86ed36a
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentGNB-DU-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentGNB_DU_ID_H_
+#define	_E2nodeComponentGNB_DU_ID_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "GNB-DU-ID.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeComponentGNB-DU-ID */
+typedef struct E2nodeComponentGNB_DU_ID {
+	GNB_DU_ID_t	 gNB_DU_ID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentGNB_DU_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentGNB_DU_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentGNB_DU_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentGNB_DU_ID_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentGNB_DU_ID_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentID.c b/e2sim/src/ASN1c/E2nodeComponentID.c
new file mode 100644
index 0000000..3ce23a0
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentID.h"
+
+#include "E2nodeComponentGNB-CU-UP-ID.h"
+#include "E2nodeComponentGNB-DU-ID.h"
+asn_per_constraints_t asn_PER_type_E2nodeComponentID_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_E2nodeComponentID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentTypeGNB_CU_UP),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentGNB_CU_UP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentTypeGNB-CU-UP"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2nodeComponentID, choice.e2nodeComponentTypeGNB_DU),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2nodeComponentGNB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e2nodeComponentTypeGNB-DU"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e2nodeComponentTypeGNB-CU-UP */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2nodeComponentTypeGNB-DU */
+};
+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,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* 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) */
+	{ 0, &asn_PER_type_E2nodeComponentID_constr_1, CHOICE_constraint },
+	asn_MBR_E2nodeComponentID_1,
+	2,	/* Elements count */
+	&asn_SPC_E2nodeComponentID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentID.h b/e2sim/src/ASN1c/E2nodeComponentID.h
new file mode 100644
index 0000000..46b20c3
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentID.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentID_H_
+#define	_E2nodeComponentID_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "constr_CHOICE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2nodeComponentID_PR {
+	E2nodeComponentID_PR_NOTHING,	/* No components present */
+	E2nodeComponentID_PR_e2nodeComponentTypeGNB_CU_UP,
+	E2nodeComponentID_PR_e2nodeComponentTypeGNB_DU
+	/* Extensions may appear below */
+	
+} E2nodeComponentID_PR;
+
+/* Forward declarations */
+struct E2nodeComponentGNB_CU_UP_ID;
+struct E2nodeComponentGNB_DU_ID;
+
+/* E2nodeComponentID */
+typedef struct E2nodeComponentID {
+	E2nodeComponentID_PR present;
+	union E2nodeComponentID_u {
+		struct E2nodeComponentGNB_CU_UP_ID	*e2nodeComponentTypeGNB_CU_UP;
+		struct E2nodeComponentGNB_DU_ID	*e2nodeComponentTypeGNB_DU;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentID;
+extern asn_CHOICE_specifics_t asn_SPC_E2nodeComponentID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentID_1[2];
+extern asn_per_constraints_t asn_PER_type_E2nodeComponentID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentID_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeComponentType.c b/e2sim/src/ASN1c/E2nodeComponentType.c
new file mode 100644
index 0000000..ecd690f
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentType.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeComponentType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2nodeComponentType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2nodeComponentType_value2enum_1[] = {
+	{ 0,	3,	"gNB" },
+	{ 1,	9,	"gNB-CU-UP" },
+	{ 2,	6,	"gNB-DU" },
+	{ 3,	6,	"en-gNB" },
+	{ 4,	3,	"eNB" },
+	{ 5,	6,	"ng-eNB" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2nodeComponentType_enum2value_1[] = {
+	4,	/* eNB(4) */
+	3,	/* en-gNB(3) */
+	0,	/* gNB(0) */
+	1,	/* gNB-CU-UP(1) */
+	2,	/* gNB-DU(2) */
+	5	/* ng-eNB(5) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2nodeComponentType_specs_1 = {
+	asn_MAP_E2nodeComponentType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2nodeComponentType_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2nodeComponentType = {
+	"E2nodeComponentType",
+	"E2nodeComponentType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2nodeComponentType_tags_1,
+	sizeof(asn_DEF_E2nodeComponentType_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentType_tags_1[0]), /* 1 */
+	asn_DEF_E2nodeComponentType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentType_tags_1)
+		/sizeof(asn_DEF_E2nodeComponentType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2nodeComponentType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2nodeComponentType_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/E2nodeComponentType.h b/e2sim/src/ASN1c/E2nodeComponentType.h
new file mode 100644
index 0000000..7fa6e30
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeComponentType.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeComponentType_H_
+#define	_E2nodeComponentType_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "NativeEnumerated.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2nodeComponentType {
+	E2nodeComponentType_gNB	= 0,
+	E2nodeComponentType_gNB_CU_UP	= 1,
+	E2nodeComponentType_gNB_DU	= 2,
+	E2nodeComponentType_en_gNB	= 3,
+	E2nodeComponentType_eNB	= 4,
+	E2nodeComponentType_ng_eNB	= 5
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2nodeComponentType;
+
+/* E2nodeComponentType */
+typedef long	 E2nodeComponentType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2nodeComponentType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentType;
+extern const asn_INTEGER_specifics_t asn_SPC_E2nodeComponentType_specs_1;
+asn_struct_free_f E2nodeComponentType_free;
+asn_struct_print_f E2nodeComponentType_print;
+asn_constr_check_f E2nodeComponentType_constraint;
+ber_type_decoder_f E2nodeComponentType_decode_ber;
+der_type_encoder_f E2nodeComponentType_encode_der;
+xer_type_decoder_f E2nodeComponentType_decode_xer;
+xer_type_encoder_f E2nodeComponentType_encode_xer;
+per_type_decoder_f E2nodeComponentType_decode_uper;
+per_type_encoder_f E2nodeComponentType_encode_uper;
+per_type_decoder_f E2nodeComponentType_decode_aper;
+per_type_encoder_f E2nodeComponentType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeComponentType_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeConfigurationUpdate.c b/e2sim/src/ASN1c/E2nodeConfigurationUpdate.c
new file mode 100644
index 0000000..812fe76
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeConfigurationUpdate.h"
+
+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_226P17,
+		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 */
+};
+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/e2sim/src/ASN1c/E2nodeConfigurationUpdate.h b/e2sim/src/ASN1c/E2nodeConfigurationUpdate.h
new file mode 100644
index 0000000..72da4aa
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeConfigurationUpdate_H_
+#define	_E2nodeConfigurationUpdate_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeConfigurationUpdate */
+typedef struct E2nodeConfigurationUpdate {
+	ProtocolIE_Container_226P17_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeConfigurationUpdate_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.c b/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.c
new file mode 100644
index 0000000..ff1c818
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeConfigurationUpdateAcknowledge.h"
+
+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_226P18,
+		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 */
+};
+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/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.h b/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.h
new file mode 100644
index 0000000..a9e1a10
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdateAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeConfigurationUpdateAcknowledge_H_
+#define	_E2nodeConfigurationUpdateAcknowledge_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeConfigurationUpdateAcknowledge */
+typedef struct E2nodeConfigurationUpdateAcknowledge {
+	ProtocolIE_Container_226P18_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdateAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeConfigurationUpdateAcknowledge_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.c b/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.c
new file mode 100644
index 0000000..c002b9b
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "E2nodeConfigurationUpdateFailure.h"
+
+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_226P19,
+		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 */
+};
+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/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.h b/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.h
new file mode 100644
index 0000000..89067d3
--- /dev/null
+++ b/e2sim/src/ASN1c/E2nodeConfigurationUpdateFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_E2nodeConfigurationUpdateFailure_H_
+#define	_E2nodeConfigurationUpdateFailure_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "ProtocolIE-Container.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2nodeConfigurationUpdateFailure */
+typedef struct E2nodeConfigurationUpdateFailure {
+	ProtocolIE_Container_226P19_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdateFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2nodeConfigurationUpdateFailure_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/E2setupFailure.c b/e2sim/src/ASN1c/E2setupFailure.c
index 8f21633..3107c7a 100644
--- a/e2sim/src/ASN1c/E2setupFailure.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P13,
+		&asn_DEF_ProtocolIE_Container_226P13,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/E2setupFailure.h b/e2sim/src/ASN1c/E2setupFailure.h
index ab89da4..c03a588 100644
--- a/e2sim/src/ASN1c/E2setupFailure.h
+++ b/e2sim/src/ASN1c/E2setupFailure.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_E2setupFailure_H_
@@ -21,7 +21,7 @@
 
 /* E2setupFailure */
 typedef struct E2setupFailure {
-	ProtocolIE_Container_1527P13_t	 protocolIEs;
+	ProtocolIE_Container_226P13_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/E2setupRequest.c b/e2sim/src/ASN1c/E2setupRequest.c
index 20b2f35..6535e6c 100644
--- a/e2sim/src/ASN1c/E2setupRequest.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P11,
+		&asn_DEF_ProtocolIE_Container_226P11,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/E2setupRequest.h b/e2sim/src/ASN1c/E2setupRequest.h
index c09d454..4e58ba1 100644
--- a/e2sim/src/ASN1c/E2setupRequest.h
+++ b/e2sim/src/ASN1c/E2setupRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_E2setupRequest_H_
@@ -21,7 +21,7 @@
 
 /* E2setupRequest */
 typedef struct E2setupRequest {
-	ProtocolIE_Container_1527P11_t	 protocolIEs;
+	ProtocolIE_Container_226P11_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/E2setupResponse.c b/e2sim/src/ASN1c/E2setupResponse.c
index 81dce04..0c94082 100644
--- a/e2sim/src/ASN1c/E2setupResponse.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P12,
+		&asn_DEF_ProtocolIE_Container_226P12,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/E2setupResponse.h b/e2sim/src/ASN1c/E2setupResponse.h
index 64fda6d..0d8ec2e 100644
--- a/e2sim/src/ASN1c/E2setupResponse.h
+++ b/e2sim/src/ASN1c/E2setupResponse.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_E2setupResponse_H_
@@ -21,7 +21,7 @@
 
 /* E2setupResponse */
 typedef struct E2setupResponse {
-	ProtocolIE_Container_1527P12_t	 protocolIEs;
+	ProtocolIE_Container_226P12_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/ENB-ID-Choice.c b/e2sim/src/ASN1c/ENB-ID-Choice.c
index 2818f1c..2892b2e 100644
--- a/e2sim/src/ASN1c/ENB-ID-Choice.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ENB-ID-Choice.h"
@@ -100,33 +100,21 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	20	/* (SIZE(20..20)) */};
 static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  20,  20 }	/* (SIZE(20..20)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	18	/* (SIZE(18..18)) */};
 static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  18,  18 }	/* (SIZE(18..18)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	21	/* (SIZE(21..21)) */};
 static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  21,  21 }	/* (SIZE(21..21)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -138,7 +126,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2,  memb_enb_ID_macro_constraint_1 },
+		{ 0, &asn_PER_memb_enb_ID_macro_constr_2,  memb_enb_ID_macro_constraint_1 },
 		0, 0, /* No default value */
 		"enb-ID-macro"
 		},
@@ -147,7 +135,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3,  memb_enb_ID_shortmacro_constraint_1 },
+		{ 0, &asn_PER_memb_enb_ID_shortmacro_constr_3,  memb_enb_ID_shortmacro_constraint_1 },
 		0, 0, /* No default value */
 		"enb-ID-shortmacro"
 		},
@@ -156,7 +144,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4,  memb_enb_ID_longmacro_constraint_1 },
+		{ 0, &asn_PER_memb_enb_ID_longmacro_constr_4,  memb_enb_ID_longmacro_constraint_1 },
 		0, 0, /* No default value */
 		"enb-ID-longmacro"
 		},
@@ -184,7 +172,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint },
 	asn_MBR_ENB_ID_Choice_1,
 	3,	/* Elements count */
 	&asn_SPC_ENB_ID_Choice_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/ENB-ID-Choice.h b/e2sim/src/ASN1c/ENB-ID-Choice.h
index 2caa477..7606e10 100644
--- a/e2sim/src/ASN1c/ENB-ID-Choice.h
+++ b/e2sim/src/ASN1c/ENB-ID-Choice.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ENB_ID_Choice_H_
diff --git a/e2sim/src/ASN1c/ENB-ID.c b/e2sim/src/ASN1c/ENB-ID.c
index d0280b1..75089a2 100644
--- a/e2sim/src/ASN1c/ENB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ENB-ID.h"
@@ -131,41 +131,26 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	20	/* (SIZE(20..20)) */};
 static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  20,  20 }	/* (SIZE(20..20)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	28	/* (SIZE(28..28)) */};
 static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  28,  28 }	/* (SIZE(28..28)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	18	/* (SIZE(18..18)) */};
 static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  18,  18 }	/* (SIZE(18..18)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = {
-	{ 0, 0 },
-	21	/* (SIZE(21..21)) */};
 static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  21,  21 }	/* (SIZE(21..21)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -177,7 +162,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2,  memb_macro_eNB_ID_constraint_1 },
+		{ 0, &asn_PER_memb_macro_eNB_ID_constr_2,  memb_macro_eNB_ID_constraint_1 },
 		0, 0, /* No default value */
 		"macro-eNB-ID"
 		},
@@ -186,7 +171,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3,  memb_home_eNB_ID_constraint_1 },
+		{ 0, &asn_PER_memb_home_eNB_ID_constr_3,  memb_home_eNB_ID_constraint_1 },
 		0, 0, /* No default value */
 		"home-eNB-ID"
 		},
@@ -195,7 +180,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5,  memb_short_Macro_eNB_ID_constraint_1 },
+		{ 0, &asn_PER_memb_short_Macro_eNB_ID_constr_5,  memb_short_Macro_eNB_ID_constraint_1 },
 		0, 0, /* No default value */
 		"short-Macro-eNB-ID"
 		},
@@ -204,7 +189,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6,  memb_long_Macro_eNB_ID_constraint_1 },
+		{ 0, &asn_PER_memb_long_Macro_eNB_ID_constr_6,  memb_long_Macro_eNB_ID_constraint_1 },
 		0, 0, /* No default value */
 		"long-Macro-eNB-ID"
 		},
@@ -233,7 +218,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint },
 	asn_MBR_ENB_ID_1,
 	4,	/* Elements count */
 	&asn_SPC_ENB_ID_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/ENB-ID.h b/e2sim/src/ASN1c/ENB-ID.h
index 8e5dcf6..89f3217 100644
--- a/e2sim/src/ASN1c/ENB-ID.h
+++ b/e2sim/src/ASN1c/ENB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ENB_ID_H_
diff --git a/e2sim/src/ASN1c/ENGNB-ID.c b/e2sim/src/ASN1c/ENGNB-ID.c
index d1cfbf9..7f2346c 100644
--- a/e2sim/src/ASN1c/ENGNB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ENGNB-ID.h"
@@ -38,17 +38,11 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(22..32)) */};
 static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 4,  4,  22,  32 }	/* (SIZE(22..32)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -60,7 +54,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2,  memb_gNB_ID_constraint_1 },
+		{ 0, &asn_PER_memb_gNB_ID_constr_2,  memb_gNB_ID_constraint_1 },
 		0, 0, /* No default value */
 		"gNB-ID"
 		},
@@ -86,7 +80,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint },
 	asn_MBR_ENGNB_ID_1,
 	1,	/* Elements count */
 	&asn_SPC_ENGNB_ID_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/ENGNB-ID.h b/e2sim/src/ASN1c/ENGNB-ID.h
index b5aabcf..738674a 100644
--- a/e2sim/src/ASN1c/ENGNB-ID.h
+++ b/e2sim/src/ASN1c/ENGNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ENGNB_ID_H_
diff --git a/e2sim/src/ASN1c/ErrorIndication.c b/e2sim/src/ASN1c/ErrorIndication.c
index 7392861..a042ab0 100644
--- a/e2sim/src/ASN1c/ErrorIndication.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P10,
+		&asn_DEF_ProtocolIE_Container_226P10,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/ErrorIndication.h b/e2sim/src/ASN1c/ErrorIndication.h
index c3b4930..42154e5 100644
--- a/e2sim/src/ASN1c/ErrorIndication.h
+++ b/e2sim/src/ASN1c/ErrorIndication.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ErrorIndication_H_
@@ -21,7 +21,7 @@
 
 /* ErrorIndication */
 typedef struct ErrorIndication {
-	ProtocolIE_Container_1527P10_t	 protocolIEs;
+	ProtocolIE_Container_226P10_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/GNB-CU-UP-ID.c b/e2sim/src/ASN1c/GNB-CU-UP-ID.c
index f6d50d8..f66e62b 100644
--- a/e2sim/src/ASN1c/GNB-CU-UP-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GNB-CU-UP-ID.h"
@@ -42,9 +42,6 @@
  * This type is implemented using INTEGER,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = {
-	{ 8, 1 }	/* (0..68719476735) */,
-	-1};
 asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 36, -1,  0,  68719476735 }	/* (0..68719476735) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -63,7 +60,7 @@
 	asn_DEF_GNB_CU_UP_ID_tags_1,	/* Same as above */
 	sizeof(asn_DEF_GNB_CU_UP_ID_tags_1)
 		/sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint },
+	{ 0, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/GNB-CU-UP-ID.h b/e2sim/src/ASN1c/GNB-CU-UP-ID.h
index a9152e3..6aedbb6 100644
--- a/e2sim/src/ASN1c/GNB-CU-UP-ID.h
+++ b/e2sim/src/ASN1c/GNB-CU-UP-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GNB_CU_UP_ID_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f GNB_CU_UP_ID_encode_der;
 xer_type_decoder_f GNB_CU_UP_ID_decode_xer;
 xer_type_encoder_f GNB_CU_UP_ID_encode_xer;
-oer_type_decoder_f GNB_CU_UP_ID_decode_oer;
-oer_type_encoder_f GNB_CU_UP_ID_encode_oer;
 per_type_decoder_f GNB_CU_UP_ID_decode_uper;
 per_type_encoder_f GNB_CU_UP_ID_encode_uper;
 per_type_decoder_f GNB_CU_UP_ID_decode_aper;
diff --git a/e2sim/src/ASN1c/GNB-DU-ID.c b/e2sim/src/ASN1c/GNB-DU-ID.c
index 5e72065..4eb8a31 100644
--- a/e2sim/src/ASN1c/GNB-DU-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GNB-DU-ID.h"
@@ -42,9 +42,6 @@
  * This type is implemented using INTEGER,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = {
-	{ 8, 1 }	/* (0..68719476735) */,
-	-1};
 asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 36, -1,  0,  68719476735 }	/* (0..68719476735) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -63,7 +60,7 @@
 	asn_DEF_GNB_DU_ID_tags_1,	/* Same as above */
 	sizeof(asn_DEF_GNB_DU_ID_tags_1)
 		/sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint },
+	{ 0, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/GNB-DU-ID.h b/e2sim/src/ASN1c/GNB-DU-ID.h
index 7b460d2..a90c182 100644
--- a/e2sim/src/ASN1c/GNB-DU-ID.h
+++ b/e2sim/src/ASN1c/GNB-DU-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GNB_DU_ID_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f GNB_DU_ID_encode_der;
 xer_type_decoder_f GNB_DU_ID_decode_xer;
 xer_type_encoder_f GNB_DU_ID_encode_xer;
-oer_type_decoder_f GNB_DU_ID_decode_oer;
-oer_type_encoder_f GNB_DU_ID_encode_oer;
 per_type_decoder_f GNB_DU_ID_decode_uper;
 per_type_encoder_f GNB_DU_ID_encode_uper;
 per_type_decoder_f GNB_DU_ID_decode_aper;
diff --git a/e2sim/src/ASN1c/GNB-ID-Choice.c b/e2sim/src/ASN1c/GNB-ID-Choice.c
index 552725f..2894314 100644
--- a/e2sim/src/ASN1c/GNB-ID-Choice.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GNB-ID-Choice.h"
@@ -38,17 +38,11 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(22..32)) */};
 static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 4,  4,  22,  32 }	/* (SIZE(22..32)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -60,7 +54,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2,  memb_gnb_ID_constraint_1 },
+		{ 0, &asn_PER_memb_gnb_ID_constr_2,  memb_gnb_ID_constraint_1 },
 		0, 0, /* No default value */
 		"gnb-ID"
 		},
@@ -86,7 +80,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint },
 	asn_MBR_GNB_ID_Choice_1,
 	1,	/* Elements count */
 	&asn_SPC_GNB_ID_Choice_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/GNB-ID-Choice.h b/e2sim/src/ASN1c/GNB-ID-Choice.h
index 4646519..03b6142 100644
--- a/e2sim/src/ASN1c/GNB-ID-Choice.h
+++ b/e2sim/src/ASN1c/GNB-ID-Choice.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GNB_ID_Choice_H_
diff --git a/e2sim/src/ASN1c/GlobalE2node-ID.c b/e2sim/src/ASN1c/GlobalE2node-ID.c
index cc0a706..d940c03 100644
--- a/e2sim/src/ASN1c/GlobalE2node-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalE2node-ID.h"
@@ -11,15 +11,12 @@
 #include "GlobalE2node-en-gNB-ID.h"
 #include "GlobalE2node-ng-eNB-ID.h"
 #include "GlobalE2node-eNB-ID.h"
-static asn_oer_constraints_t asn_OER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = {
+asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = {
 	{ ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -63,7 +60,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */
 };
-static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = {
+asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = {
 	sizeof(struct GlobalE2node_ID),
 	offsetof(struct GlobalE2node_ID, _asn_ctx),
 	offsetof(struct GlobalE2node_ID, present),
@@ -81,7 +78,7 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_GlobalE2node_ID_constr_1, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint },
+	{ 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint },
 	asn_MBR_GlobalE2node_ID_1,
 	4,	/* Elements count */
 	&asn_SPC_GlobalE2node_ID_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/GlobalE2node-ID.h b/e2sim/src/ASN1c/GlobalE2node-ID.h
index 6257cd1..52baad2 100644
--- a/e2sim/src/ASN1c/GlobalE2node-ID.h
+++ b/e2sim/src/ASN1c/GlobalE2node-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalE2node_ID_H_
@@ -55,6 +55,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID;
+extern asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[4];
+extern asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c
index cdc62e7..bccce7b 100644
--- a/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalE2node-eNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h
index a3fa696..72696c5 100644
--- a/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalE2node_eNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c
index ee8b882..f9a8ae4 100644
--- a/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c
+++ b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalE2node-en-gNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h
index 037537a..314ea88 100644
--- a/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalE2node_en_gNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c
index ea2e38c..7a4810c 100644
--- a/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c
+++ b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalE2node-gNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h
index 8f15471..d160c4c 100644
--- a/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalE2node_gNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c
index f942bce..c37ded1 100644
--- a/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c
+++ b/e2sim/src/ASN1c/GlobalE2node-ng-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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalE2node-ng-eNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h
index 0311e40..b4042c5 100644
--- a/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalE2node_ng_eNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalENB-ID.c b/e2sim/src/ASN1c/GlobalENB-ID.c
index 6ceca00..ad5b9fa 100644
--- a/e2sim/src/ASN1c/GlobalENB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalENB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalENB-ID.h b/e2sim/src/ASN1c/GlobalENB-ID.h
index c8683e2..f38829a 100644
--- a/e2sim/src/ASN1c/GlobalENB-ID.h
+++ b/e2sim/src/ASN1c/GlobalENB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalENB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalRIC-ID.c b/e2sim/src/ASN1c/GlobalRIC-ID.c
index 9f85294..19260d0 100644
--- a/e2sim/src/ASN1c/GlobalRIC-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalRIC-ID.h"
@@ -38,15 +38,12 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_ric_ID_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	20	/* (SIZE(20..20)) */};
 static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  20,  20 }	/* (SIZE(20..20)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = {
+asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -61,7 +58,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
 		0,
-		{ &asn_OER_memb_ric_ID_constr_3, &asn_PER_memb_ric_ID_constr_3,  memb_ric_ID_constraint_1 },
+		{ 0, &asn_PER_memb_ric_ID_constr_3,  memb_ric_ID_constraint_1 },
 		0, 0, /* No default value */
 		"ric-ID"
 		},
@@ -73,7 +70,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = {
 	sizeof(struct GlobalRIC_ID),
 	offsetof(struct GlobalRIC_ID, _asn_ctx),
 	asn_MAP_GlobalRIC_ID_tag2el_1,
diff --git a/e2sim/src/ASN1c/GlobalRIC-ID.h b/e2sim/src/ASN1c/GlobalRIC-ID.h
index 7b7fc65..6024a04 100644
--- a/e2sim/src/ASN1c/GlobalRIC-ID.h
+++ b/e2sim/src/ASN1c/GlobalRIC-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalRIC_ID_H_
@@ -35,6 +35,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[2];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/GlobalenGNB-ID.c b/e2sim/src/ASN1c/GlobalenGNB-ID.c
index cdf362c..46a641a 100644
--- a/e2sim/src/ASN1c/GlobalenGNB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalenGNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalenGNB-ID.h b/e2sim/src/ASN1c/GlobalenGNB-ID.h
index 75933b6..bb96628 100644
--- a/e2sim/src/ASN1c/GlobalenGNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalenGNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalenGNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalgNB-ID.c b/e2sim/src/ASN1c/GlobalgNB-ID.c
index 740f552..a143609 100644
--- a/e2sim/src/ASN1c/GlobalgNB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalgNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalgNB-ID.h b/e2sim/src/ASN1c/GlobalgNB-ID.h
index ac18b81..7061c98 100644
--- a/e2sim/src/ASN1c/GlobalgNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalgNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalgNB_ID_H_
diff --git a/e2sim/src/ASN1c/GlobalngeNB-ID.c b/e2sim/src/ASN1c/GlobalngeNB-ID.c
index a3dfaed..8694350 100644
--- a/e2sim/src/ASN1c/GlobalngeNB-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "GlobalngeNB-ID.h"
diff --git a/e2sim/src/ASN1c/GlobalngeNB-ID.h b/e2sim/src/ASN1c/GlobalngeNB-ID.h
index 843002a..5f3cf3d 100644
--- a/e2sim/src/ASN1c/GlobalngeNB-ID.h
+++ b/e2sim/src/ASN1c/GlobalngeNB-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_GlobalngeNB_ID_H_
diff --git a/e2sim/src/ASN1c/InitiatingMessage.c b/e2sim/src/ASN1c/InitiatingMessage.c
index 9dc4ccf..4a7db12 100644
--- a/e2sim/src/ASN1c/InitiatingMessage.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "InitiatingMessage.h"
@@ -17,14 +17,18 @@
 static const long asn_VAL_4_reject = 0;
 static const long asn_VAL_5_id_E2setup = 1;
 static const long asn_VAL_5_reject = 0;
-static const long asn_VAL_6_id_Reset = 3;
+static const long asn_VAL_6_id_E2nodeConfigurationUpdate = 10;
 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_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_7_id_E2connectionUpdate = 11;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_Reset = 3;
+static const long asn_VAL_8_reject = 0;
+static const long asn_VAL_9_id_RICindication = 5;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_RICserviceQuery = 6;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_ErrorIndication = 2;
+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 },
@@ -51,29 +55,39 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_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_6_id_E2nodeConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2connectionUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2connectionUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_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 },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_Reset },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_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_9_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_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_10_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_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_11_id_ErrorIndication },
+	{ "&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,
@@ -192,25 +206,16 @@
 	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
-static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_3 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_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -262,6 +267,24 @@
 		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.E2connectionUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdate"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -300,15 +323,17 @@
 		},
 };
 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 }, /* RICserviceUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 7 }, /* RICcontrolRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 6 }, /* E2setupRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 5 }, /* E2nodeConfigurationUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 4 }, /* E2connectionUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 3 }, /* ResetRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 2 }, /* RICindication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 1 }, /* RICserviceQuery */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 0 } /* ErrorIndication */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct InitiatingMessage__value),
@@ -316,7 +341,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 +356,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 */
 };
 
@@ -341,7 +366,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProcedureCode,
 		0,
-		{ &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
+		{ 0, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
 		0, 0, /* No default value */
 		"procedureCode"
 		},
@@ -350,7 +375,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_InitiatingMessage_criticality_type,
-		{ &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
+		{ 0, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
 		0, 0, /* No default value */
 		"criticality"
 		},
@@ -359,7 +384,7 @@
 		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_4,
 		select_InitiatingMessage_value_type,
-		{ &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
+		{ 0, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
 		0, 0, /* No default value */
 		"value"
 		},
diff --git a/e2sim/src/ASN1c/InitiatingMessage.h b/e2sim/src/ASN1c/InitiatingMessage.h
index cea345e..9a4d02d 100644
--- a/e2sim/src/ASN1c/InitiatingMessage.h
+++ b/e2sim/src/ASN1c/InitiatingMessage.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_InitiatingMessage_H_
@@ -31,6 +31,12 @@
 #include "E2setupRequest.h"
 #include "E2setupResponse.h"
 #include "E2setupFailure.h"
+#include "E2nodeConfigurationUpdate.h"
+#include "E2nodeConfigurationUpdateAcknowledge.h"
+#include "E2nodeConfigurationUpdateFailure.h"
+#include "E2connectionUpdate.h"
+#include "E2connectionUpdateAcknowledge.h"
+#include "E2connectionUpdateFailure.h"
 #include "ResetRequest.h"
 #include "ResetResponse.h"
 #include "RICindication.h"
@@ -52,6 +58,8 @@
 	InitiatingMessage__value_PR_RICserviceUpdate,
 	InitiatingMessage__value_PR_RICcontrolRequest,
 	InitiatingMessage__value_PR_E2setupRequest,
+	InitiatingMessage__value_PR_E2nodeConfigurationUpdate,
+	InitiatingMessage__value_PR_E2connectionUpdate,
 	InitiatingMessage__value_PR_ResetRequest,
 	InitiatingMessage__value_PR_RICindication,
 	InitiatingMessage__value_PR_RICserviceQuery,
@@ -70,6 +78,8 @@
 			RICserviceUpdate_t	 RICserviceUpdate;
 			RICcontrolRequest_t	 RICcontrolRequest;
 			E2setupRequest_t	 E2setupRequest;
+			E2nodeConfigurationUpdate_t	 E2nodeConfigurationUpdate;
+			E2connectionUpdate_t	 E2connectionUpdate;
 			ResetRequest_t	 ResetRequest;
 			RICindication_t	 RICindication;
 			RICserviceQuery_t	 RICserviceQuery;
diff --git a/e2sim/src/ASN1c/Makefile.am.libasncodec b/e2sim/src/ASN1c/Makefile.am.libasncodec
index 7a4c612..215ef0a 100644
--- a/e2sim/src/ASN1c/Makefile.am.libasncodec
+++ b/e2sim/src/ASN1c/Makefile.am.libasncodec
@@ -1,288 +1,333 @@
 ASN_MODULE_SRCS=	\
-	./E2AP-PDU.c	\
-	./InitiatingMessage.c	\
-	./SuccessfulOutcome.c	\
-	./UnsuccessfulOutcome.c	\
-	./RICsubscriptionRequest.c	\
-	./RICsubscriptionDetails.c	\
-	./RICactions-ToBeSetup-List.c	\
-	./RICaction-ToBeSetup-Item.c	\
-	./RICsubscriptionResponse.c	\
-	./RICaction-Admitted-List.c	\
-	./RICaction-Admitted-Item.c	\
-	./RICaction-NotAdmitted-List.c	\
-	./RICaction-NotAdmitted-Item.c	\
-	./RICsubscriptionFailure.c	\
-	./RICsubscriptionDeleteRequest.c	\
-	./RICsubscriptionDeleteResponse.c	\
-	./RICsubscriptionDeleteFailure.c	\
-	./RICindication.c	\
-	./RICcontrolRequest.c	\
-	./RICcontrolAcknowledge.c	\
-	./RICcontrolFailure.c	\
-	./ErrorIndication.c	\
-	./E2setupRequest.c	\
-	./E2setupResponse.c	\
-	./E2setupFailure.c	\
-	./ResetRequest.c	\
-	./ResetResponse.c	\
-	./RICserviceUpdate.c	\
-	./RANfunctions-List.c	\
-	./RANfunction-Item.c	\
-	./RANfunctionsID-List.c	\
-	./RANfunctionID-Item.c	\
-	./RICserviceUpdateAcknowledge.c	\
-	./RANfunctionsIDcause-List.c	\
-	./RANfunctionIDcause-Item.c	\
-	./RICserviceUpdateFailure.c	\
-	./RICserviceQuery.c	\
-	./Cause.c	\
-	./CauseMisc.c	\
-	./CauseProtocol.c	\
-	./CauseRIC.c	\
-	./CauseRICservice.c	\
-	./CauseTransport.c	\
-	./CriticalityDiagnostics.c	\
-	./CriticalityDiagnostics-IE-List.c	\
-	./CriticalityDiagnostics-IE-Item.c	\
-	./ENB-ID.c	\
-	./ENB-ID-Choice.c	\
-	./ENGNB-ID.c	\
-	./GlobalE2node-ID.c	\
-	./GlobalE2node-en-gNB-ID.c	\
-	./GlobalE2node-eNB-ID.c	\
-	./GlobalE2node-gNB-ID.c	\
-	./GlobalE2node-ng-eNB-ID.c	\
-	./GlobalENB-ID.c	\
-	./GlobalenGNB-ID.c	\
-	./GlobalgNB-ID.c	\
-	./GlobalngeNB-ID.c	\
-	./GlobalRIC-ID.c	\
-	./GNB-CU-UP-ID.c	\
-	./GNB-DU-ID.c	\
-	./GNB-ID-Choice.c	\
-	./PLMN-Identity.c	\
-	./RANfunctionDefinition.c	\
-	./RANfunctionID.c	\
-	./RANfunctionRevision.c	\
-	./RICactionDefinition.c	\
-	./RICactionID.c	\
-	./RICactionType.c	\
-	./RICcallProcessID.c	\
-	./RICcontrolAckRequest.c	\
-	./RICcontrolHeader.c	\
-	./RICcontrolMessage.c	\
-	./RICcontrolOutcome.c	\
-	./RICcontrolStatus.c	\
-	./RICeventTriggerDefinition.c	\
-	./RICindicationHeader.c	\
-	./RICindicationMessage.c	\
-	./RICindicationSN.c	\
-	./RICindicationType.c	\
-	./RICrequestID.c	\
-	./RICsubsequentAction.c	\
-	./RICsubsequentActionType.c	\
-	./RICtimeToWait.c	\
-	./TimeToWait.c	\
-	./TypeOfError.c	\
-	./Criticality.c	\
-	./Presence.c	\
-	./ProcedureCode.c	\
-	./ProtocolIE-ID.c	\
-	./TriggeringMessage.c	\
-	./ProtocolIE-Container.c	\
-	./ProtocolIE-SingleContainer.c	\
-	./ProtocolIE-Field.c	\
-	./ProtocolIE-ContainerPair.c	\
-	./ProtocolIE-FieldPair.c	\
-	./ProtocolIE-ContainerList.c	\
-	./ProtocolIE-ContainerPairList.c
+	Criticality.c	\
+	Presence.c	\
+	ProcedureCode.c	\
+	ProtocolIE-ID.c	\
+	TriggeringMessage.c	\
+	ProtocolIE-Container.c	\
+	ProtocolIE-SingleContainer.c	\
+	ProtocolIE-Field.c	\
+	ProtocolIE-ContainerPair.c	\
+	ProtocolIE-FieldPair.c	\
+	ProtocolIE-ContainerList.c	\
+	ProtocolIE-ContainerPairList.c	\
+	Cause.c	\
+	CauseMisc.c	\
+	CauseProtocol.c	\
+	CauseRIC.c	\
+	CauseRICservice.c	\
+	CauseTransport.c	\
+	CriticalityDiagnostics.c	\
+	CriticalityDiagnostics-IE-List.c	\
+	CriticalityDiagnostics-IE-Item.c	\
+	E2nodeComponentConfigUpdate.c	\
+	E2nodeComponentConfigUpdateGNB.c	\
+	E2nodeComponentConfigUpdateENgNB.c	\
+	E2nodeComponentConfigUpdateNGeNB.c	\
+	E2nodeComponentConfigUpdateENB.c	\
+	E2nodeComponentConfigUpdateAck.c	\
+	E2nodeComponentType.c	\
+	E2nodeComponentID.c	\
+	E2nodeComponentGNB-CU-UP-ID.c	\
+	E2nodeComponentGNB-DU-ID.c	\
+	ENB-ID.c	\
+	ENB-ID-Choice.c	\
+	ENGNB-ID.c	\
+	GlobalE2node-ID.c	\
+	GlobalE2node-en-gNB-ID.c	\
+	GlobalE2node-eNB-ID.c	\
+	GlobalE2node-gNB-ID.c	\
+	GlobalE2node-ng-eNB-ID.c	\
+	GlobalENB-ID.c	\
+	GlobalenGNB-ID.c	\
+	GlobalgNB-ID.c	\
+	GlobalngeNB-ID.c	\
+	GlobalRIC-ID.c	\
+	GNB-CU-UP-ID.c	\
+	GNB-DU-ID.c	\
+	GNB-ID-Choice.c	\
+	PLMN-Identity.c	\
+	RANfunctionDefinition.c	\
+	RANfunctionID.c	\
+	RANfunctionOID.c	\
+	RANfunctionRevision.c	\
+	RICactionDefinition.c	\
+	RICactionID.c	\
+	RICactionType.c	\
+	RICcallProcessID.c	\
+	RICcontrolAckRequest.c	\
+	RICcontrolHeader.c	\
+	RICcontrolMessage.c	\
+	RICcontrolOutcome.c	\
+	RICcontrolStatus.c	\
+	RICeventTriggerDefinition.c	\
+	RICindicationHeader.c	\
+	RICindicationMessage.c	\
+	RICindicationSN.c	\
+	RICindicationType.c	\
+	RICrequestID.c	\
+	RICsubsequentAction.c	\
+	RICsubsequentActionType.c	\
+	RICtimeToWait.c	\
+	TimeToWait.c	\
+	TNLinformation.c	\
+	TNLusage.c	\
+	TypeOfError.c	\
+	E2AP-PDU.c	\
+	InitiatingMessage.c	\
+	SuccessfulOutcome.c	\
+	UnsuccessfulOutcome.c	\
+	RICsubscriptionRequest.c	\
+	RICsubscriptionDetails.c	\
+	RICactions-ToBeSetup-List.c	\
+	RICaction-ToBeSetup-Item.c	\
+	RICsubscriptionResponse.c	\
+	RICaction-Admitted-List.c	\
+	RICaction-Admitted-Item.c	\
+	RICaction-NotAdmitted-List.c	\
+	RICaction-NotAdmitted-Item.c	\
+	RICsubscriptionFailure.c	\
+	RICsubscriptionDeleteRequest.c	\
+	RICsubscriptionDeleteResponse.c	\
+	RICsubscriptionDeleteFailure.c	\
+	RICindication.c	\
+	RICcontrolRequest.c	\
+	RICcontrolAcknowledge.c	\
+	RICcontrolFailure.c	\
+	ErrorIndication.c	\
+	E2setupRequest.c	\
+	E2setupResponse.c	\
+	E2setupFailure.c	\
+	E2connectionUpdate.c	\
+	E2connectionUpdate-List.c	\
+	E2connectionUpdate-Item.c	\
+	E2connectionUpdateRemove-List.c	\
+	E2connectionUpdateRemove-Item.c	\
+	E2connectionUpdateAcknowledge.c	\
+	E2connectionSetupFailed-List.c	\
+	E2connectionSetupFailed-Item.c	\
+	E2connectionUpdateFailure.c	\
+	E2nodeConfigurationUpdate.c	\
+	E2nodeComponentConfigUpdate-List.c	\
+	E2nodeComponentConfigUpdate-Item.c	\
+	E2nodeConfigurationUpdateAcknowledge.c	\
+	E2nodeComponentConfigUpdateAck-List.c	\
+	E2nodeComponentConfigUpdateAck-Item.c	\
+	E2nodeConfigurationUpdateFailure.c	\
+	ResetRequest.c	\
+	ResetResponse.c	\
+	RICserviceUpdate.c	\
+	RANfunctions-List.c	\
+	RANfunction-Item.c	\
+	RANfunctionsID-List.c	\
+	RANfunctionID-Item.c	\
+	RICserviceUpdateAcknowledge.c	\
+	RANfunctionsIDcause-List.c	\
+	RANfunctionIDcause-Item.c	\
+	RICserviceUpdateFailure.c	\
+	RICserviceQuery.c
 
 ASN_MODULE_HDRS=	\
-	./E2AP-PDU.h	\
-	./InitiatingMessage.h	\
-	./SuccessfulOutcome.h	\
-	./UnsuccessfulOutcome.h	\
-	./RICsubscriptionRequest.h	\
-	./RICsubscriptionDetails.h	\
-	./RICactions-ToBeSetup-List.h	\
-	./RICaction-ToBeSetup-Item.h	\
-	./RICsubscriptionResponse.h	\
-	./RICaction-Admitted-List.h	\
-	./RICaction-Admitted-Item.h	\
-	./RICaction-NotAdmitted-List.h	\
-	./RICaction-NotAdmitted-Item.h	\
-	./RICsubscriptionFailure.h	\
-	./RICsubscriptionDeleteRequest.h	\
-	./RICsubscriptionDeleteResponse.h	\
-	./RICsubscriptionDeleteFailure.h	\
-	./RICindication.h	\
-	./RICcontrolRequest.h	\
-	./RICcontrolAcknowledge.h	\
-	./RICcontrolFailure.h	\
-	./ErrorIndication.h	\
-	./E2setupRequest.h	\
-	./E2setupResponse.h	\
-	./E2setupFailure.h	\
-	./ResetRequest.h	\
-	./ResetResponse.h	\
-	./RICserviceUpdate.h	\
-	./RANfunctions-List.h	\
-	./RANfunction-Item.h	\
-	./RANfunctionsID-List.h	\
-	./RANfunctionID-Item.h	\
-	./RICserviceUpdateAcknowledge.h	\
-	./RANfunctionsIDcause-List.h	\
-	./RANfunctionIDcause-Item.h	\
-	./RICserviceUpdateFailure.h	\
-	./RICserviceQuery.h	\
-	./Cause.h	\
-	./CauseMisc.h	\
-	./CauseProtocol.h	\
-	./CauseRIC.h	\
-	./CauseRICservice.h	\
-	./CauseTransport.h	\
-	./CriticalityDiagnostics.h	\
-	./CriticalityDiagnostics-IE-List.h	\
-	./CriticalityDiagnostics-IE-Item.h	\
-	./ENB-ID.h	\
-	./ENB-ID-Choice.h	\
-	./ENGNB-ID.h	\
-	./GlobalE2node-ID.h	\
-	./GlobalE2node-en-gNB-ID.h	\
-	./GlobalE2node-eNB-ID.h	\
-	./GlobalE2node-gNB-ID.h	\
-	./GlobalE2node-ng-eNB-ID.h	\
-	./GlobalENB-ID.h	\
-	./GlobalenGNB-ID.h	\
-	./GlobalgNB-ID.h	\
-	./GlobalngeNB-ID.h	\
-	./GlobalRIC-ID.h	\
-	./GNB-CU-UP-ID.h	\
-	./GNB-DU-ID.h	\
-	./GNB-ID-Choice.h	\
-	./PLMN-Identity.h	\
-	./RANfunctionDefinition.h	\
-	./RANfunctionID.h	\
-	./RANfunctionRevision.h	\
-	./RICactionDefinition.h	\
-	./RICactionID.h	\
-	./RICactionType.h	\
-	./RICcallProcessID.h	\
-	./RICcontrolAckRequest.h	\
-	./RICcontrolHeader.h	\
-	./RICcontrolMessage.h	\
-	./RICcontrolOutcome.h	\
-	./RICcontrolStatus.h	\
-	./RICeventTriggerDefinition.h	\
-	./RICindicationHeader.h	\
-	./RICindicationMessage.h	\
-	./RICindicationSN.h	\
-	./RICindicationType.h	\
-	./RICrequestID.h	\
-	./RICsubsequentAction.h	\
-	./RICsubsequentActionType.h	\
-	./RICtimeToWait.h	\
-	./TimeToWait.h	\
-	./TypeOfError.h	\
-	./Criticality.h	\
-	./Presence.h	\
-	./ProcedureCode.h	\
-	./ProtocolIE-ID.h	\
-	./TriggeringMessage.h	\
-	./ProtocolIE-Container.h	\
-	./ProtocolIE-SingleContainer.h	\
-	./ProtocolIE-Field.h	\
-	./ProtocolIE-ContainerPair.h	\
-	./ProtocolIE-FieldPair.h	\
-	./ProtocolIE-ContainerList.h	\
-	./ProtocolIE-ContainerPairList.h
+	Criticality.h	\
+	Presence.h	\
+	ProcedureCode.h	\
+	ProtocolIE-ID.h	\
+	TriggeringMessage.h	\
+	ProtocolIE-Container.h	\
+	ProtocolIE-SingleContainer.h	\
+	ProtocolIE-Field.h	\
+	ProtocolIE-ContainerPair.h	\
+	ProtocolIE-FieldPair.h	\
+	ProtocolIE-ContainerList.h	\
+	ProtocolIE-ContainerPairList.h	\
+	Cause.h	\
+	CauseMisc.h	\
+	CauseProtocol.h	\
+	CauseRIC.h	\
+	CauseRICservice.h	\
+	CauseTransport.h	\
+	CriticalityDiagnostics.h	\
+	CriticalityDiagnostics-IE-List.h	\
+	CriticalityDiagnostics-IE-Item.h	\
+	E2nodeComponentConfigUpdate.h	\
+	E2nodeComponentConfigUpdateGNB.h	\
+	E2nodeComponentConfigUpdateENgNB.h	\
+	E2nodeComponentConfigUpdateNGeNB.h	\
+	E2nodeComponentConfigUpdateENB.h	\
+	E2nodeComponentConfigUpdateAck.h	\
+	E2nodeComponentType.h	\
+	E2nodeComponentID.h	\
+	E2nodeComponentGNB-CU-UP-ID.h	\
+	E2nodeComponentGNB-DU-ID.h	\
+	ENB-ID.h	\
+	ENB-ID-Choice.h	\
+	ENGNB-ID.h	\
+	GlobalE2node-ID.h	\
+	GlobalE2node-en-gNB-ID.h	\
+	GlobalE2node-eNB-ID.h	\
+	GlobalE2node-gNB-ID.h	\
+	GlobalE2node-ng-eNB-ID.h	\
+	GlobalENB-ID.h	\
+	GlobalenGNB-ID.h	\
+	GlobalgNB-ID.h	\
+	GlobalngeNB-ID.h	\
+	GlobalRIC-ID.h	\
+	GNB-CU-UP-ID.h	\
+	GNB-DU-ID.h	\
+	GNB-ID-Choice.h	\
+	PLMN-Identity.h	\
+	RANfunctionDefinition.h	\
+	RANfunctionID.h	\
+	RANfunctionOID.h	\
+	RANfunctionRevision.h	\
+	RICactionDefinition.h	\
+	RICactionID.h	\
+	RICactionType.h	\
+	RICcallProcessID.h	\
+	RICcontrolAckRequest.h	\
+	RICcontrolHeader.h	\
+	RICcontrolMessage.h	\
+	RICcontrolOutcome.h	\
+	RICcontrolStatus.h	\
+	RICeventTriggerDefinition.h	\
+	RICindicationHeader.h	\
+	RICindicationMessage.h	\
+	RICindicationSN.h	\
+	RICindicationType.h	\
+	RICrequestID.h	\
+	RICsubsequentAction.h	\
+	RICsubsequentActionType.h	\
+	RICtimeToWait.h	\
+	TimeToWait.h	\
+	TNLinformation.h	\
+	TNLusage.h	\
+	TypeOfError.h	\
+	E2AP-PDU.h	\
+	InitiatingMessage.h	\
+	SuccessfulOutcome.h	\
+	UnsuccessfulOutcome.h	\
+	RICsubscriptionRequest.h	\
+	RICsubscriptionDetails.h	\
+	RICactions-ToBeSetup-List.h	\
+	RICaction-ToBeSetup-Item.h	\
+	RICsubscriptionResponse.h	\
+	RICaction-Admitted-List.h	\
+	RICaction-Admitted-Item.h	\
+	RICaction-NotAdmitted-List.h	\
+	RICaction-NotAdmitted-Item.h	\
+	RICsubscriptionFailure.h	\
+	RICsubscriptionDeleteRequest.h	\
+	RICsubscriptionDeleteResponse.h	\
+	RICsubscriptionDeleteFailure.h	\
+	RICindication.h	\
+	RICcontrolRequest.h	\
+	RICcontrolAcknowledge.h	\
+	RICcontrolFailure.h	\
+	ErrorIndication.h	\
+	E2setupRequest.h	\
+	E2setupResponse.h	\
+	E2setupFailure.h	\
+	E2connectionUpdate.h	\
+	E2connectionUpdate-List.h	\
+	E2connectionUpdate-Item.h	\
+	E2connectionUpdateRemove-List.h	\
+	E2connectionUpdateRemove-Item.h	\
+	E2connectionUpdateAcknowledge.h	\
+	E2connectionSetupFailed-List.h	\
+	E2connectionSetupFailed-Item.h	\
+	E2connectionUpdateFailure.h	\
+	E2nodeConfigurationUpdate.h	\
+	E2nodeComponentConfigUpdate-List.h	\
+	E2nodeComponentConfigUpdate-Item.h	\
+	E2nodeConfigurationUpdateAcknowledge.h	\
+	E2nodeComponentConfigUpdateAck-List.h	\
+	E2nodeComponentConfigUpdateAck-Item.h	\
+	E2nodeConfigurationUpdateFailure.h	\
+	ResetRequest.h	\
+	ResetResponse.h	\
+	RICserviceUpdate.h	\
+	RANfunctions-List.h	\
+	RANfunction-Item.h	\
+	RANfunctionsID-List.h	\
+	RANfunctionID-Item.h	\
+	RICserviceUpdateAcknowledge.h	\
+	RANfunctionsIDcause-List.h	\
+	RANfunctionIDcause-Item.h	\
+	RICserviceUpdateFailure.h	\
+	RICserviceQuery.h
 
-ASN_MODULE_HDRS+=./ANY.h
-ASN_MODULE_SRCS+=./ANY.c
-ASN_MODULE_HDRS+=./OCTET_STRING.h
-ASN_MODULE_HDRS+=./OPEN_TYPE.h
-ASN_MODULE_SRCS+=./OPEN_TYPE.c
-ASN_MODULE_HDRS+=./constr_CHOICE.h
-ASN_MODULE_HDRS+=./INTEGER.h
-ASN_MODULE_SRCS+=./INTEGER.c
-ASN_MODULE_HDRS+=./NativeEnumerated.h
-ASN_MODULE_SRCS+=./NativeEnumerated.c
-ASN_MODULE_HDRS+=./NativeInteger.h
-ASN_MODULE_SRCS+=./NativeInteger.c
-ASN_MODULE_HDRS+=./asn_SEQUENCE_OF.h
-ASN_MODULE_SRCS+=./asn_SEQUENCE_OF.c
-ASN_MODULE_HDRS+=./asn_SET_OF.h
-ASN_MODULE_SRCS+=./asn_SET_OF.c
-ASN_MODULE_SRCS+=./constr_CHOICE.c
-ASN_MODULE_HDRS+=./constr_SEQUENCE.h
-ASN_MODULE_SRCS+=./constr_SEQUENCE.c
-ASN_MODULE_HDRS+=./constr_SEQUENCE_OF.h
-ASN_MODULE_SRCS+=./constr_SEQUENCE_OF.c
-ASN_MODULE_HDRS+=./constr_SET_OF.h
-ASN_MODULE_SRCS+=./constr_SET_OF.c
-ASN_MODULE_HDRS+=./asn_application.h
-ASN_MODULE_SRCS+=./asn_application.c
-ASN_MODULE_HDRS+=./asn_ioc.h
-ASN_MODULE_HDRS+=./asn_system.h
-ASN_MODULE_HDRS+=./asn_codecs.h
-ASN_MODULE_HDRS+=./asn_internal.h
-ASN_MODULE_SRCS+=./asn_internal.c
-ASN_MODULE_HDRS+=./asn_random_fill.h
-ASN_MODULE_SRCS+=./asn_random_fill.c
-ASN_MODULE_HDRS+=./asn_bit_data.h
-ASN_MODULE_SRCS+=./asn_bit_data.c
-ASN_MODULE_SRCS+=./OCTET_STRING.c
-ASN_MODULE_HDRS+=./BIT_STRING.h
-ASN_MODULE_SRCS+=./BIT_STRING.c
-ASN_MODULE_SRCS+=./asn_codecs_prim.c
-ASN_MODULE_HDRS+=./asn_codecs_prim.h
-ASN_MODULE_HDRS+=./ber_tlv_length.h
-ASN_MODULE_SRCS+=./ber_tlv_length.c
-ASN_MODULE_HDRS+=./ber_tlv_tag.h
-ASN_MODULE_SRCS+=./ber_tlv_tag.c
-ASN_MODULE_HDRS+=./ber_decoder.h
-ASN_MODULE_SRCS+=./ber_decoder.c
-ASN_MODULE_HDRS+=./der_encoder.h
-ASN_MODULE_SRCS+=./der_encoder.c
-ASN_MODULE_HDRS+=./constr_TYPE.h
-ASN_MODULE_SRCS+=./constr_TYPE.c
-ASN_MODULE_HDRS+=./constraints.h
-ASN_MODULE_SRCS+=./constraints.c
-ASN_MODULE_HDRS+=./xer_support.h
-ASN_MODULE_SRCS+=./xer_support.c
-ASN_MODULE_HDRS+=./xer_decoder.h
-ASN_MODULE_SRCS+=./xer_decoder.c
-ASN_MODULE_HDRS+=./xer_encoder.h
-ASN_MODULE_SRCS+=./xer_encoder.c
-ASN_MODULE_HDRS+=./per_support.h
-ASN_MODULE_SRCS+=./per_support.c
-ASN_MODULE_HDRS+=./per_decoder.h
-ASN_MODULE_SRCS+=./per_decoder.c
-ASN_MODULE_HDRS+=./per_encoder.h
-ASN_MODULE_SRCS+=./per_encoder.c
-ASN_MODULE_HDRS+=./per_opentype.h
-ASN_MODULE_SRCS+=./per_opentype.c
-ASN_MODULE_HDRS+=./oer_decoder.h
-ASN_MODULE_HDRS+=./oer_encoder.h
-ASN_MODULE_HDRS+=./oer_support.h
-ASN_MODULE_SRCS+=./oer_decoder.c
-ASN_MODULE_SRCS+=./oer_encoder.c
-ASN_MODULE_SRCS+=./oer_support.c
-ASN_MODULE_SRCS+=./OPEN_TYPE_oer.c
-ASN_MODULE_SRCS+=./INTEGER_oer.c
-ASN_MODULE_SRCS+=./BIT_STRING_oer.c
-ASN_MODULE_SRCS+=./OCTET_STRING_oer.c
-ASN_MODULE_SRCS+=./NativeInteger_oer.c
-ASN_MODULE_SRCS+=./NativeEnumerated_oer.c
-ASN_MODULE_SRCS+=./constr_CHOICE_oer.c
-ASN_MODULE_SRCS+=./constr_SEQUENCE_oer.c
-ASN_MODULE_SRCS+=./constr_SET_OF_oer.c
+ASN_MODULE_HDRS+=ANY.h
+ASN_MODULE_SRCS+=ANY.c
+ASN_MODULE_HDRS+=OCTET_STRING.h
+ASN_MODULE_HDRS+=OPEN_TYPE.h
+ASN_MODULE_SRCS+=OPEN_TYPE.c
+ASN_MODULE_HDRS+=constr_CHOICE.h
+ASN_MODULE_HDRS+=INTEGER.h
+ASN_MODULE_SRCS+=INTEGER.c
+ASN_MODULE_HDRS+=NativeEnumerated.h
+ASN_MODULE_SRCS+=NativeEnumerated.c
+ASN_MODULE_HDRS+=NativeInteger.h
+ASN_MODULE_SRCS+=NativeInteger.c
+ASN_MODULE_HDRS+=PrintableString.h
+ASN_MODULE_SRCS+=PrintableString.c
+ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h
+ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c
+ASN_MODULE_HDRS+=asn_SET_OF.h
+ASN_MODULE_SRCS+=asn_SET_OF.c
+ASN_MODULE_SRCS+=constr_CHOICE.c
+ASN_MODULE_HDRS+=constr_SEQUENCE.h
+ASN_MODULE_SRCS+=constr_SEQUENCE.c
+ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h
+ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c
+ASN_MODULE_HDRS+=constr_SET_OF.h
+ASN_MODULE_SRCS+=constr_SET_OF.c
+ASN_MODULE_HDRS+=asn_application.h
+ASN_MODULE_SRCS+=asn_application.c
+ASN_MODULE_HDRS+=asn_ioc.h
+ASN_MODULE_HDRS+=asn_system.h
+ASN_MODULE_HDRS+=asn_codecs.h
+ASN_MODULE_HDRS+=asn_internal.h
+ASN_MODULE_SRCS+=asn_internal.c
+ASN_MODULE_HDRS+=asn_random_fill.h
+ASN_MODULE_SRCS+=asn_random_fill.c
+ASN_MODULE_HDRS+=asn_bit_data.h
+ASN_MODULE_SRCS+=asn_bit_data.c
+ASN_MODULE_SRCS+=OCTET_STRING.c
+ASN_MODULE_HDRS+=BIT_STRING.h
+ASN_MODULE_SRCS+=BIT_STRING.c
+ASN_MODULE_SRCS+=asn_codecs_prim.c
+ASN_MODULE_HDRS+=asn_codecs_prim.h
+ASN_MODULE_HDRS+=ber_tlv_length.h
+ASN_MODULE_SRCS+=ber_tlv_length.c
+ASN_MODULE_HDRS+=ber_tlv_tag.h
+ASN_MODULE_SRCS+=ber_tlv_tag.c
+ASN_MODULE_HDRS+=ber_decoder.h
+ASN_MODULE_SRCS+=ber_decoder.c
+ASN_MODULE_HDRS+=der_encoder.h
+ASN_MODULE_SRCS+=der_encoder.c
+ASN_MODULE_HDRS+=constr_TYPE.h
+ASN_MODULE_SRCS+=constr_TYPE.c
+ASN_MODULE_HDRS+=constraints.h
+ASN_MODULE_SRCS+=constraints.c
+ASN_MODULE_HDRS+=xer_support.h
+ASN_MODULE_SRCS+=xer_support.c
+ASN_MODULE_HDRS+=xer_decoder.h
+ASN_MODULE_SRCS+=xer_decoder.c
+ASN_MODULE_HDRS+=xer_encoder.h
+ASN_MODULE_SRCS+=xer_encoder.c
+ASN_MODULE_HDRS+=per_support.h
+ASN_MODULE_SRCS+=per_support.c
+ASN_MODULE_HDRS+=per_decoder.h
+ASN_MODULE_SRCS+=per_decoder.c
+ASN_MODULE_HDRS+=per_encoder.h
+ASN_MODULE_SRCS+=per_encoder.c
+ASN_MODULE_HDRS+=per_opentype.h
+ASN_MODULE_SRCS+=per_opentype.c
 
-ASN_MODULE_CFLAGS=
+ASN_MODULE_CFLAGS=-DASN_DISABLE_OER_SUPPORT 
 
 lib_LTLIBRARIES+=libasncodec.la
 libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS)
-libasncodec_la_CPPFLAGS=-I$(top_srcdir)/./
+libasncodec_la_CPPFLAGS=-I$(top_srcdir)/
 libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS)
 libasncodec_la_LDFLAGS=-lm
diff --git a/e2sim/src/ASN1c/PLMN-Identity.c b/e2sim/src/ASN1c/PLMN-Identity.c
index d0a3d97..3fb2bba 100644
--- a/e2sim/src/ASN1c/PLMN-Identity.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "PLMN-Identity.h"
@@ -37,9 +37,6 @@
  * This type is implemented using OCTET_STRING,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	3	/* (SIZE(3..3)) */};
 asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
@@ -58,7 +55,7 @@
 	asn_DEF_PLMN_Identity_tags_1,	/* Same as above */
 	sizeof(asn_DEF_PLMN_Identity_tags_1)
 		/sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */
-	{ &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint },
+	{ 0, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint },
 	0, 0,	/* No members */
 	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/PLMN-Identity.h b/e2sim/src/ASN1c/PLMN-Identity.h
index 0083974..7210120 100644
--- a/e2sim/src/ASN1c/PLMN-Identity.h
+++ b/e2sim/src/ASN1c/PLMN-Identity.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_PLMN_Identity_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f PLMN_Identity_encode_der;
 xer_type_decoder_f PLMN_Identity_decode_xer;
 xer_type_encoder_f PLMN_Identity_encode_xer;
-oer_type_decoder_f PLMN_Identity_decode_oer;
-oer_type_encoder_f PLMN_Identity_encode_oer;
 per_type_decoder_f PLMN_Identity_decode_uper;
 per_type_encoder_f PLMN_Identity_encode_uper;
 per_type_decoder_f PLMN_Identity_decode_aper;
diff --git a/e2sim/src/ASN1c/Presence.c b/e2sim/src/ASN1c/Presence.c
index e28be1a..1669907 100644
--- a/e2sim/src/ASN1c/Presence.c
+++ b/e2sim/src/ASN1c/Presence.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "Presence.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_Presence_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_Presence_tags_1,	/* Same as above */
 	sizeof(asn_DEF_Presence_tags_1)
 		/sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */
-	{ &asn_OER_type_Presence_constr_1, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_Presence_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/Presence.h b/e2sim/src/ASN1c/Presence.h
index 9af00f6..0e89a76 100644
--- a/e2sim/src/ASN1c/Presence.h
+++ b/e2sim/src/ASN1c/Presence.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_Presence_H_
@@ -39,8 +39,6 @@
 der_type_encoder_f Presence_encode_der;
 xer_type_decoder_f Presence_decode_xer;
 xer_type_encoder_f Presence_encode_xer;
-oer_type_decoder_f Presence_decode_oer;
-oer_type_encoder_f Presence_encode_oer;
 per_type_decoder_f Presence_decode_uper;
 per_type_encoder_f Presence_encode_uper;
 per_type_decoder_f Presence_decode_aper;
diff --git a/e2sim/src/ASN1c/PrintableString.c b/e2sim/src/ASN1c/PrintableString.c
new file mode 100644
index 0000000..8fc3939
--- /dev/null
+++ b/e2sim/src/ASN1c/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/e2sim/src/ASN1c/PrintableString.h b/e2sim/src/ASN1c/PrintableString.h
new file mode 100644
index 0000000..8c2b61a
--- /dev/null
+++ b/e2sim/src/ASN1c/PrintableString.h
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PrintableString_H_
+#define	_PrintableString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t PrintableString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_PrintableString;
+extern asn_TYPE_operation_t asn_OP_PrintableString;
+
+asn_constr_check_f PrintableString_constraint;
+
+#define PrintableString_free            OCTET_STRING_free
+#define PrintableString_print           OCTET_STRING_print_utf8
+#define PrintableString_compare         OCTET_STRING_compare
+#define PrintableString_decode_ber      OCTET_STRING_decode_ber
+#define PrintableString_encode_der      OCTET_STRING_encode_der
+#define PrintableString_decode_xer      OCTET_STRING_decode_xer_utf8
+#define PrintableString_encode_xer      OCTET_STRING_encode_xer_utf8
+#define PrintableString_decode_uper     OCTET_STRING_decode_uper
+#define PrintableString_encode_uper     OCTET_STRING_encode_uper
+#define PrintableString_decode_aper     OCTET_STRING_decode_aper
+#define PrintableString_encode_aper     OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PrintableString_H_ */
diff --git a/e2sim/src/ASN1c/ProcedureCode.c b/e2sim/src/ASN1c/ProcedureCode.c
index 31d0944..31cb35c 100644
--- a/e2sim/src/ASN1c/ProcedureCode.c
+++ b/e2sim/src/ASN1c/ProcedureCode.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProcedureCode.h"
@@ -36,9 +36,6 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_ProcedureCode_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
 asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -57,7 +54,7 @@
 	asn_DEF_ProcedureCode_tags_1,	/* Same as above */
 	sizeof(asn_DEF_ProcedureCode_tags_1)
 		/sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ProcedureCode_constr_1, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint },
+	{ 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/ProcedureCode.h b/e2sim/src/ASN1c/ProcedureCode.h
index 1d85971..a0a7c7c 100644
--- a/e2sim/src/ASN1c/ProcedureCode.h
+++ b/e2sim/src/ASN1c/ProcedureCode.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProcedureCode_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f ProcedureCode_encode_der;
 xer_type_decoder_f ProcedureCode_decode_xer;
 xer_type_encoder_f ProcedureCode_encode_xer;
-oer_type_decoder_f ProcedureCode_decode_oer;
-oer_type_encoder_f ProcedureCode_encode_oer;
 per_type_decoder_f ProcedureCode_decode_uper;
 per_type_encoder_f ProcedureCode_encode_uper;
 per_type_decoder_f ProcedureCode_decode_aper;
@@ -46,6 +44,8 @@
 #define ProcedureCode_id_RICserviceUpdate	((ProcedureCode_t)7)
 #define ProcedureCode_id_RICsubscription	((ProcedureCode_t)8)
 #define ProcedureCode_id_RICsubscriptionDelete	((ProcedureCode_t)9)
+#define ProcedureCode_id_E2nodeConfigurationUpdate	((ProcedureCode_t)10)
+#define ProcedureCode_id_E2connectionUpdate	((ProcedureCode_t)11)
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/ProtocolIE-Container.c b/e2sim/src/ASN1c/ProtocolIE-Container.c
index 4636657..9aa9500 100644
--- a/e2sim/src/ASN1c/ProtocolIE-Container.c
+++ b/e2sim/src/ASN1c/ProtocolIE-Container.c
@@ -1,174 +1,144 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-Container.h"
 
 #include "ProtocolIE-Field.h"
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P0_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_1527P1_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P1_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_1527P2_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P2_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_1527P3_constr_7 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P3_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_1527P4_constr_9 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P4_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_1527P5_constr_11 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P5_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_1527P6_constr_13 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P6_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_1527P7_constr_15 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P7_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_1527P8_constr_17 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P8_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_1527P9_constr_19 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P9_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_1527P10_constr_21 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P10_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_1527P11_constr_23 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P11_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_1527P12_constr_25 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P12_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_1527P13_constr_27 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P13_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_1527P14_constr_29 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P14_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_1527P15_constr_31 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P15_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_1527P16_constr_33 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P16_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_1527P17_constr_35 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P17_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_1527P18_constr_37 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P18_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_1527P19_constr_39 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..65535)) */};
-asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P19_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_1527P0_1[] = {
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P20_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 */
+};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P21_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 */
+};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P22_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 */
+};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P23_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_per_constraints_t asn_PER_type_ProtocolIE_Container_226P24_constr_49 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P25_constr_51 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_226P0_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -179,31 +149,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P0_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = {
-	sizeof(struct ProtocolIE_Container_1527P0),
-	offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P0_specs_1 = {
+	sizeof(struct ProtocolIE_Container_226P0),
+	offsetof(struct ProtocolIE_Container_226P0, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P0 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P0_tags_1,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P0_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P0_constr_1, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P0_1,
+	asn_DEF_ProtocolIE_Container_226P0_tags_1,
+	sizeof(asn_DEF_ProtocolIE_Container_226P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P0_1,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P0_specs_1	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P0_specs_1	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P1_3[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -214,31 +184,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P1_tags_3[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = {
-	sizeof(struct ProtocolIE_Container_1527P1),
-	offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P1_specs_3 = {
+	sizeof(struct ProtocolIE_Container_226P1),
+	offsetof(struct ProtocolIE_Container_226P1, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P1 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P1_tags_3,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P1_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P1_constr_3, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P1_3,
+	asn_DEF_ProtocolIE_Container_226P1_tags_3,
+	sizeof(asn_DEF_ProtocolIE_Container_226P1_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P1_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P1_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P1_tags_3[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P1_3,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P1_specs_3	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P1_specs_3	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P2_5[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -249,31 +219,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P2_tags_5[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = {
-	sizeof(struct ProtocolIE_Container_1527P2),
-	offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P2_specs_5 = {
+	sizeof(struct ProtocolIE_Container_226P2),
+	offsetof(struct ProtocolIE_Container_226P2, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P2 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P2_tags_5,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P2_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P2_constr_5, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P2_5,
+	asn_DEF_ProtocolIE_Container_226P2_tags_5,
+	sizeof(asn_DEF_ProtocolIE_Container_226P2_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P2_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P2_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P2_tags_5[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P2_5,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P2_specs_5	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P2_specs_5	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P3_7[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -284,31 +254,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P3_tags_7[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = {
-	sizeof(struct ProtocolIE_Container_1527P3),
-	offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P3_specs_7 = {
+	sizeof(struct ProtocolIE_Container_226P3),
+	offsetof(struct ProtocolIE_Container_226P3, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P3 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P3_tags_7,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P3_tags_7,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P3_constr_7, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P3_7,
+	asn_DEF_ProtocolIE_Container_226P3_tags_7,
+	sizeof(asn_DEF_ProtocolIE_Container_226P3_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P3_tags_7[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P3_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P3_tags_7[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P3_7,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P3_specs_7	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P3_specs_7	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P4_9[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -319,31 +289,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P4_tags_9[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = {
-	sizeof(struct ProtocolIE_Container_1527P4),
-	offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P4_specs_9 = {
+	sizeof(struct ProtocolIE_Container_226P4),
+	offsetof(struct ProtocolIE_Container_226P4, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P4 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P4_tags_9,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P4_tags_9,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P4_constr_9, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P4_9,
+	asn_DEF_ProtocolIE_Container_226P4_tags_9,
+	sizeof(asn_DEF_ProtocolIE_Container_226P4_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P4_tags_9[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P4_tags_9,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P4_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P4_tags_9[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P4_constr_9, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P4_9,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P4_specs_9	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P4_specs_9	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P5_11[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -354,31 +324,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P5_tags_11[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = {
-	sizeof(struct ProtocolIE_Container_1527P5),
-	offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P5_specs_11 = {
+	sizeof(struct ProtocolIE_Container_226P5),
+	offsetof(struct ProtocolIE_Container_226P5, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P5 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P5_tags_11,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P5_tags_11,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P5_constr_11, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P5_11,
+	asn_DEF_ProtocolIE_Container_226P5_tags_11,
+	sizeof(asn_DEF_ProtocolIE_Container_226P5_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P5_tags_11[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P5_tags_11,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P5_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P5_tags_11[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P5_constr_11, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P5_11,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P5_specs_11	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P5_specs_11	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P6_13[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -389,31 +359,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P6_tags_13[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = {
-	sizeof(struct ProtocolIE_Container_1527P6),
-	offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P6_specs_13 = {
+	sizeof(struct ProtocolIE_Container_226P6),
+	offsetof(struct ProtocolIE_Container_226P6, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P6 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P6_tags_13,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P6_tags_13,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P6_constr_13, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P6_13,
+	asn_DEF_ProtocolIE_Container_226P6_tags_13,
+	sizeof(asn_DEF_ProtocolIE_Container_226P6_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P6_tags_13[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P6_tags_13,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P6_tags_13)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P6_tags_13[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P6_constr_13, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P6_13,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P6_specs_13	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P6_specs_13	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P7_15[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -424,31 +394,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P7_tags_15[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = {
-	sizeof(struct ProtocolIE_Container_1527P7),
-	offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P7_specs_15 = {
+	sizeof(struct ProtocolIE_Container_226P7),
+	offsetof(struct ProtocolIE_Container_226P7, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P7 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P7_tags_15,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P7_tags_15,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P7_constr_15, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P7_15,
+	asn_DEF_ProtocolIE_Container_226P7_tags_15,
+	sizeof(asn_DEF_ProtocolIE_Container_226P7_tags_15)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P7_tags_15[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P7_tags_15,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P7_tags_15)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P7_tags_15[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P7_constr_15, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P7_15,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P7_specs_15	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P7_specs_15	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P8_17[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -459,31 +429,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P8_tags_17[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = {
-	sizeof(struct ProtocolIE_Container_1527P8),
-	offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P8_specs_17 = {
+	sizeof(struct ProtocolIE_Container_226P8),
+	offsetof(struct ProtocolIE_Container_226P8, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P8 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P8_tags_17,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P8_tags_17,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P8_constr_17, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P8_17,
+	asn_DEF_ProtocolIE_Container_226P8_tags_17,
+	sizeof(asn_DEF_ProtocolIE_Container_226P8_tags_17)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P8_tags_17[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P8_tags_17,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P8_tags_17)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P8_tags_17[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P8_constr_17, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P8_17,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P8_specs_17	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P8_specs_17	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P9_19[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -494,31 +464,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P9_tags_19[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = {
-	sizeof(struct ProtocolIE_Container_1527P9),
-	offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P9_specs_19 = {
+	sizeof(struct ProtocolIE_Container_226P9),
+	offsetof(struct ProtocolIE_Container_226P9, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P9 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P9_tags_19,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P9_tags_19,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P9_constr_19, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P9_19,
+	asn_DEF_ProtocolIE_Container_226P9_tags_19,
+	sizeof(asn_DEF_ProtocolIE_Container_226P9_tags_19)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P9_tags_19[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P9_tags_19,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P9_tags_19)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P9_tags_19[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P9_constr_19, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P9_19,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P9_specs_19	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P9_specs_19	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P10_21[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -529,31 +499,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P10_tags_21[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = {
-	sizeof(struct ProtocolIE_Container_1527P10),
-	offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P10_specs_21 = {
+	sizeof(struct ProtocolIE_Container_226P10),
+	offsetof(struct ProtocolIE_Container_226P10, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P10 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P10_tags_21,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P10_tags_21,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P10_constr_21, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P10_21,
+	asn_DEF_ProtocolIE_Container_226P10_tags_21,
+	sizeof(asn_DEF_ProtocolIE_Container_226P10_tags_21)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P10_tags_21[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P10_tags_21,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P10_tags_21)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P10_tags_21[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P10_constr_21, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P10_21,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P10_specs_21	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P10_specs_21	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P11_23[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -564,31 +534,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P11_tags_23[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = {
-	sizeof(struct ProtocolIE_Container_1527P11),
-	offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P11_specs_23 = {
+	sizeof(struct ProtocolIE_Container_226P11),
+	offsetof(struct ProtocolIE_Container_226P11, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P11 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P11_tags_23,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P11_tags_23,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P11_constr_23, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P11_23,
+	asn_DEF_ProtocolIE_Container_226P11_tags_23,
+	sizeof(asn_DEF_ProtocolIE_Container_226P11_tags_23)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P11_tags_23[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P11_tags_23,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P11_tags_23)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P11_tags_23[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P11_constr_23, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P11_23,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P11_specs_23	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P11_specs_23	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P12_25[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -599,31 +569,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P12_tags_25[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = {
-	sizeof(struct ProtocolIE_Container_1527P12),
-	offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P12_specs_25 = {
+	sizeof(struct ProtocolIE_Container_226P12),
+	offsetof(struct ProtocolIE_Container_226P12, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P12 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P12_tags_25,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P12_tags_25,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P12_constr_25, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P12_25,
+	asn_DEF_ProtocolIE_Container_226P12_tags_25,
+	sizeof(asn_DEF_ProtocolIE_Container_226P12_tags_25)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P12_tags_25[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P12_tags_25,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P12_tags_25)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P12_tags_25[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P12_constr_25, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P12_25,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P12_specs_25	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P12_specs_25	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P13_27[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -634,31 +604,241 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P13_tags_27[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = {
-	sizeof(struct ProtocolIE_Container_1527P13),
-	offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P13_specs_27 = {
+	sizeof(struct ProtocolIE_Container_226P13),
+	offsetof(struct ProtocolIE_Container_226P13, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P13 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P13_tags_27,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P13_tags_27,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P13_constr_27, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P13_27,
+	asn_DEF_ProtocolIE_Container_226P13_tags_27,
+	sizeof(asn_DEF_ProtocolIE_Container_226P13_tags_27)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P13_tags_27[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P13_tags_27,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P13_tags_27)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P13_tags_27[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P13_constr_27, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P13_27,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P13_specs_27	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P13_specs_27	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P14_29[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P14_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P14_specs_29 = {
+	sizeof(struct ProtocolIE_Container_226P14),
+	offsetof(struct ProtocolIE_Container_226P14, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P14 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P14_tags_29,
+	sizeof(asn_DEF_ProtocolIE_Container_226P14_tags_29)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P14_tags_29[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P14_tags_29,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P14_tags_29)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P14_tags_29[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P14_constr_29, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P14_29,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P14_specs_29	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P15_31[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdateAck_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P15_tags_31[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P15_specs_31 = {
+	sizeof(struct ProtocolIE_Container_226P15),
+	offsetof(struct ProtocolIE_Container_226P15, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P15 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P15_tags_31,
+	sizeof(asn_DEF_ProtocolIE_Container_226P15_tags_31)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P15_tags_31[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P15_tags_31,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P15_tags_31)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P15_tags_31[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P15_constr_31, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P15_31,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P15_specs_31	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P16_33[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdateFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P16_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P16_specs_33 = {
+	sizeof(struct ProtocolIE_Container_226P16),
+	offsetof(struct ProtocolIE_Container_226P16, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P16 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P16_tags_33,
+	sizeof(asn_DEF_ProtocolIE_Container_226P16_tags_33)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P16_tags_33[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P16_tags_33,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P16_tags_33)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P16_tags_33[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P16_constr_33, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P16_33,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P16_specs_33	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P17_35[] = {
+	{ 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_226P17_tags_35[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P17_specs_35 = {
+	sizeof(struct ProtocolIE_Container_226P17),
+	offsetof(struct ProtocolIE_Container_226P17, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P17 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P17_tags_35,
+	sizeof(asn_DEF_ProtocolIE_Container_226P17_tags_35)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P17_tags_35[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P17_tags_35,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P17_tags_35)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P17_tags_35[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P17_constr_35, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P17_35,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P17_specs_35	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P18_37[] = {
+	{ 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_226P18_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P18_specs_37 = {
+	sizeof(struct ProtocolIE_Container_226P18),
+	offsetof(struct ProtocolIE_Container_226P18, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P18 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P18_tags_37,
+	sizeof(asn_DEF_ProtocolIE_Container_226P18_tags_37)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P18_tags_37[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P18_tags_37,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P18_tags_37)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P18_tags_37[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P18_constr_37, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P18_37,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P18_specs_37	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P19_39[] = {
+	{ 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_226P19_tags_39[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P19_specs_39 = {
+	sizeof(struct ProtocolIE_Container_226P19),
+	offsetof(struct ProtocolIE_Container_226P19, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P19 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ProtocolIE_Container_226P19_tags_39,
+	sizeof(asn_DEF_ProtocolIE_Container_226P19_tags_39)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P19_tags_39[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P19_tags_39,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P19_tags_39)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P19_tags_39[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P19_constr_39, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P19_39,
+	1,	/* Single element */
+	&asn_SPC_ProtocolIE_Container_226P19_specs_39	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P20_41[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -669,31 +849,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P20_tags_41[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = {
-	sizeof(struct ProtocolIE_Container_1527P14),
-	offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P20_specs_41 = {
+	sizeof(struct ProtocolIE_Container_226P20),
+	offsetof(struct ProtocolIE_Container_226P20, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P20 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P14_tags_29,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P14_tags_29,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P14_constr_29, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P14_29,
+	asn_DEF_ProtocolIE_Container_226P20_tags_41,
+	sizeof(asn_DEF_ProtocolIE_Container_226P20_tags_41)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P20_tags_41[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P20_tags_41,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P20_tags_41)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P20_tags_41[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P20_constr_41, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P20_41,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P14_specs_29	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P20_specs_41	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P21_43[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -704,31 +884,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P21_tags_43[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = {
-	sizeof(struct ProtocolIE_Container_1527P15),
-	offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P21_specs_43 = {
+	sizeof(struct ProtocolIE_Container_226P21),
+	offsetof(struct ProtocolIE_Container_226P21, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P21 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P15_tags_31,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P15_tags_31,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P15_constr_31, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P15_31,
+	asn_DEF_ProtocolIE_Container_226P21_tags_43,
+	sizeof(asn_DEF_ProtocolIE_Container_226P21_tags_43)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P21_tags_43[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P21_tags_43,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P21_tags_43)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P21_tags_43[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P21_constr_43, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P21_43,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P15_specs_31	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P21_specs_43	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P22_45[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -739,31 +919,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P22_tags_45[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = {
-	sizeof(struct ProtocolIE_Container_1527P16),
-	offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P22_specs_45 = {
+	sizeof(struct ProtocolIE_Container_226P22),
+	offsetof(struct ProtocolIE_Container_226P22, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P22 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P16_tags_33,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P16_tags_33,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P16_constr_33, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P16_33,
+	asn_DEF_ProtocolIE_Container_226P22_tags_45,
+	sizeof(asn_DEF_ProtocolIE_Container_226P22_tags_45)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P22_tags_45[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P22_tags_45,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P22_tags_45)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P22_tags_45[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P22_constr_45, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P22_45,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P16_specs_33	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P22_specs_45	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P23_47[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -774,31 +954,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P23_tags_47[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = {
-	sizeof(struct ProtocolIE_Container_1527P17),
-	offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P23_specs_47 = {
+	sizeof(struct ProtocolIE_Container_226P23),
+	offsetof(struct ProtocolIE_Container_226P23, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P23 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P17_tags_35,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P17_tags_35,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P17_constr_35, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P17_35,
+	asn_DEF_ProtocolIE_Container_226P23_tags_47,
+	sizeof(asn_DEF_ProtocolIE_Container_226P23_tags_47)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P23_tags_47[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P23_tags_47,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P23_tags_47)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P23_tags_47[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P23_constr_47, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P23_47,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P17_specs_35	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P23_specs_47	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P24_49[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -809,31 +989,31 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P24_tags_49[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = {
-	sizeof(struct ProtocolIE_Container_1527P18),
-	offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P24_specs_49 = {
+	sizeof(struct ProtocolIE_Container_226P24),
+	offsetof(struct ProtocolIE_Container_226P24, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P24 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P18_tags_37,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P18_tags_37,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P18_constr_37, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P18_37,
+	asn_DEF_ProtocolIE_Container_226P24_tags_49,
+	sizeof(asn_DEF_ProtocolIE_Container_226P24_tags_49)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P24_tags_49[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P24_tags_49,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P24_tags_49)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P24_tags_49[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P24_constr_49, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P24_49,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P18_specs_37	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P24_specs_49	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = {
+asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P25_51[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -844,27 +1024,27 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_226P25_tags_51[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = {
-	sizeof(struct ProtocolIE_Container_1527P19),
-	offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx),
+asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P25_specs_51 = {
+	sizeof(struct ProtocolIE_Container_226P25),
+	offsetof(struct ProtocolIE_Container_226P25, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P25 = {
 	"ProtocolIE-Container",
 	"ProtocolIE-Container",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ProtocolIE_Container_1527P19_tags_39,
-	sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */
-	asn_DEF_ProtocolIE_Container_1527P19_tags_39,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39)
-		/sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_Container_1527P19_constr_39, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint },
-	asn_MBR_ProtocolIE_Container_1527P19_39,
+	asn_DEF_ProtocolIE_Container_226P25_tags_51,
+	sizeof(asn_DEF_ProtocolIE_Container_226P25_tags_51)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P25_tags_51[0]), /* 1 */
+	asn_DEF_ProtocolIE_Container_226P25_tags_51,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_Container_226P25_tags_51)
+		/sizeof(asn_DEF_ProtocolIE_Container_226P25_tags_51[0]), /* 1 */
+	{ 0, &asn_PER_type_ProtocolIE_Container_226P25_constr_51, SEQUENCE_OF_constraint },
+	asn_MBR_ProtocolIE_Container_226P25_51,
 	1,	/* Single element */
-	&asn_SPC_ProtocolIE_Container_1527P19_specs_39	/* Additional specs */
+	&asn_SPC_ProtocolIE_Container_226P25_specs_51	/* Additional specs */
 };
 
diff --git a/e2sim/src/ASN1c/ProtocolIE-Container.h b/e2sim/src/ASN1c/ProtocolIE-Container.h
index 750426b..7b7cccb 100644
--- a/e2sim/src/ASN1c/ProtocolIE-Container.h
+++ b/e2sim/src/ASN1c/ProtocolIE-Container.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_Container_H_
@@ -34,6 +34,12 @@
 struct E2setupRequestIEs;
 struct E2setupResponseIEs;
 struct E2setupFailureIEs;
+struct E2connectionUpdate_IEs;
+struct E2connectionUpdateAck_IEs;
+struct E2connectionUpdateFailure_IEs;
+struct E2nodeConfigurationUpdate_IEs;
+struct E2nodeConfigurationUpdateAcknowledge_IEs;
+struct E2nodeConfigurationUpdateFailure_IEs;
 struct ResetRequestIEs;
 struct ResetResponseIEs;
 struct RICserviceUpdate_IEs;
@@ -42,208 +48,268 @@
 struct RICserviceQuery_IEs;
 
 /* ProtocolIE-Container */
-typedef struct ProtocolIE_Container_1527P0 {
+typedef struct ProtocolIE_Container_226P0 {
 	A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P0_t;
-typedef struct ProtocolIE_Container_1527P1 {
+} ProtocolIE_Container_226P0_t;
+typedef struct ProtocolIE_Container_226P1 {
 	A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P1_t;
-typedef struct ProtocolIE_Container_1527P2 {
+} ProtocolIE_Container_226P1_t;
+typedef struct ProtocolIE_Container_226P2 {
 	A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P2_t;
-typedef struct ProtocolIE_Container_1527P3 {
+} ProtocolIE_Container_226P2_t;
+typedef struct ProtocolIE_Container_226P3 {
 	A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P3_t;
-typedef struct ProtocolIE_Container_1527P4 {
+} ProtocolIE_Container_226P3_t;
+typedef struct ProtocolIE_Container_226P4 {
 	A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P4_t;
-typedef struct ProtocolIE_Container_1527P5 {
+} ProtocolIE_Container_226P4_t;
+typedef struct ProtocolIE_Container_226P5 {
 	A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P5_t;
-typedef struct ProtocolIE_Container_1527P6 {
+} ProtocolIE_Container_226P5_t;
+typedef struct ProtocolIE_Container_226P6 {
 	A_SEQUENCE_OF(struct RICindication_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P6_t;
-typedef struct ProtocolIE_Container_1527P7 {
+} ProtocolIE_Container_226P6_t;
+typedef struct ProtocolIE_Container_226P7 {
 	A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P7_t;
-typedef struct ProtocolIE_Container_1527P8 {
+} ProtocolIE_Container_226P7_t;
+typedef struct ProtocolIE_Container_226P8 {
 	A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P8_t;
-typedef struct ProtocolIE_Container_1527P9 {
+} ProtocolIE_Container_226P8_t;
+typedef struct ProtocolIE_Container_226P9 {
 	A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P9_t;
-typedef struct ProtocolIE_Container_1527P10 {
+} ProtocolIE_Container_226P9_t;
+typedef struct ProtocolIE_Container_226P10 {
 	A_SEQUENCE_OF(struct ErrorIndication_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P10_t;
-typedef struct ProtocolIE_Container_1527P11 {
+} ProtocolIE_Container_226P10_t;
+typedef struct ProtocolIE_Container_226P11 {
 	A_SEQUENCE_OF(struct E2setupRequestIEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P11_t;
-typedef struct ProtocolIE_Container_1527P12 {
+} ProtocolIE_Container_226P11_t;
+typedef struct ProtocolIE_Container_226P12 {
 	A_SEQUENCE_OF(struct E2setupResponseIEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P12_t;
-typedef struct ProtocolIE_Container_1527P13 {
+} ProtocolIE_Container_226P12_t;
+typedef struct ProtocolIE_Container_226P13 {
 	A_SEQUENCE_OF(struct E2setupFailureIEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P13_t;
-typedef struct ProtocolIE_Container_1527P14 {
+} ProtocolIE_Container_226P13_t;
+typedef struct ProtocolIE_Container_226P14 {
+	A_SEQUENCE_OF(struct E2connectionUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P14_t;
+typedef struct ProtocolIE_Container_226P15 {
+	A_SEQUENCE_OF(struct E2connectionUpdateAck_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P15_t;
+typedef struct ProtocolIE_Container_226P16 {
+	A_SEQUENCE_OF(struct E2connectionUpdateFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P16_t;
+typedef struct ProtocolIE_Container_226P17 {
+	A_SEQUENCE_OF(struct E2nodeConfigurationUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P17_t;
+typedef struct ProtocolIE_Container_226P18 {
+	A_SEQUENCE_OF(struct E2nodeConfigurationUpdateAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P18_t;
+typedef struct ProtocolIE_Container_226P19 {
+	A_SEQUENCE_OF(struct E2nodeConfigurationUpdateFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ProtocolIE_Container_226P19_t;
+typedef struct ProtocolIE_Container_226P20 {
 	A_SEQUENCE_OF(struct ResetRequestIEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P14_t;
-typedef struct ProtocolIE_Container_1527P15 {
+} ProtocolIE_Container_226P20_t;
+typedef struct ProtocolIE_Container_226P21 {
 	A_SEQUENCE_OF(struct ResetResponseIEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P15_t;
-typedef struct ProtocolIE_Container_1527P16 {
+} ProtocolIE_Container_226P21_t;
+typedef struct ProtocolIE_Container_226P22 {
 	A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P16_t;
-typedef struct ProtocolIE_Container_1527P17 {
+} ProtocolIE_Container_226P22_t;
+typedef struct ProtocolIE_Container_226P23 {
 	A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P17_t;
-typedef struct ProtocolIE_Container_1527P18 {
+} ProtocolIE_Container_226P23_t;
+typedef struct ProtocolIE_Container_226P24 {
 	A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P18_t;
-typedef struct ProtocolIE_Container_1527P19 {
+} ProtocolIE_Container_226P24_t;
+typedef struct ProtocolIE_Container_226P25 {
 	A_SEQUENCE_OF(struct RICserviceQuery_IEs) list;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} ProtocolIE_Container_1527P19_t;
+} ProtocolIE_Container_226P25_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19;
-extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39;
-extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1];
-extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P0;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P0_1[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P1;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P1_3[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P1_constr_3;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P2;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P2_specs_5;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P2_5[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P2_constr_5;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P3;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P3_specs_7;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P3_7[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P3_constr_7;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P4;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P4_specs_9;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P4_9[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P4_constr_9;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P5;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P5_specs_11;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P5_11[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P5_constr_11;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P6;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P6_specs_13;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P6_13[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P6_constr_13;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P7;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P7_specs_15;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P7_15[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P7_constr_15;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P8;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P8_specs_17;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P8_17[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P8_constr_17;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P9;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P9_specs_19;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P9_19[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P9_constr_19;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P10;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P10_specs_21;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P10_21[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P10_constr_21;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P11;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P11_specs_23;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P11_23[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P11_constr_23;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P12;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P12_specs_25;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P12_25[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P12_constr_25;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P13;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P13_specs_27;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P13_27[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P13_constr_27;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P14;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P14_specs_29;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P14_29[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P14_constr_29;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P15;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P15_specs_31;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P15_31[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P15_constr_31;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P16;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P16_specs_33;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P16_33[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P16_constr_33;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P17;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P17_specs_35;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P17_35[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P17_constr_35;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P18;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P18_specs_37;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P18_37[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P18_constr_37;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P19;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P19_specs_39;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P19_39[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P19_constr_39;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P20;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P20_specs_41;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P20_41[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P20_constr_41;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P21;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P21_specs_43;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P21_43[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P21_constr_43;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P22;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P22_specs_45;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P22_45[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P22_constr_45;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P23;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P23_specs_47;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P23_47[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P23_constr_47;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P24;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P24_specs_49;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P24_49[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P24_constr_49;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_226P25;
+extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_226P25_specs_51;
+extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_226P25_51[1];
+extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_226P25_constr_51;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerList.c b/e2sim/src/ASN1c/ProtocolIE-ContainerList.c
index c434a72..a55503d 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerList.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-ContainerList.h"
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerList.h b/e2sim/src/ASN1c/ProtocolIE-ContainerList.h
index c895e7e..fe7c646 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerList.h
+++ b/e2sim/src/ASN1c/ProtocolIE-ContainerList.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_ContainerList_H_
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c
index 44a410d..00bfc8e 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-ContainerPair.h"
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h
index 178cc55..eb1eabf 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h
+++ b/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_ContainerPair_H_
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c
index 9019178..3518d31 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-ContainerPairList.h"
diff --git a/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h
index dd9a5be..176c565 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h
+++ b/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_ContainerPairList_H_
diff --git a/e2sim/src/ASN1c/ProtocolIE-Field.c b/e2sim/src/ASN1c/ProtocolIE-Field.c
index e6abc22..556fd53 100644
--- a/e2sim/src/ASN1c/ProtocolIE-Field.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-Field.h"
@@ -43,38 +43,98 @@
 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_65_id_E2connectionUpdate_Item = 43;
+static const long asn_VAL_65_ignore = 1;
+static const long asn_VAL_65_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2connectionUpdate_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_E2connectionUpdate_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdate_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionUpdate_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2connectionUpdate_ItemIEs_1_rows }
+};
+static const long asn_VAL_66_id_E2connectionUpdateRemove_Item = 47;
+static const long asn_VAL_66_ignore = 1;
+static const long asn_VAL_66_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2connectionUpdateRemove_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_E2connectionUpdateRemove_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdateRemove_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionUpdateRemove_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2connectionUpdateRemove_ItemIEs_1_rows }
+};
+static const long asn_VAL_69_id_E2connectionSetupFailed_Item = 41;
+static const long asn_VAL_69_ignore = 1;
+static const long asn_VAL_69_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2connectionSetupFailed_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_E2connectionSetupFailed_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionSetupFailed_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionSetupFailed_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2connectionSetupFailed_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_76_id_E2nodeComponentConfigUpdateAck_Item = 36;
+static const long asn_VAL_76_reject = 0;
+static const long asn_VAL_76_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2nodeComponentConfigUpdateAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_76_id_E2nodeComponentConfigUpdateAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_76_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdateAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_76_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_85_id_RANfunction_Item = 8;
+static const long asn_VAL_85_ignore = 1;
+static const long asn_VAL_85_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_85_id_RANfunction_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_85_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_85_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_86_id_RANfunctionID_Item = 6;
+static const long asn_VAL_86_ignore = 1;
+static const long asn_VAL_86_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_86_id_RANfunctionID_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_86_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_86_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_89_id_RANfunctionIEcause_Item = 7;
+static const long asn_VAL_89_ignore = 1;
+static const long asn_VAL_89_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_89_id_RANfunctionIEcause_Item },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_89_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_89_mandatory }
 };
 static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = {
 	{ 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows }
@@ -469,6 +529,9 @@
 static const long asn_VAL_52_id_RANfunctionsAdded = 10;
 static const long asn_VAL_52_reject = 0;
 static const long asn_VAL_52_optional = 0;
+static const long asn_VAL_53_id_E2nodeComponentConfigUpdate = 33;
+static const long asn_VAL_53_reject = 0;
+static const long asn_VAL_53_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 },
@@ -477,166 +540,305 @@
 	{ "&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 },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_E2nodeComponentConfigUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_optional }
 };
 static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = {
-	{ 2, 4, asn_IOS_E2setupRequestIEs_1_rows }
+	{ 3, 4, asn_IOS_E2setupRequestIEs_1_rows }
 };
-static const long asn_VAL_53_id_GlobalRIC_ID = 4;
-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_GlobalRIC_ID = 4;
 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_RANfunctionsAccepted = 9;
 static const long asn_VAL_55_reject = 0;
 static const long asn_VAL_55_optional = 0;
+static const long asn_VAL_56_id_RANfunctionsRejected = 13;
+static const long asn_VAL_56_reject = 0;
+static const long asn_VAL_56_optional = 0;
+static const long asn_VAL_57_id_E2nodeComponentConfigUpdateAck = 35;
+static const long asn_VAL_57_reject = 0;
+static const long asn_VAL_57_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 },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject },
-	{ "&Value", aioc__type, &asn_DEF_GlobalRIC_ID },
-	{ "&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_GlobalRIC_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_GlobalRIC_ID },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsAccepted },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject },
+	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_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_56_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_E2nodeComponentConfigUpdateAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdateAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }
 };
 static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = {
-	{ 3, 4, asn_IOS_E2setupResponseIEs_1_rows }
+	{ 4, 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_id_Cause = 1;
 static const long asn_VAL_58_ignore = 1;
-static const long asn_VAL_58_optional = 0;
+static const long asn_VAL_58_mandatory = 2;
+static const long asn_VAL_59_id_TimeToWait = 31;
+static const long asn_VAL_59_ignore = 1;
+static const long asn_VAL_59_optional = 0;
+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 long asn_VAL_61_id_TNLinformation = 48;
+static const long asn_VAL_61_ignore = 1;
+static const long asn_VAL_61_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 },
-	{ "&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 },
-	{ "&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 },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_Cause },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_optional },
+	{ "&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_58_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_TNLinformation },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TNLinformation },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }
 };
 static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = {
-	{ 3, 4, asn_IOS_E2setupFailureIEs_1_rows }
+	{ 4, 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 },
+static const long asn_VAL_62_id_E2connectionUpdateAdd = 44;
+static const long asn_VAL_62_reject = 0;
+static const long asn_VAL_62_optional = 0;
+static const long asn_VAL_63_id_E2connectionUpdateRemove = 46;
+static const long asn_VAL_63_reject = 0;
+static const long asn_VAL_63_optional = 0;
+static const long asn_VAL_64_id_E2connectionUpdateModify = 45;
+static const long asn_VAL_64_reject = 0;
+static const long asn_VAL_64_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2connectionUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_E2connectionUpdateAdd },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_E2connectionUpdateRemove },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdateRemove_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_E2connectionUpdateModify },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionUpdate_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2connectionUpdate_IEs_1_rows }
+};
+static const long asn_VAL_67_id_E2connectionSetup = 39;
+static const long asn_VAL_67_reject = 0;
+static const long asn_VAL_67_optional = 0;
+static const long asn_VAL_68_id_E2connectionSetupFailed = 40;
+static const long asn_VAL_68_reject = 0;
+static const long asn_VAL_68_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2connectionUpdateAck_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_E2connectionSetup },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_E2connectionSetupFailed },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2connectionSetupFailed_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionUpdateAck_IEs_1[] = {
+	{ 2, 4, asn_IOS_E2connectionUpdateAck_IEs_1_rows }
+};
+static const long asn_VAL_70_id_Cause = 1;
+static const long asn_VAL_70_reject = 0;
+static const long asn_VAL_70_optional = 0;
+static const long asn_VAL_71_id_TimeToWait = 31;
+static const long asn_VAL_71_ignore = 1;
+static const long asn_VAL_71_optional = 0;
+static const long asn_VAL_72_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_72_ignore = 1;
+static const long asn_VAL_72_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2connectionUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_reject },
 	{ "&Value", aioc__type, &asn_DEF_Cause },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2connectionUpdateFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2connectionUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_73_id_E2nodeComponentConfigUpdate = 33;
+static const long asn_VAL_73_reject = 0;
+static const long asn_VAL_73_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_73_id_E2nodeComponentConfigUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_73_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdate_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_73_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdate_IEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeConfigurationUpdate_IEs_1_rows }
+};
+static const long asn_VAL_75_id_E2nodeComponentConfigUpdateAck = 35;
+static const long asn_VAL_75_reject = 0;
+static const long asn_VAL_75_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_75_id_E2nodeComponentConfigUpdateAck },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_75_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2nodeComponentConfigUpdateAck_List },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_75_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1[] = {
+	{ 1, 4, asn_IOS_E2nodeConfigurationUpdateAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_77_id_Cause = 1;
+static const long asn_VAL_77_ignore = 1;
+static const long asn_VAL_77_mandatory = 2;
+static const long asn_VAL_78_id_TimeToWait = 31;
+static const long asn_VAL_78_ignore = 1;
+static const long asn_VAL_78_optional = 0;
+static const long asn_VAL_79_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_79_ignore = 1;
+static const long asn_VAL_79_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_77_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_77_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_77_mandatory },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_78_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_78_ignore },
+	{ "&Value", aioc__type, &asn_DEF_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_78_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_79_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_79_ignore },
+	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_79_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2nodeConfigurationUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_80_id_Cause = 1;
+static const long asn_VAL_80_ignore = 1;
+static const long asn_VAL_80_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_80_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_80_ignore },
+	{ "&Value", aioc__type, &asn_DEF_Cause },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_80_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 long asn_VAL_81_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_81_ignore = 1;
+static const long asn_VAL_81_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 },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_81_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_81_ignore },
 	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_81_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 long asn_VAL_82_id_RANfunctionsAdded = 10;
+static const long asn_VAL_82_reject = 0;
+static const long asn_VAL_82_optional = 0;
+static const long asn_VAL_83_id_RANfunctionsModified = 12;
+static const long asn_VAL_83_reject = 0;
+static const long asn_VAL_83_optional = 0;
+static const long asn_VAL_84_id_RANfunctionsDeleted = 11;
+static const long asn_VAL_84_reject = 0;
+static const long asn_VAL_84_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 },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_82_id_RANfunctionsAdded },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_82_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 },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_82_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_83_id_RANfunctionsModified },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_83_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 },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_83_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_84_id_RANfunctionsDeleted },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_84_reject },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_84_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_reject = 0;
-static const long asn_VAL_67_optional = 0;
+static const long asn_VAL_87_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_87_reject = 0;
+static const long asn_VAL_87_optional = 0;
+static const long asn_VAL_88_id_RANfunctionsRejected = 13;
+static const long asn_VAL_88_reject = 0;
+static const long asn_VAL_88_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 },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_87_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_87_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 },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_87_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_88_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_88_reject },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_88_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_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_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_optional = 0;
+static const long asn_VAL_90_id_RANfunctionsRejected = 13;
+static const long asn_VAL_90_ignore = 1;
+static const long asn_VAL_90_optional = 0;
+static const long asn_VAL_91_id_TimeToWait = 31;
+static const long asn_VAL_91_ignore = 1;
+static const long asn_VAL_91_optional = 0;
+static const long asn_VAL_92_id_CriticalityDiagnostics = 2;
+static const long asn_VAL_92_ignore = 1;
+static const long asn_VAL_92_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 },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_90_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_90_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 },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_90_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_91_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_91_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 },
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_91_optional },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_92_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_92_ignore },
 	{ "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_92_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_reject = 0;
-static const long asn_VAL_72_optional = 0;
+static const long asn_VAL_93_id_RANfunctionsAccepted = 9;
+static const long asn_VAL_93_reject = 0;
+static const long asn_VAL_93_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 },
-	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject },
+	{ "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_93_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_93_reject },
 	{ "&Value", aioc__type, &asn_DEF_RANfunctionsID_List },
-	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional }
+	{ "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_93_optional }
 };
 static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = {
 	{ 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows }
@@ -1018,13 +1220,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionUpdate_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_E2connectionUpdate_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 E2connectionUpdate_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 +1266,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionUpdate_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_E2connectionUpdate_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 E2connectionUpdate_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 +1337,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionUpdateRemove_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_E2connectionUpdateRemove_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 E2connectionUpdateRemove_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 +1383,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionUpdateRemove_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_E2connectionUpdateRemove_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 E2connectionUpdateRemove_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 +1454,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionSetupFailed_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_E2connectionSetupFailed_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 E2connectionSetupFailed_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 +1500,13 @@
 }
 
 static asn_type_selector_result_t
-select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+select_E2connectionSetupFailed_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_E2connectionSetupFailed_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 E2connectionSetupFailed_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 +1571,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionRequest_IEs_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_RICsubscriptionRequest_IEs_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 RICsubscriptionRequest_IEs, 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];
@@ -1415,13 +1617,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionRequest_IEs_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_RICsubscriptionRequest_IEs_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 RICsubscriptionRequest_IEs, 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];
@@ -1486,13 +1688,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionResponse_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_RICsubscriptionResponse_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 RICsubscriptionResponse_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];
@@ -1532,13 +1734,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionResponse_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_RICsubscriptionResponse_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 RICsubscriptionResponse_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];
@@ -1603,13 +1805,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionFailure_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_RICsubscriptionFailure_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 RICsubscriptionFailure_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];
@@ -1649,13 +1851,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionFailure_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_RICsubscriptionFailure_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 RICsubscriptionFailure_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];
@@ -1720,13 +1922,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteRequest_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_RICsubscriptionDeleteRequest_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 RICsubscriptionDeleteRequest_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];
@@ -1766,13 +1968,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteRequest_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_RICsubscriptionDeleteRequest_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 RICsubscriptionDeleteRequest_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];
@@ -1837,13 +2039,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteResponse_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_RICsubscriptionDeleteResponse_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 RICsubscriptionDeleteResponse_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];
@@ -1883,13 +2085,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteResponse_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_RICsubscriptionDeleteResponse_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 RICsubscriptionDeleteResponse_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];
@@ -1954,13 +2156,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteFailure_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_RICsubscriptionDeleteFailure_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 RICsubscriptionDeleteFailure_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];
@@ -2000,13 +2202,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICsubscriptionDeleteFailure_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_RICsubscriptionDeleteFailure_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 RICsubscriptionDeleteFailure_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];
@@ -2071,13 +2273,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICindication_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_RICindication_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 RICindication_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];
@@ -2117,13 +2319,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICindication_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_RICindication_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 RICindication_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];
@@ -2188,13 +2390,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolRequest_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_RICcontrolRequest_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 RICcontrolRequest_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];
@@ -2234,13 +2436,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolRequest_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_RICcontrolRequest_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 RICcontrolRequest_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];
@@ -2305,13 +2507,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolAcknowledge_IEs_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_RICcontrolAcknowledge_IEs_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 RICcontrolAcknowledge_IEs, 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];
@@ -2351,13 +2553,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolAcknowledge_IEs_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_RICcontrolAcknowledge_IEs_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 RICcontrolAcknowledge_IEs, 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];
@@ -2422,13 +2624,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolFailure_IEs_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_RICcontrolFailure_IEs_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 RICcontrolFailure_IEs, 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];
@@ -2468,13 +2670,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICcontrolFailure_IEs_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_RICcontrolFailure_IEs_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 RICcontrolFailure_IEs, 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];
@@ -2539,13 +2741,13 @@
 }
 
 static asn_type_selector_result_t
-select_ErrorIndication_IEs_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_ErrorIndication_IEs_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 ErrorIndication_IEs, 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];
@@ -2585,13 +2787,13 @@
 }
 
 static asn_type_selector_result_t
-select_ErrorIndication_IEs_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_ErrorIndication_IEs_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 ErrorIndication_IEs, 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];
@@ -2656,13 +2858,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupRequestIEs_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_E2setupRequestIEs_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 E2setupRequestIEs, 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];
@@ -2702,13 +2904,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupRequestIEs_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_E2setupRequestIEs_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 E2setupRequestIEs, 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];
@@ -2773,13 +2975,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupResponseIEs_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_E2setupResponseIEs_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 E2setupResponseIEs, 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];
@@ -2819,13 +3021,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupResponseIEs_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_E2setupResponseIEs_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 E2setupResponseIEs, 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];
@@ -2890,13 +3092,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupFailureIEs_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_E2setupFailureIEs_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 E2setupFailureIEs, 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];
@@ -2936,13 +3138,13 @@
 }
 
 static asn_type_selector_result_t
-select_E2setupFailureIEs_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_E2setupFailureIEs_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 E2setupFailureIEs, 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];
@@ -3007,13 +3209,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetRequestIEs_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_ResetRequestIEs_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 ResetRequestIEs, 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];
@@ -3053,13 +3255,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetRequestIEs_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_ResetRequestIEs_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 ResetRequestIEs, 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];
@@ -3124,13 +3326,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_ResetResponseIEs_1;
+	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 ResetResponseIEs, id));
+	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];
@@ -3170,13 +3372,13 @@
 }
 
 static asn_type_selector_result_t
-select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_ResetResponseIEs_1;
+	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 ResetResponseIEs, id));
+	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];
@@ -3241,13 +3443,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdate_IEs_1;
+	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 RICserviceUpdate_IEs, id));
+	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];
@@ -3287,13 +3489,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdate_IEs_1;
+	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 RICserviceUpdate_IEs, id));
+	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];
@@ -3358,13 +3560,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdateAcknowledge_IEs_1;
+	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 RICserviceUpdateAcknowledge_IEs, id));
+	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];
@@ -3404,13 +3606,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdateAcknowledge_IEs_1;
+	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 RICserviceUpdateAcknowledge_IEs, id));
+	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];
@@ -3475,13 +3677,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdateFailure_IEs_1;
+	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 RICserviceUpdateFailure_IEs, id));
+	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];
@@ -3521,13 +3723,13 @@
 }
 
 static asn_type_selector_result_t
-select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+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_RICserviceUpdateFailure_IEs_1;
+	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 RICserviceUpdateFailure_IEs, id));
+	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];
@@ -3592,6 +3794,1305 @@
 }
 
 static asn_type_selector_result_t
+select_E2connectionUpdate_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_E2connectionUpdate_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 E2connectionUpdate_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_E2connectionUpdate_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_E2connectionUpdate_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 E2connectionUpdate_IEs, id));
+	const int indexToPresence[4] = {
+		E2connectionUpdate_IEs__value_PR_NOTHING,
+		E2connectionUpdate_IEs__value_PR_E2connectionUpdate_List,
+		E2connectionUpdate_IEs__value_PR_E2connectionUpdateRemove_List,
+		E2connectionUpdate_IEs__value_PR_E2connectionUpdate_List
+	};
+	
+	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 = indexToPresence[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_E2connectionUpdateAck_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_E2connectionUpdateAck_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 E2connectionUpdateAck_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_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_E2connectionUpdateAck_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_E2connectionUpdateAck_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 E2connectionUpdateAck_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_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_E2connectionUpdateFailure_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_E2connectionUpdateFailure_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 E2connectionUpdateFailure_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_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_E2connectionUpdateFailure_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_E2connectionUpdateFailure_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 E2connectionUpdateFailure_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_RICserviceUpdate_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;
+	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));
+	
+	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_RICserviceUpdate_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;
+	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 int indexToPresence[4] = {
+		RICserviceUpdate_IEs__value_PR_NOTHING,
+		RICserviceUpdate_IEs__value_PR_RANfunctions_List,
+		RICserviceUpdate_IEs__value_PR_RANfunctions_List,
+		RICserviceUpdate_IEs__value_PR_RANfunctionsID_List
+	};
+	
+	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 = indexToPresence[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_RICserviceUpdateAcknowledge_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;
+	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));
+	
+	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_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 asn_type_selector_result_t
+select_RICserviceUpdateAcknowledge_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;
+	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));
+	
+	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_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_RICserviceUpdateFailure_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;
+	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));
+	
+	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_RICserviceUpdateFailure_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;
+	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));
+	
+	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_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 +5120,7 @@
 }
 
 static int
-memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	
 	if(!sptr) {
@@ -3665,7 +5166,7 @@
 }
 
 static int
-memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_value_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	
 	if(!sptr) {
@@ -3683,630 +5184,561 @@
 	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
-static asn_oer_constraints_t asn_OER_memb_id_constr_2 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_2 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_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_3 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_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_4 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_6 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_6 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_7 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_7 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_8 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_8 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_10 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_10 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_11 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_11 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_12 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_12 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_14 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_14 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_15 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_15 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_16 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_16 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_18 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_18 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_19 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_19 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_20 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_20 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_22 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_22 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_23 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_23 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_24 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_24 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_26 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_26 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_27 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_27 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_28 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_28 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_30 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_30 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_31 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_31 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_32 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_32 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_34 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_34 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_35 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_35 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_36 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_36 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_38 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_38 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_39 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_39 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_40 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_40 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_42 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_42 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_43 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_43 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_44 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_44 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_46 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_46 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_47 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_47 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_48 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_48 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_50 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_50 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_51 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_51 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_52 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_52 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_54 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_54 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_55 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_55 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_56 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_56 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_58 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_58 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_59 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_59 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_60 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_60 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_62 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_62 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_63 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_63 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_64 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_64 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_66 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_66 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_67 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_67 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_68 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_68 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_70 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_70 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_71 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_71 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_72 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_72 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_74 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_74 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_75 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_75 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_76 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_76 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_78 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_78 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_79 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_79 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_80 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_80 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_82 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_82 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_83 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_83 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_84 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_84 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_86 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_86 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_87 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_87 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_88 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_88 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_90 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_90 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_91 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_91 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_92 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_92 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_94 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_94 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_95 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_95 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_96 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_96 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_98 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_98 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_99 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_99 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_100 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_100 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_102 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_id_constr_102 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_103 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_103 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_104 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
+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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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,29 +5780,29 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_2, &asn_PER_memb_id_constr_2,  memb_id_constraint_1 },
+		{ 0, &asn_PER_memb_id_constr_2,  memb_id_constraint_1 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
 		0, 0, /* No default value */
 		"value"
 		},
@@ -4379,15 +5811,14 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = {
-    { (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_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_RICaction_ToBeSetup_ItemIEs_specs_1 = {
 	sizeof(struct RICaction_ToBeSetup_ItemIEs),
 	offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1,
-	3,	/* Count of tags in the map */
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4448,29 +5879,29 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_6, &asn_PER_memb_id_constr_6,  memb_id_constraint_5 },
+		{ 0, &asn_PER_memb_id_constr_6,  memb_id_constraint_5 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_criticality_constr_7,  memb_criticality_constraint_5 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_value_constr_8,  memb_value_constraint_5 },
 		0, 0, /* No default value */
 		"value"
 		},
@@ -4479,15 +5910,14 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = {
-    { (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_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_RICaction_Admitted_ItemIEs_specs_5 = {
 	sizeof(struct RICaction_Admitted_ItemIEs),
 	offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5,
-	3,	/* Count of tags in the map */
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4548,29 +5978,29 @@
 
 asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_10, &asn_PER_memb_id_constr_10,  memb_id_constraint_9 },
+		{ 0, &asn_PER_memb_id_constr_10,  memb_id_constraint_9 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_criticality_constr_11,  memb_criticality_constraint_9 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&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 },
+		{ 0, &asn_PER_memb_value_constr_12,  memb_value_constraint_9 },
 		0, 0, /* No default value */
 		"value"
 		},
@@ -4579,15 +6009,14 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = {
-    { (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_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_RICaction_NotAdmitted_ItemIEs_specs_9 = {
 	sizeof(struct RICaction_NotAdmitted_ItemIEs),
 	offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx),
 	asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9,
-	3,	/* Count of tags in the map */
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4608,24 +6037,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 E2connectionUpdate_ItemIEs__value, choice.E2connectionUpdate_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunction_Item,
+		&asn_DEF_E2connectionUpdate_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunction-Item"
+		"E2connectionUpdate-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 } /* E2connectionUpdate-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 E2connectionUpdate_ItemIEs__value),
+	offsetof(struct E2connectionUpdate_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2connectionUpdate_ItemIEs__value, present),
+	sizeof(((struct E2connectionUpdate_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_16,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4646,86 +6075,85 @@
 	&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_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+asn_TYPE_member_t asn_MBR_E2connectionUpdate_ItemIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_14, &asn_PER_memb_id_constr_14,  memb_id_constraint_13 },
+		{ 0, &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_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
-		select_RANfunction_ItemIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_15, &asn_PER_memb_criticality_constr_15,  memb_criticality_constraint_13 },
+		select_E2connectionUpdate_ItemIEs_criticality_type,
+		{ 0, &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),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&asn_DEF_value_16,
-		select_RANfunction_ItemIEs_value_type,
-		{ &asn_OER_memb_value_constr_16, &asn_PER_memb_value_constr_16,  memb_value_constraint_13 },
+		select_E2connectionUpdate_ItemIEs_value_type,
+		{ 0, &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_E2connectionUpdate_ItemIEs_tags_13[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunction_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdate_ItemIEs_tag2el_13[] = {
+    { (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_RANfunction_ItemIEs_specs_13 = {
-	sizeof(struct RANfunction_ItemIEs),
-	offsetof(struct RANfunction_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunction_ItemIEs_tag2el_13,
-	3,	/* Count of tags in the map */
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_ItemIEs_specs_13 = {
+	sizeof(struct E2connectionUpdate_ItemIEs),
+	offsetof(struct E2connectionUpdate_ItemIEs, _asn_ctx),
+	asn_MAP_E2connectionUpdate_ItemIEs_tag2el_13,
+	2,	/* 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_E2connectionUpdate_ItemIEs = {
+	"E2connectionUpdate-ItemIEs",
+	"E2connectionUpdate-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_E2connectionUpdate_ItemIEs_tags_13,
+	sizeof(asn_DEF_E2connectionUpdate_ItemIEs_tags_13)
+		/sizeof(asn_DEF_E2connectionUpdate_ItemIEs_tags_13[0]), /* 1 */
+	asn_DEF_E2connectionUpdate_ItemIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdate_ItemIEs_tags_13)
+		/sizeof(asn_DEF_E2connectionUpdate_ItemIEs_tags_13[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunction_ItemIEs_13,
+	asn_MBR_E2connectionUpdate_ItemIEs_13,
 	3,	/* Elements count */
-	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
+	&asn_SPC_E2connectionUpdate_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 E2connectionUpdateRemove_ItemIEs__value, choice.E2connectionUpdateRemove_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunctionID_Item,
+		&asn_DEF_E2connectionUpdateRemove_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunctionID-Item"
+		"E2connectionUpdateRemove-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 } /* E2connectionUpdateRemove-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 E2connectionUpdateRemove_ItemIEs__value),
+	offsetof(struct E2connectionUpdateRemove_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2connectionUpdateRemove_ItemIEs__value, present),
+	sizeof(((struct E2connectionUpdateRemove_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_20,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4746,86 +6174,85 @@
 	&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_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+asn_TYPE_member_t asn_MBR_E2connectionUpdateRemove_ItemIEs_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateRemove_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_18, &asn_PER_memb_id_constr_18,  memb_id_constraint_17 },
+		{ 0, &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_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateRemove_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
-		select_RANfunctionID_ItemIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_19, &asn_PER_memb_criticality_constr_19,  memb_criticality_constraint_17 },
+		select_E2connectionUpdateRemove_ItemIEs_criticality_type,
+		{ 0, &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),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateRemove_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&asn_DEF_value_20,
-		select_RANfunctionID_ItemIEs_value_type,
-		{ &asn_OER_memb_value_constr_20, &asn_PER_memb_value_constr_20,  memb_value_constraint_17 },
+		select_E2connectionUpdateRemove_ItemIEs_value_type,
+		{ 0, &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_E2connectionUpdateRemove_ItemIEs_tags_17[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateRemove_ItemIEs_tag2el_17[] = {
+    { (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_RANfunctionID_ItemIEs_specs_17 = {
-	sizeof(struct RANfunctionID_ItemIEs),
-	offsetof(struct RANfunctionID_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunctionID_ItemIEs_tag2el_17,
-	3,	/* Count of tags in the map */
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateRemove_ItemIEs_specs_17 = {
+	sizeof(struct E2connectionUpdateRemove_ItemIEs),
+	offsetof(struct E2connectionUpdateRemove_ItemIEs, _asn_ctx),
+	asn_MAP_E2connectionUpdateRemove_ItemIEs_tag2el_17,
+	2,	/* 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_E2connectionUpdateRemove_ItemIEs = {
+	"E2connectionUpdateRemove-ItemIEs",
+	"E2connectionUpdateRemove-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_E2connectionUpdateRemove_ItemIEs_tags_17,
+	sizeof(asn_DEF_E2connectionUpdateRemove_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_ItemIEs_tags_17[0]), /* 1 */
+	asn_DEF_E2connectionUpdateRemove_ItemIEs_tags_17,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateRemove_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2connectionUpdateRemove_ItemIEs_tags_17[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionID_ItemIEs_17,
+	asn_MBR_E2connectionUpdateRemove_ItemIEs_17,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+	&asn_SPC_E2connectionUpdateRemove_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 E2connectionSetupFailed_ItemIEs__value, choice.E2connectionSetupFailed_Item),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANfunctionIDcause_Item,
+		&asn_DEF_E2connectionSetupFailed_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"RANfunctionIDcause-Item"
+		"E2connectionSetupFailed-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 } /* E2connectionSetupFailed-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 E2connectionSetupFailed_ItemIEs__value),
+	offsetof(struct E2connectionSetupFailed_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2connectionSetupFailed_ItemIEs__value, present),
+	sizeof(((struct E2connectionSetupFailed_ItemIEs__value *)0)->present),
 	asn_MAP_value_tag2el_24,
 	1,	/* Count of tags in the map */
 	0, 0,
@@ -4846,48 +6273,542 @@
 	&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_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+asn_TYPE_member_t asn_MBR_E2connectionSetupFailed_ItemIEs_21[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionSetupFailed_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_22, &asn_PER_memb_id_constr_22,  memb_id_constraint_21 },
+		{ 0, &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_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionSetupFailed_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
-		select_RANfunctionIDcause_ItemIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_23, &asn_PER_memb_criticality_constr_23,  memb_criticality_constraint_21 },
+		select_E2connectionSetupFailed_ItemIEs_criticality_type,
+		{ 0, &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),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionSetupFailed_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
 		&asn_DEF_value_24,
-		select_RANfunctionIDcause_ItemIEs_value_type,
-		{ &asn_OER_memb_value_constr_24, &asn_PER_memb_value_constr_24,  memb_value_constraint_21 },
+		select_E2connectionSetupFailed_ItemIEs_value_type,
+		{ 0, &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_E2connectionSetupFailed_ItemIEs_tags_21[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionSetupFailed_ItemIEs_tag2el_21[] = {
+    { (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_RANfunctionIDcause_ItemIEs_specs_21 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2connectionSetupFailed_ItemIEs_specs_21 = {
+	sizeof(struct E2connectionSetupFailed_ItemIEs),
+	offsetof(struct E2connectionSetupFailed_ItemIEs, _asn_ctx),
+	asn_MAP_E2connectionSetupFailed_ItemIEs_tag2el_21,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionSetupFailed_ItemIEs = {
+	"E2connectionSetupFailed-ItemIEs",
+	"E2connectionSetupFailed-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21,
+	sizeof(asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21[0]), /* 1 */
+	asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21,	/* Same as above */
+	sizeof(asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2connectionSetupFailed_ItemIEs_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionSetupFailed_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_E2connectionSetupFailed_ItemIEs_specs_21	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_28[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs__value, choice.E2nodeComponentConfigUpdate_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2nodeComponentConfigUpdate_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2nodeComponentConfigUpdate-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdate-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = {
+	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_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_E2nodeComponentConfigUpdate_ItemIEs_25[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_26,  memb_id_constraint_25 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigUpdate_ItemIEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_27,  memb_criticality_constraint_25 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_28,
+		select_E2nodeComponentConfigUpdate_ItemIEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_28,  memb_value_constraint_25 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdate_ItemIEs_tag2el_25[] = {
+    { (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_E2nodeComponentConfigUpdate_ItemIEs_specs_25 = {
+	sizeof(struct E2nodeComponentConfigUpdate_ItemIEs),
+	offsetof(struct E2nodeComponentConfigUpdate_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdate_ItemIEs_tag2el_25,
+	2,	/* 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_25,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdate_ItemIEs_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_25	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_32[] = {
+	{ 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_32[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdateAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = {
+	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_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_E2nodeComponentConfigUpdateAck_ItemIEs_29[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_30,  memb_id_constraint_29 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2nodeComponentConfigUpdateAck_ItemIEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_31,  memb_criticality_constraint_29 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_32,
+		select_E2nodeComponentConfigUpdateAck_ItemIEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_32,  memb_value_constraint_29 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeComponentConfigUpdateAck_ItemIEs_tag2el_29[] = {
+    { (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_E2nodeComponentConfigUpdateAck_ItemIEs_specs_29 = {
+	sizeof(struct E2nodeComponentConfigUpdateAck_ItemIEs),
+	offsetof(struct E2nodeComponentConfigUpdateAck_ItemIEs, _asn_ctx),
+	asn_MAP_E2nodeComponentConfigUpdateAck_ItemIEs_tag2el_29,
+	2,	/* 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_29,
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29[0]), /* 1 */
+	asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29,	/* Same as above */
+	sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29)
+		/sizeof(asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_29	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_36[] = {
+	{ 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_36[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = {
+	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_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_RANfunction_ItemIEs_33[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_34,  memb_id_constraint_33 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_RANfunction_ItemIEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_35,  memb_criticality_constraint_33 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_36,
+		select_RANfunction_ItemIEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_36,  memb_value_constraint_33 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_33[] = {
+    { (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_RANfunction_ItemIEs_specs_33 = {
+	sizeof(struct RANfunction_ItemIEs),
+	offsetof(struct RANfunction_ItemIEs, _asn_ctx),
+	asn_MAP_RANfunction_ItemIEs_tag2el_33,
+	2,	/* 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_33,
+	sizeof(asn_DEF_RANfunction_ItemIEs_tags_33)
+		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_33[0]), /* 1 */
+	asn_DEF_RANfunction_ItemIEs_tags_33,	/* Same as above */
+	sizeof(asn_DEF_RANfunction_ItemIEs_tags_33)
+		/sizeof(asn_DEF_RANfunction_ItemIEs_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunction_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_RANfunction_ItemIEs_specs_33	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_40[] = {
+	{ 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_40[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = {
+	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_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_RANfunctionID_ItemIEs_37[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_38,  memb_id_constraint_37 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_RANfunctionID_ItemIEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_39,  memb_criticality_constraint_37 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_40,
+		select_RANfunctionID_ItemIEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_40,  memb_value_constraint_37 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_37[] = {
+    { (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_RANfunctionID_ItemIEs_specs_37 = {
+	sizeof(struct RANfunctionID_ItemIEs),
+	offsetof(struct RANfunctionID_ItemIEs, _asn_ctx),
+	asn_MAP_RANfunctionID_ItemIEs_tag2el_37,
+	2,	/* 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_37,
+	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_37)
+		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_37[0]), /* 1 */
+	asn_DEF_RANfunctionID_ItemIEs_tags_37,	/* Same as above */
+	sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_37)
+		/sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionID_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionID_ItemIEs_specs_37	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_44[] = {
+	{ 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_44[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = {
+	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_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_RANfunctionIDcause_ItemIEs_41[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_42,  memb_id_constraint_41 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_RANfunctionIDcause_ItemIEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_43,  memb_criticality_constraint_41 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_44,
+		select_RANfunctionIDcause_ItemIEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_44,  memb_value_constraint_41 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_41[] = {
+    { (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_RANfunctionIDcause_ItemIEs_specs_41 = {
 	sizeof(struct RANfunctionIDcause_ItemIEs),
 	offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx),
-	asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21,
-	3,	/* Count of tags in the map */
+	asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_41,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -4895,19 +6816,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_41,
+	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_41)
+		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_41[0]), /* 1 */
+	asn_DEF_RANfunctionIDcause_ItemIEs_tags_41,	/* Same as above */
+	sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_41)
+		/sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_41[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionIDcause_ItemIEs_21,
+	asn_MBR_RANfunctionIDcause_ItemIEs_41,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_41	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_28[] = {
+static asn_TYPE_member_t asn_MBR_value_48[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -4936,26 +6857,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_48[] = { 1, 0, 2 };
+static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = {
     { (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_48 = {
 	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_48,
 	3,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_28,
-	asn_MAP_value_from_canonical_28,
+	asn_MAP_value_to_canonical_48,
+	asn_MAP_value_from_canonical_48,
 	-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_48 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -4964,53 +6885,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_28,
+	asn_MBR_value_48,
 	3,	/* Elements count */
-	&asn_SPC_value_specs_28	/* Additional specs */
+	&asn_SPC_value_specs_48	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_45[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_26, &asn_PER_memb_id_constr_26,  memb_id_constraint_25 },
+		{ 0, &asn_PER_memb_id_constr_46,  memb_id_constraint_45 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_27, &asn_PER_memb_criticality_constr_27,  memb_criticality_constraint_25 },
+		{ 0, &asn_PER_memb_criticality_constr_47,  memb_criticality_constraint_45 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_28,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_48,
 		select_RICsubscriptionRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_28, &asn_PER_memb_value_constr_28,  memb_value_constraint_25 },
+		{ 0, &asn_PER_memb_value_constr_48,  memb_value_constraint_45 },
 		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_45[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_45[] = {
+    { (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_RICsubscriptionRequest_IEs_specs_25 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_45 = {
 	sizeof(struct RICsubscriptionRequest_IEs),
 	offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionRequest_IEs_tag2el_25,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionRequest_IEs_tag2el_45,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5018,19 +6938,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_45,
+	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_45)
+		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_45[0]), /* 1 */
+	asn_DEF_RICsubscriptionRequest_IEs_tags_45,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_45)
+		/sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_45[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionRequest_IEs_25,
+	asn_MBR_RICsubscriptionRequest_IEs_45,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionRequest_IEs_specs_25	/* Additional specs */
+	&asn_SPC_RICsubscriptionRequest_IEs_specs_45	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_32[] = {
+static asn_TYPE_member_t asn_MBR_value_52[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5068,27 +6988,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_52[] = { 1, 0, 2, 3 };
+static const unsigned asn_MAP_value_from_canonical_52[] = { 1, 0, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = {
     { (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_52 = {
 	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_52,
 	4,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_32,
-	asn_MAP_value_from_canonical_32,
+	asn_MAP_value_to_canonical_52,
+	asn_MAP_value_from_canonical_52,
 	-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_52 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5097,53 +7017,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_32,
+	asn_MBR_value_52,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_32	/* Additional specs */
+	&asn_SPC_value_specs_52	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_49[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_30, &asn_PER_memb_id_constr_30,  memb_id_constraint_29 },
+		{ 0, &asn_PER_memb_id_constr_50,  memb_id_constraint_49 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionResponse_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_31, &asn_PER_memb_criticality_constr_31,  memb_criticality_constraint_29 },
+		{ 0, &asn_PER_memb_criticality_constr_51,  memb_criticality_constraint_49 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_32,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_52,
 		select_RICsubscriptionResponse_IEs_value_type,
-		{ &asn_OER_memb_value_constr_32, &asn_PER_memb_value_constr_32,  memb_value_constraint_29 },
+		{ 0, &asn_PER_memb_value_constr_52,  memb_value_constraint_49 },
 		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_49[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_49[] = {
+    { (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_RICsubscriptionResponse_IEs_specs_29 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_49 = {
 	sizeof(struct RICsubscriptionResponse_IEs),
 	offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionResponse_IEs_tag2el_29,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionResponse_IEs_tag2el_49,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5151,19 +7070,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_49,
+	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_49)
+		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_49[0]), /* 1 */
+	asn_DEF_RICsubscriptionResponse_IEs_tags_49,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_49)
+		/sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_49[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionResponse_IEs_29,
+	asn_MBR_RICsubscriptionResponse_IEs_49,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionResponse_IEs_specs_29	/* Additional specs */
+	&asn_SPC_RICsubscriptionResponse_IEs_specs_49	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_36[] = {
+static asn_TYPE_member_t asn_MBR_value_56[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5201,27 +7120,27 @@
 		"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_56[] = { 1, 0, 2, 3 };
+static const unsigned asn_MAP_value_from_canonical_56[] = { 1, 0, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = {
     { (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 */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = {
 	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,
+	asn_MAP_value_tag2el_56,
 	4,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_36,
-	asn_MAP_value_from_canonical_36,
+	asn_MAP_value_to_canonical_56,
+	asn_MAP_value_from_canonical_56,
 	-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_56 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5230,53 +7149,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_36,
+	asn_MBR_value_56,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_36	/* Additional specs */
+	&asn_SPC_value_specs_56	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_53[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_34, &asn_PER_memb_id_constr_34,  memb_id_constraint_33 },
+		{ 0, &asn_PER_memb_id_constr_54,  memb_id_constraint_53 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_35, &asn_PER_memb_criticality_constr_35,  memb_criticality_constraint_33 },
+		{ 0, &asn_PER_memb_criticality_constr_55,  memb_criticality_constraint_53 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_36,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_56,
 		select_RICsubscriptionFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_36, &asn_PER_memb_value_constr_36,  memb_value_constraint_33 },
+		{ 0, &asn_PER_memb_value_constr_56,  memb_value_constraint_53 },
 		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_53[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_53[] = {
+    { (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_RICsubscriptionFailure_IEs_specs_33 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_53 = {
 	sizeof(struct RICsubscriptionFailure_IEs),
 	offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionFailure_IEs_tag2el_33,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionFailure_IEs_tag2el_53,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5284,19 +7202,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_53,
+	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_53)
+		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_53[0]), /* 1 */
+	asn_DEF_RICsubscriptionFailure_IEs_tags_53,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_53)
+		/sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_53[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionFailure_IEs_33,
+	asn_MBR_RICsubscriptionFailure_IEs_53,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionFailure_IEs_specs_33	/* Additional specs */
+	&asn_SPC_RICsubscriptionFailure_IEs_specs_53	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_40[] = {
+static asn_TYPE_member_t asn_MBR_value_60[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5316,25 +7234,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_60[] = { 1, 0 };
+static const unsigned asn_MAP_value_from_canonical_60[] = { 1, 0 };
+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, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = {
 	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_60,
 	2,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_40,
-	asn_MAP_value_from_canonical_40,
+	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_40 = {
+asn_TYPE_descriptor_t asn_DEF_value_60 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5343,53 +7261,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_40,
+	asn_MBR_value_60,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_40	/* Additional specs */
+	&asn_SPC_value_specs_60	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_57[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_38, &asn_PER_memb_id_constr_38,  memb_id_constraint_37 },
+		{ 0, &asn_PER_memb_id_constr_58,  memb_id_constraint_57 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_39, &asn_PER_memb_criticality_constr_39,  memb_criticality_constraint_37 },
+		{ 0, &asn_PER_memb_criticality_constr_59,  memb_criticality_constraint_57 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_40,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_60,
 		select_RICsubscriptionDeleteRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_40, &asn_PER_memb_value_constr_40,  memb_value_constraint_37 },
+		{ 0, &asn_PER_memb_value_constr_60,  memb_value_constraint_57 },
 		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_57[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_57[] = {
+    { (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_RICsubscriptionDeleteRequest_IEs_specs_37 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_57 = {
 	sizeof(struct RICsubscriptionDeleteRequest_IEs),
 	offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_57,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5397,19 +7314,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_57,
+	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_57)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_57[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_57,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_57)
+		/sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_57[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteRequest_IEs_37,
+	asn_MBR_RICsubscriptionDeleteRequest_IEs_57,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_57	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_44[] = {
+static asn_TYPE_member_t asn_MBR_value_64[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5429,25 +7346,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_64[] = { 1, 0 };
+static const unsigned asn_MAP_value_from_canonical_64[] = { 1, 0 };
+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, 0 } /* RICrequestID */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = {
 	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_64,
 	2,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_44,
-	asn_MAP_value_from_canonical_44,
+	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_44 = {
+asn_TYPE_descriptor_t asn_DEF_value_64 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5456,53 +7373,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_44,
+	asn_MBR_value_64,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_44	/* Additional specs */
+	&asn_SPC_value_specs_64	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_61[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_42, &asn_PER_memb_id_constr_42,  memb_id_constraint_41 },
+		{ 0, &asn_PER_memb_id_constr_62,  memb_id_constraint_61 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteResponse_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_43, &asn_PER_memb_criticality_constr_43,  memb_criticality_constraint_41 },
+		{ 0, &asn_PER_memb_criticality_constr_63,  memb_criticality_constraint_61 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_44,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_64,
 		select_RICsubscriptionDeleteResponse_IEs_value_type,
-		{ &asn_OER_memb_value_constr_44, &asn_PER_memb_value_constr_44,  memb_value_constraint_41 },
+		{ 0, &asn_PER_memb_value_constr_64,  memb_value_constraint_61 },
 		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_61[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_61[] = {
+    { (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_RICsubscriptionDeleteResponse_IEs_specs_41 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_61 = {
 	sizeof(struct RICsubscriptionDeleteResponse_IEs),
 	offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_61,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5510,19 +7426,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_61,
+	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_61)
+		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_61[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_61,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_61)
+		/sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_61[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteResponse_IEs_41,
+	asn_MBR_RICsubscriptionDeleteResponse_IEs_61,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_61	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_48[] = {
+static asn_TYPE_member_t asn_MBR_value_68[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5560,9 +7476,9 @@
 		"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_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 */
@@ -5572,19 +7488,19 @@
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = {
 	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,
+	asn_MAP_value_tag2el_68,
 	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_48,
-	asn_MAP_value_from_canonical_48,
+	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_48 = {
+asn_TYPE_descriptor_t asn_DEF_value_68 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5593,53 +7509,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_48,
+	asn_MBR_value_68,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_48	/* Additional specs */
+	&asn_SPC_value_specs_68	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_65[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_46, &asn_PER_memb_id_constr_46,  memb_id_constraint_45 },
+		{ 0, &asn_PER_memb_id_constr_66,  memb_id_constraint_65 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICsubscriptionDeleteFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_47, &asn_PER_memb_criticality_constr_47,  memb_criticality_constraint_45 },
+		{ 0, &asn_PER_memb_criticality_constr_67,  memb_criticality_constraint_65 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_48,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_68,
 		select_RICsubscriptionDeleteFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_48, &asn_PER_memb_value_constr_48,  memb_value_constraint_45 },
+		{ 0, &asn_PER_memb_value_constr_68,  memb_value_constraint_65 },
 		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_65[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_65[] = {
+    { (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_RICsubscriptionDeleteFailure_IEs_specs_45 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_65 = {
 	sizeof(struct RICsubscriptionDeleteFailure_IEs),
 	offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx),
-	asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_65,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5647,19 +7562,19 @@
 	"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_65,
+	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_65)
+		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_65[0]), /* 1 */
+	asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_65,	/* Same as above */
+	sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_65)
+		/sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_65[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICsubscriptionDeleteFailure_IEs_45,
+	asn_MBR_RICsubscriptionDeleteFailure_IEs_65,
 	3,	/* Elements count */
-	&asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45	/* Additional specs */
+	&asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_65	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_52[] = {
+static asn_TYPE_member_t asn_MBR_value_72[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5733,9 +7648,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_72[] = { 1, 2, 3, 5, 6, 7, 4, 0 };
+static const unsigned asn_MAP_value_from_canonical_72[] = { 7, 0, 1, 2, 6, 3, 4, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = {
     { (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 */
@@ -5745,19 +7660,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_72 = {
 	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_72,
 	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_52,
-	asn_MAP_value_from_canonical_52,
+	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_52 = {
+asn_TYPE_descriptor_t asn_DEF_value_72 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5766,53 +7681,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_52,
+	asn_MBR_value_72,
 	8,	/* Elements count */
-	&asn_SPC_value_specs_52	/* Additional specs */
+	&asn_SPC_value_specs_72	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = {
+asn_TYPE_member_t asn_MBR_RICindication_IEs_69[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_50, &asn_PER_memb_id_constr_50,  memb_id_constraint_49 },
+		{ 0, &asn_PER_memb_id_constr_70,  memb_id_constraint_69 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICindication_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_51, &asn_PER_memb_criticality_constr_51,  memb_criticality_constraint_49 },
+		{ 0, &asn_PER_memb_criticality_constr_71,  memb_criticality_constraint_69 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_52,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_72,
 		select_RICindication_IEs_value_type,
-		{ &asn_OER_memb_value_constr_52, &asn_PER_memb_value_constr_52,  memb_value_constraint_49 },
+		{ 0, &asn_PER_memb_value_constr_72,  memb_value_constraint_69 },
 		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_69[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_69[] = {
+    { (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_RICindication_IEs_specs_49 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_69 = {
 	sizeof(struct RICindication_IEs),
 	offsetof(struct RICindication_IEs, _asn_ctx),
-	asn_MAP_RICindication_IEs_tag2el_49,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICindication_IEs_tag2el_69,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5820,19 +7734,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_69,
+	sizeof(asn_DEF_RICindication_IEs_tags_69)
+		/sizeof(asn_DEF_RICindication_IEs_tags_69[0]), /* 1 */
+	asn_DEF_RICindication_IEs_tags_69,	/* Same as above */
+	sizeof(asn_DEF_RICindication_IEs_tags_69)
+		/sizeof(asn_DEF_RICindication_IEs_tags_69[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICindication_IEs_49,
+	asn_MBR_RICindication_IEs_69,
 	3,	/* Elements count */
-	&asn_SPC_RICindication_IEs_specs_49	/* Additional specs */
+	&asn_SPC_RICindication_IEs_specs_69	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_56[] = {
+static asn_TYPE_member_t asn_MBR_value_76[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -5888,9 +7802,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_76[] = { 1, 2, 3, 4, 5, 0 };
+static const unsigned asn_MAP_value_from_canonical_76[] = { 5, 0, 1, 2, 3, 4 };
+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 | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */
     { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */
@@ -5898,19 +7812,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_76 = {
 	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_76,
 	6,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_56,
-	asn_MAP_value_from_canonical_56,
+	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_56 = {
+asn_TYPE_descriptor_t asn_DEF_value_76 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -5919,53 +7833,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_56,
+	asn_MBR_value_76,
 	6,	/* Elements count */
-	&asn_SPC_value_specs_56	/* Additional specs */
+	&asn_SPC_value_specs_76	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_73[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_54, &asn_PER_memb_id_constr_54,  memb_id_constraint_53 },
+		{ 0, &asn_PER_memb_id_constr_74,  memb_id_constraint_73 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICcontrolRequest_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_55, &asn_PER_memb_criticality_constr_55,  memb_criticality_constraint_53 },
+		{ 0, &asn_PER_memb_criticality_constr_75,  memb_criticality_constraint_73 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_56,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_76,
 		select_RICcontrolRequest_IEs_value_type,
-		{ &asn_OER_memb_value_constr_56, &asn_PER_memb_value_constr_56,  memb_value_constraint_53 },
+		{ 0, &asn_PER_memb_value_constr_76,  memb_value_constraint_73 },
 		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_73[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_73[] = {
+    { (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_RICcontrolRequest_IEs_specs_53 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_73 = {
 	sizeof(struct RICcontrolRequest_IEs),
 	offsetof(struct RICcontrolRequest_IEs, _asn_ctx),
-	asn_MAP_RICcontrolRequest_IEs_tag2el_53,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICcontrolRequest_IEs_tag2el_73,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -5973,19 +7886,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_73,
+	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_73)
+		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_73[0]), /* 1 */
+	asn_DEF_RICcontrolRequest_IEs_tags_73,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolRequest_IEs_tags_73)
+		/sizeof(asn_DEF_RICcontrolRequest_IEs_tags_73[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolRequest_IEs_53,
+	asn_MBR_RICcontrolRequest_IEs_73,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolRequest_IEs_specs_53	/* Additional specs */
+	&asn_SPC_RICcontrolRequest_IEs_specs_73	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_60[] = {
+static asn_TYPE_member_t asn_MBR_value_80[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6032,28 +7945,28 @@
 		"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_80[] = { 1, 2, 4, 3, 0 };
+static const unsigned asn_MAP_value_from_canonical_80[] = { 4, 0, 1, 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 | (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 | (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_80 = {
 	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,
+	asn_MAP_value_tag2el_80,
 	5,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_60,
-	asn_MAP_value_from_canonical_60,
+	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_60 = {
+asn_TYPE_descriptor_t asn_DEF_value_80 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6062,53 +7975,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_60,
+	asn_MBR_value_80,
 	5,	/* Elements count */
-	&asn_SPC_value_specs_60	/* Additional specs */
+	&asn_SPC_value_specs_80	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_77[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_58, &asn_PER_memb_id_constr_58,  memb_id_constraint_57 },
+		{ 0, &asn_PER_memb_id_constr_78,  memb_id_constraint_77 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICcontrolAcknowledge_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_59, &asn_PER_memb_criticality_constr_59,  memb_criticality_constraint_57 },
+		{ 0, &asn_PER_memb_criticality_constr_79,  memb_criticality_constraint_77 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_60,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_80,
 		select_RICcontrolAcknowledge_IEs_value_type,
-		{ &asn_OER_memb_value_constr_60, &asn_PER_memb_value_constr_60,  memb_value_constraint_57 },
+		{ 0, &asn_PER_memb_value_constr_80,  memb_value_constraint_77 },
 		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_77[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_77[] = {
+    { (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_RICcontrolAcknowledge_IEs_specs_57 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_77 = {
 	sizeof(struct RICcontrolAcknowledge_IEs),
 	offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx),
-	asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICcontrolAcknowledge_IEs_tag2el_77,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6116,19 +8028,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_77,
+	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_77)
+		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_77[0]), /* 1 */
+	asn_DEF_RICcontrolAcknowledge_IEs_tags_77,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_77)
+		/sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_77[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolAcknowledge_IEs_57,
+	asn_MBR_RICcontrolAcknowledge_IEs_77,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolAcknowledge_IEs_specs_57	/* Additional specs */
+	&asn_SPC_RICcontrolAcknowledge_IEs_specs_77	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_64[] = {
+static asn_TYPE_member_t asn_MBR_value_84[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6175,9 +8087,9 @@
 		"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_84[] = { 1, 2, 4, 0, 3 };
+static const unsigned asn_MAP_value_from_canonical_84[] = { 3, 0, 1, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = {
     { (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 */
@@ -6188,19 +8100,19 @@
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = {
 	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,
+	asn_MAP_value_tag2el_84,
 	9,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_64,
-	asn_MAP_value_from_canonical_64,
+	asn_MAP_value_to_canonical_84,
+	asn_MAP_value_from_canonical_84,
 	-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_84 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6209,53 +8121,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_64,
+	asn_MBR_value_84,
 	5,	/* Elements count */
-	&asn_SPC_value_specs_64	/* Additional specs */
+	&asn_SPC_value_specs_84	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = {
+asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_81[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_62, &asn_PER_memb_id_constr_62,  memb_id_constraint_61 },
+		{ 0, &asn_PER_memb_id_constr_82,  memb_id_constraint_81 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICcontrolFailure_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_63, &asn_PER_memb_criticality_constr_63,  memb_criticality_constraint_61 },
+		{ 0, &asn_PER_memb_criticality_constr_83,  memb_criticality_constraint_81 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_64,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_84,
 		select_RICcontrolFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_64, &asn_PER_memb_value_constr_64,  memb_value_constraint_61 },
+		{ 0, &asn_PER_memb_value_constr_84,  memb_value_constraint_81 },
 		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_81[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_81[] = {
+    { (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_RICcontrolFailure_IEs_specs_61 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_81 = {
 	sizeof(struct RICcontrolFailure_IEs),
 	offsetof(struct RICcontrolFailure_IEs, _asn_ctx),
-	asn_MAP_RICcontrolFailure_IEs_tag2el_61,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICcontrolFailure_IEs_tag2el_81,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6263,19 +8174,19 @@
 	"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_81,
+	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_81)
+		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_81[0]), /* 1 */
+	asn_DEF_RICcontrolFailure_IEs_tags_81,	/* Same as above */
+	sizeof(asn_DEF_RICcontrolFailure_IEs_tags_81)
+		/sizeof(asn_DEF_RICcontrolFailure_IEs_tags_81[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICcontrolFailure_IEs_61,
+	asn_MBR_RICcontrolFailure_IEs_81,
 	3,	/* Elements count */
-	&asn_SPC_RICcontrolFailure_IEs_specs_61	/* Additional specs */
+	&asn_SPC_RICcontrolFailure_IEs_specs_81	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_68[] = {
+static asn_TYPE_member_t asn_MBR_value_88[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6313,9 +8224,9 @@
 		"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[] = {
+static const unsigned asn_MAP_value_to_canonical_88[] = { 1, 0, 3, 2 };
+static const unsigned asn_MAP_value_from_canonical_88[] = { 1, 0, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = {
     { (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 */
@@ -6325,19 +8236,19 @@
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = {
 	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,
+	asn_MAP_value_tag2el_88,
 	8,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_68,
-	asn_MAP_value_from_canonical_68,
+	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_68 = {
+asn_TYPE_descriptor_t asn_DEF_value_88 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6346,53 +8257,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_68,
+	asn_MBR_value_88,
 	4,	/* Elements count */
-	&asn_SPC_value_specs_68	/* Additional specs */
+	&asn_SPC_value_specs_88	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = {
+asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_85[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_66, &asn_PER_memb_id_constr_66,  memb_id_constraint_65 },
+		{ 0, &asn_PER_memb_id_constr_86,  memb_id_constraint_85 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_ErrorIndication_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_67, &asn_PER_memb_criticality_constr_67,  memb_criticality_constraint_65 },
+		{ 0, &asn_PER_memb_criticality_constr_87,  memb_criticality_constraint_85 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_68,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_88,
 		select_ErrorIndication_IEs_value_type,
-		{ &asn_OER_memb_value_constr_68, &asn_PER_memb_value_constr_68,  memb_value_constraint_65 },
+		{ 0, &asn_PER_memb_value_constr_88,  memb_value_constraint_85 },
 		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_85[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_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 */
+static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_85[] = {
+    { (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_ErrorIndication_IEs_specs_65 = {
+asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_85 = {
 	sizeof(struct ErrorIndication_IEs),
 	offsetof(struct ErrorIndication_IEs, _asn_ctx),
-	asn_MAP_ErrorIndication_IEs_tag2el_65,
-	3,	/* Count of tags in the map */
+	asn_MAP_ErrorIndication_IEs_tag2el_85,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6400,19 +8310,19 @@
 	"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_85,
+	sizeof(asn_DEF_ErrorIndication_IEs_tags_85)
+		/sizeof(asn_DEF_ErrorIndication_IEs_tags_85[0]), /* 1 */
+	asn_DEF_ErrorIndication_IEs_tags_85,	/* Same as above */
+	sizeof(asn_DEF_ErrorIndication_IEs_tags_85)
+		/sizeof(asn_DEF_ErrorIndication_IEs_tags_85[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ErrorIndication_IEs_65,
+	asn_MBR_ErrorIndication_IEs_85,
 	3,	/* Elements count */
-	&asn_SPC_ErrorIndication_IEs_specs_65	/* Additional specs */
+	&asn_SPC_ErrorIndication_IEs_specs_85	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_72[] = {
+static asn_TYPE_member_t asn_MBR_value_92[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6431,29 +8341,39 @@
 		0, 0, /* No default value */
 		"RANfunctions-List"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__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"
+		},
 };
-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 */
+static const unsigned asn_MAP_value_to_canonical_92[] = { 1, 2, 0 };
+static const unsigned asn_MAP_value_from_canonical_92[] = { 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* RANfunctions-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 }, /* E2nodeComponentConfigUpdate-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 asn_CHOICE_specifics_t asn_SPC_value_specs_72 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = {
 	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_92,
+	6,	/* Count of tags in the map */
+	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_72 = {
+asn_TYPE_descriptor_t asn_DEF_value_92 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6462,53 +8382,52 @@
 	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_92,
+	3,	/* Elements count */
+	&asn_SPC_value_specs_92	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = {
+asn_TYPE_member_t asn_MBR_E2setupRequestIEs_89[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_70, &asn_PER_memb_id_constr_70,  memb_id_constraint_69 },
+		{ 0, &asn_PER_memb_id_constr_90,  memb_id_constraint_89 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_E2setupRequestIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_71, &asn_PER_memb_criticality_constr_71,  memb_criticality_constraint_69 },
+		{ 0, &asn_PER_memb_criticality_constr_91,  memb_criticality_constraint_89 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_72,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_92,
 		select_E2setupRequestIEs_value_type,
-		{ &asn_OER_memb_value_constr_72, &asn_PER_memb_value_constr_72,  memb_value_constraint_69 },
+		{ 0, &asn_PER_memb_value_constr_92,  memb_value_constraint_89 },
 		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_89[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_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_E2setupRequestIEs_specs_69 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_89 = {
 	sizeof(struct E2setupRequestIEs),
 	offsetof(struct E2setupRequestIEs, _asn_ctx),
-	asn_MAP_E2setupRequestIEs_tag2el_69,
-	3,	/* Count of tags in the map */
+	asn_MAP_E2setupRequestIEs_tag2el_89,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6516,19 +8435,19 @@
 	"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_89,
+	sizeof(asn_DEF_E2setupRequestIEs_tags_89)
+		/sizeof(asn_DEF_E2setupRequestIEs_tags_89[0]), /* 1 */
+	asn_DEF_E2setupRequestIEs_tags_89,	/* Same as above */
+	sizeof(asn_DEF_E2setupRequestIEs_tags_89)
+		/sizeof(asn_DEF_E2setupRequestIEs_tags_89[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupRequestIEs_69,
+	asn_MBR_E2setupRequestIEs_89,
 	3,	/* Elements count */
-	&asn_SPC_E2setupRequestIEs_specs_69	/* Additional specs */
+	&asn_SPC_E2setupRequestIEs_specs_89	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_76[] = {
+static asn_TYPE_member_t asn_MBR_value_96[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6556,24 +8475,34 @@
 		0, 0, /* No default value */
 		"RANfunctionsIDcause-List"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__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"
+		},
 };
-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_96[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* GlobalRIC-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* RANfunctionsID-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* RANfunctionsIDcause-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* E2nodeComponentConfigUpdateAck-List */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = {
 	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_96,
+	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_76 = {
+asn_TYPE_descriptor_t asn_DEF_value_96 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6582,53 +8511,52 @@
 	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_96,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_96	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = {
+asn_TYPE_member_t asn_MBR_E2setupResponseIEs_93[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_74, &asn_PER_memb_id_constr_74,  memb_id_constraint_73 },
+		{ 0, &asn_PER_memb_id_constr_94,  memb_id_constraint_93 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_E2setupResponseIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_75, &asn_PER_memb_criticality_constr_75,  memb_criticality_constraint_73 },
+		{ 0, &asn_PER_memb_criticality_constr_95,  memb_criticality_constraint_93 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_76,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_96,
 		select_E2setupResponseIEs_value_type,
-		{ &asn_OER_memb_value_constr_76, &asn_PER_memb_value_constr_76,  memb_value_constraint_73 },
+		{ 0, &asn_PER_memb_value_constr_96,  memb_value_constraint_93 },
 		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_93[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_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_E2setupResponseIEs_specs_73 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_93 = {
 	sizeof(struct E2setupResponseIEs),
 	offsetof(struct E2setupResponseIEs, _asn_ctx),
-	asn_MAP_E2setupResponseIEs_tag2el_73,
-	3,	/* Count of tags in the map */
+	asn_MAP_E2setupResponseIEs_tag2el_93,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6636,19 +8564,19 @@
 	"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_93,
+	sizeof(asn_DEF_E2setupResponseIEs_tags_93)
+		/sizeof(asn_DEF_E2setupResponseIEs_tags_93[0]), /* 1 */
+	asn_DEF_E2setupResponseIEs_tags_93,	/* Same as above */
+	sizeof(asn_DEF_E2setupResponseIEs_tags_93)
+		/sizeof(asn_DEF_E2setupResponseIEs_tags_93[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupResponseIEs_73,
+	asn_MBR_E2setupResponseIEs_93,
 	3,	/* Elements count */
-	&asn_SPC_E2setupResponseIEs_specs_73	/* Additional specs */
+	&asn_SPC_E2setupResponseIEs_specs_93	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_80[] = {
+static asn_TYPE_member_t asn_MBR_value_100[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6676,31 +8604,41 @@
 		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[] = {
+static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 2, 3, 0 };
+static const unsigned asn_MAP_value_from_canonical_100[] = { 3, 0, 1, 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)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* TNLinformation */
     { (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 asn_CHOICE_specifics_t asn_SPC_value_specs_80 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = {
 	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_100,
+	8,	/* 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_80 = {
+asn_TYPE_descriptor_t asn_DEF_value_100 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6709,53 +8647,52 @@
 	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_100,
+	4,	/* Elements count */
+	&asn_SPC_value_specs_100	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = {
+asn_TYPE_member_t asn_MBR_E2setupFailureIEs_97[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_78, &asn_PER_memb_id_constr_78,  memb_id_constraint_77 },
+		{ 0, &asn_PER_memb_id_constr_98,  memb_id_constraint_97 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_E2setupFailureIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_79, &asn_PER_memb_criticality_constr_79,  memb_criticality_constraint_77 },
+		{ 0, &asn_PER_memb_criticality_constr_99,  memb_criticality_constraint_97 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_80,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_100,
 		select_E2setupFailureIEs_value_type,
-		{ &asn_OER_memb_value_constr_80, &asn_PER_memb_value_constr_80,  memb_value_constraint_77 },
+		{ 0, &asn_PER_memb_value_constr_100,  memb_value_constraint_97 },
 		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_97[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_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_E2setupFailureIEs_specs_77 = {
+asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_97 = {
 	sizeof(struct E2setupFailureIEs),
 	offsetof(struct E2setupFailureIEs, _asn_ctx),
-	asn_MAP_E2setupFailureIEs_tag2el_77,
-	3,	/* Count of tags in the map */
+	asn_MAP_E2setupFailureIEs_tag2el_97,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6763,19 +8700,687 @@
 	"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_97,
+	sizeof(asn_DEF_E2setupFailureIEs_tags_97)
+		/sizeof(asn_DEF_E2setupFailureIEs_tags_97[0]), /* 1 */
+	asn_DEF_E2setupFailureIEs_tags_97,	/* Same as above */
+	sizeof(asn_DEF_E2setupFailureIEs_tags_97)
+		/sizeof(asn_DEF_E2setupFailureIEs_tags_97[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2setupFailureIEs_77,
+	asn_MBR_E2setupFailureIEs_97,
 	3,	/* Elements count */
-	&asn_SPC_E2setupFailureIEs_specs_77	/* Additional specs */
+	&asn_SPC_E2setupFailureIEs_specs_97	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_84[] = {
+static asn_TYPE_member_t asn_MBR_value_104[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_IEs__value, choice.E2connectionUpdate_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdate_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdate-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_IEs__value, choice.E2connectionUpdateRemove_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdateRemove_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdateRemove-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* E2connectionUpdate-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* E2connectionUpdateRemove-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = {
+	sizeof(struct E2connectionUpdate_IEs__value),
+	offsetof(struct E2connectionUpdate_IEs__value, _asn_ctx),
+	offsetof(struct E2connectionUpdate_IEs__value, present),
+	sizeof(((struct E2connectionUpdate_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_104,
+	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 = {
+	"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_104,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_104	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdate_IEs_101[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_102,  memb_id_constraint_101 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2connectionUpdate_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_103,  memb_criticality_constraint_101 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdate_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_104,
+		select_E2connectionUpdate_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_104,  memb_value_constraint_101 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdate_IEs_tags_101[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdate_IEs_tag2el_101[] = {
+    { (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_E2connectionUpdate_IEs_specs_101 = {
+	sizeof(struct E2connectionUpdate_IEs),
+	offsetof(struct E2connectionUpdate_IEs, _asn_ctx),
+	asn_MAP_E2connectionUpdate_IEs_tag2el_101,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_IEs = {
+	"E2connectionUpdate-IEs",
+	"E2connectionUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdate_IEs_tags_101,
+	sizeof(asn_DEF_E2connectionUpdate_IEs_tags_101)
+		/sizeof(asn_DEF_E2connectionUpdate_IEs_tags_101[0]), /* 1 */
+	asn_DEF_E2connectionUpdate_IEs_tags_101,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdate_IEs_tags_101)
+		/sizeof(asn_DEF_E2connectionUpdate_IEs_tags_101[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdate_IEs_101,
+	3,	/* Elements count */
+	&asn_SPC_E2connectionUpdate_IEs_specs_101	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_108[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAck_IEs__value, choice.E2connectionUpdate_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdate_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdate-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAck_IEs__value, choice.E2connectionSetupFailed_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionSetupFailed_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionSetupFailed-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_108[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* E2connectionUpdate-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* E2connectionSetupFailed-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_108 = {
+	sizeof(struct E2connectionUpdateAck_IEs__value),
+	offsetof(struct E2connectionUpdateAck_IEs__value, _asn_ctx),
+	offsetof(struct E2connectionUpdateAck_IEs__value, present),
+	sizeof(((struct E2connectionUpdateAck_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_108,
+	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_108 = {
+	"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_108,
+	2,	/* Elements count */
+	&asn_SPC_value_specs_108	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdateAck_IEs_105[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAck_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_106,  memb_id_constraint_105 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAck_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2connectionUpdateAck_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_107,  memb_criticality_constraint_105 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateAck_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_108,
+		select_E2connectionUpdateAck_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_108,  memb_value_constraint_105 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateAck_IEs_tags_105[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateAck_IEs_tag2el_105[] = {
+    { (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_E2connectionUpdateAck_IEs_specs_105 = {
+	sizeof(struct E2connectionUpdateAck_IEs),
+	offsetof(struct E2connectionUpdateAck_IEs, _asn_ctx),
+	asn_MAP_E2connectionUpdateAck_IEs_tag2el_105,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateAck_IEs = {
+	"E2connectionUpdateAck-IEs",
+	"E2connectionUpdateAck-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdateAck_IEs_tags_105,
+	sizeof(asn_DEF_E2connectionUpdateAck_IEs_tags_105)
+		/sizeof(asn_DEF_E2connectionUpdateAck_IEs_tags_105[0]), /* 1 */
+	asn_DEF_E2connectionUpdateAck_IEs_tags_105,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateAck_IEs_tags_105)
+		/sizeof(asn_DEF_E2connectionUpdateAck_IEs_tags_105[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdateAck_IEs_105,
+	3,	/* Elements count */
+	&asn_SPC_E2connectionUpdateAck_IEs_specs_105	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_112[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateFailure_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 E2connectionUpdateFailure_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 E2connectionUpdateFailure_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_112[] = { 1, 2, 0 };
+static const unsigned asn_MAP_value_from_canonical_112[] = { 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_112[] = {
+    { (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 asn_CHOICE_specifics_t asn_SPC_value_specs_112 = {
+	sizeof(struct E2connectionUpdateFailure_IEs__value),
+	offsetof(struct E2connectionUpdateFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2connectionUpdateFailure_IEs__value, present),
+	sizeof(((struct E2connectionUpdateFailure_IEs__value *)0)->present),
+	asn_MAP_value_tag2el_112,
+	7,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_112,
+	asn_MAP_value_from_canonical_112,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_112 = {
+	"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_112,
+	3,	/* Elements count */
+	&asn_SPC_value_specs_112	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2connectionUpdateFailure_IEs_109[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_110,  memb_id_constraint_109 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2connectionUpdateFailure_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_111,  memb_criticality_constraint_109 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2connectionUpdateFailure_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_112,
+		select_E2connectionUpdateFailure_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_112,  memb_value_constraint_109 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2connectionUpdateFailure_IEs_tags_109[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2connectionUpdateFailure_IEs_tag2el_109[] = {
+    { (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_E2connectionUpdateFailure_IEs_specs_109 = {
+	sizeof(struct E2connectionUpdateFailure_IEs),
+	offsetof(struct E2connectionUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_E2connectionUpdateFailure_IEs_tag2el_109,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateFailure_IEs = {
+	"E2connectionUpdateFailure-IEs",
+	"E2connectionUpdateFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2connectionUpdateFailure_IEs_tags_109,
+	sizeof(asn_DEF_E2connectionUpdateFailure_IEs_tags_109)
+		/sizeof(asn_DEF_E2connectionUpdateFailure_IEs_tags_109[0]), /* 1 */
+	asn_DEF_E2connectionUpdateFailure_IEs_tags_109,	/* Same as above */
+	sizeof(asn_DEF_E2connectionUpdateFailure_IEs_tags_109)
+		/sizeof(asn_DEF_E2connectionUpdateFailure_IEs_tags_109[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2connectionUpdateFailure_IEs_109,
+	3,	/* Elements count */
+	&asn_SPC_E2connectionUpdateFailure_IEs_specs_109	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_116[] = {
+	{ 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"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_116[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdate-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_116 = {
+	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_116,
+	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_116 = {
+	"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_116,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_116	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdate_IEs_113[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_114,  memb_id_constraint_113 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdate_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_115,  memb_criticality_constraint_113 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdate_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_116,
+		select_E2nodeConfigurationUpdate_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_116,  memb_value_constraint_113 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdate_IEs_tag2el_113[] = {
+    { (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_E2nodeConfigurationUpdate_IEs_specs_113 = {
+	sizeof(struct E2nodeConfigurationUpdate_IEs),
+	offsetof(struct E2nodeConfigurationUpdate_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdate_IEs_tag2el_113,
+	2,	/* 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_113,
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdate_IEs_tags_113[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdate_IEs_113,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdate_IEs_specs_113	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_120[] = {
+	{ 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"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_120[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E2nodeComponentConfigUpdateAck-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_120 = {
+	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_120,
+	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_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,
+	1,	/* Elements count */
+	&asn_SPC_value_specs_120	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateAcknowledge_IEs_117[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_118,  memb_id_constraint_117 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdateAcknowledge_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_119,  memb_criticality_constraint_117 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_120,
+		select_E2nodeConfigurationUpdateAcknowledge_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_120,  memb_value_constraint_117 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateAcknowledge_IEs_tag2el_117[] = {
+    { (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_E2nodeConfigurationUpdateAcknowledge_IEs_specs_117 = {
+	sizeof(struct E2nodeConfigurationUpdateAcknowledge_IEs),
+	offsetof(struct E2nodeConfigurationUpdateAcknowledge_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateAcknowledge_IEs_tag2el_117,
+	2,	/* 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_117,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs_tags_117[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateAcknowledge_IEs_117,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateAcknowledge_IEs_specs_117	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_124[] = {
+	{ 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_124[] = { 1, 2, 0 };
+static const unsigned asn_MAP_value_from_canonical_124[] = { 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_124[] = {
+    { (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 asn_CHOICE_specifics_t asn_SPC_value_specs_124 = {
+	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_124,
+	7,	/* Count of tags in the map */
+	asn_MAP_value_to_canonical_124,
+	asn_MAP_value_from_canonical_124,
+	-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,
+	3,	/* Elements count */
+	&asn_SPC_value_specs_124	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateFailure_IEs_121[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_id_constr_122,  memb_id_constraint_121 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_Criticality,
+		select_E2nodeConfigurationUpdateFailure_IEs_criticality_type,
+		{ 0, &asn_PER_memb_criticality_constr_123,  memb_criticality_constraint_121 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2nodeConfigurationUpdateFailure_IEs, value),
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_124,
+		select_E2nodeConfigurationUpdateFailure_IEs_value_type,
+		{ 0, &asn_PER_memb_value_constr_124,  memb_value_constraint_121 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2nodeConfigurationUpdateFailure_IEs_tag2el_121[] = {
+    { (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_E2nodeConfigurationUpdateFailure_IEs_specs_121 = {
+	sizeof(struct E2nodeConfigurationUpdateFailure_IEs),
+	offsetof(struct E2nodeConfigurationUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_E2nodeConfigurationUpdateFailure_IEs_tag2el_121,
+	2,	/* 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_121,
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121[0]), /* 1 */
+	asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121,	/* Same as above */
+	sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121)
+		/sizeof(asn_DEF_E2nodeConfigurationUpdateFailure_IEs_tags_121[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeConfigurationUpdateFailure_IEs_121,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeConfigurationUpdateFailure_IEs_specs_121	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_value_128[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause),
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -6786,25 +9391,25 @@
 		"Cause"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = {
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_128[] = {
     { (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 asn_CHOICE_specifics_t asn_SPC_value_specs_84 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_128 = {
 	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,
+	asn_MAP_value_tag2el_128,
 	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_84 = {
+asn_TYPE_descriptor_t asn_DEF_value_128 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6813,53 +9418,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_84,
+	asn_MBR_value_128,
 	1,	/* Elements count */
-	&asn_SPC_value_specs_84	/* Additional specs */
+	&asn_SPC_value_specs_128	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = {
+asn_TYPE_member_t asn_MBR_ResetRequestIEs_125[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_82, &asn_PER_memb_id_constr_82,  memb_id_constraint_81 },
+		{ 0, &asn_PER_memb_id_constr_126,  memb_id_constraint_125 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_ResetRequestIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_83, &asn_PER_memb_criticality_constr_83,  memb_criticality_constraint_81 },
+		{ 0, &asn_PER_memb_criticality_constr_127,  memb_criticality_constraint_125 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_84,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_128,
 		select_ResetRequestIEs_value_type,
-		{ &asn_OER_memb_value_constr_84, &asn_PER_memb_value_constr_84,  memb_value_constraint_81 },
+		{ 0, &asn_PER_memb_value_constr_128,  memb_value_constraint_125 },
 		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_125[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_125[] = {
+    { (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_ResetRequestIEs_specs_81 = {
+asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_125 = {
 	sizeof(struct ResetRequestIEs),
 	offsetof(struct ResetRequestIEs, _asn_ctx),
-	asn_MAP_ResetRequestIEs_tag2el_81,
-	3,	/* Count of tags in the map */
+	asn_MAP_ResetRequestIEs_tag2el_125,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6867,19 +9471,19 @@
 	"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_125,
+	sizeof(asn_DEF_ResetRequestIEs_tags_125)
+		/sizeof(asn_DEF_ResetRequestIEs_tags_125[0]), /* 1 */
+	asn_DEF_ResetRequestIEs_tags_125,	/* Same as above */
+	sizeof(asn_DEF_ResetRequestIEs_tags_125)
+		/sizeof(asn_DEF_ResetRequestIEs_tags_125[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResetRequestIEs_81,
+	asn_MBR_ResetRequestIEs_125,
 	3,	/* Elements count */
-	&asn_SPC_ResetRequestIEs_specs_81	/* Additional specs */
+	&asn_SPC_ResetRequestIEs_specs_125	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_88[] = {
+static asn_TYPE_member_t asn_MBR_value_132[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6890,21 +9494,21 @@
 		"CriticalityDiagnostics"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = {
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_132[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_132 = {
 	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,
+	asn_MAP_value_tag2el_132,
 	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_88 = {
+asn_TYPE_descriptor_t asn_DEF_value_132 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -6913,53 +9517,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_88,
+	asn_MBR_value_132,
 	1,	/* Elements count */
-	&asn_SPC_value_specs_88	/* Additional specs */
+	&asn_SPC_value_specs_132	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = {
+asn_TYPE_member_t asn_MBR_ResetResponseIEs_129[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_86, &asn_PER_memb_id_constr_86,  memb_id_constraint_85 },
+		{ 0, &asn_PER_memb_id_constr_130,  memb_id_constraint_129 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_ResetResponseIEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_87, &asn_PER_memb_criticality_constr_87,  memb_criticality_constraint_85 },
+		{ 0, &asn_PER_memb_criticality_constr_131,  memb_criticality_constraint_129 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_88,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_132,
 		select_ResetResponseIEs_value_type,
-		{ &asn_OER_memb_value_constr_88, &asn_PER_memb_value_constr_88,  memb_value_constraint_85 },
+		{ 0, &asn_PER_memb_value_constr_132,  memb_value_constraint_129 },
 		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_129[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_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 */
+static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_129[] = {
+    { (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_ResetResponseIEs_specs_85 = {
+asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_129 = {
 	sizeof(struct ResetResponseIEs),
 	offsetof(struct ResetResponseIEs, _asn_ctx),
-	asn_MAP_ResetResponseIEs_tag2el_85,
-	3,	/* Count of tags in the map */
+	asn_MAP_ResetResponseIEs_tag2el_129,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -6967,19 +9570,19 @@
 	"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_129,
+	sizeof(asn_DEF_ResetResponseIEs_tags_129)
+		/sizeof(asn_DEF_ResetResponseIEs_tags_129[0]), /* 1 */
+	asn_DEF_ResetResponseIEs_tags_129,	/* Same as above */
+	sizeof(asn_DEF_ResetResponseIEs_tags_129)
+		/sizeof(asn_DEF_ResetResponseIEs_tags_129[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResetResponseIEs_85,
+	asn_MBR_ResetResponseIEs_129,
 	3,	/* Elements count */
-	&asn_SPC_ResetResponseIEs_specs_85	/* Additional specs */
+	&asn_SPC_ResetResponseIEs_specs_129	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_92[] = {
+static asn_TYPE_member_t asn_MBR_value_136[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -6999,22 +9602,22 @@
 		"RANfunctionsID-List"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = {
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_136[] = {
     { (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 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_136 = {
 	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,
+	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_92 = {
+asn_TYPE_descriptor_t asn_DEF_value_136 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -7023,53 +9626,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_92,
+	asn_MBR_value_136,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_92	/* Additional specs */
+	&asn_SPC_value_specs_136	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = {
+asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_133[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_id_constr_134,  memb_id_constraint_133 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_criticality_constr_135,  memb_criticality_constraint_133 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_92,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_136,
 		select_RICserviceUpdate_IEs_value_type,
-		{ &asn_OER_memb_value_constr_92, &asn_PER_memb_value_constr_92,  memb_value_constraint_89 },
+		{ 0, &asn_PER_memb_value_constr_136,  memb_value_constraint_133 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = {
+static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_133[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_133[] = {
+    { (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 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_133 = {
 	sizeof(struct RICserviceUpdate_IEs),
 	offsetof(struct RICserviceUpdate_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdate_IEs_tag2el_89,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICserviceUpdate_IEs_tag2el_133,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -7077,19 +9679,19 @@
 	"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 */
+	asn_DEF_RICserviceUpdate_IEs_tags_133,
+	sizeof(asn_DEF_RICserviceUpdate_IEs_tags_133)
+		/sizeof(asn_DEF_RICserviceUpdate_IEs_tags_133[0]), /* 1 */
+	asn_DEF_RICserviceUpdate_IEs_tags_133,	/* Same as above */
+	sizeof(asn_DEF_RICserviceUpdate_IEs_tags_133)
+		/sizeof(asn_DEF_RICserviceUpdate_IEs_tags_133[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdate_IEs_89,
+	asn_MBR_RICserviceUpdate_IEs_133,
 	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdate_IEs_specs_89	/* Additional specs */
+	&asn_SPC_RICserviceUpdate_IEs_specs_133	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_96[] = {
+static asn_TYPE_member_t asn_MBR_value_140[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -7109,22 +9711,22 @@
 		"RANfunctionsIDcause-List"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = {
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_140[] = {
     { (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 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_140 = {
 	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,
+	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_96 = {
+asn_TYPE_descriptor_t asn_DEF_value_140 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -7133,53 +9735,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_96,
+	asn_MBR_value_140,
 	2,	/* Elements count */
-	&asn_SPC_value_specs_96	/* Additional specs */
+	&asn_SPC_value_specs_140	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = {
+asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_137[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_id_constr_138,  memb_id_constraint_137 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_criticality_constr_139,  memb_criticality_constraint_137 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_96,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_140,
 		select_RICserviceUpdateAcknowledge_IEs_value_type,
-		{ &asn_OER_memb_value_constr_96, &asn_PER_memb_value_constr_96,  memb_value_constraint_93 },
+		{ 0, &asn_PER_memb_value_constr_140,  memb_value_constraint_137 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = {
+static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_137[] = {
+    { (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 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_137 = {
 	sizeof(struct RICserviceUpdateAcknowledge_IEs),
 	offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_137,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -7187,19 +9788,19 @@
 	"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 */
+	asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137,
+	sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137)
+		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137[0]), /* 1 */
+	asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137,	/* Same as above */
+	sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137)
+		/sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_137[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateAcknowledge_IEs_93,
+	asn_MBR_RICserviceUpdateAcknowledge_IEs_137,
 	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93	/* Additional specs */
+	&asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_137	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_100[] = {
+static asn_TYPE_member_t asn_MBR_value_144[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -7228,26 +9829,26 @@
 		"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[] = {
+static const unsigned asn_MAP_value_to_canonical_144[] = { 1, 0, 2 };
+static const unsigned asn_MAP_value_from_canonical_144[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_144[] = {
     { (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 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_144 = {
 	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,
+	asn_MAP_value_tag2el_144,
 	3,	/* Count of tags in the map */
-	asn_MAP_value_to_canonical_100,
-	asn_MAP_value_from_canonical_100,
+	asn_MAP_value_to_canonical_144,
+	asn_MAP_value_from_canonical_144,
 	-1	/* Extensions start */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_value_100 = {
+asn_TYPE_descriptor_t asn_DEF_value_144 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -7256,53 +9857,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_100,
+	asn_MBR_value_144,
 	3,	/* Elements count */
-	&asn_SPC_value_specs_100	/* Additional specs */
+	&asn_SPC_value_specs_144	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = {
+asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_141[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_id_constr_142,  memb_id_constraint_141 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(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, &asn_PER_memb_criticality_constr_143,  memb_criticality_constraint_141 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_100,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_144,
 		select_RICserviceUpdateFailure_IEs_value_type,
-		{ &asn_OER_memb_value_constr_100, &asn_PER_memb_value_constr_100,  memb_value_constraint_97 },
+		{ 0, &asn_PER_memb_value_constr_144,  memb_value_constraint_141 },
 		0, 0, /* No default value */
 		"value"
 		},
 };
-static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = {
+static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_141[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_141[] = {
+    { (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 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_141 = {
 	sizeof(struct RICserviceUpdateFailure_IEs),
 	offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx),
-	asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICserviceUpdateFailure_IEs_tag2el_141,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -7310,19 +9910,19 @@
 	"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 */
+	asn_DEF_RICserviceUpdateFailure_IEs_tags_141,
+	sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_141)
+		/sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_141[0]), /* 1 */
+	asn_DEF_RICserviceUpdateFailure_IEs_tags_141,	/* Same as above */
+	sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_141)
+		/sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_141[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceUpdateFailure_IEs_97,
+	asn_MBR_RICserviceUpdateFailure_IEs_141,
 	3,	/* Elements count */
-	&asn_SPC_RICserviceUpdateFailure_IEs_specs_97	/* Additional specs */
+	&asn_SPC_RICserviceUpdateFailure_IEs_specs_141	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_value_104[] = {
+static asn_TYPE_member_t asn_MBR_value_148[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -7333,21 +9933,21 @@
 		"RANfunctionsID-List"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = {
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_148[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */
 };
-static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = {
+static asn_CHOICE_specifics_t asn_SPC_value_specs_148 = {
 	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,
+	asn_MAP_value_tag2el_148,
 	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_104 = {
+asn_TYPE_descriptor_t asn_DEF_value_148 = {
 	"value",
 	"value",
 	&asn_OP_OPEN_TYPE,
@@ -7356,53 +9956,52 @@
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
-	asn_MBR_value_104,
+	asn_MBR_value_148,
 	1,	/* Elements count */
-	&asn_SPC_value_specs_104	/* Additional specs */
+	&asn_SPC_value_specs_148	/* Additional specs */
 };
 
-asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = {
+asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_145[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
 		&asn_DEF_ProtocolIE_ID,
 		0,
-		{ &asn_OER_memb_id_constr_102, &asn_PER_memb_id_constr_102,  memb_id_constraint_101 },
+		{ 0, &asn_PER_memb_id_constr_146,  memb_id_constraint_145 },
 		0, 0, /* No default value */
 		"id"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
 		&asn_DEF_Criticality,
 		select_RICserviceQuery_IEs_criticality_type,
-		{ &asn_OER_memb_criticality_constr_103, &asn_PER_memb_criticality_constr_103,  memb_criticality_constraint_101 },
+		{ 0, &asn_PER_memb_criticality_constr_147,  memb_criticality_constraint_145 },
 		0, 0, /* No default value */
 		"criticality"
 		},
 	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_value_104,
+		-1 /* Ambiguous tag (ANY?) */,
+		0,
+		&asn_DEF_value_148,
 		select_RICserviceQuery_IEs_value_type,
-		{ &asn_OER_memb_value_constr_104, &asn_PER_memb_value_constr_104,  memb_value_constraint_101 },
+		{ 0, &asn_PER_memb_value_constr_148,  memb_value_constraint_145 },
 		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_145[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_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 */
+static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_145[] = {
+    { (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_RICserviceQuery_IEs_specs_101 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_145 = {
 	sizeof(struct RICserviceQuery_IEs),
 	offsetof(struct RICserviceQuery_IEs, _asn_ctx),
-	asn_MAP_RICserviceQuery_IEs_tag2el_101,
-	3,	/* Count of tags in the map */
+	asn_MAP_RICserviceQuery_IEs_tag2el_145,
+	2,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* First extension addition */
 };
@@ -7410,15 +10009,15 @@
 	"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_145,
+	sizeof(asn_DEF_RICserviceQuery_IEs_tags_145)
+		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_145[0]), /* 1 */
+	asn_DEF_RICserviceQuery_IEs_tags_145,	/* Same as above */
+	sizeof(asn_DEF_RICserviceQuery_IEs_tags_145)
+		/sizeof(asn_DEF_RICserviceQuery_IEs_tags_145[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RICserviceQuery_IEs_101,
+	asn_MBR_RICserviceQuery_IEs_145,
 	3,	/* Elements count */
-	&asn_SPC_RICserviceQuery_IEs_specs_101	/* Additional specs */
+	&asn_SPC_RICserviceQuery_IEs_specs_145	/* Additional specs */
 };
 
diff --git a/e2sim/src/ASN1c/ProtocolIE-Field.h b/e2sim/src/ASN1c/ProtocolIE-Field.h
index a62f34b..bf80722 100644
--- a/e2sim/src/ASN1c/ProtocolIE-Field.h
+++ b/e2sim/src/ASN1c/ProtocolIE-Field.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_Field_H_
@@ -23,6 +23,11 @@
 #include "constr_SEQUENCE.h"
 #include "RICaction-Admitted-Item.h"
 #include "RICaction-NotAdmitted-Item.h"
+#include "E2connectionUpdate-Item.h"
+#include "E2connectionUpdateRemove-Item.h"
+#include "E2connectionSetupFailed-Item.h"
+#include "E2nodeComponentConfigUpdate-Item.h"
+#include "E2nodeComponentConfigUpdateAck-Item.h"
 #include "RANfunction-Item.h"
 #include "RANfunctionID-Item.h"
 #include "RANfunctionIDcause-Item.h"
@@ -46,10 +51,16 @@
 #include "RICcontrolOutcome.h"
 #include "GlobalE2node-ID.h"
 #include "RANfunctions-List.h"
+#include "E2nodeComponentConfigUpdate-List.h"
 #include "GlobalRIC-ID.h"
 #include "RANfunctionsID-List.h"
 #include "RANfunctionsIDcause-List.h"
+#include "E2nodeComponentConfigUpdateAck-List.h"
 #include "TimeToWait.h"
+#include "TNLinformation.h"
+#include "E2connectionUpdate-List.h"
+#include "E2connectionUpdateRemove-List.h"
+#include "E2connectionSetupFailed-List.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -68,6 +79,26 @@
 	RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING,	/* No components present */
 	RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item
 } RICaction_NotAdmitted_ItemIEs__value_PR;
+typedef enum E2connectionUpdate_ItemIEs__value_PR {
+	E2connectionUpdate_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2connectionUpdate_ItemIEs__value_PR_E2connectionUpdate_Item
+} E2connectionUpdate_ItemIEs__value_PR;
+typedef enum E2connectionUpdateRemove_ItemIEs__value_PR {
+	E2connectionUpdateRemove_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2connectionUpdateRemove_ItemIEs__value_PR_E2connectionUpdateRemove_Item
+} E2connectionUpdateRemove_ItemIEs__value_PR;
+typedef enum E2connectionSetupFailed_ItemIEs__value_PR {
+	E2connectionSetupFailed_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2connectionSetupFailed_ItemIEs__value_PR_E2connectionSetupFailed_Item
+} E2connectionSetupFailed_ItemIEs__value_PR;
+typedef enum E2nodeComponentConfigUpdate_ItemIEs__value_PR {
+	E2nodeComponentConfigUpdate_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2nodeComponentConfigUpdate_ItemIEs__value_PR_E2nodeComponentConfigUpdate_Item
+} E2nodeComponentConfigUpdate_ItemIEs__value_PR;
+typedef enum E2nodeComponentConfigUpdateAck_ItemIEs__value_PR {
+	E2nodeComponentConfigUpdateAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2nodeComponentConfigUpdateAck_ItemIEs__value_PR_E2nodeComponentConfigUpdateAck_Item
+} E2nodeComponentConfigUpdateAck_ItemIEs__value_PR;
 typedef enum RANfunction_ItemIEs__value_PR {
 	RANfunction_ItemIEs__value_PR_NOTHING,	/* No components present */
 	RANfunction_ItemIEs__value_PR_RANfunction_Item
@@ -163,20 +194,53 @@
 typedef enum E2setupRequestIEs__value_PR {
 	E2setupRequestIEs__value_PR_NOTHING,	/* No components present */
 	E2setupRequestIEs__value_PR_GlobalE2node_ID,
-	E2setupRequestIEs__value_PR_RANfunctions_List
+	E2setupRequestIEs__value_PR_RANfunctions_List,
+	E2setupRequestIEs__value_PR_E2nodeComponentConfigUpdate_List
 } E2setupRequestIEs__value_PR;
 typedef enum E2setupResponseIEs__value_PR {
 	E2setupResponseIEs__value_PR_NOTHING,	/* No components present */
 	E2setupResponseIEs__value_PR_GlobalRIC_ID,
 	E2setupResponseIEs__value_PR_RANfunctionsID_List,
-	E2setupResponseIEs__value_PR_RANfunctionsIDcause_List
+	E2setupResponseIEs__value_PR_RANfunctionsIDcause_List,
+	E2setupResponseIEs__value_PR_E2nodeComponentConfigUpdateAck_List
 } E2setupResponseIEs__value_PR;
 typedef enum E2setupFailureIEs__value_PR {
 	E2setupFailureIEs__value_PR_NOTHING,	/* No components present */
 	E2setupFailureIEs__value_PR_Cause,
 	E2setupFailureIEs__value_PR_TimeToWait,
-	E2setupFailureIEs__value_PR_CriticalityDiagnostics
+	E2setupFailureIEs__value_PR_CriticalityDiagnostics,
+	E2setupFailureIEs__value_PR_TNLinformation
 } E2setupFailureIEs__value_PR;
+typedef enum E2connectionUpdate_IEs__value_PR {
+	E2connectionUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	E2connectionUpdate_IEs__value_PR_E2connectionUpdate_List,
+	E2connectionUpdate_IEs__value_PR_E2connectionUpdateRemove_List
+} E2connectionUpdate_IEs__value_PR;
+typedef enum E2connectionUpdateAck_IEs__value_PR {
+	E2connectionUpdateAck_IEs__value_PR_NOTHING,	/* No components present */
+	E2connectionUpdateAck_IEs__value_PR_E2connectionUpdate_List,
+	E2connectionUpdateAck_IEs__value_PR_E2connectionSetupFailed_List
+} E2connectionUpdateAck_IEs__value_PR;
+typedef enum E2connectionUpdateFailure_IEs__value_PR {
+	E2connectionUpdateFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2connectionUpdateFailure_IEs__value_PR_Cause,
+	E2connectionUpdateFailure_IEs__value_PR_TimeToWait,
+	E2connectionUpdateFailure_IEs__value_PR_CriticalityDiagnostics
+} E2connectionUpdateFailure_IEs__value_PR;
+typedef enum E2nodeConfigurationUpdate_IEs__value_PR {
+	E2nodeConfigurationUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	E2nodeConfigurationUpdate_IEs__value_PR_E2nodeComponentConfigUpdate_List
+} E2nodeConfigurationUpdate_IEs__value_PR;
+typedef enum E2nodeConfigurationUpdateAcknowledge_IEs__value_PR {
+	E2nodeConfigurationUpdateAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	E2nodeConfigurationUpdateAcknowledge_IEs__value_PR_E2nodeComponentConfigUpdateAck_List
+} E2nodeConfigurationUpdateAcknowledge_IEs__value_PR;
+typedef enum E2nodeConfigurationUpdateFailure_IEs__value_PR {
+	E2nodeConfigurationUpdateFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2nodeConfigurationUpdateFailure_IEs__value_PR_Cause,
+	E2nodeConfigurationUpdateFailure_IEs__value_PR_TimeToWait,
+	E2nodeConfigurationUpdateFailure_IEs__value_PR_CriticalityDiagnostics
+} E2nodeConfigurationUpdateFailure_IEs__value_PR;
 typedef enum ResetRequestIEs__value_PR {
 	ResetRequestIEs__value_PR_NOTHING,	/* No components present */
 	ResetRequestIEs__value_PR_Cause
@@ -255,6 +319,86 @@
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
 } RICaction_NotAdmitted_ItemIEs_t;
+typedef struct E2connectionUpdate_ItemIEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionUpdate_ItemIEs__value {
+		E2connectionUpdate_ItemIEs__value_PR present;
+		union E2connectionUpdate_ItemIEs__value_u {
+			E2connectionUpdate_Item_t	 E2connectionUpdate_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdate_ItemIEs_t;
+typedef struct E2connectionUpdateRemove_ItemIEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionUpdateRemove_ItemIEs__value {
+		E2connectionUpdateRemove_ItemIEs__value_PR present;
+		union E2connectionUpdateRemove_ItemIEs__value_u {
+			E2connectionUpdateRemove_Item_t	 E2connectionUpdateRemove_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateRemove_ItemIEs_t;
+typedef struct E2connectionSetupFailed_ItemIEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionSetupFailed_ItemIEs__value {
+		E2connectionSetupFailed_ItemIEs__value_PR present;
+		union E2connectionSetupFailed_ItemIEs__value_u {
+			E2connectionSetupFailed_Item_t	 E2connectionSetupFailed_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionSetupFailed_ItemIEs_t;
+typedef struct E2nodeComponentConfigUpdate_ItemIEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2nodeComponentConfigUpdate_ItemIEs__value {
+		E2nodeComponentConfigUpdate_ItemIEs__value_PR present;
+		union E2nodeComponentConfigUpdate_ItemIEs__value_u {
+			E2nodeComponentConfigUpdate_Item_t	 E2nodeComponentConfigUpdate_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdate_ItemIEs_t;
+typedef struct E2nodeComponentConfigUpdateAck_ItemIEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2nodeComponentConfigUpdateAck_ItemIEs__value {
+		E2nodeComponentConfigUpdateAck_ItemIEs__value_PR present;
+		union E2nodeComponentConfigUpdateAck_ItemIEs__value_u {
+			E2nodeComponentConfigUpdateAck_Item_t	 E2nodeComponentConfigUpdateAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeComponentConfigUpdateAck_ItemIEs_t;
 typedef struct RANfunction_ItemIEs {
 	ProtocolIE_ID_t	 id;
 	Criticality_t	 criticality;
@@ -523,6 +667,7 @@
 		union E2setupRequestIEs__value_u {
 			GlobalE2node_ID_t	 GlobalE2node_ID;
 			RANfunctions_List_t	 RANfunctions_List;
+			E2nodeComponentConfigUpdate_List_t	 E2nodeComponentConfigUpdate_List;
 		} choice;
 		
 		/* Context for parsing across buffer boundaries */
@@ -541,6 +686,7 @@
 			GlobalRIC_ID_t	 GlobalRIC_ID;
 			RANfunctionsID_List_t	 RANfunctionsID_List;
 			RANfunctionsIDcause_List_t	 RANfunctionsIDcause_List;
+			E2nodeComponentConfigUpdateAck_List_t	 E2nodeComponentConfigUpdateAck_List;
 		} choice;
 		
 		/* Context for parsing across buffer boundaries */
@@ -559,6 +705,7 @@
 			Cause_t	 Cause;
 			TimeToWait_t	 TimeToWait;
 			CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			TNLinformation_t	 TNLinformation;
 		} choice;
 		
 		/* Context for parsing across buffer boundaries */
@@ -568,6 +715,108 @@
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
 } E2setupFailureIEs_t;
+typedef struct E2connectionUpdate_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionUpdate_IEs__value {
+		E2connectionUpdate_IEs__value_PR present;
+		union E2connectionUpdate_IEs__value_u {
+			E2connectionUpdate_List_t	 E2connectionUpdate_List;
+			E2connectionUpdateRemove_List_t	 E2connectionUpdateRemove_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdate_IEs_t;
+typedef struct E2connectionUpdateAck_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionUpdateAck_IEs__value {
+		E2connectionUpdateAck_IEs__value_PR present;
+		union E2connectionUpdateAck_IEs__value_u {
+			E2connectionUpdate_List_t	 E2connectionUpdate_List;
+			E2connectionSetupFailed_List_t	 E2connectionSetupFailed_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateAck_IEs_t;
+typedef struct E2connectionUpdateFailure_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2connectionUpdateFailure_IEs__value {
+		E2connectionUpdateFailure_IEs__value_PR present;
+		union E2connectionUpdateFailure_IEs__value_u {
+			Cause_t	 Cause;
+			TimeToWait_t	 TimeToWait;
+			CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2connectionUpdateFailure_IEs_t;
+typedef struct E2nodeConfigurationUpdate_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2nodeConfigurationUpdate_IEs__value {
+		E2nodeConfigurationUpdate_IEs__value_PR present;
+		union E2nodeConfigurationUpdate_IEs__value_u {
+			E2nodeComponentConfigUpdate_List_t	 E2nodeComponentConfigUpdate_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdate_IEs_t;
+typedef struct E2nodeConfigurationUpdateAcknowledge_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2nodeConfigurationUpdateAcknowledge_IEs__value {
+		E2nodeConfigurationUpdateAcknowledge_IEs__value_PR present;
+		union E2nodeConfigurationUpdateAcknowledge_IEs__value_u {
+			E2nodeComponentConfigUpdateAck_List_t	 E2nodeComponentConfigUpdateAck_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdateAcknowledge_IEs_t;
+typedef struct E2nodeConfigurationUpdateFailure_IEs {
+	ProtocolIE_ID_t	 id;
+	Criticality_t	 criticality;
+	struct E2nodeConfigurationUpdateFailure_IEs__value {
+		E2nodeConfigurationUpdateFailure_IEs__value_PR present;
+		union E2nodeConfigurationUpdateFailure_IEs__value_u {
+			Cause_t	 Cause;
+			TimeToWait_t	 TimeToWait;
+			CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2nodeConfigurationUpdateFailure_IEs_t;
 typedef struct ResetRequestIEs {
 	ProtocolIE_ID_t	 id;
 	Criticality_t	 criticality;
@@ -679,75 +928,108 @@
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs;
 extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9;
 extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_ItemIEs_specs_13;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdate_ItemIEs_13[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateRemove_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateRemove_ItemIEs_specs_17;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateRemove_ItemIEs_17[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionSetupFailed_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionSetupFailed_ItemIEs_specs_21;
+extern asn_TYPE_member_t asn_MBR_E2connectionSetupFailed_ItemIEs_21[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdate_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_25;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_25[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeComponentConfigUpdateAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_29;
+extern asn_TYPE_member_t asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_29[3];
 extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13;
-extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_33;
+extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_33[3];
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17;
-extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_37;
+extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_37[3];
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21;
-extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_41;
+extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_41[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_45;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_45[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_49;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_49[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_53;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_53[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_57;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_57[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_61;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_61[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45;
-extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_65;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_65[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49;
-extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_69;
+extern asn_TYPE_member_t asn_MBR_RICindication_IEs_69[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53;
-extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_73;
+extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_73[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57;
-extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_77;
+extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_77[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61;
-extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_81;
+extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_81[3];
 extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65;
-extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_85;
+extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_85[3];
 extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69;
-extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_89;
+extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_89[3];
 extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73;
-extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_93;
+extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_93[3];
 extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77;
-extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_97;
+extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_97[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdate_IEs_specs_101;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdate_IEs_101[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateAck_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateAck_IEs_specs_105;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateAck_IEs_105[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2connectionUpdateFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2connectionUpdateFailure_IEs_specs_109;
+extern asn_TYPE_member_t asn_MBR_E2connectionUpdateFailure_IEs_109[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdate_IEs_specs_113;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdate_IEs_113[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateAcknowledge_IEs_specs_117;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateAcknowledge_IEs_117[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2nodeConfigurationUpdateFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2nodeConfigurationUpdateFailure_IEs_specs_121;
+extern asn_TYPE_member_t asn_MBR_E2nodeConfigurationUpdateFailure_IEs_121[3];
 extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81;
-extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_125;
+extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_125[3];
 extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85;
-extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_129;
+extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_129[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89;
-extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_133;
+extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_133[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93;
-extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_137;
+extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_137[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97;
-extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_141;
+extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_141[3];
 extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs;
-extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101;
-extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3];
+extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_145;
+extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_145[3];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/ProtocolIE-FieldPair.c b/e2sim/src/ASN1c/ProtocolIE-FieldPair.c
index 1d70ccf..74ff309 100644
--- a/e2sim/src/ASN1c/ProtocolIE-FieldPair.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-FieldPair.h"
diff --git a/e2sim/src/ASN1c/ProtocolIE-FieldPair.h b/e2sim/src/ASN1c/ProtocolIE-FieldPair.h
index ca20e0d..7437097 100644
--- a/e2sim/src/ASN1c/ProtocolIE-FieldPair.h
+++ b/e2sim/src/ASN1c/ProtocolIE-FieldPair.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_FieldPair_H_
diff --git a/e2sim/src/ASN1c/ProtocolIE-ID.c b/e2sim/src/ASN1c/ProtocolIE-ID.c
index c7466e3..5d11b66 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ID.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-ID.h"
@@ -36,9 +36,6 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -57,7 +54,7 @@
 	asn_DEF_ProtocolIE_ID_tags_1,	/* Same as above */
 	sizeof(asn_DEF_ProtocolIE_ID_tags_1)
 		/sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ProtocolIE_ID_constr_1, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint },
+	{ 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/ProtocolIE-ID.h b/e2sim/src/ASN1c/ProtocolIE-ID.h
index cb581b9..77b6c57 100644
--- a/e2sim/src/ASN1c/ProtocolIE-ID.h
+++ b/e2sim/src/ASN1c/ProtocolIE-ID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_ID_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f ProtocolIE_ID_encode_der;
 xer_type_decoder_f ProtocolIE_ID_decode_xer;
 xer_type_encoder_f ProtocolIE_ID_encode_xer;
-oer_type_decoder_f ProtocolIE_ID_decode_oer;
-oer_type_encoder_f ProtocolIE_ID_encode_oer;
 per_type_decoder_f ProtocolIE_ID_decode_uper;
 per_type_encoder_f ProtocolIE_ID_encode_uper;
 per_type_decoder_f ProtocolIE_ID_decode_aper;
@@ -69,6 +67,20 @@
 #define ProtocolIE_ID_id_RICsubscriptionDetails	((ProtocolIE_ID_t)30)
 #define ProtocolIE_ID_id_TimeToWait	((ProtocolIE_ID_t)31)
 #define ProtocolIE_ID_id_RICcontrolOutcome	((ProtocolIE_ID_t)32)
+#define ProtocolIE_ID_id_E2nodeComponentConfigUpdate	((ProtocolIE_ID_t)33)
+#define ProtocolIE_ID_id_E2nodeComponentConfigUpdate_Item	((ProtocolIE_ID_t)34)
+#define ProtocolIE_ID_id_E2nodeComponentConfigUpdateAck	((ProtocolIE_ID_t)35)
+#define ProtocolIE_ID_id_E2nodeComponentConfigUpdateAck_Item	((ProtocolIE_ID_t)36)
+#define ProtocolIE_ID_id_E2connectionSetup	((ProtocolIE_ID_t)39)
+#define ProtocolIE_ID_id_E2connectionSetupFailed	((ProtocolIE_ID_t)40)
+#define ProtocolIE_ID_id_E2connectionSetupFailed_Item	((ProtocolIE_ID_t)41)
+#define ProtocolIE_ID_id_E2connectionFailed_Item	((ProtocolIE_ID_t)42)
+#define ProtocolIE_ID_id_E2connectionUpdate_Item	((ProtocolIE_ID_t)43)
+#define ProtocolIE_ID_id_E2connectionUpdateAdd	((ProtocolIE_ID_t)44)
+#define ProtocolIE_ID_id_E2connectionUpdateModify	((ProtocolIE_ID_t)45)
+#define ProtocolIE_ID_id_E2connectionUpdateRemove	((ProtocolIE_ID_t)46)
+#define ProtocolIE_ID_id_E2connectionUpdateRemove_Item	((ProtocolIE_ID_t)47)
+#define ProtocolIE_ID_id_TNLinformation	((ProtocolIE_ID_t)48)
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c
index d9b038e..73b92ab 100644
--- a/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "ProtocolIE-SingleContainer.h"
@@ -20,6 +20,26 @@
  * so here we adjust the DEF accordingly.
  */
 /*
+ * This type is implemented using E2connectionUpdate_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2connectionUpdateRemove_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2connectionSetupFailed_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 E2nodeComponentConfigUpdateAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
  * This type is implemented using RANfunction_ItemIEs,
  * so here we adjust the DEF accordingly.
  */
@@ -31,117 +51,212 @@
  * This type is implemented using RANfunctionIDcause_ItemIEs,
  * so here we adjust the DEF accordingly.
  */
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P0 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P0_tags_1)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P0_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_1530P1_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P1 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P1_tags_2)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P1_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_1530P2_tags_3[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P2 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P2_tags_3)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P2_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_1530P3_tags_4[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P3 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P3_tags_4[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunction_ItemIEs_13,
+	asn_MBR_E2connectionUpdate_ItemIEs_13,
 	3,	/* Elements count */
-	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
+	&asn_SPC_E2connectionUpdate_ItemIEs_specs_13	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P4 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P4_tags_5[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionID_ItemIEs_17,
+	asn_MBR_E2connectionUpdateRemove_ItemIEs_17,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+	&asn_SPC_E2connectionUpdateRemove_ItemIEs_specs_17	/* Additional specs */
 };
 
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = {
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = {
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P5 = {
 	"ProtocolIE-SingleContainer",
 	"ProtocolIE-SingleContainer",
 	&asn_OP_SEQUENCE,
-	asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6,
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */
-	asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6,	/* Same as above */
-	sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6)
-		/sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P5_tags_6[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANfunctionIDcause_ItemIEs_21,
+	asn_MBR_E2connectionSetupFailed_ItemIEs_21,
 	3,	/* Elements count */
-	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+	&asn_SPC_E2connectionSetupFailed_ItemIEs_specs_21	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P6 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P6_tags_7[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdate_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdate_ItemIEs_specs_25	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P7 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P7_tags_8[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2nodeComponentConfigUpdateAck_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_E2nodeComponentConfigUpdateAck_ItemIEs_specs_29	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P8 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P8_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunction_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_RANfunction_ItemIEs_specs_33	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P9 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P9_tags_10[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionID_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionID_ItemIEs_specs_37	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P10 = {
+	"ProtocolIE-SingleContainer",
+	"ProtocolIE-SingleContainer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11,
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11[0]), /* 1 */
+	asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11,	/* Same as above */
+	sizeof(asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11)
+		/sizeof(asn_DEF_ProtocolIE_SingleContainer_229P10_tags_11[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANfunctionIDcause_ItemIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_41	/* Additional specs */
 };
 
diff --git a/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h
index f733073..31495a1 100644
--- a/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h
+++ b/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-Containers"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ProtocolIE_SingleContainer_H_
@@ -19,98 +19,151 @@
 #endif
 
 /* ProtocolIE-SingleContainer */
-typedef RICaction_ToBeSetup_ItemIEs_t	 ProtocolIE_SingleContainer_1530P0_t;
-typedef RICaction_Admitted_ItemIEs_t	 ProtocolIE_SingleContainer_1530P1_t;
-typedef RICaction_NotAdmitted_ItemIEs_t	 ProtocolIE_SingleContainer_1530P2_t;
-typedef RANfunction_ItemIEs_t	 ProtocolIE_SingleContainer_1530P3_t;
-typedef RANfunctionID_ItemIEs_t	 ProtocolIE_SingleContainer_1530P4_t;
-typedef RANfunctionIDcause_ItemIEs_t	 ProtocolIE_SingleContainer_1530P5_t;
+typedef RICaction_ToBeSetup_ItemIEs_t	 ProtocolIE_SingleContainer_229P0_t;
+typedef RICaction_Admitted_ItemIEs_t	 ProtocolIE_SingleContainer_229P1_t;
+typedef RICaction_NotAdmitted_ItemIEs_t	 ProtocolIE_SingleContainer_229P2_t;
+typedef E2connectionUpdate_ItemIEs_t	 ProtocolIE_SingleContainer_229P3_t;
+typedef E2connectionUpdateRemove_ItemIEs_t	 ProtocolIE_SingleContainer_229P4_t;
+typedef E2connectionSetupFailed_ItemIEs_t	 ProtocolIE_SingleContainer_229P5_t;
+typedef E2nodeComponentConfigUpdate_ItemIEs_t	 ProtocolIE_SingleContainer_229P6_t;
+typedef E2nodeComponentConfigUpdateAck_ItemIEs_t	 ProtocolIE_SingleContainer_229P7_t;
+typedef RANfunction_ItemIEs_t	 ProtocolIE_SingleContainer_229P8_t;
+typedef RANfunctionID_ItemIEs_t	 ProtocolIE_SingleContainer_229P9_t;
+typedef RANfunctionIDcause_ItemIEs_t	 ProtocolIE_SingleContainer_229P10_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper;
-extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5;
-asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free;
-asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print;
-asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint;
-ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber;
-der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der;
-xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer;
-xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer;
-oer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_oer;
-oer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_oer;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper;
-per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper;
-per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P0;
+asn_struct_free_f ProtocolIE_SingleContainer_229P0_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P0_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P0_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P0_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P0_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P0_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P0_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P0_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P0_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P0_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P0_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P1;
+asn_struct_free_f ProtocolIE_SingleContainer_229P1_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P1_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P1_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P1_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P1_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P1_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P1_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P1_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P1_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P1_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P1_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P2;
+asn_struct_free_f ProtocolIE_SingleContainer_229P2_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P2_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P2_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P2_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P2_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P2_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P2_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P2_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P2_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P2_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P2_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P3;
+asn_struct_free_f ProtocolIE_SingleContainer_229P3_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P3_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P3_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P3_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P3_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P3_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P3_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P3_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P3_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P3_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P3_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P4;
+asn_struct_free_f ProtocolIE_SingleContainer_229P4_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P4_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P4_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P4_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P4_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P4_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P4_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P4_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P4_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P4_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P4_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P5;
+asn_struct_free_f ProtocolIE_SingleContainer_229P5_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P5_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P5_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P5_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P5_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P5_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P5_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P5_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P5_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P5_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P5_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P6;
+asn_struct_free_f ProtocolIE_SingleContainer_229P6_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P6_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P6_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P6_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P6_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P6_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P6_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P6_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P6_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P6_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P6_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P7;
+asn_struct_free_f ProtocolIE_SingleContainer_229P7_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P7_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P7_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P7_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P7_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P7_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P7_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P7_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P7_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P7_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P7_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P8;
+asn_struct_free_f ProtocolIE_SingleContainer_229P8_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P8_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P8_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P8_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P8_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P8_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P8_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P8_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P8_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P8_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P8_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P9;
+asn_struct_free_f ProtocolIE_SingleContainer_229P9_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P9_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P9_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P9_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P9_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P9_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P9_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P9_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P9_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P9_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P9_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_229P10;
+asn_struct_free_f ProtocolIE_SingleContainer_229P10_free;
+asn_struct_print_f ProtocolIE_SingleContainer_229P10_print;
+asn_constr_check_f ProtocolIE_SingleContainer_229P10_constraint;
+ber_type_decoder_f ProtocolIE_SingleContainer_229P10_decode_ber;
+der_type_encoder_f ProtocolIE_SingleContainer_229P10_encode_der;
+xer_type_decoder_f ProtocolIE_SingleContainer_229P10_decode_xer;
+xer_type_encoder_f ProtocolIE_SingleContainer_229P10_encode_xer;
+per_type_decoder_f ProtocolIE_SingleContainer_229P10_decode_uper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P10_encode_uper;
+per_type_decoder_f ProtocolIE_SingleContainer_229P10_decode_aper;
+per_type_encoder_f ProtocolIE_SingleContainer_229P10_encode_aper;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunction-Item.c b/e2sim/src/ASN1c/RANfunction-Item.c
index 3cc4346..dbc136b 100644
--- a/e2sim/src/ASN1c/RANfunction-Item.c
+++ b/e2sim/src/ASN1c/RANfunction-Item.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunction-Item.h"
 
-static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -35,21 +35,33 @@
 		0, 0, /* No default value */
 		"ranFunctionRevision"
 		},
+	{ ATF_POINTER, 1, 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 int asn_MAP_RANfunction_Item_oms_1[] = { 3 };
 static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 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 */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = {
+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 */
-	0, 0, 0,	/* Optional elements (not needed) */
+	4,	/* Count of tags in the map */
+	asn_MAP_RANfunction_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
 	3,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = {
@@ -64,7 +76,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/e2sim/src/ASN1c/RANfunction-Item.h b/e2sim/src/ASN1c/RANfunction-Item.h
index b791652..82e0f45 100644
--- a/e2sim/src/ASN1c/RANfunction-Item.h
+++ b/e2sim/src/ASN1c/RANfunction-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunction_Item_H_
@@ -15,6 +15,7 @@
 #include "RANfunctionID.h"
 #include "RANfunctionDefinition.h"
 #include "RANfunctionRevision.h"
+#include "RANfunctionOID.h"
 #include "constr_SEQUENCE.h"
 
 #ifdef __cplusplus
@@ -30,6 +31,7 @@
 	 * This type is extensible,
 	 * possible extensions are below.
 	 */
+	RANfunctionOID_t	*ranFunctionOID;	/* OPTIONAL */
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
@@ -37,6 +39,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunction_Item_1[4];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunctionDefinition.c b/e2sim/src/ASN1c/RANfunctionDefinition.c
index 2e60af0..542b359 100644
--- a/e2sim/src/ASN1c/RANfunctionDefinition.c
+++ b/e2sim/src/ASN1c/RANfunctionDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionDefinition.h"
diff --git a/e2sim/src/ASN1c/RANfunctionDefinition.h b/e2sim/src/ASN1c/RANfunctionDefinition.h
index 93dca22..28b23cd 100644
--- a/e2sim/src/ASN1c/RANfunctionDefinition.h
+++ b/e2sim/src/ASN1c/RANfunctionDefinition.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionDefinition_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RANfunctionDefinition_encode_der;
 xer_type_decoder_f RANfunctionDefinition_decode_xer;
 xer_type_encoder_f RANfunctionDefinition_encode_xer;
-oer_type_decoder_f RANfunctionDefinition_decode_oer;
-oer_type_encoder_f RANfunctionDefinition_encode_oer;
 per_type_decoder_f RANfunctionDefinition_decode_uper;
 per_type_encoder_f RANfunctionDefinition_encode_uper;
 per_type_decoder_f RANfunctionDefinition_decode_aper;
diff --git a/e2sim/src/ASN1c/RANfunctionID-Item.c b/e2sim/src/ASN1c/RANfunctionID-Item.c
index 3fa7c18..adcb862 100644
--- a/e2sim/src/ASN1c/RANfunctionID-Item.c
+++ b/e2sim/src/ASN1c/RANfunctionID-Item.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionID-Item.h"
 
-static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -34,7 +34,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = {
 	sizeof(struct RANfunctionID_Item),
 	offsetof(struct RANfunctionID_Item, _asn_ctx),
 	asn_MAP_RANfunctionID_Item_tag2el_1,
diff --git a/e2sim/src/ASN1c/RANfunctionID-Item.h b/e2sim/src/ASN1c/RANfunctionID-Item.h
index 1566a03..47782f0 100644
--- a/e2sim/src/ASN1c/RANfunctionID-Item.h
+++ b/e2sim/src/ASN1c/RANfunctionID-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionID_Item_H_
@@ -35,6 +35,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[2];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunctionID.c b/e2sim/src/ASN1c/RANfunctionID.c
index 964225d..f778b48 100644
--- a/e2sim/src/ASN1c/RANfunctionID.c
+++ b/e2sim/src/ASN1c/RANfunctionID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionID.h"
@@ -36,9 +36,6 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RANfunctionID_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..4095) */,
-	-1};
 asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -57,7 +54,7 @@
 	asn_DEF_RANfunctionID_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RANfunctionID_tags_1)
 		/sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANfunctionID_constr_1, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint },
+	{ 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/RANfunctionID.h b/e2sim/src/ASN1c/RANfunctionID.h
index dc825cf..26676a5 100644
--- a/e2sim/src/ASN1c/RANfunctionID.h
+++ b/e2sim/src/ASN1c/RANfunctionID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionID_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f RANfunctionID_encode_der;
 xer_type_decoder_f RANfunctionID_decode_xer;
 xer_type_encoder_f RANfunctionID_encode_xer;
-oer_type_decoder_f RANfunctionID_decode_oer;
-oer_type_encoder_f RANfunctionID_encode_oer;
 per_type_decoder_f RANfunctionID_decode_uper;
 per_type_encoder_f RANfunctionID_encode_uper;
 per_type_decoder_f RANfunctionID_decode_aper;
diff --git a/e2sim/src/ASN1c/RANfunctionIDcause-Item.c b/e2sim/src/ASN1c/RANfunctionIDcause-Item.c
index ac39adc..0b40b89 100644
--- a/e2sim/src/ASN1c/RANfunctionIDcause-Item.c
+++ b/e2sim/src/ASN1c/RANfunctionIDcause-Item.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionIDcause-Item.h"
 
-static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -34,7 +34,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = {
 	sizeof(struct RANfunctionIDcause_Item),
 	offsetof(struct RANfunctionIDcause_Item, _asn_ctx),
 	asn_MAP_RANfunctionIDcause_Item_tag2el_1,
diff --git a/e2sim/src/ASN1c/RANfunctionIDcause-Item.h b/e2sim/src/ASN1c/RANfunctionIDcause-Item.h
index 338e066..d83f497 100644
--- a/e2sim/src/ASN1c/RANfunctionIDcause-Item.h
+++ b/e2sim/src/ASN1c/RANfunctionIDcause-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionIDcause_Item_H_
@@ -35,6 +35,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[2];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunctionOID.c b/e2sim/src/ASN1c/RANfunctionOID.c
new file mode 100644
index 0000000..aa775f8
--- /dev/null
+++ b/e2sim/src/ASN1c/RANfunctionOID.c
@@ -0,0 +1,106 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#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.
+ */
+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 */
+	{ 0, &asn_PER_type_RANfunctionOID_constr_1, RANfunctionOID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sim/src/ASN1c/RANfunctionOID.h b/e2sim/src/ASN1c/RANfunctionOID.h
new file mode 100644
index 0000000..b7defa5
--- /dev/null
+++ b/e2sim/src/ASN1c/RANfunctionOID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_RANfunctionOID_H_
+#define	_RANfunctionOID_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "PrintableString.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANfunctionOID */
+typedef PrintableString_t	 RANfunctionOID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_RANfunctionOID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_RANfunctionOID;
+asn_struct_free_f RANfunctionOID_free;
+asn_struct_print_f RANfunctionOID_print;
+asn_constr_check_f RANfunctionOID_constraint;
+ber_type_decoder_f RANfunctionOID_decode_ber;
+der_type_encoder_f RANfunctionOID_encode_der;
+xer_type_decoder_f RANfunctionOID_decode_xer;
+xer_type_encoder_f RANfunctionOID_encode_xer;
+per_type_decoder_f RANfunctionOID_decode_uper;
+per_type_encoder_f RANfunctionOID_encode_uper;
+per_type_decoder_f RANfunctionOID_decode_aper;
+per_type_encoder_f RANfunctionOID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANfunctionOID_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/RANfunctionRevision.c b/e2sim/src/ASN1c/RANfunctionRevision.c
index a2aa7ed..f9398aa 100644
--- a/e2sim/src/ASN1c/RANfunctionRevision.c
+++ b/e2sim/src/ASN1c/RANfunctionRevision.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionRevision.h"
@@ -36,9 +36,6 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RANfunctionRevision_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..4095) */,
-	-1};
 asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -57,7 +54,7 @@
 	asn_DEF_RANfunctionRevision_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RANfunctionRevision_tags_1)
 		/sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANfunctionRevision_constr_1, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint },
+	{ 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/RANfunctionRevision.h b/e2sim/src/ASN1c/RANfunctionRevision.h
index 837b0e2..99953bf 100644
--- a/e2sim/src/ASN1c/RANfunctionRevision.h
+++ b/e2sim/src/ASN1c/RANfunctionRevision.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionRevision_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f RANfunctionRevision_encode_der;
 xer_type_decoder_f RANfunctionRevision_decode_xer;
 xer_type_encoder_f RANfunctionRevision_encode_xer;
-oer_type_decoder_f RANfunctionRevision_decode_oer;
-oer_type_encoder_f RANfunctionRevision_encode_oer;
 per_type_decoder_f RANfunctionRevision_decode_uper;
 per_type_encoder_f RANfunctionRevision_encode_uper;
 per_type_decoder_f RANfunctionRevision_decode_aper;
diff --git a/e2sim/src/ASN1c/RANfunctions-List.c b/e2sim/src/ASN1c/RANfunctions-List.c
index 61f8e02..f3b5419 100644
--- a/e2sim/src/ASN1c/RANfunctions-List.c
+++ b/e2sim/src/ASN1c/RANfunctions-List.c
@@ -1,26 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctions-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RANfunctions_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
-static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = {
+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)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P3,
+		&asn_DEF_ProtocolIE_SingleContainer_229P8,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -30,7 +27,7 @@
 static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = {
 	sizeof(struct RANfunctions_List),
 	offsetof(struct RANfunctions_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -45,7 +42,7 @@
 	asn_DEF_RANfunctions_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RANfunctions_List_tags_1)
 		/sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANfunctions_List_constr_1, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RANfunctions_List_1,
 	1,	/* Single element */
 	&asn_SPC_RANfunctions_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RANfunctions-List.h b/e2sim/src/ASN1c/RANfunctions-List.h
index f1193cb..0a8b12d 100644
--- a/e2sim/src/ASN1c/RANfunctions-List.h
+++ b/e2sim/src/ASN1c/RANfunctions-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctions_List_H_
@@ -32,6 +32,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List;
+extern asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunctions_List_1[1];
+extern asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunctionsID-List.c b/e2sim/src/ASN1c/RANfunctionsID-List.c
index 1cc0185..204c8af 100644
--- a/e2sim/src/ASN1c/RANfunctionsID-List.c
+++ b/e2sim/src/ASN1c/RANfunctionsID-List.c
@@ -1,26 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionsID-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
-static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = {
+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)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P4,
+		&asn_DEF_ProtocolIE_SingleContainer_229P9,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -30,7 +27,7 @@
 static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = {
 	sizeof(struct RANfunctionsID_List),
 	offsetof(struct RANfunctionsID_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -45,7 +42,7 @@
 	asn_DEF_RANfunctionsID_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RANfunctionsID_List_tags_1)
 		/sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANfunctionsID_List_constr_1, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RANfunctionsID_List_1,
 	1,	/* Single element */
 	&asn_SPC_RANfunctionsID_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RANfunctionsID-List.h b/e2sim/src/ASN1c/RANfunctionsID-List.h
index 1cad48c..eaba417 100644
--- a/e2sim/src/ASN1c/RANfunctionsID-List.h
+++ b/e2sim/src/ASN1c/RANfunctionsID-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionsID_List_H_
@@ -32,6 +32,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List;
+extern asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[1];
+extern asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RANfunctionsIDcause-List.c b/e2sim/src/ASN1c/RANfunctionsIDcause-List.c
index e5345f7..02c12f5 100644
--- a/e2sim/src/ASN1c/RANfunctionsIDcause-List.c
+++ b/e2sim/src/ASN1c/RANfunctionsIDcause-List.c
@@ -1,26 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RANfunctionsIDcause-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..256)) */};
-static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = {
+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)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = {
+asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P5,
+		&asn_DEF_ProtocolIE_SingleContainer_229P10,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -30,7 +27,7 @@
 static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = {
 	sizeof(struct RANfunctionsIDcause_List),
 	offsetof(struct RANfunctionsIDcause_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -45,7 +42,7 @@
 	asn_DEF_RANfunctionsIDcause_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1)
 		/sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANfunctionsIDcause_List_constr_1, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RANfunctionsIDcause_List_1,
 	1,	/* Single element */
 	&asn_SPC_RANfunctionsIDcause_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RANfunctionsIDcause-List.h b/e2sim/src/ASN1c/RANfunctionsIDcause-List.h
index 4949436..144b852 100644
--- a/e2sim/src/ASN1c/RANfunctionsIDcause-List.h
+++ b/e2sim/src/ASN1c/RANfunctionsIDcause-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RANfunctionsIDcause_List_H_
@@ -32,6 +32,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List;
+extern asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[1];
+extern asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICaction-Admitted-Item.c b/e2sim/src/ASN1c/RICaction-Admitted-Item.c
index edb976f..5264f97 100644
--- a/e2sim/src/ASN1c/RICaction-Admitted-Item.c
+++ b/e2sim/src/ASN1c/RICaction-Admitted-Item.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICaction-Admitted-Item.h"
 
-static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -24,7 +24,7 @@
 static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = {
 	sizeof(struct RICaction_Admitted_Item),
 	offsetof(struct RICaction_Admitted_Item, _asn_ctx),
 	asn_MAP_RICaction_Admitted_Item_tag2el_1,
diff --git a/e2sim/src/ASN1c/RICaction-Admitted-Item.h b/e2sim/src/ASN1c/RICaction-Admitted-Item.h
index 3ad904a..763fb6b 100644
--- a/e2sim/src/ASN1c/RICaction-Admitted-Item.h
+++ b/e2sim/src/ASN1c/RICaction-Admitted-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICaction_Admitted_Item_H_
@@ -33,6 +33,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[1];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICaction-Admitted-List.c b/e2sim/src/ASN1c/RICaction-Admitted-List.c
index 457e9ff..c0ac7aa 100644
--- a/e2sim/src/ASN1c/RICaction-Admitted-List.c
+++ b/e2sim/src/ASN1c/RICaction-Admitted-List.c
@@ -1,26 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICaction-Admitted-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..16)) */};
-static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = {
+asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P1,
+		&asn_DEF_ProtocolIE_SingleContainer_229P1,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -30,7 +27,7 @@
 static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = {
 	sizeof(struct RICaction_Admitted_List),
 	offsetof(struct RICaction_Admitted_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -45,7 +42,7 @@
 	asn_DEF_RICaction_Admitted_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICaction_Admitted_List_tags_1)
 		/sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICaction_Admitted_List_constr_1, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RICaction_Admitted_List_1,
 	1,	/* Single element */
 	&asn_SPC_RICaction_Admitted_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RICaction-Admitted-List.h b/e2sim/src/ASN1c/RICaction-Admitted-List.h
index 09d9711..1b04907 100644
--- a/e2sim/src/ASN1c/RICaction-Admitted-List.h
+++ b/e2sim/src/ASN1c/RICaction-Admitted-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICaction_Admitted_List_H_
@@ -32,6 +32,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List;
+extern asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[1];
+extern asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c
index 3cc57e0..fdc9a5a 100644
--- a/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c
+++ b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICaction-NotAdmitted-Item.h"
 
-static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -34,7 +34,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = {
 	sizeof(struct RICaction_NotAdmitted_Item),
 	offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx),
 	asn_MAP_RICaction_NotAdmitted_Item_tag2el_1,
diff --git a/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h
index 0d1b376..36072ef 100644
--- a/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h
+++ b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICaction_NotAdmitted_Item_H_
@@ -35,6 +35,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[2];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c
index abb292f..b5681f3 100644
--- a/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c
+++ b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c
@@ -1,26 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICaction-NotAdmitted-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..16)) */};
-static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 5,  5,  0,  16 }	/* (SIZE(0..16)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = {
+asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P2,
+		&asn_DEF_ProtocolIE_SingleContainer_229P2,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -30,7 +27,7 @@
 static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = {
 	sizeof(struct RICaction_NotAdmitted_List),
 	offsetof(struct RICaction_NotAdmitted_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -45,7 +42,7 @@
 	asn_DEF_RICaction_NotAdmitted_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1)
 		/sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICaction_NotAdmitted_List_constr_1, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RICaction_NotAdmitted_List_1,
 	1,	/* Single element */
 	&asn_SPC_RICaction_NotAdmitted_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h
index c38717c..02f6465 100644
--- a/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h
+++ b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICaction_NotAdmitted_List_H_
@@ -32,6 +32,9 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List;
+extern asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[1];
+extern asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1;
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c
index 94f5b2f..42ef838 100644
--- a/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c
+++ b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c
@@ -1,14 +1,14 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICaction-ToBeSetup-Item.h"
 
 #include "RICsubsequentAction.h"
-static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = {
+asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -56,7 +56,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = {
 	sizeof(struct RICaction_ToBeSetup_Item),
 	offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx),
 	asn_MAP_RICaction_ToBeSetup_Item_tag2el_1,
diff --git a/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h
index 1bbbd47..1598de9 100644
--- a/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h
+++ b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICaction_ToBeSetup_Item_H_
@@ -41,6 +41,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[4];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICactionDefinition.c b/e2sim/src/ASN1c/RICactionDefinition.c
index 9a0588b..6a7729e 100644
--- a/e2sim/src/ASN1c/RICactionDefinition.c
+++ b/e2sim/src/ASN1c/RICactionDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICactionDefinition.h"
diff --git a/e2sim/src/ASN1c/RICactionDefinition.h b/e2sim/src/ASN1c/RICactionDefinition.h
index 9d89df9..5a1b3a8 100644
--- a/e2sim/src/ASN1c/RICactionDefinition.h
+++ b/e2sim/src/ASN1c/RICactionDefinition.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICactionDefinition_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICactionDefinition_encode_der;
 xer_type_decoder_f RICactionDefinition_decode_xer;
 xer_type_encoder_f RICactionDefinition_encode_xer;
-oer_type_decoder_f RICactionDefinition_decode_oer;
-oer_type_encoder_f RICactionDefinition_encode_oer;
 per_type_decoder_f RICactionDefinition_decode_uper;
 per_type_encoder_f RICactionDefinition_encode_uper;
 per_type_decoder_f RICactionDefinition_decode_aper;
diff --git a/e2sim/src/ASN1c/RICactionID.c b/e2sim/src/ASN1c/RICactionID.c
index 56c67b4..7deb2d9 100644
--- a/e2sim/src/ASN1c/RICactionID.c
+++ b/e2sim/src/ASN1c/RICactionID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICactionID.h"
@@ -36,9 +36,6 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICactionID_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
 asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -57,7 +54,7 @@
 	asn_DEF_RICactionID_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICactionID_tags_1)
 		/sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICactionID_constr_1, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint },
+	{ 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/RICactionID.h b/e2sim/src/ASN1c/RICactionID.h
index 68fc9b4..7818a7c 100644
--- a/e2sim/src/ASN1c/RICactionID.h
+++ b/e2sim/src/ASN1c/RICactionID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICactionID_H_
@@ -31,8 +31,6 @@
 der_type_encoder_f RICactionID_encode_der;
 xer_type_decoder_f RICactionID_decode_xer;
 xer_type_encoder_f RICactionID_encode_xer;
-oer_type_decoder_f RICactionID_decode_oer;
-oer_type_encoder_f RICactionID_encode_oer;
 per_type_decoder_f RICactionID_decode_uper;
 per_type_encoder_f RICactionID_encode_uper;
 per_type_decoder_f RICactionID_decode_aper;
diff --git a/e2sim/src/ASN1c/RICactionType.c b/e2sim/src/ASN1c/RICactionType.c
index 7fd484b..9c6814c 100644
--- a/e2sim/src/ASN1c/RICactionType.c
+++ b/e2sim/src/ASN1c/RICactionType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICactionType.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICactionType_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -53,7 +50,7 @@
 	asn_DEF_RICactionType_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICactionType_tags_1)
 		/sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICactionType_constr_1, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICactionType_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICactionType.h b/e2sim/src/ASN1c/RICactionType.h
index 2f1f5ae..08ad89d 100644
--- a/e2sim/src/ASN1c/RICactionType.h
+++ b/e2sim/src/ASN1c/RICactionType.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICactionType_H_
@@ -42,8 +42,6 @@
 der_type_encoder_f RICactionType_encode_der;
 xer_type_decoder_f RICactionType_decode_xer;
 xer_type_encoder_f RICactionType_encode_xer;
-oer_type_decoder_f RICactionType_decode_oer;
-oer_type_encoder_f RICactionType_encode_oer;
 per_type_decoder_f RICactionType_decode_uper;
 per_type_encoder_f RICactionType_encode_uper;
 per_type_decoder_f RICactionType_decode_aper;
diff --git a/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c
index e47fa8d..00474c7 100644
--- a/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c
+++ b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c
@@ -1,16 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICactions-ToBeSetup-List.h"
 
 #include "ProtocolIE-SingleContainer.h"
-static asn_oer_constraints_t asn_OER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..16)) */};
 asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
@@ -20,7 +17,7 @@
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_ProtocolIE_SingleContainer_1530P0,
+		&asn_DEF_ProtocolIE_SingleContainer_229P0,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -45,7 +42,7 @@
 	asn_DEF_RICactions_ToBeSetup_List_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1)
 		/sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICactions_ToBeSetup_List_constr_1, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint },
+	{ 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint },
 	asn_MBR_RICactions_ToBeSetup_List_1,
 	1,	/* Single element */
 	&asn_SPC_RICactions_ToBeSetup_List_specs_1	/* Additional specs */
diff --git a/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h
index 3e92509..391cc17 100644
--- a/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h
+++ b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICactions_ToBeSetup_List_H_
diff --git a/e2sim/src/ASN1c/RICcallProcessID.c b/e2sim/src/ASN1c/RICcallProcessID.c
index 4cfed50..847d8e5 100644
--- a/e2sim/src/ASN1c/RICcallProcessID.c
+++ b/e2sim/src/ASN1c/RICcallProcessID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcallProcessID.h"
diff --git a/e2sim/src/ASN1c/RICcallProcessID.h b/e2sim/src/ASN1c/RICcallProcessID.h
index dd303af..b3bbfc8 100644
--- a/e2sim/src/ASN1c/RICcallProcessID.h
+++ b/e2sim/src/ASN1c/RICcallProcessID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcallProcessID_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICcallProcessID_encode_der;
 xer_type_decoder_f RICcallProcessID_decode_xer;
 xer_type_encoder_f RICcallProcessID_encode_xer;
-oer_type_decoder_f RICcallProcessID_decode_oer;
-oer_type_encoder_f RICcallProcessID_encode_oer;
 per_type_decoder_f RICcallProcessID_decode_uper;
 per_type_encoder_f RICcallProcessID_encode_uper;
 per_type_decoder_f RICcallProcessID_decode_aper;
diff --git a/e2sim/src/ASN1c/RICcontrolAckRequest.c b/e2sim/src/ASN1c/RICcontrolAckRequest.c
index 0fd327b..d7f1237 100644
--- a/e2sim/src/ASN1c/RICcontrolAckRequest.c
+++ b/e2sim/src/ASN1c/RICcontrolAckRequest.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcontrolAckRequest.h"
@@ -11,10 +11,7 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_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 */
@@ -31,7 +28,7 @@
 	0	/* noAck(0) */
 	/* This list is extensible */
 };
-static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = {
+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 */
@@ -53,7 +50,7 @@
 	asn_DEF_RICcontrolAckRequest_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICcontrolAckRequest_tags_1)
 		/sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICcontrolAckRequest_constr_1, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICcontrolAckRequest_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICcontrolAckRequest.h b/e2sim/src/ASN1c/RICcontrolAckRequest.h
index 11fc016..4f96f83 100644
--- a/e2sim/src/ASN1c/RICcontrolAckRequest.h
+++ b/e2sim/src/ASN1c/RICcontrolAckRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolAckRequest_H_
@@ -32,7 +32,9 @@
 typedef long	 RICcontrolAckRequest_t;
 
 /* Implementation */
+extern asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest;
+extern const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1;
 asn_struct_free_f RICcontrolAckRequest_free;
 asn_struct_print_f RICcontrolAckRequest_print;
 asn_constr_check_f RICcontrolAckRequest_constraint;
@@ -40,8 +42,6 @@
 der_type_encoder_f RICcontrolAckRequest_encode_der;
 xer_type_decoder_f RICcontrolAckRequest_decode_xer;
 xer_type_encoder_f RICcontrolAckRequest_encode_xer;
-oer_type_decoder_f RICcontrolAckRequest_decode_oer;
-oer_type_encoder_f RICcontrolAckRequest_encode_oer;
 per_type_decoder_f RICcontrolAckRequest_decode_uper;
 per_type_encoder_f RICcontrolAckRequest_encode_uper;
 per_type_decoder_f RICcontrolAckRequest_decode_aper;
diff --git a/e2sim/src/ASN1c/RICcontrolAcknowledge.c b/e2sim/src/ASN1c/RICcontrolAcknowledge.c
index 5e821fe..1d0f224 100644
--- a/e2sim/src/ASN1c/RICcontrolAcknowledge.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P8,
+		&asn_DEF_ProtocolIE_Container_226P8,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICcontrolAcknowledge.h b/e2sim/src/ASN1c/RICcontrolAcknowledge.h
index 34c81b3..6f61ded 100644
--- a/e2sim/src/ASN1c/RICcontrolAcknowledge.h
+++ b/e2sim/src/ASN1c/RICcontrolAcknowledge.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolAcknowledge_H_
@@ -21,7 +21,7 @@
 
 /* RICcontrolAcknowledge */
 typedef struct RICcontrolAcknowledge {
-	ProtocolIE_Container_1527P8_t	 protocolIEs;
+	ProtocolIE_Container_226P8_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICcontrolFailure.c b/e2sim/src/ASN1c/RICcontrolFailure.c
index 76b0bdc..a3b6d13 100644
--- a/e2sim/src/ASN1c/RICcontrolFailure.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P9,
+		&asn_DEF_ProtocolIE_Container_226P9,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICcontrolFailure.h b/e2sim/src/ASN1c/RICcontrolFailure.h
index 7a28d41..bb2ef49 100644
--- a/e2sim/src/ASN1c/RICcontrolFailure.h
+++ b/e2sim/src/ASN1c/RICcontrolFailure.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolFailure_H_
@@ -21,7 +21,7 @@
 
 /* RICcontrolFailure */
 typedef struct RICcontrolFailure {
-	ProtocolIE_Container_1527P9_t	 protocolIEs;
+	ProtocolIE_Container_226P9_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICcontrolHeader.c b/e2sim/src/ASN1c/RICcontrolHeader.c
index c79d335..7ddbac1 100644
--- a/e2sim/src/ASN1c/RICcontrolHeader.c
+++ b/e2sim/src/ASN1c/RICcontrolHeader.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcontrolHeader.h"
diff --git a/e2sim/src/ASN1c/RICcontrolHeader.h b/e2sim/src/ASN1c/RICcontrolHeader.h
index 2301656..6ecea7a 100644
--- a/e2sim/src/ASN1c/RICcontrolHeader.h
+++ b/e2sim/src/ASN1c/RICcontrolHeader.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolHeader_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICcontrolHeader_encode_der;
 xer_type_decoder_f RICcontrolHeader_decode_xer;
 xer_type_encoder_f RICcontrolHeader_encode_xer;
-oer_type_decoder_f RICcontrolHeader_decode_oer;
-oer_type_encoder_f RICcontrolHeader_encode_oer;
 per_type_decoder_f RICcontrolHeader_decode_uper;
 per_type_encoder_f RICcontrolHeader_encode_uper;
 per_type_decoder_f RICcontrolHeader_decode_aper;
diff --git a/e2sim/src/ASN1c/RICcontrolMessage.c b/e2sim/src/ASN1c/RICcontrolMessage.c
index 9004d22..56b2322 100644
--- a/e2sim/src/ASN1c/RICcontrolMessage.c
+++ b/e2sim/src/ASN1c/RICcontrolMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcontrolMessage.h"
diff --git a/e2sim/src/ASN1c/RICcontrolMessage.h b/e2sim/src/ASN1c/RICcontrolMessage.h
index a501aaf..b5afb39 100644
--- a/e2sim/src/ASN1c/RICcontrolMessage.h
+++ b/e2sim/src/ASN1c/RICcontrolMessage.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolMessage_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICcontrolMessage_encode_der;
 xer_type_decoder_f RICcontrolMessage_decode_xer;
 xer_type_encoder_f RICcontrolMessage_encode_xer;
-oer_type_decoder_f RICcontrolMessage_decode_oer;
-oer_type_encoder_f RICcontrolMessage_encode_oer;
 per_type_decoder_f RICcontrolMessage_decode_uper;
 per_type_encoder_f RICcontrolMessage_encode_uper;
 per_type_decoder_f RICcontrolMessage_decode_aper;
diff --git a/e2sim/src/ASN1c/RICcontrolOutcome.c b/e2sim/src/ASN1c/RICcontrolOutcome.c
index 36934f5..e584d19 100644
--- a/e2sim/src/ASN1c/RICcontrolOutcome.c
+++ b/e2sim/src/ASN1c/RICcontrolOutcome.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcontrolOutcome.h"
diff --git a/e2sim/src/ASN1c/RICcontrolOutcome.h b/e2sim/src/ASN1c/RICcontrolOutcome.h
index fa6bcd8..725ceb5 100644
--- a/e2sim/src/ASN1c/RICcontrolOutcome.h
+++ b/e2sim/src/ASN1c/RICcontrolOutcome.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolOutcome_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICcontrolOutcome_encode_der;
 xer_type_decoder_f RICcontrolOutcome_decode_xer;
 xer_type_encoder_f RICcontrolOutcome_encode_xer;
-oer_type_decoder_f RICcontrolOutcome_decode_oer;
-oer_type_encoder_f RICcontrolOutcome_encode_oer;
 per_type_decoder_f RICcontrolOutcome_decode_uper;
 per_type_encoder_f RICcontrolOutcome_encode_uper;
 per_type_decoder_f RICcontrolOutcome_decode_aper;
diff --git a/e2sim/src/ASN1c/RICcontrolRequest.c b/e2sim/src/ASN1c/RICcontrolRequest.c
index c5ccbff..7398fc5 100644
--- a/e2sim/src/ASN1c/RICcontrolRequest.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P7,
+		&asn_DEF_ProtocolIE_Container_226P7,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICcontrolRequest.h b/e2sim/src/ASN1c/RICcontrolRequest.h
index 7bed8f2..40daf83 100644
--- a/e2sim/src/ASN1c/RICcontrolRequest.h
+++ b/e2sim/src/ASN1c/RICcontrolRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolRequest_H_
@@ -21,7 +21,7 @@
 
 /* RICcontrolRequest */
 typedef struct RICcontrolRequest {
-	ProtocolIE_Container_1527P7_t	 protocolIEs;
+	ProtocolIE_Container_226P7_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICcontrolStatus.c b/e2sim/src/ASN1c/RICcontrolStatus.c
index 9b183a8..1c6c454 100644
--- a/e2sim/src/ASN1c/RICcontrolStatus.c
+++ b/e2sim/src/ASN1c/RICcontrolStatus.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICcontrolStatus.h"
@@ -11,10 +11,7 @@
  * 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};
-static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = {
+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 */
@@ -31,7 +28,7 @@
 	0	/* success(0) */
 	/* This list is extensible */
 };
-static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = {
+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 */
@@ -53,7 +50,7 @@
 	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, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICcontrolStatus_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICcontrolStatus.h b/e2sim/src/ASN1c/RICcontrolStatus.h
index 54474e7..de6496f 100644
--- a/e2sim/src/ASN1c/RICcontrolStatus.h
+++ b/e2sim/src/ASN1c/RICcontrolStatus.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICcontrolStatus_H_
@@ -32,7 +32,9 @@
 typedef long	 RICcontrolStatus_t;
 
 /* Implementation */
+extern asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus;
+extern const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1;
 asn_struct_free_f RICcontrolStatus_free;
 asn_struct_print_f RICcontrolStatus_print;
 asn_constr_check_f RICcontrolStatus_constraint;
@@ -40,8 +42,6 @@
 der_type_encoder_f RICcontrolStatus_encode_der;
 xer_type_decoder_f RICcontrolStatus_decode_xer;
 xer_type_encoder_f RICcontrolStatus_encode_xer;
-oer_type_decoder_f RICcontrolStatus_decode_oer;
-oer_type_encoder_f RICcontrolStatus_encode_oer;
 per_type_decoder_f RICcontrolStatus_decode_uper;
 per_type_encoder_f RICcontrolStatus_encode_uper;
 per_type_decoder_f RICcontrolStatus_decode_aper;
diff --git a/e2sim/src/ASN1c/RICeventTriggerDefinition.c b/e2sim/src/ASN1c/RICeventTriggerDefinition.c
index ecf7fc1..a0762b3 100644
--- a/e2sim/src/ASN1c/RICeventTriggerDefinition.c
+++ b/e2sim/src/ASN1c/RICeventTriggerDefinition.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICeventTriggerDefinition.h"
diff --git a/e2sim/src/ASN1c/RICeventTriggerDefinition.h b/e2sim/src/ASN1c/RICeventTriggerDefinition.h
index b9c63f6..c4b75d6 100644
--- a/e2sim/src/ASN1c/RICeventTriggerDefinition.h
+++ b/e2sim/src/ASN1c/RICeventTriggerDefinition.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICeventTriggerDefinition_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICeventTriggerDefinition_encode_der;
 xer_type_decoder_f RICeventTriggerDefinition_decode_xer;
 xer_type_encoder_f RICeventTriggerDefinition_encode_xer;
-oer_type_decoder_f RICeventTriggerDefinition_decode_oer;
-oer_type_encoder_f RICeventTriggerDefinition_encode_oer;
 per_type_decoder_f RICeventTriggerDefinition_decode_uper;
 per_type_encoder_f RICeventTriggerDefinition_encode_uper;
 per_type_decoder_f RICeventTriggerDefinition_decode_aper;
diff --git a/e2sim/src/ASN1c/RICindication.c b/e2sim/src/ASN1c/RICindication.c
index acadb86..734903e 100644
--- a/e2sim/src/ASN1c/RICindication.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P6,
+		&asn_DEF_ProtocolIE_Container_226P6,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICindication.h b/e2sim/src/ASN1c/RICindication.h
index c6a89bf..3d089a2 100644
--- a/e2sim/src/ASN1c/RICindication.h
+++ b/e2sim/src/ASN1c/RICindication.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICindication_H_
@@ -21,7 +21,7 @@
 
 /* RICindication */
 typedef struct RICindication {
-	ProtocolIE_Container_1527P6_t	 protocolIEs;
+	ProtocolIE_Container_226P6_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICindicationHeader.c b/e2sim/src/ASN1c/RICindicationHeader.c
index 64e4144..eab1fb5 100644
--- a/e2sim/src/ASN1c/RICindicationHeader.c
+++ b/e2sim/src/ASN1c/RICindicationHeader.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICindicationHeader.h"
diff --git a/e2sim/src/ASN1c/RICindicationHeader.h b/e2sim/src/ASN1c/RICindicationHeader.h
index d6655e1..2526404 100644
--- a/e2sim/src/ASN1c/RICindicationHeader.h
+++ b/e2sim/src/ASN1c/RICindicationHeader.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICindicationHeader_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICindicationHeader_encode_der;
 xer_type_decoder_f RICindicationHeader_decode_xer;
 xer_type_encoder_f RICindicationHeader_encode_xer;
-oer_type_decoder_f RICindicationHeader_decode_oer;
-oer_type_encoder_f RICindicationHeader_encode_oer;
 per_type_decoder_f RICindicationHeader_decode_uper;
 per_type_encoder_f RICindicationHeader_encode_uper;
 per_type_decoder_f RICindicationHeader_decode_aper;
diff --git a/e2sim/src/ASN1c/RICindicationMessage.c b/e2sim/src/ASN1c/RICindicationMessage.c
index cea2831..471e2ca 100644
--- a/e2sim/src/ASN1c/RICindicationMessage.c
+++ b/e2sim/src/ASN1c/RICindicationMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICindicationMessage.h"
diff --git a/e2sim/src/ASN1c/RICindicationMessage.h b/e2sim/src/ASN1c/RICindicationMessage.h
index 5d8ee52..487a23d 100644
--- a/e2sim/src/ASN1c/RICindicationMessage.h
+++ b/e2sim/src/ASN1c/RICindicationMessage.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICindicationMessage_H_
@@ -30,8 +30,6 @@
 der_type_encoder_f RICindicationMessage_encode_der;
 xer_type_decoder_f RICindicationMessage_decode_xer;
 xer_type_encoder_f RICindicationMessage_encode_xer;
-oer_type_decoder_f RICindicationMessage_decode_oer;
-oer_type_encoder_f RICindicationMessage_encode_oer;
 per_type_decoder_f RICindicationMessage_decode_uper;
 per_type_encoder_f RICindicationMessage_encode_uper;
 per_type_decoder_f RICindicationMessage_decode_aper;
diff --git a/e2sim/src/ASN1c/RICindicationSN.c b/e2sim/src/ASN1c/RICindicationSN.c
index 453d308..06e9405 100644
--- a/e2sim/src/ASN1c/RICindicationSN.c
+++ b/e2sim/src/ASN1c/RICindicationSN.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICindicationSN.h"
@@ -36,10 +36,7 @@
  * This type is implemented using NativeInteger,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICindicationSN_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
-static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
@@ -57,7 +54,7 @@
 	asn_DEF_RICindicationSN_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICindicationSN_tags_1)
 		/sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICindicationSN_constr_1, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint },
+	{ 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sim/src/ASN1c/RICindicationSN.h b/e2sim/src/ASN1c/RICindicationSN.h
index f286d17..c13fff6 100644
--- a/e2sim/src/ASN1c/RICindicationSN.h
+++ b/e2sim/src/ASN1c/RICindicationSN.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICindicationSN_H_
@@ -22,6 +22,7 @@
 typedef long	 RICindicationSN_t;
 
 /* Implementation */
+extern asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN;
 asn_struct_free_f RICindicationSN_free;
 asn_struct_print_f RICindicationSN_print;
@@ -30,8 +31,6 @@
 der_type_encoder_f RICindicationSN_encode_der;
 xer_type_decoder_f RICindicationSN_decode_xer;
 xer_type_encoder_f RICindicationSN_encode_xer;
-oer_type_decoder_f RICindicationSN_decode_oer;
-oer_type_encoder_f RICindicationSN_encode_oer;
 per_type_decoder_f RICindicationSN_decode_uper;
 per_type_encoder_f RICindicationSN_encode_uper;
 per_type_decoder_f RICindicationSN_decode_aper;
diff --git a/e2sim/src/ASN1c/RICindicationType.c b/e2sim/src/ASN1c/RICindicationType.c
index 8297a1e..b68a6ba 100644
--- a/e2sim/src/ASN1c/RICindicationType.c
+++ b/e2sim/src/ASN1c/RICindicationType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICindicationType.h"
@@ -11,10 +11,7 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICindicationType_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RICindicationType_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 */
@@ -29,7 +26,7 @@
 	0	/* report(0) */
 	/* This list is extensible */
 };
-static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = {
+const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = {
 	asn_MAP_RICindicationType_value2enum_1,	/* "tag" => N; sorted by tag */
 	asn_MAP_RICindicationType_enum2value_1,	/* N => "tag"; sorted by N */
 	2,	/* Number of elements in the maps */
@@ -51,7 +48,7 @@
 	asn_DEF_RICindicationType_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICindicationType_tags_1)
 		/sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICindicationType_constr_1, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICindicationType_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICindicationType.h b/e2sim/src/ASN1c/RICindicationType.h
index 769ece8..76e08e9 100644
--- a/e2sim/src/ASN1c/RICindicationType.h
+++ b/e2sim/src/ASN1c/RICindicationType.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICindicationType_H_
@@ -31,7 +31,9 @@
 typedef long	 RICindicationType_t;
 
 /* Implementation */
+extern asn_per_constraints_t asn_PER_type_RICindicationType_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_RICindicationType;
+extern const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1;
 asn_struct_free_f RICindicationType_free;
 asn_struct_print_f RICindicationType_print;
 asn_constr_check_f RICindicationType_constraint;
@@ -39,8 +41,6 @@
 der_type_encoder_f RICindicationType_encode_der;
 xer_type_decoder_f RICindicationType_decode_xer;
 xer_type_encoder_f RICindicationType_encode_xer;
-oer_type_decoder_f RICindicationType_decode_oer;
-oer_type_encoder_f RICindicationType_encode_oer;
 per_type_decoder_f RICindicationType_decode_uper;
 per_type_encoder_f RICindicationType_encode_uper;
 per_type_decoder_f RICindicationType_decode_aper;
diff --git a/e2sim/src/ASN1c/RICrequestID.c b/e2sim/src/ASN1c/RICrequestID.c
index dd83fcd..701a7cb 100644
--- a/e2sim/src/ASN1c/RICrequestID.c
+++ b/e2sim/src/ASN1c/RICrequestID.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICrequestID.h"
@@ -57,17 +57,11 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_memb_ricRequestorID_constr_2 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 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_ricInstanceID_constr_3 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -79,7 +73,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_NativeInteger,
 		0,
-		{ &asn_OER_memb_ricRequestorID_constr_2, &asn_PER_memb_ricRequestorID_constr_2,  memb_ricRequestorID_constraint_1 },
+		{ 0, &asn_PER_memb_ricRequestorID_constr_2,  memb_ricRequestorID_constraint_1 },
 		0, 0, /* No default value */
 		"ricRequestorID"
 		},
@@ -88,7 +82,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_NativeInteger,
 		0,
-		{ &asn_OER_memb_ricInstanceID_constr_3, &asn_PER_memb_ricInstanceID_constr_3,  memb_ricInstanceID_constraint_1 },
+		{ 0, &asn_PER_memb_ricInstanceID_constr_3,  memb_ricInstanceID_constraint_1 },
 		0, 0, /* No default value */
 		"ricInstanceID"
 		},
diff --git a/e2sim/src/ASN1c/RICrequestID.h b/e2sim/src/ASN1c/RICrequestID.h
index 25749c0..f832678 100644
--- a/e2sim/src/ASN1c/RICrequestID.h
+++ b/e2sim/src/ASN1c/RICrequestID.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICrequestID_H_
diff --git a/e2sim/src/ASN1c/RICserviceQuery.c b/e2sim/src/ASN1c/RICserviceQuery.c
index 325f270..9dce754 100644
--- a/e2sim/src/ASN1c/RICserviceQuery.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P19,
+		&asn_DEF_ProtocolIE_Container_226P25,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICserviceQuery.h b/e2sim/src/ASN1c/RICserviceQuery.h
index d15d587..3b215de 100644
--- a/e2sim/src/ASN1c/RICserviceQuery.h
+++ b/e2sim/src/ASN1c/RICserviceQuery.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICserviceQuery_H_
@@ -21,7 +21,7 @@
 
 /* RICserviceQuery */
 typedef struct RICserviceQuery {
-	ProtocolIE_Container_1527P19_t	 protocolIEs;
+	ProtocolIE_Container_226P25_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICserviceUpdate.c b/e2sim/src/ASN1c/RICserviceUpdate.c
index 86f3600..73206ce 100644
--- a/e2sim/src/ASN1c/RICserviceUpdate.c
+++ b/e2sim/src/ASN1c/RICserviceUpdate.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICserviceUpdate.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_1527P16,
+		&asn_DEF_ProtocolIE_Container_226P22,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICserviceUpdate.h b/e2sim/src/ASN1c/RICserviceUpdate.h
index 50bbff7..1155249 100644
--- a/e2sim/src/ASN1c/RICserviceUpdate.h
+++ b/e2sim/src/ASN1c/RICserviceUpdate.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICserviceUpdate_H_
@@ -21,7 +21,7 @@
 
 /* RICserviceUpdate */
 typedef struct RICserviceUpdate {
-	ProtocolIE_Container_1527P16_t	 protocolIEs;
+	ProtocolIE_Container_226P22_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c
index 875bb38..700c355 100644
--- a/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c
+++ b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICserviceUpdateAcknowledge.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_1527P17,
+		&asn_DEF_ProtocolIE_Container_226P23,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h
index a50b20d..cb8afea 100644
--- a/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h
+++ b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICserviceUpdateAcknowledge_H_
@@ -21,7 +21,7 @@
 
 /* RICserviceUpdateAcknowledge */
 typedef struct RICserviceUpdateAcknowledge {
-	ProtocolIE_Container_1527P17_t	 protocolIEs;
+	ProtocolIE_Container_226P23_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICserviceUpdateFailure.c b/e2sim/src/ASN1c/RICserviceUpdateFailure.c
index 369d521..72ddf04 100644
--- a/e2sim/src/ASN1c/RICserviceUpdateFailure.c
+++ b/e2sim/src/ASN1c/RICserviceUpdateFailure.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICserviceUpdateFailure.h"
@@ -11,7 +11,7 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ProtocolIE_Container_1527P18,
+		&asn_DEF_ProtocolIE_Container_226P24,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICserviceUpdateFailure.h b/e2sim/src/ASN1c/RICserviceUpdateFailure.h
index eb38105..3993372 100644
--- a/e2sim/src/ASN1c/RICserviceUpdateFailure.h
+++ b/e2sim/src/ASN1c/RICserviceUpdateFailure.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICserviceUpdateFailure_H_
@@ -21,7 +21,7 @@
 
 /* RICserviceUpdateFailure */
 typedef struct RICserviceUpdateFailure {
-	ProtocolIE_Container_1527P18_t	 protocolIEs;
+	ProtocolIE_Container_226P24_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c
index 0f7c74f..17144b1 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P5,
+		&asn_DEF_ProtocolIE_Container_226P5,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h
index 352ad75..c449ec2 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h
+++ b/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionDeleteFailure_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionDeleteFailure */
 typedef struct RICsubscriptionDeleteFailure {
-	ProtocolIE_Container_1527P5_t	 protocolIEs;
+	ProtocolIE_Container_226P5_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c
index c584cc1..acf561a 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P3,
+		&asn_DEF_ProtocolIE_Container_226P3,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h
index 12b34f8..1d86168 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h
+++ b/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionDeleteRequest_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionDeleteRequest */
 typedef struct RICsubscriptionDeleteRequest {
-	ProtocolIE_Container_1527P3_t	 protocolIEs;
+	ProtocolIE_Container_226P3_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c
index 105b324..a8268de 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P4,
+		&asn_DEF_ProtocolIE_Container_226P4,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h
index 654a420..5f54a1c 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h
+++ b/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionDeleteResponse_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionDeleteResponse */
 typedef struct RICsubscriptionDeleteResponse {
-	ProtocolIE_Container_1527P4_t	 protocolIEs;
+	ProtocolIE_Container_226P4_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionDetails.c b/e2sim/src/ASN1c/RICsubscriptionDetails.c
index a1d91a4..07a6871 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDetails.c
+++ b/e2sim/src/ASN1c/RICsubscriptionDetails.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICsubscriptionDetails.h"
 
-static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = {
+asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
@@ -34,7 +34,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = {
 	sizeof(struct RICsubscriptionDetails),
 	offsetof(struct RICsubscriptionDetails, _asn_ctx),
 	asn_MAP_RICsubscriptionDetails_tag2el_1,
diff --git a/e2sim/src/ASN1c/RICsubscriptionDetails.h b/e2sim/src/ASN1c/RICsubscriptionDetails.h
index c16b877..2ec7ae2 100644
--- a/e2sim/src/ASN1c/RICsubscriptionDetails.h
+++ b/e2sim/src/ASN1c/RICsubscriptionDetails.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionDetails_H_
@@ -35,6 +35,8 @@
 
 /* Implementation */
 extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails;
+extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1;
+extern asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[2];
 
 #ifdef __cplusplus
 }
diff --git a/e2sim/src/ASN1c/RICsubscriptionFailure.c b/e2sim/src/ASN1c/RICsubscriptionFailure.c
index b206576..b95025e 100644
--- a/e2sim/src/ASN1c/RICsubscriptionFailure.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P2,
+		&asn_DEF_ProtocolIE_Container_226P2,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionFailure.h b/e2sim/src/ASN1c/RICsubscriptionFailure.h
index 6ff580b..7910f1c 100644
--- a/e2sim/src/ASN1c/RICsubscriptionFailure.h
+++ b/e2sim/src/ASN1c/RICsubscriptionFailure.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionFailure_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionFailure */
 typedef struct RICsubscriptionFailure {
-	ProtocolIE_Container_1527P2_t	 protocolIEs;
+	ProtocolIE_Container_226P2_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionRequest.c b/e2sim/src/ASN1c/RICsubscriptionRequest.c
index 754c2d7..ef86fa8 100644
--- a/e2sim/src/ASN1c/RICsubscriptionRequest.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P0,
+		&asn_DEF_ProtocolIE_Container_226P0,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionRequest.h b/e2sim/src/ASN1c/RICsubscriptionRequest.h
index 2baa323..76429ea 100644
--- a/e2sim/src/ASN1c/RICsubscriptionRequest.h
+++ b/e2sim/src/ASN1c/RICsubscriptionRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionRequest_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionRequest */
 typedef struct RICsubscriptionRequest {
-	ProtocolIE_Container_1527P0_t	 protocolIEs;
+	ProtocolIE_Container_226P0_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubscriptionResponse.c b/e2sim/src/ASN1c/RICsubscriptionResponse.c
index a9088f3..28c0861 100644
--- a/e2sim/src/ASN1c/RICsubscriptionResponse.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P1,
+		&asn_DEF_ProtocolIE_Container_226P1,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/RICsubscriptionResponse.h b/e2sim/src/ASN1c/RICsubscriptionResponse.h
index 24f30de..5dd7865 100644
--- a/e2sim/src/ASN1c/RICsubscriptionResponse.h
+++ b/e2sim/src/ASN1c/RICsubscriptionResponse.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubscriptionResponse_H_
@@ -21,7 +21,7 @@
 
 /* RICsubscriptionResponse */
 typedef struct RICsubscriptionResponse {
-	ProtocolIE_Container_1527P1_t	 protocolIEs;
+	ProtocolIE_Container_226P1_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/RICsubsequentAction.c b/e2sim/src/ASN1c/RICsubsequentAction.c
index 431301b..5a63307 100644
--- a/e2sim/src/ASN1c/RICsubsequentAction.c
+++ b/e2sim/src/ASN1c/RICsubsequentAction.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICsubsequentAction.h"
diff --git a/e2sim/src/ASN1c/RICsubsequentAction.h b/e2sim/src/ASN1c/RICsubsequentAction.h
index b4f4837..9806500 100644
--- a/e2sim/src/ASN1c/RICsubsequentAction.h
+++ b/e2sim/src/ASN1c/RICsubsequentAction.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubsequentAction_H_
diff --git a/e2sim/src/ASN1c/RICsubsequentActionType.c b/e2sim/src/ASN1c/RICsubsequentActionType.c
index fb10ee0..b460c42 100644
--- a/e2sim/src/ASN1c/RICsubsequentActionType.c
+++ b/e2sim/src/ASN1c/RICsubsequentActionType.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICsubsequentActionType.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_RICsubsequentActionType_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICsubsequentActionType_tags_1)
 		/sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICsubsequentActionType_constr_1, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICsubsequentActionType_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICsubsequentActionType.h b/e2sim/src/ASN1c/RICsubsequentActionType.h
index 1397029..dae379e 100644
--- a/e2sim/src/ASN1c/RICsubsequentActionType.h
+++ b/e2sim/src/ASN1c/RICsubsequentActionType.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICsubsequentActionType_H_
@@ -41,8 +41,6 @@
 der_type_encoder_f RICsubsequentActionType_encode_der;
 xer_type_decoder_f RICsubsequentActionType_decode_xer;
 xer_type_encoder_f RICsubsequentActionType_encode_xer;
-oer_type_decoder_f RICsubsequentActionType_decode_oer;
-oer_type_encoder_f RICsubsequentActionType_encode_oer;
 per_type_decoder_f RICsubsequentActionType_decode_uper;
 per_type_encoder_f RICsubsequentActionType_encode_uper;
 per_type_decoder_f RICsubsequentActionType_decode_aper;
diff --git a/e2sim/src/ASN1c/RICtimeToWait.c b/e2sim/src/ASN1c/RICtimeToWait.c
index 866c010..91edeb9 100644
--- a/e2sim/src/ASN1c/RICtimeToWait.c
+++ b/e2sim/src/ASN1c/RICtimeToWait.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "RICtimeToWait.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RICtimeToWait_constr_1 CC_NOTUSED = {
-	{ 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_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -83,7 +80,7 @@
 	asn_DEF_RICtimeToWait_tags_1,	/* Same as above */
 	sizeof(asn_DEF_RICtimeToWait_tags_1)
 		/sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RICtimeToWait_constr_1, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_RICtimeToWait_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/RICtimeToWait.h b/e2sim/src/ASN1c/RICtimeToWait.h
index ac9cd3b..5b1bc8f 100644
--- a/e2sim/src/ASN1c/RICtimeToWait.h
+++ b/e2sim/src/ASN1c/RICtimeToWait.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_RICtimeToWait_H_
@@ -57,8 +57,6 @@
 der_type_encoder_f RICtimeToWait_encode_der;
 xer_type_decoder_f RICtimeToWait_decode_xer;
 xer_type_encoder_f RICtimeToWait_encode_xer;
-oer_type_decoder_f RICtimeToWait_decode_oer;
-oer_type_encoder_f RICtimeToWait_encode_oer;
 per_type_decoder_f RICtimeToWait_decode_uper;
 per_type_encoder_f RICtimeToWait_encode_uper;
 per_type_decoder_f RICtimeToWait_decode_aper;
diff --git a/e2sim/src/ASN1c/ResetRequest.c b/e2sim/src/ASN1c/ResetRequest.c
index 8d2dc82..b4ab9eb 100644
--- a/e2sim/src/ASN1c/ResetRequest.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P14,
+		&asn_DEF_ProtocolIE_Container_226P20,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/ResetRequest.h b/e2sim/src/ASN1c/ResetRequest.h
index f92e0ed..8cfbabd 100644
--- a/e2sim/src/ASN1c/ResetRequest.h
+++ b/e2sim/src/ASN1c/ResetRequest.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ResetRequest_H_
@@ -21,7 +21,7 @@
 
 /* ResetRequest */
 typedef struct ResetRequest {
-	ProtocolIE_Container_1527P14_t	 protocolIEs;
+	ProtocolIE_Container_226P20_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/ResetResponse.c b/e2sim/src/ASN1c/ResetResponse.c
index 30f6ed9..d483846 100644
--- a/e2sim/src/ASN1c/ResetResponse.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #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_1527P15,
+		&asn_DEF_ProtocolIE_Container_226P21,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
diff --git a/e2sim/src/ASN1c/ResetResponse.h b/e2sim/src/ASN1c/ResetResponse.h
index 139b953..15f6fb3 100644
--- a/e2sim/src/ASN1c/ResetResponse.h
+++ b/e2sim/src/ASN1c/ResetResponse.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Contents"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_ResetResponse_H_
@@ -21,7 +21,7 @@
 
 /* ResetResponse */
 typedef struct ResetResponse {
-	ProtocolIE_Container_1527P15_t	 protocolIEs;
+	ProtocolIE_Container_226P21_t	 protocolIEs;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/e2sim/src/ASN1c/SuccessfulOutcome.c b/e2sim/src/ASN1c/SuccessfulOutcome.c
index 1fbef5e..fe59400 100644
--- a/e2sim/src/ASN1c/SuccessfulOutcome.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "SuccessfulOutcome.h"
@@ -17,14 +17,18 @@
 static const long asn_VAL_4_reject = 0;
 static const long asn_VAL_5_id_E2setup = 1;
 static const long asn_VAL_5_reject = 0;
-static const long asn_VAL_6_id_Reset = 3;
+static const long asn_VAL_6_id_E2nodeConfigurationUpdate = 10;
 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_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_7_id_E2connectionUpdate = 11;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_Reset = 3;
+static const long asn_VAL_8_reject = 0;
+static const long asn_VAL_9_id_RICindication = 5;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_RICserviceQuery = 6;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_ErrorIndication = 2;
+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 },
@@ -51,29 +55,39 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_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_6_id_E2nodeConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2connectionUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2connectionUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_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 },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_Reset },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_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_9_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_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_10_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_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_11_id_ErrorIndication },
+	{ "&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,
@@ -192,25 +206,16 @@
 	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
-static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_3 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_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -262,6 +267,24 @@
 		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.E2connectionUpdateAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdateAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdateAcknowledge"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse),
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -273,12 +296,14 @@
 		},
 };
 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, 7 }, /* RICsubscriptionResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 6 }, /* RICsubscriptionDeleteResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 5 }, /* RICserviceUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 4 }, /* RICcontrolAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 3 }, /* E2setupResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 2 }, /* E2nodeConfigurationUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 1 }, /* E2connectionUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 0 } /* ResetResponse */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct SuccessfulOutcome__value),
@@ -286,7 +311,7 @@
 	offsetof(struct SuccessfulOutcome__value, present),
 	sizeof(((struct SuccessfulOutcome__value *)0)->present),
 	asn_MAP_value_tag2el_4,
-	6,	/* Count of tags in the map */
+	8,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
@@ -301,7 +326,7 @@
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
 	asn_MBR_value_4,
-	6,	/* Elements count */
+	8,	/* Elements count */
 	&asn_SPC_value_specs_4	/* Additional specs */
 };
 
@@ -311,7 +336,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProcedureCode,
 		0,
-		{ &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
+		{ 0, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
 		0, 0, /* No default value */
 		"procedureCode"
 		},
@@ -320,7 +345,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_SuccessfulOutcome_criticality_type,
-		{ &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
+		{ 0, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
 		0, 0, /* No default value */
 		"criticality"
 		},
@@ -329,7 +354,7 @@
 		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_4,
 		select_SuccessfulOutcome_value_type,
-		{ &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
+		{ 0, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
 		0, 0, /* No default value */
 		"value"
 		},
diff --git a/e2sim/src/ASN1c/SuccessfulOutcome.h b/e2sim/src/ASN1c/SuccessfulOutcome.h
index 5df655a..fd1f423 100644
--- a/e2sim/src/ASN1c/SuccessfulOutcome.h
+++ b/e2sim/src/ASN1c/SuccessfulOutcome.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_SuccessfulOutcome_H_
@@ -31,6 +31,12 @@
 #include "E2setupRequest.h"
 #include "E2setupResponse.h"
 #include "E2setupFailure.h"
+#include "E2nodeConfigurationUpdate.h"
+#include "E2nodeConfigurationUpdateAcknowledge.h"
+#include "E2nodeConfigurationUpdateFailure.h"
+#include "E2connectionUpdate.h"
+#include "E2connectionUpdateAcknowledge.h"
+#include "E2connectionUpdateFailure.h"
 #include "ResetRequest.h"
 #include "ResetResponse.h"
 #include "RICindication.h"
@@ -52,6 +58,8 @@
 	SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge,
 	SuccessfulOutcome__value_PR_RICcontrolAcknowledge,
 	SuccessfulOutcome__value_PR_E2setupResponse,
+	SuccessfulOutcome__value_PR_E2nodeConfigurationUpdateAcknowledge,
+	SuccessfulOutcome__value_PR_E2connectionUpdateAcknowledge,
 	SuccessfulOutcome__value_PR_ResetResponse
 } SuccessfulOutcome__value_PR;
 
@@ -67,6 +75,8 @@
 			RICserviceUpdateAcknowledge_t	 RICserviceUpdateAcknowledge;
 			RICcontrolAcknowledge_t	 RICcontrolAcknowledge;
 			E2setupResponse_t	 E2setupResponse;
+			E2nodeConfigurationUpdateAcknowledge_t	 E2nodeConfigurationUpdateAcknowledge;
+			E2connectionUpdateAcknowledge_t	 E2connectionUpdateAcknowledge;
 			ResetResponse_t	 ResetResponse;
 		} choice;
 		
diff --git a/e2sim/src/ASN1c/TNLinformation.c b/e2sim/src/ASN1c/TNLinformation.c
new file mode 100644
index 0000000..799c22c
--- /dev/null
+++ b/e2sim/src/ASN1c/TNLinformation.c
@@ -0,0 +1,134 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#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_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_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,
+		{ 0, &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,
+		{ 0, &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/e2sim/src/ASN1c/TNLinformation.h b/e2sim/src/ASN1c/TNLinformation.h
new file mode 100644
index 0000000..eccde1b
--- /dev/null
+++ b/e2sim/src/ASN1c/TNLinformation.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_TNLinformation_H_
+#define	_TNLinformation_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "BIT_STRING.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* TNLinformation */
+typedef struct TNLinformation {
+	BIT_STRING_t	 tnlAddress;
+	BIT_STRING_t	*tnlPort;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} TNLinformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_TNLinformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_TNLinformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_TNLinformation_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _TNLinformation_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/TNLusage.c b/e2sim/src/ASN1c/TNLusage.c
new file mode 100644
index 0000000..94fbd4c
--- /dev/null
+++ b/e2sim/src/ASN1c/TNLusage.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#include "TNLusage.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+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 */
+};
+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 */
+	{ 0, &asn_PER_type_TNLusage_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_TNLusage_specs_1	/* Additional specs */
+};
+
diff --git a/e2sim/src/ASN1c/TNLusage.h b/e2sim/src/ASN1c/TNLusage.h
new file mode 100644
index 0000000..63abe96
--- /dev/null
+++ b/e2sim/src/ASN1c/TNLusage.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
+ */
+
+#ifndef	_TNLusage_H_
+#define	_TNLusage_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "NativeEnumerated.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum TNLusage {
+	TNLusage_ric_service	= 0,
+	TNLusage_support_function	= 1,
+	TNLusage_both	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_TNLusage;
+
+/* TNLusage */
+typedef long	 TNLusage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_TNLusage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_TNLusage;
+extern const asn_INTEGER_specifics_t asn_SPC_TNLusage_specs_1;
+asn_struct_free_f TNLusage_free;
+asn_struct_print_f TNLusage_print;
+asn_constr_check_f TNLusage_constraint;
+ber_type_decoder_f TNLusage_decode_ber;
+der_type_encoder_f TNLusage_encode_der;
+xer_type_decoder_f TNLusage_decode_xer;
+xer_type_encoder_f TNLusage_encode_xer;
+per_type_decoder_f TNLusage_decode_uper;
+per_type_encoder_f TNLusage_encode_uper;
+per_type_decoder_f TNLusage_decode_aper;
+per_type_encoder_f TNLusage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _TNLusage_H_ */
+#include "asn_internal.h"
diff --git a/e2sim/src/ASN1c/TimeToWait.c b/e2sim/src/ASN1c/TimeToWait.c
index ad3c27c..fcddc44 100644
--- a/e2sim/src/ASN1c/TimeToWait.c
+++ b/e2sim/src/ASN1c/TimeToWait.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "TimeToWait.h"
@@ -11,10 +11,7 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_TimeToWait_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
@@ -37,7 +34,7 @@
 	5	/* v60s(5) */
 	/* This list is extensible */
 };
-static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = {
+const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = {
 	asn_MAP_TimeToWait_value2enum_1,	/* "tag" => N; sorted by tag */
 	asn_MAP_TimeToWait_enum2value_1,	/* N => "tag"; sorted by N */
 	6,	/* Number of elements in the maps */
@@ -59,7 +56,7 @@
 	asn_DEF_TimeToWait_tags_1,	/* Same as above */
 	sizeof(asn_DEF_TimeToWait_tags_1)
 		/sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */
-	{ &asn_OER_type_TimeToWait_constr_1, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_TimeToWait_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/TimeToWait.h b/e2sim/src/ASN1c/TimeToWait.h
index 7c06018..bc8a935 100644
--- a/e2sim/src/ASN1c/TimeToWait.h
+++ b/e2sim/src/ASN1c/TimeToWait.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_TimeToWait_H_
@@ -35,7 +35,9 @@
 typedef long	 TimeToWait_t;
 
 /* Implementation */
+extern asn_per_constraints_t asn_PER_type_TimeToWait_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_TimeToWait;
+extern const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1;
 asn_struct_free_f TimeToWait_free;
 asn_struct_print_f TimeToWait_print;
 asn_constr_check_f TimeToWait_constraint;
@@ -43,8 +45,6 @@
 der_type_encoder_f TimeToWait_encode_der;
 xer_type_decoder_f TimeToWait_decode_xer;
 xer_type_encoder_f TimeToWait_encode_xer;
-oer_type_decoder_f TimeToWait_decode_oer;
-oer_type_encoder_f TimeToWait_encode_oer;
 per_type_decoder_f TimeToWait_decode_uper;
 per_type_encoder_f TimeToWait_encode_uper;
 per_type_decoder_f TimeToWait_decode_aper;
diff --git a/e2sim/src/ASN1c/TriggeringMessage.c b/e2sim/src/ASN1c/TriggeringMessage.c
index fb10f3c..3f44842 100644
--- a/e2sim/src/ASN1c/TriggeringMessage.c
+++ b/e2sim/src/ASN1c/TriggeringMessage.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "TriggeringMessage.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_TriggeringMessage_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_TriggeringMessage_tags_1,	/* Same as above */
 	sizeof(asn_DEF_TriggeringMessage_tags_1)
 		/sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */
-	{ &asn_OER_type_TriggeringMessage_constr_1, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_TriggeringMessage_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/TriggeringMessage.h b/e2sim/src/ASN1c/TriggeringMessage.h
index 51bb220..f92107f 100644
--- a/e2sim/src/ASN1c/TriggeringMessage.h
+++ b/e2sim/src/ASN1c/TriggeringMessage.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-CommonDataTypes"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_TriggeringMessage_H_
@@ -39,8 +39,6 @@
 der_type_encoder_f TriggeringMessage_encode_der;
 xer_type_decoder_f TriggeringMessage_decode_xer;
 xer_type_encoder_f TriggeringMessage_encode_xer;
-oer_type_decoder_f TriggeringMessage_decode_oer;
-oer_type_encoder_f TriggeringMessage_encode_oer;
 per_type_decoder_f TriggeringMessage_decode_uper;
 per_type_encoder_f TriggeringMessage_encode_uper;
 per_type_decoder_f TriggeringMessage_decode_aper;
diff --git a/e2sim/src/ASN1c/TypeOfError.c b/e2sim/src/ASN1c/TypeOfError.c
index 6b4f37e..35cab04 100644
--- a/e2sim/src/ASN1c/TypeOfError.c
+++ b/e2sim/src/ASN1c/TypeOfError.c
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "TypeOfError.h"
@@ -11,9 +11,6 @@
  * This type is implemented using NativeEnumerated,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_TypeOfError_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -51,7 +48,7 @@
 	asn_DEF_TypeOfError_tags_1,	/* Same as above */
 	sizeof(asn_DEF_TypeOfError_tags_1)
 		/sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */
-	{ &asn_OER_type_TypeOfError_constr_1, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint },
+	{ 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint },
 	0, 0,	/* Defined elsewhere */
 	&asn_SPC_TypeOfError_specs_1	/* Additional specs */
 };
diff --git a/e2sim/src/ASN1c/TypeOfError.h b/e2sim/src/ASN1c/TypeOfError.h
index 7dee671..4481028 100644
--- a/e2sim/src/ASN1c/TypeOfError.h
+++ b/e2sim/src/ASN1c/TypeOfError.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-IEs"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_TypeOfError_H_
@@ -41,8 +41,6 @@
 der_type_encoder_f TypeOfError_encode_der;
 xer_type_decoder_f TypeOfError_decode_xer;
 xer_type_encoder_f TypeOfError_encode_xer;
-oer_type_decoder_f TypeOfError_decode_oer;
-oer_type_encoder_f TypeOfError_encode_oer;
 per_type_decoder_f TypeOfError_decode_uper;
 per_type_encoder_f TypeOfError_encode_uper;
 per_type_decoder_f TypeOfError_decode_aper;
diff --git a/e2sim/src/ASN1c/UnsuccessfulOutcome.c b/e2sim/src/ASN1c/UnsuccessfulOutcome.c
index 7cd5cd5..bf5905c 100644
--- a/e2sim/src/ASN1c/UnsuccessfulOutcome.c
+++ b/e2sim/src/ASN1c/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 "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #include "UnsuccessfulOutcome.h"
@@ -17,14 +17,18 @@
 static const long asn_VAL_4_reject = 0;
 static const long asn_VAL_5_id_E2setup = 1;
 static const long asn_VAL_5_reject = 0;
-static const long asn_VAL_6_id_Reset = 3;
+static const long asn_VAL_6_id_E2nodeConfigurationUpdate = 10;
 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_8_ignore = 1;
-static const long asn_VAL_9_id_ErrorIndication = 2;
+static const long asn_VAL_7_id_E2connectionUpdate = 11;
+static const long asn_VAL_7_reject = 0;
+static const long asn_VAL_8_id_Reset = 3;
+static const long asn_VAL_8_reject = 0;
+static const long asn_VAL_9_id_RICindication = 5;
 static const long asn_VAL_9_ignore = 1;
+static const long asn_VAL_10_id_RICserviceQuery = 6;
+static const long asn_VAL_10_ignore = 1;
+static const long asn_VAL_11_id_ErrorIndication = 2;
+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 },
@@ -51,29 +55,39 @@
 	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure },
 	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup },
 	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_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_6_id_E2nodeConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2connectionUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2connectionUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_E2connectionUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_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 },
+	{ "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_Reset },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_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_9_id_RICindication },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_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_10_id_RICserviceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_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_11_id_ErrorIndication },
+	{ "&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,
@@ -192,25 +206,16 @@
 	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
-static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
 static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_criticality_constr_3 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_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
 static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
@@ -262,13 +267,33 @@
 		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.E2connectionUpdateFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2connectionUpdateFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E2connectionUpdateFailure"
+		},
 };
 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, 6 }, /* RICsubscriptionFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 5 }, /* RICsubscriptionDeleteFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 4 }, /* RICserviceUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 3 }, /* RICcontrolFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 2 }, /* E2setupFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 1 }, /* E2nodeConfigurationUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 0 } /* E2connectionUpdateFailure */
 };
 static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
 	sizeof(struct UnsuccessfulOutcome__value),
@@ -276,7 +301,7 @@
 	offsetof(struct UnsuccessfulOutcome__value, present),
 	sizeof(((struct UnsuccessfulOutcome__value *)0)->present),
 	asn_MAP_value_tag2el_4,
-	5,	/* Count of tags in the map */
+	7,	/* Count of tags in the map */
 	0, 0,
 	-1	/* Extensions start */
 };
@@ -291,7 +316,7 @@
 	0,	/* No tags (count) */
 	{ 0, 0, OPEN_TYPE_constraint },
 	asn_MBR_value_4,
-	5,	/* Elements count */
+	7,	/* Elements count */
 	&asn_SPC_value_specs_4	/* Additional specs */
 };
 
@@ -301,7 +326,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_ProcedureCode,
 		0,
-		{ &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
+		{ 0, &asn_PER_memb_procedureCode_constr_2,  memb_procedureCode_constraint_1 },
 		0, 0, /* No default value */
 		"procedureCode"
 		},
@@ -310,7 +335,7 @@
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_Criticality,
 		select_UnsuccessfulOutcome_criticality_type,
-		{ &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
+		{ 0, &asn_PER_memb_criticality_constr_3,  memb_criticality_constraint_1 },
 		0, 0, /* No default value */
 		"criticality"
 		},
@@ -319,7 +344,7 @@
 		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_value_4,
 		select_UnsuccessfulOutcome_value_type,
-		{ &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
+		{ 0, &asn_PER_memb_value_constr_4,  memb_value_constraint_1 },
 		0, 0, /* No default value */
 		"value"
 		},
diff --git a/e2sim/src/ASN1c/UnsuccessfulOutcome.h b/e2sim/src/ASN1c/UnsuccessfulOutcome.h
index 0a1cb1a..2a37e89 100644
--- a/e2sim/src/ASN1c/UnsuccessfulOutcome.h
+++ b/e2sim/src/ASN1c/UnsuccessfulOutcome.h
@@ -1,8 +1,8 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
  * From ASN.1 module "E2AP-PDU-Descriptions"
- * 	found in "/root/e2ap-v01.00.00.asn"
- * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .`
+ * 	found in "e2ap-v01.01.00.asn"
+ * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
  */
 
 #ifndef	_UnsuccessfulOutcome_H_
@@ -31,6 +31,12 @@
 #include "E2setupRequest.h"
 #include "E2setupResponse.h"
 #include "E2setupFailure.h"
+#include "E2nodeConfigurationUpdate.h"
+#include "E2nodeConfigurationUpdateAcknowledge.h"
+#include "E2nodeConfigurationUpdateFailure.h"
+#include "E2connectionUpdate.h"
+#include "E2connectionUpdateAcknowledge.h"
+#include "E2connectionUpdateFailure.h"
 #include "ResetRequest.h"
 #include "ResetResponse.h"
 #include "RICindication.h"
@@ -51,7 +57,9 @@
 	UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure,
 	UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure,
 	UnsuccessfulOutcome__value_PR_RICcontrolFailure,
-	UnsuccessfulOutcome__value_PR_E2setupFailure
+	UnsuccessfulOutcome__value_PR_E2setupFailure,
+	UnsuccessfulOutcome__value_PR_E2nodeConfigurationUpdateFailure,
+	UnsuccessfulOutcome__value_PR_E2connectionUpdateFailure
 } UnsuccessfulOutcome__value_PR;
 
 /* UnsuccessfulOutcome */
@@ -66,6 +74,8 @@
 			RICserviceUpdateFailure_t	 RICserviceUpdateFailure;
 			RICcontrolFailure_t	 RICcontrolFailure;
 			E2setupFailure_t	 E2setupFailure;
+			E2nodeConfigurationUpdateFailure_t	 E2nodeConfigurationUpdateFailure;
+			E2connectionUpdateFailure_t	 E2connectionUpdateFailure;
 		} choice;
 		
 		/* Context for parsing across buffer boundaries */
diff --git a/e2sim/src/ASN1c/asn_constant.h b/e2sim/src/ASN1c/asn_constant.h
index a6f348c..308038d 100644
--- a/e2sim/src/ASN1c/asn_constant.h
+++ b/e2sim/src/ASN1c/asn_constant.h
@@ -11,8 +11,10 @@
 
 #define maxProtocolIEs (65535)
 #define maxnoofErrors (256)
+#define maxofE2nodeComponents (1024)
 #define maxofRANfunctionID (256)
 #define maxofRICactionID (16)
+#define maxofTNLA (32)
 
 
 #ifdef __cplusplus
diff --git a/e2sim/src/ASN1c/asn_internal.c b/e2sim/src/ASN1c/asn_internal.c
index 1aff95f..004660b 100644
--- a/e2sim/src/ASN1c/asn_internal.c
+++ b/e2sim/src/ASN1c/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/e2sim/src/ASN1c/per_support.c b/e2sim/src/ASN1c/per_support.c
index 2285677..2c87a76 100644
--- a/e2sim/src/ASN1c/per_support.c
+++ b/e2sim/src/ASN1c/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;
 
diff --git a/e2sim/src/encoding/encode_e2apv1.cpp b/e2sim/src/encoding/encode_e2apv1.cpp
index 6f8c589..bc8a99f 100644
--- a/e2sim/src/encoding/encode_e2apv1.cpp
+++ b/e2sim/src/encoding/encode_e2apv1.cpp
@@ -60,7 +60,6 @@
 
   RICsubscriptionRequest_t orig_req =
     e2ap_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest;
-  
   RICsubscriptionResponse_IEs_t *ricreqid =
     (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
 					   
@@ -851,7 +850,6 @@
   
   e2ap_pdu->present = pres5;
   e2ap_pdu->choice.initiatingMessage = initmsg;
-
   char *error_buf = (char*)calloc(300, sizeof(char));
   size_t errlen;
 
