diff --git a/e2sm/lib/AMF-UE-NGAP-ID.c b/e2sm/lib/AMF-UE-NGAP-ID.c
new file mode 100644
index 0000000..403bacf
--- /dev/null
+++ b/e2sm/lib/AMF-UE-NGAP-ID.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "AMF-UE-NGAP-ID.h"
+
+int
+AMF_UE_NGAP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 1099511627775)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_AMF_UE_NGAP_ID_constr_1 CC_NOTUSED = {
+	{ 8, 1 }	/* (0..1099511627775) */,
+	-1};
+asn_per_constraints_t asn_PER_type_AMF_UE_NGAP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 40, -1,  0,  1099511627775 }	/* (0..1099511627775) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_AMF_UE_NGAP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_AMF_UE_NGAP_ID = {
+	"AMF-UE-NGAP-ID",
+	"AMF-UE-NGAP-ID",
+	&asn_OP_INTEGER,
+	asn_DEF_AMF_UE_NGAP_ID_tags_1,
+	sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1)
+		/sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1[0]), /* 1 */
+	asn_DEF_AMF_UE_NGAP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1)
+		/sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_AMF_UE_NGAP_ID_constr_1, &asn_PER_type_AMF_UE_NGAP_ID_constr_1, AMF_UE_NGAP_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/AMFPointer.c b/e2sm/lib/AMFPointer.c
new file mode 100644
index 0000000..70592cd
--- /dev/null
+++ b/e2sm/lib/AMFPointer.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "AMFPointer.h"
+
+int
+AMFPointer_constraint(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 == 6)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_AMFPointer_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	6	/* (SIZE(6..6)) */};
+asn_per_constraints_t asn_PER_type_AMFPointer_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  6,  6 }	/* (SIZE(6..6)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_AMFPointer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_AMFPointer = {
+	"AMFPointer",
+	"AMFPointer",
+	&asn_OP_BIT_STRING,
+	asn_DEF_AMFPointer_tags_1,
+	sizeof(asn_DEF_AMFPointer_tags_1)
+		/sizeof(asn_DEF_AMFPointer_tags_1[0]), /* 1 */
+	asn_DEF_AMFPointer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_AMFPointer_tags_1)
+		/sizeof(asn_DEF_AMFPointer_tags_1[0]), /* 1 */
+	{ &asn_OER_type_AMFPointer_constr_1, &asn_PER_type_AMFPointer_constr_1, AMFPointer_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/AMFRegionID.c b/e2sm/lib/AMFRegionID.c
new file mode 100644
index 0000000..f686a27
--- /dev/null
+++ b/e2sm/lib/AMFRegionID.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "AMFRegionID.h"
+
+int
+AMFRegionID_constraint(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 == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_AMFRegionID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	8	/* (SIZE(8..8)) */};
+asn_per_constraints_t asn_PER_type_AMFRegionID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_AMFRegionID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_AMFRegionID = {
+	"AMFRegionID",
+	"AMFRegionID",
+	&asn_OP_BIT_STRING,
+	asn_DEF_AMFRegionID_tags_1,
+	sizeof(asn_DEF_AMFRegionID_tags_1)
+		/sizeof(asn_DEF_AMFRegionID_tags_1[0]), /* 1 */
+	asn_DEF_AMFRegionID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_AMFRegionID_tags_1)
+		/sizeof(asn_DEF_AMFRegionID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_AMFRegionID_constr_1, &asn_PER_type_AMFRegionID_constr_1, AMFRegionID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/AMFSetID.c b/e2sm/lib/AMFSetID.c
new file mode 100644
index 0000000..797bdba
--- /dev/null
+++ b/e2sm/lib/AMFSetID.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "AMFSetID.h"
+
+int
+AMFSetID_constraint(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 == 10)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_AMFSetID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	10	/* (SIZE(10..10)) */};
+asn_per_constraints_t asn_PER_type_AMFSetID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  10,  10 }	/* (SIZE(10..10)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_AMFSetID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_AMFSetID = {
+	"AMFSetID",
+	"AMFSetID",
+	&asn_OP_BIT_STRING,
+	asn_DEF_AMFSetID_tags_1,
+	sizeof(asn_DEF_AMFSetID_tags_1)
+		/sizeof(asn_DEF_AMFSetID_tags_1[0]), /* 1 */
+	asn_DEF_AMFSetID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_AMFSetID_tags_1)
+		/sizeof(asn_DEF_AMFSetID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_AMFSetID_constr_1, &asn_PER_type_AMFSetID_constr_1, AMFSetID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/CGI.c b/e2sm/lib/CGI.c
new file mode 100644
index 0000000..a0f0d66
--- /dev/null
+++ b/e2sm/lib/CGI.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CGI.h"
+
+#include "NR-CGI.h"
+#include "EUTRA-CGI.h"
+static asn_oer_constraints_t asn_OER_type_CGI_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_CGI_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_CGI_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct CGI, choice.nR_CGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-CGI"
+		},
+	{ ATF_POINTER, 0, offsetof(struct CGI, choice.eUTRA_CGI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EUTRA_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-CGI"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_CGI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR-CGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA-CGI */
+};
+asn_CHOICE_specifics_t asn_SPC_CGI_specs_1 = {
+	sizeof(struct CGI),
+	offsetof(struct CGI, _asn_ctx),
+	offsetof(struct CGI, present),
+	sizeof(((struct CGI *)0)->present),
+	asn_MAP_CGI_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_CGI = {
+	"CGI",
+	"CGI",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_CGI_constr_1, &asn_PER_type_CGI_constr_1, CHOICE_constraint },
+	asn_MBR_CGI_1,
+	2,	/* Elements count */
+	&asn_SPC_CGI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/CSI-RS-Index.c b/e2sm/lib/CSI-RS-Index.c
deleted file mode 100644
index 327aeb9..0000000
--- a/e2sm/lib/CSI-RS-Index.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "CSI-RS-Index.h"
-
-int
-CSI_RS_Index_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 95)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_CSI_RS_Index_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..95) */,
-	-1};
-asn_per_constraints_t asn_PER_type_CSI_RS_Index_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  95 }	/* (0..95) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_CSI_RS_Index_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_CSI_RS_Index = {
-	"CSI-RS-Index",
-	"CSI-RS-Index",
-	&asn_OP_NativeInteger,
-	asn_DEF_CSI_RS_Index_tags_1,
-	sizeof(asn_DEF_CSI_RS_Index_tags_1)
-		/sizeof(asn_DEF_CSI_RS_Index_tags_1[0]), /* 1 */
-	asn_DEF_CSI_RS_Index_tags_1,	/* Same as above */
-	sizeof(asn_DEF_CSI_RS_Index_tags_1)
-		/sizeof(asn_DEF_CSI_RS_Index_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CSI_RS_Index_constr_1, &asn_PER_type_CSI_RS_Index_constr_1, CSI_RS_Index_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/CUUPMeasurement-Container.c b/e2sm/lib/CUUPMeasurement-Container.c
deleted file mode 100644
index 0e768d8..0000000
--- a/e2sm/lib/CUUPMeasurement-Container.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "CUUPMeasurement-Container.h"
-
-#include "PlmnID-Item.h"
-static int
-memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 12)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..12)) */};
-static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  12 }	/* (SIZE(1..12)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..12)) */};
-static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  12 }	/* (SIZE(1..12)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_plmnList_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PlmnID_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = {
-	sizeof(struct CUUPMeasurement_Container__plmnList),
-	offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_plmnList_2 = {
-	"plmnList",
-	"plmnList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_plmnList_tags_2,
-	sizeof(asn_DEF_plmnList_tags_2)
-		/sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */
-	asn_DEF_plmnList_tags_2,	/* Same as above */
-	sizeof(asn_DEF_plmnList_tags_2)
-		/sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */
-	{ &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_plmnList_2,
-	1,	/* Single element */
-	&asn_SPC_plmnList_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_plmnList_2,
-		0,
-		{ &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2,  memb_plmnList_constraint_1 },
-		0, 0, /* No default value */
-		"plmnList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = {
-	sizeof(struct CUUPMeasurement_Container),
-	offsetof(struct CUUPMeasurement_Container, _asn_ctx),
-	asn_MAP_CUUPMeasurement_Container_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_CUUPMeasurement_Container = {
-	"CUUPMeasurement-Container",
-	"CUUPMeasurement-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_CUUPMeasurement_Container_tags_1,
-	sizeof(asn_DEF_CUUPMeasurement_Container_tags_1)
-		/sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */
-	asn_DEF_CUUPMeasurement_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_CUUPMeasurement_Container_tags_1)
-		/sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_CUUPMeasurement_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_CUUPMeasurement_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/CallProcessBreakpoint-RANParameter-Item.c b/e2sm/lib/CallProcessBreakpoint-RANParameter-Item.c
new file mode 100644
index 0000000..4825bb7
--- /dev/null
+++ b/e2sm/lib/CallProcessBreakpoint-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CallProcessBreakpoint-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_CallProcessBreakpoint_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct CallProcessBreakpoint_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct CallProcessBreakpoint_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct CallProcessBreakpoint_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_CallProcessBreakpoint_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_CallProcessBreakpoint_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_CallProcessBreakpoint_RANParameter_Item_specs_1 = {
+	sizeof(struct CallProcessBreakpoint_RANParameter_Item),
+	offsetof(struct CallProcessBreakpoint_RANParameter_Item, _asn_ctx),
+	asn_MAP_CallProcessBreakpoint_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_CallProcessBreakpoint_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_CallProcessBreakpoint_RANParameter_Item = {
+	"CallProcessBreakpoint-RANParameter-Item",
+	"CallProcessBreakpoint-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_CallProcessBreakpoint_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_CallProcessBreakpoint_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_CallProcessBreakpoint_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/CellIdentification-RANParameter-Item.c b/e2sm/lib/CellIdentification-RANParameter-Item.c
new file mode 100644
index 0000000..8c6f787
--- /dev/null
+++ b/e2sm/lib/CellIdentification-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CellIdentification-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_CellIdentification_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct CellIdentification_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct CellIdentification_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct CellIdentification_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_CellIdentification_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_CellIdentification_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_CellIdentification_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_CellIdentification_RANParameter_Item_specs_1 = {
+	sizeof(struct CellIdentification_RANParameter_Item),
+	offsetof(struct CellIdentification_RANParameter_Item, _asn_ctx),
+	asn_MAP_CellIdentification_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_CellIdentification_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_CellIdentification_RANParameter_Item = {
+	"CellIdentification-RANParameter-Item",
+	"CellIdentification-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_CellIdentification_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_CellIdentification_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_CellIdentification_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_CellIdentification_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_CellIdentification_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_CellIdentification_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_CellIdentification_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_CellIdentification_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/CellObjectID.c b/e2sm/lib/CellObjectID.c
deleted file mode 100644
index b6da12b..0000000
--- a/e2sm/lib/CellObjectID.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "CellObjectID.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
-CellObjectID_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 <= 400)
-		 && !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_CellObjectID_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_CellObjectID_1_c2v(unsigned int code) {
-	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
-		return -1;
-	return permitted_alphabet_code2value_1[code];
-}
-/*
- * This type is implemented using PrintableString,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_CellObjectID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..MAX)) */};
-asn_per_constraints_t asn_PER_type_CellObjectID_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  0,  400 }	/* (SIZE(0..400,...)) */,
-	asn_PER_MAP_CellObjectID_1_v2c,	/* Value to PER code map */
-	asn_PER_MAP_CellObjectID_1_c2v	/* PER code to value map */
-};
-static const ber_tlv_tag_t asn_DEF_CellObjectID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_CellObjectID = {
-	"CellObjectID",
-	"CellObjectID",
-	&asn_OP_PrintableString,
-	asn_DEF_CellObjectID_tags_1,
-	sizeof(asn_DEF_CellObjectID_tags_1)
-		/sizeof(asn_DEF_CellObjectID_tags_1[0]), /* 1 */
-	asn_DEF_CellObjectID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_CellObjectID_tags_1)
-		/sizeof(asn_DEF_CellObjectID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_CellObjectID_constr_1, &asn_PER_type_CellObjectID_constr_1, CellObjectID_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/CellResourceReportListItem.c b/e2sm/lib/CellResourceReportListItem.c
deleted file mode 100644
index a7ce4ae..0000000
--- a/e2sm/lib/CellResourceReportListItem.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "CellResourceReportListItem.h"
-
-#include "ServedPlmnPerCellListItem.h"
-static int
-memb_dl_TotalofAvailablePRBs_constraint_1(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 <= 273)) {
-		/* 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_ul_TotalofAvailablePRBs_constraint_1(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 <= 273)) {
-		/* 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_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 12)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..12)) */};
-static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  12 }	/* (SIZE(1..12)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..273) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 9,  9,  0,  273 }	/* (0..273) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..273) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 9,  9,  0,  273 }	/* (0..273) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..12)) */};
-static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  12 }	/* (SIZE(1..12)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_ServedPlmnPerCellListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = {
-	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = {
-	sizeof(struct CellResourceReportListItem__servedPlmnPerCellList),
-	offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = {
-	"servedPlmnPerCellList",
-	"servedPlmnPerCellList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_servedPlmnPerCellList_tags_5,
-	sizeof(asn_DEF_servedPlmnPerCellList_tags_5)
-		/sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */
-	asn_DEF_servedPlmnPerCellList_tags_5,	/* Same as above */
-	sizeof(asn_DEF_servedPlmnPerCellList_tags_5)
-		/sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */
-	{ &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_servedPlmnPerCellList_5,
-	1,	/* Single element */
-	&asn_SPC_servedPlmnPerCellList_specs_5	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NRCGI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"nRCGI"
-		},
-	{ ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3,  memb_dl_TotalofAvailablePRBs_constraint_1 },
-		0, 0, /* No default value */
-		"dl-TotalofAvailablePRBs"
-		},
-	{ ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4,  memb_ul_TotalofAvailablePRBs_constraint_1 },
-		0, 0, /* No default value */
-		"ul-TotalofAvailablePRBs"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		0,
-		&asn_DEF_servedPlmnPerCellList_5,
-		0,
-		{ &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5,  memb_servedPlmnPerCellList_constraint_1 },
-		0, 0, /* No default value */
-		"servedPlmnPerCellList"
-		},
-};
-static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = {
-	sizeof(struct CellResourceReportListItem),
-	offsetof(struct CellResourceReportListItem, _asn_ctx),
-	asn_MAP_CellResourceReportListItem_tag2el_1,
-	4,	/* Count of tags in the map */
-	asn_MAP_CellResourceReportListItem_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	4,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = {
-	"CellResourceReportListItem",
-	"CellResourceReportListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_CellResourceReportListItem_tags_1,
-	sizeof(asn_DEF_CellResourceReportListItem_tags_1)
-		/sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */
-	asn_DEF_CellResourceReportListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_CellResourceReportListItem_tags_1)
-		/sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_CellResourceReportListItem_1,
-	4,	/* Elements count */
-	&asn_SPC_CellResourceReportListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ControlAction-RANParameter-Item.c b/e2sm/lib/ControlAction-RANParameter-Item.c
new file mode 100644
index 0000000..c9cca4f
--- /dev/null
+++ b/e2sm/lib/ControlAction-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ControlAction-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_ControlAction_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ControlAction_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct ControlAction_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct ControlAction_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_ControlAction_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_ControlAction_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ControlAction_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ControlAction_RANParameter_Item_specs_1 = {
+	sizeof(struct ControlAction_RANParameter_Item),
+	offsetof(struct ControlAction_RANParameter_Item, _asn_ctx),
+	asn_MAP_ControlAction_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_ControlAction_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ControlAction_RANParameter_Item = {
+	"ControlAction-RANParameter-Item",
+	"ControlAction-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ControlAction_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_ControlAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_ControlAction_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_ControlAction_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ControlAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_ControlAction_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_ControlAction_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_ControlAction_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ControlOutcome-RANParameter-Item.c b/e2sm/lib/ControlOutcome-RANParameter-Item.c
new file mode 100644
index 0000000..30a3ff8
--- /dev/null
+++ b/e2sm/lib/ControlOutcome-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ControlOutcome-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_ControlOutcome_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ControlOutcome_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct ControlOutcome_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct ControlOutcome_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_ControlOutcome_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_ControlOutcome_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ControlOutcome_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ControlOutcome_RANParameter_Item_specs_1 = {
+	sizeof(struct ControlOutcome_RANParameter_Item),
+	offsetof(struct ControlOutcome_RANParameter_Item, _asn_ctx),
+	asn_MAP_ControlOutcome_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_ControlOutcome_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ControlOutcome_RANParameter_Item = {
+	"ControlOutcome-RANParameter-Item",
+	"ControlOutcome-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_ControlOutcome_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_ControlOutcome_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_ControlOutcome_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_ControlOutcome_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ControlOutcome_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_ControlOutcome_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_ControlOutcome_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_ControlOutcome_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/CoreCPID.c b/e2sm/lib/CoreCPID.c
new file mode 100644
index 0000000..1a5c8d4
--- /dev/null
+++ b/e2sm/lib/CoreCPID.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "CoreCPID.h"
+
+#include "GUAMI.h"
+#include "GUMMEI.h"
+static asn_oer_constraints_t asn_OER_type_CoreCPID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_CoreCPID_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 */
+};
+static asn_TYPE_member_t asn_MBR_CoreCPID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct CoreCPID, choice.fiveGC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUAMI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGC"
+		},
+	{ ATF_POINTER, 0, offsetof(struct CoreCPID, choice.ePC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUMMEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ePC"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_CoreCPID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */
+};
+static asn_CHOICE_specifics_t asn_SPC_CoreCPID_specs_1 = {
+	sizeof(struct CoreCPID),
+	offsetof(struct CoreCPID, _asn_ctx),
+	offsetof(struct CoreCPID, present),
+	sizeof(((struct CoreCPID *)0)->present),
+	asn_MAP_CoreCPID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_CoreCPID = {
+	"CoreCPID",
+	"CoreCPID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_CoreCPID_constr_1, &asn_PER_type_CoreCPID_constr_1, CHOICE_constraint },
+	asn_MBR_CoreCPID_1,
+	2,	/* Elements count */
+	&asn_SPC_CoreCPID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/Criticality.c b/e2sm/lib/Criticality.c
deleted file mode 100644
index 7f57c68..0000000
--- a/e2sm/lib/Criticality.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "Criticality.h"
-
-/*
- * 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};
-static 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 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = {
-	{ 0,	6,	"reject" },
-	{ 1,	6,	"ignore" },
-	{ 2,	6,	"notify" }
-};
-static const unsigned int asn_MAP_Criticality_enum2value_1[] = {
-	1,	/* ignore(1) */
-	2,	/* notify(2) */
-	0	/* reject(0) */
-};
-static const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = {
-	asn_MAP_Criticality_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_Criticality_enum2value_1,	/* N => "tag"; sorted by N */
-	3,	/* Number of elements in the maps */
-	0,	/* Enumeration is not extensible */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_Criticality = {
-	"Criticality",
-	"Criticality",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_Criticality_tags_1,
-	sizeof(asn_DEF_Criticality_tags_1)
-		/sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */
-	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, 0,	/* Defined elsewhere */
-	&asn_SPC_Criticality_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E-UTRA-ARFCN.c b/e2sm/lib/E-UTRA-ARFCN.c
new file mode 100644
index 0000000..6fa8a7e
--- /dev/null
+++ b/e2sm/lib/E-UTRA-ARFCN.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E-UTRA-ARFCN.h"
+
+int
+E_UTRA_ARFCN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_E_UTRA_ARFCN_constr_1 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+asn_per_constraints_t asn_PER_type_E_UTRA_ARFCN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E_UTRA_ARFCN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E_UTRA_ARFCN = {
+	"E-UTRA-ARFCN",
+	"E-UTRA-ARFCN",
+	&asn_OP_NativeInteger,
+	asn_DEF_E_UTRA_ARFCN_tags_1,
+	sizeof(asn_DEF_E_UTRA_ARFCN_tags_1)
+		/sizeof(asn_DEF_E_UTRA_ARFCN_tags_1[0]), /* 1 */
+	asn_DEF_E_UTRA_ARFCN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E_UTRA_ARFCN_tags_1)
+		/sizeof(asn_DEF_E_UTRA_ARFCN_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E_UTRA_ARFCN_constr_1, &asn_PER_type_E_UTRA_ARFCN_constr_1, E_UTRA_ARFCN_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/E-UTRA-PCI.c b/e2sm/lib/E-UTRA-PCI.c
new file mode 100644
index 0000000..4d9f07d
--- /dev/null
+++ b/e2sm/lib/E-UTRA-PCI.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E-UTRA-PCI.h"
+
+int
+E_UTRA_PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 503)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_E_UTRA_PCI_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_E_UTRA_PCI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  0,  503 }	/* (0..503,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E_UTRA_PCI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E_UTRA_PCI = {
+	"E-UTRA-PCI",
+	"E-UTRA-PCI",
+	&asn_OP_NativeInteger,
+	asn_DEF_E_UTRA_PCI_tags_1,
+	sizeof(asn_DEF_E_UTRA_PCI_tags_1)
+		/sizeof(asn_DEF_E_UTRA_PCI_tags_1[0]), /* 1 */
+	asn_DEF_E_UTRA_PCI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E_UTRA_PCI_tags_1)
+		/sizeof(asn_DEF_E_UTRA_PCI_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E_UTRA_PCI_constr_1, &asn_PER_type_E_UTRA_PCI_constr_1, E_UTRA_PCI_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/E-UTRA-TAC.c b/e2sm/lib/E-UTRA-TAC.c
new file mode 100644
index 0000000..55ad809
--- /dev/null
+++ b/e2sm/lib/E-UTRA-TAC.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E-UTRA-TAC.h"
+
+int
+E_UTRA_TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_E_UTRA_TAC_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	2	/* (SIZE(2..2)) */};
+asn_per_constraints_t asn_PER_type_E_UTRA_TAC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E_UTRA_TAC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E_UTRA_TAC = {
+	"E-UTRA-TAC",
+	"E-UTRA-TAC",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E_UTRA_TAC_tags_1,
+	sizeof(asn_DEF_E_UTRA_TAC_tags_1)
+		/sizeof(asn_DEF_E_UTRA_TAC_tags_1[0]), /* 1 */
+	asn_DEF_E_UTRA_TAC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E_UTRA_TAC_tags_1)
+		/sizeof(asn_DEF_E_UTRA_TAC_tags_1[0]), /* 1 */
+	{ &asn_OER_type_E_UTRA_TAC_constr_1, &asn_PER_type_E_UTRA_TAC_constr_1, E_UTRA_TAC_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c b/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c
deleted file mode 100644
index 5d94a4d..0000000
--- a/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-ActionDefinition-Format1.h"
-
-asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format1_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format1, cellObjID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_CellObjectID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cellObjID"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format1, measInfoList),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasurementInfoList,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measInfoList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellObjID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measInfoList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format1_specs_1 = {
-	sizeof(struct E2SM_KPM_ActionDefinition_Format1),
-	offsetof(struct E2SM_KPM_ActionDefinition_Format1, _asn_ctx),
-	asn_MAP_E2SM_KPM_ActionDefinition_Format1_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_E2SM_KPM_ActionDefinition_Format1 = {
-	"E2SM-KPM-ActionDefinition-Format1",
-	"E2SM-KPM-ActionDefinition-Format1",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_ActionDefinition_Format1_1,
-	2,	/* Elements count */
-	&asn_SPC_E2SM_KPM_ActionDefinition_Format1_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition.c b/e2sm/lib/E2SM-KPM-ActionDefinition.c
deleted file mode 100644
index 1566aa5..0000000
--- a/e2sm/lib/E2SM-KPM-ActionDefinition.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-ActionDefinition.h"
-
-#include "E2SM-KPM-ActionDefinition-Format1.h"
-static asn_oer_constraints_t asn_OER_type_actionDefinition_formats_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_actionDefinition_formats_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_actionDefinition_formats_3[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, choice.actionDefinition_Format1),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_E2SM_KPM_ActionDefinition_Format1,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"actionDefinition-Format1"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_actionDefinition_formats_tag2el_3[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* actionDefinition-Format1 */
-};
-static asn_CHOICE_specifics_t asn_SPC_actionDefinition_formats_specs_3 = {
-	sizeof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats),
-	offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, _asn_ctx),
-	offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, present),
-	sizeof(((struct E2SM_KPM_ActionDefinition__actionDefinition_formats *)0)->present),
-	asn_MAP_actionDefinition_formats_tag2el_3,
-	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_actionDefinition_formats_3 = {
-	"actionDefinition-formats",
-	"actionDefinition-formats",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_actionDefinition_formats_constr_3, &asn_PER_type_actionDefinition_formats_constr_3, CHOICE_constraint },
-	asn_MBR_actionDefinition_formats_3,
-	1,	/* Elements count */
-	&asn_SPC_actionDefinition_formats_specs_3	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_ReportStyle_Type),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ReportStyle-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, actionDefinition_formats),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_actionDefinition_formats_3,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"actionDefinition-formats"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionDefinition-formats */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = {
-	sizeof(struct E2SM_KPM_ActionDefinition),
-	offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx),
-	asn_MAP_E2SM_KPM_ActionDefinition_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_E2SM_KPM_ActionDefinition = {
-	"E2SM-KPM-ActionDefinition",
-	"E2SM-KPM-ActionDefinition",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_ActionDefinition_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_ActionDefinition_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_ActionDefinition_1,
-	2,	/* Elements count */
-	&asn_SPC_E2SM_KPM_ActionDefinition_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c
deleted file mode 100644
index 314e7f6..0000000
--- a/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-EventTriggerDefinition-Format1.h"
-
-#include "Trigger-ConditionIE-Item.h"
-static int
-memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 15)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..15)) */};
-static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  15 }	/* (SIZE(1..15)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..15)) */};
-static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 4,  4,  1,  15 }	/* (SIZE(1..15)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_Trigger_ConditionIE_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = {
-	sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List),
-	offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = {
-	"policyTest-List",
-	"policyTest-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_policyTest_List_tags_2,
-	sizeof(asn_DEF_policyTest_List_tags_2)
-		/sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */
-	asn_DEF_policyTest_List_tags_2,	/* Same as above */
-	sizeof(asn_DEF_policyTest_List_tags_2)
-		/sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */
-	{ &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_policyTest_List_2,
-	1,	/* Single element */
-	&asn_SPC_policyTest_List_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = {
-	{ ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_policyTest_List_2,
-		0,
-		{ &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2,  memb_policyTest_List_constraint_1 },
-		0, 0, /* No default value */
-		"policyTest-List"
-		},
-};
-static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 };
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */
-};
-asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = {
-	sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1),
-	offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx),
-	asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1,
-	1,	/* Count of tags in the map */
-	asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = {
-	"E2SM-KPM-EventTriggerDefinition-Format1",
-	"E2SM-KPM-EventTriggerDefinition-Format1",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1,
-	1,	/* Elements count */
-	&asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c b/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c
deleted file mode 100644
index 144313d..0000000
--- a/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-EventTriggerDefinition.h"
-
-#include "E2SM-KPM-EventTriggerDefinition-Format1.h"
-static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eventDefinition-Format1"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */
-};
-static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = {
-	sizeof(struct E2SM_KPM_EventTriggerDefinition),
-	offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx),
-	offsetof(struct E2SM_KPM_EventTriggerDefinition, present),
-	sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present),
-	asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0,
-	1	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = {
-	"E2SM-KPM-EventTriggerDefinition",
-	"E2SM-KPM-EventTriggerDefinition",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint },
-	asn_MBR_E2SM_KPM_EventTriggerDefinition_1,
-	1,	/* Elements count */
-	&asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c b/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c
deleted file mode 100644
index be23bda..0000000
--- a/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-IndicationHeader-Format1.h"
-
-asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader_Format1, collectionStartTime),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_TimeStamp,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"collectionStartTime"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalE2node_ID),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_GlobalE2node_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"id-GlobalE2node-ID"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* collectionStartTime */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* id-GlobalE2node-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = {
-	sizeof(struct E2SM_KPM_IndicationHeader_Format1),
-	offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx),
-	asn_MAP_E2SM_KPM_IndicationHeader_Format1_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_E2SM_KPM_IndicationHeader_Format1 = {
-	"E2SM-KPM-IndicationHeader-Format1",
-	"E2SM-KPM-IndicationHeader-Format1",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_IndicationHeader_Format1_1,
-	2,	/* Elements count */
-	&asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-IndicationHeader.c b/e2sm/lib/E2SM-KPM-IndicationHeader.c
deleted file mode 100644
index 40f09a3..0000000
--- a/e2sm/lib/E2SM-KPM-IndicationHeader.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-IndicationHeader.h"
-
-#include "E2SM-KPM-IndicationHeader-Format1.h"
-static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_E2SM_KPM_IndicationHeader_Format1,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"indicationHeader-Format1"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */
-};
-static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = {
-	sizeof(struct E2SM_KPM_IndicationHeader),
-	offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx),
-	offsetof(struct E2SM_KPM_IndicationHeader, present),
-	sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present),
-	asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0,
-	1	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = {
-	"E2SM-KPM-IndicationHeader",
-	"E2SM-KPM-IndicationHeader",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint },
-	asn_MBR_E2SM_KPM_IndicationHeader_1,
-	1,	/* Elements count */
-	&asn_SPC_E2SM_KPM_IndicationHeader_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c b/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c
deleted file mode 100644
index ea21e14..0000000
--- a/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-IndicationMessage-Format1.h"
-
-#include "PM-Containers-Item.h"
-#include "PM-Info-Item.h"
-#include "PerUE-PM-Item.h"
-static int
-memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 8)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static int
-memb_list_of_PM_Information_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 2147483647)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static int
-memb_list_of_matched_UEs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 65535)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..8)) */};
-static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_type_list_of_PM_Information_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..2147483647)) */};
-static asn_per_constraints_t asn_PER_type_list_of_PM_Information_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 31, -1,  1,  2147483647 }	/* (SIZE(1..2147483647)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_type_list_of_matched_UEs_constr_7 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..65535)) */};
-static asn_per_constraints_t asn_PER_type_list_of_matched_UEs_constr_7 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..8)) */};
-static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_list_of_PM_Information_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..2147483647)) */};
-static asn_per_constraints_t asn_PER_memb_list_of_PM_Information_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 31, -1,  1,  2147483647 }	/* (SIZE(1..2147483647)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_list_of_matched_UEs_constr_7 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..65535)) */};
-static asn_per_constraints_t asn_PER_memb_list_of_matched_UEs_constr_7 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PM_Containers_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = {
-	sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers),
-	offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = {
-	"pm-Containers",
-	"pm-Containers",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_pm_Containers_tags_2,
-	sizeof(asn_DEF_pm_Containers_tags_2)
-		/sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */
-	asn_DEF_pm_Containers_tags_2,	/* Same as above */
-	sizeof(asn_DEF_pm_Containers_tags_2)
-		/sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */
-	{ &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_pm_Containers_2,
-	1,	/* Single element */
-	&asn_SPC_pm_Containers_specs_2	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_list_of_PM_Information_5[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PM_Info_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_list_of_PM_Information_tags_5[] = {
-	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_list_of_PM_Information_specs_5 = {
-	sizeof(struct E2SM_KPM_IndicationMessage_Format1__list_of_PM_Information),
-	offsetof(struct E2SM_KPM_IndicationMessage_Format1__list_of_PM_Information, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_list_of_PM_Information_5 = {
-	"list-of-PM-Information",
-	"list-of-PM-Information",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_list_of_PM_Information_tags_5,
-	sizeof(asn_DEF_list_of_PM_Information_tags_5)
-		/sizeof(asn_DEF_list_of_PM_Information_tags_5[0]) - 1, /* 1 */
-	asn_DEF_list_of_PM_Information_tags_5,	/* Same as above */
-	sizeof(asn_DEF_list_of_PM_Information_tags_5)
-		/sizeof(asn_DEF_list_of_PM_Information_tags_5[0]), /* 2 */
-	{ &asn_OER_type_list_of_PM_Information_constr_5, &asn_PER_type_list_of_PM_Information_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_list_of_PM_Information_5,
-	1,	/* Single element */
-	&asn_SPC_list_of_PM_Information_specs_5	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_list_of_matched_UEs_7[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PerUE_PM_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_list_of_matched_UEs_tags_7[] = {
-	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_list_of_matched_UEs_specs_7 = {
-	sizeof(struct E2SM_KPM_IndicationMessage_Format1__list_of_matched_UEs),
-	offsetof(struct E2SM_KPM_IndicationMessage_Format1__list_of_matched_UEs, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_list_of_matched_UEs_7 = {
-	"list-of-matched-UEs",
-	"list-of-matched-UEs",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_list_of_matched_UEs_tags_7,
-	sizeof(asn_DEF_list_of_matched_UEs_tags_7)
-		/sizeof(asn_DEF_list_of_matched_UEs_tags_7[0]) - 1, /* 1 */
-	asn_DEF_list_of_matched_UEs_tags_7,	/* Same as above */
-	sizeof(asn_DEF_list_of_matched_UEs_tags_7)
-		/sizeof(asn_DEF_list_of_matched_UEs_tags_7[0]), /* 2 */
-	{ &asn_OER_type_list_of_matched_UEs_constr_7, &asn_PER_type_list_of_matched_UEs_constr_7, SEQUENCE_OF_constraint },
-	asn_MBR_list_of_matched_UEs_7,
-	1,	/* Single element */
-	&asn_SPC_list_of_matched_UEs_specs_7	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_pm_Containers_2,
-		0,
-		{ &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2,  memb_pm_Containers_constraint_1 },
-		0, 0, /* No default value */
-		"pm-Containers"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, cellObjectID),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_CellObjectID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cellObjectID"
-		},
-	{ ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationMessage_Format1, list_of_PM_Information),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		0,
-		&asn_DEF_list_of_PM_Information_5,
-		0,
-		{ &asn_OER_memb_list_of_PM_Information_constr_5, &asn_PER_memb_list_of_PM_Information_constr_5,  memb_list_of_PM_Information_constraint_1 },
-		0, 0, /* No default value */
-		"list-of-PM-Information"
-		},
-	{ ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationMessage_Format1, list_of_matched_UEs),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		0,
-		&asn_DEF_list_of_matched_UEs_7,
-		0,
-		{ &asn_OER_memb_list_of_matched_UEs_constr_7, &asn_PER_memb_list_of_matched_UEs_constr_7,  memb_list_of_matched_UEs_constraint_1 },
-		0, 0, /* No default value */
-		"list-of-matched-UEs"
-		},
-};
-static const int asn_MAP_E2SM_KPM_IndicationMessage_Format1_oms_1[] = { 2, 3 };
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pm-Containers */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellObjectID */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* list-of-PM-Information */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* list-of-matched-UEs */
-};
-asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = {
-	sizeof(struct E2SM_KPM_IndicationMessage_Format1),
-	offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx),
-	asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1,
-	4,	/* Count of tags in the map */
-	asn_MAP_E2SM_KPM_IndicationMessage_Format1_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	4,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = {
-	"E2SM-KPM-IndicationMessage-Format1",
-	"E2SM-KPM-IndicationMessage-Format1",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_IndicationMessage_Format1_1,
-	4,	/* Elements count */
-	&asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-IndicationMessage.c b/e2sm/lib/E2SM-KPM-IndicationMessage.c
deleted file mode 100644
index 0b1e701..0000000
--- a/e2sm/lib/E2SM-KPM-IndicationMessage.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-IndicationMessage.h"
-
-#include "E2SM-KPM-IndicationMessage-Format1.h"
-static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationMessage_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationMessage_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationMessage, choice.indicationMessage_Format1),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_E2SM_KPM_IndicationMessage_Format1,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"indicationMessage-Format1"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */
-};
-static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = {
-	sizeof(struct E2SM_KPM_IndicationMessage),
-	offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx),
-	offsetof(struct E2SM_KPM_IndicationMessage, present),
-	sizeof(((struct E2SM_KPM_IndicationMessage *)0)->present),
-	asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0,
-	1	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = {
-	"E2SM-KPM-IndicationMessage",
-	"E2SM-KPM-IndicationMessage",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_E2SM_KPM_IndicationMessage_constr_1, &asn_PER_type_E2SM_KPM_IndicationMessage_constr_1, CHOICE_constraint },
-	asn_MBR_E2SM_KPM_IndicationMessage_1,
-	1,	/* Elements count */
-	&asn_SPC_E2SM_KPM_IndicationMessage_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-KPM-RANFunctionDefinition.c b/e2sm/lib/E2SM-KPM-RANFunctionDefinition.c
deleted file mode 100644
index d87fe15..0000000
--- a/e2sm/lib/E2SM-KPM-RANFunctionDefinition.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "E2SM-KPM-RANFunctionDefinition.h"
-
-#include "RIC-EventTriggerStyle-Item.h"
-#include "RIC-ReportStyle-Item.h"
-static int
-memb_ric_EventTriggerStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 63)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static int
-memb_ric_ReportStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 63)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_3[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RIC_EventTriggerStyle_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_3 = {
-	sizeof(struct E2SM_KPM_RANFunctionDefinition__ric_EventTriggerStyle_List),
-	offsetof(struct E2SM_KPM_RANFunctionDefinition__ric_EventTriggerStyle_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_3 = {
-	"ric-EventTriggerStyle-List",
-	"ric-EventTriggerStyle-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ric_EventTriggerStyle_List_tags_3,
-	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3)
-		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]) - 1, /* 1 */
-	asn_DEF_ric_EventTriggerStyle_List_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3)
-		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]), /* 2 */
-	{ &asn_OER_type_ric_EventTriggerStyle_List_constr_3, &asn_PER_type_ric_EventTriggerStyle_List_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_ric_EventTriggerStyle_List_3,
-	1,	/* Single element */
-	&asn_SPC_ric_EventTriggerStyle_List_specs_3	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_5[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RIC_ReportStyle_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_5[] = {
-	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_5 = {
-	sizeof(struct E2SM_KPM_RANFunctionDefinition__ric_ReportStyle_List),
-	offsetof(struct E2SM_KPM_RANFunctionDefinition__ric_ReportStyle_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_5 = {
-	"ric-ReportStyle-List",
-	"ric-ReportStyle-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ric_ReportStyle_List_tags_5,
-	sizeof(asn_DEF_ric_ReportStyle_List_tags_5)
-		/sizeof(asn_DEF_ric_ReportStyle_List_tags_5[0]) - 1, /* 1 */
-	asn_DEF_ric_ReportStyle_List_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ric_ReportStyle_List_tags_5)
-		/sizeof(asn_DEF_ric_ReportStyle_List_tags_5[0]), /* 2 */
-	{ &asn_OER_type_ric_ReportStyle_List_constr_5, &asn_PER_type_ric_ReportStyle_List_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_ric_ReportStyle_List_5,
-	1,	/* Single element */
-	&asn_SPC_ric_ReportStyle_List_specs_5	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANFunctionDefinition_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANFunctionDefinition, ranFunction_Name),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANfunction_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranFunction-Name"
-		},
-	{ ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANFunctionDefinition, ric_EventTriggerStyle_List),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_ric_EventTriggerStyle_List_3,
-		0,
-		{ &asn_OER_memb_ric_EventTriggerStyle_List_constr_3, &asn_PER_memb_ric_EventTriggerStyle_List_constr_3,  memb_ric_EventTriggerStyle_List_constraint_1 },
-		0, 0, /* No default value */
-		"ric-EventTriggerStyle-List"
-		},
-	{ ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANFunctionDefinition, ric_ReportStyle_List),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		0,
-		&asn_DEF_ric_ReportStyle_List_5,
-		0,
-		{ &asn_OER_memb_ric_ReportStyle_List_constr_5, &asn_PER_memb_ric_ReportStyle_List_constr_5,  memb_ric_ReportStyle_List_constraint_1 },
-		0, 0, /* No default value */
-		"ric-ReportStyle-List"
-		},
-};
-static const int asn_MAP_E2SM_KPM_RANFunctionDefinition_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANFunctionDefinition_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-List */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-ReportStyle-List */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANFunctionDefinition_specs_1 = {
-	sizeof(struct E2SM_KPM_RANFunctionDefinition),
-	offsetof(struct E2SM_KPM_RANFunctionDefinition, _asn_ctx),
-	asn_MAP_E2SM_KPM_RANFunctionDefinition_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_E2SM_KPM_RANFunctionDefinition_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANFunctionDefinition = {
-	"E2SM-KPM-RANFunctionDefinition",
-	"E2SM-KPM-RANFunctionDefinition",
-	&asn_OP_SEQUENCE,
-	asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1,
-	sizeof(asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1[0]), /* 1 */
-	asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1,	/* Same as above */
-	sizeof(asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1)
-		/sizeof(asn_DEF_E2SM_KPM_RANFunctionDefinition_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_E2SM_KPM_RANFunctionDefinition_1,
-	3,	/* Elements count */
-	&asn_SPC_E2SM_KPM_RANFunctionDefinition_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format1-Item.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format1-Item.c
new file mode 100644
index 0000000..ae6439a
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format1-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format1-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format1_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format1_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format1_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format1_Item_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format1_Item),
+	offsetof(struct E2SM_RC_ActionDefinition_Format1_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format1_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_E2SM_RC_ActionDefinition_Format1_Item = {
+	"E2SM-RC-ActionDefinition-Format1-Item",
+	"E2SM-RC-ActionDefinition-Format1-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format1_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format1_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format1.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format1.c
new file mode 100644
index 0000000..cfe2b5c
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format1.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format1.h"
+
+#include "E2SM-RC-ActionDefinition-Format1-Item.h"
+static int
+memb_ranP_ToBeReported_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_ToBeReported_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_ToBeReported_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranP_ToBeReported_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_ToBeReported_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranP_ToBeReported_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_ActionDefinition_Format1_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_ToBeReported_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_ToBeReported_List_specs_2 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format1__ranP_ToBeReported_List),
+	offsetof(struct E2SM_RC_ActionDefinition_Format1__ranP_ToBeReported_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_ToBeReported_List_2 = {
+	"ranP-ToBeReported-List",
+	"ranP-ToBeReported-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_ToBeReported_List_tags_2,
+	sizeof(asn_DEF_ranP_ToBeReported_List_tags_2)
+		/sizeof(asn_DEF_ranP_ToBeReported_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_ToBeReported_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_ToBeReported_List_tags_2)
+		/sizeof(asn_DEF_ranP_ToBeReported_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_ToBeReported_List_constr_2, &asn_PER_type_ranP_ToBeReported_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_ToBeReported_List_2,
+	1,	/* Single element */
+	&asn_SPC_ranP_ToBeReported_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format1, ranP_ToBeReported_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranP_ToBeReported_List_2,
+		0,
+		{ &asn_OER_memb_ranP_ToBeReported_List_constr_2, &asn_PER_memb_ranP_ToBeReported_List_constr_2,  memb_ranP_ToBeReported_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-ToBeReported-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranP-ToBeReported-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format1),
+	offsetof(struct E2SM_RC_ActionDefinition_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format1_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_E2SM_RC_ActionDefinition_Format1 = {
+	"E2SM-RC-ActionDefinition-Format1",
+	"E2SM-RC-ActionDefinition-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format2-Item.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format2-Item.c
new file mode 100644
index 0000000..3b48569
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format2-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format2-Item.h"
+
+#include "RANParameter-Testing.h"
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format2_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format2_Item, ric_PolicyAction),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_PolicyAction,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyAction"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_ActionDefinition_Format2_Item, ric_PolicyConditionDefinition),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyConditionDefinition"
+		},
+};
+static const int asn_MAP_E2SM_RC_ActionDefinition_Format2_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format2_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-PolicyAction */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-PolicyConditionDefinition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format2_Item_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format2_Item),
+	offsetof(struct E2SM_RC_ActionDefinition_Format2_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format2_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_ActionDefinition_Format2_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ActionDefinition_Format2_Item = {
+	"E2SM-RC-ActionDefinition-Format2-Item",
+	"E2SM-RC-ActionDefinition-Format2-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format2_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format2_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format2.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format2.c
new file mode 100644
index 0000000..f15018d
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format2.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format2.h"
+
+#include "E2SM-RC-ActionDefinition-Format2-Item.h"
+static int
+memb_ric_PolicyConditions_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_PolicyConditions_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ric_PolicyConditions_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_PolicyConditions_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ric_PolicyConditions_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_PolicyConditions_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_ActionDefinition_Format2_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_PolicyConditions_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_PolicyConditions_List_specs_2 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format2__ric_PolicyConditions_List),
+	offsetof(struct E2SM_RC_ActionDefinition_Format2__ric_PolicyConditions_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_PolicyConditions_List_2 = {
+	"ric-PolicyConditions-List",
+	"ric-PolicyConditions-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_PolicyConditions_List_tags_2,
+	sizeof(asn_DEF_ric_PolicyConditions_List_tags_2)
+		/sizeof(asn_DEF_ric_PolicyConditions_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_PolicyConditions_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_PolicyConditions_List_tags_2)
+		/sizeof(asn_DEF_ric_PolicyConditions_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_PolicyConditions_List_constr_2, &asn_PER_type_ric_PolicyConditions_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_PolicyConditions_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_PolicyConditions_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format2, ric_PolicyConditions_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_PolicyConditions_List_2,
+		0,
+		{ &asn_OER_memb_ric_PolicyConditions_List_constr_2, &asn_PER_memb_ric_PolicyConditions_List_constr_2,  memb_ric_PolicyConditions_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-PolicyConditions-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-PolicyConditions-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format2_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format2),
+	offsetof(struct E2SM_RC_ActionDefinition_Format2, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format2_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_E2SM_RC_ActionDefinition_Format2 = {
+	"E2SM-RC-ActionDefinition-Format2",
+	"E2SM-RC-ActionDefinition-Format2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format2_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format2_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format3-Item.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format3-Item.c
new file mode 100644
index 0000000..1390c44
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format3-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format3-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format3_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format3_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format3_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format3_Item_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format3_Item),
+	offsetof(struct E2SM_RC_ActionDefinition_Format3_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format3_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_E2SM_RC_ActionDefinition_Format3_Item = {
+	"E2SM-RC-ActionDefinition-Format3-Item",
+	"E2SM-RC-ActionDefinition-Format3-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format3_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format3_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition-Format3.c b/e2sm/lib/E2SM-RC-ActionDefinition-Format3.c
new file mode 100644
index 0000000..1413d05
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition-Format3.c
@@ -0,0 +1,153 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition-Format3.h"
+
+#include "UEID.h"
+#include "E2SM-RC-ActionDefinition-Format3-Item.h"
+static int
+memb_ranP_InsertIndication_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_InsertIndication_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_InsertIndication_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranP_InsertIndication_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_InsertIndication_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranP_InsertIndication_List_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_ActionDefinition_Format3_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_InsertIndication_List_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_InsertIndication_List_specs_3 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format3__ranP_InsertIndication_List),
+	offsetof(struct E2SM_RC_ActionDefinition_Format3__ranP_InsertIndication_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_InsertIndication_List_3 = {
+	"ranP-InsertIndication-List",
+	"ranP-InsertIndication-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_InsertIndication_List_tags_3,
+	sizeof(asn_DEF_ranP_InsertIndication_List_tags_3)
+		/sizeof(asn_DEF_ranP_InsertIndication_List_tags_3[0]) - 1, /* 1 */
+	asn_DEF_ranP_InsertIndication_List_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ranP_InsertIndication_List_tags_3)
+		/sizeof(asn_DEF_ranP_InsertIndication_List_tags_3[0]), /* 2 */
+	{ &asn_OER_type_ranP_InsertIndication_List_constr_3, &asn_PER_type_ranP_InsertIndication_List_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_InsertIndication_List_3,
+	1,	/* Single element */
+	&asn_SPC_ranP_InsertIndication_List_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_Format3_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format3, ric_InsertIndication_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_InsertIndication_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertIndication-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition_Format3, ranP_InsertIndication_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_ranP_InsertIndication_List_3,
+		0,
+		{ &asn_OER_memb_ranP_InsertIndication_List_constr_3, &asn_PER_memb_ranP_InsertIndication_List_constr_3,  memb_ranP_InsertIndication_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-InsertIndication-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_ActionDefinition_Format3, ueID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueID"
+		},
+};
+static const int asn_MAP_E2SM_RC_ActionDefinition_Format3_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_Format3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-InsertIndication-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranP-InsertIndication-List */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ueID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_Format3_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition_Format3),
+	offsetof(struct E2SM_RC_ActionDefinition_Format3, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_Format3_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_ActionDefinition_Format3_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ActionDefinition_Format3 = {
+	"E2SM-RC-ActionDefinition-Format3",
+	"E2SM-RC-ActionDefinition-Format3",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_Format3_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_Format3_1,
+	3,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_Format3_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ActionDefinition.c b/e2sm/lib/E2SM-RC-ActionDefinition.c
new file mode 100644
index 0000000..a8e2a57
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ActionDefinition.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ActionDefinition.h"
+
+#include "E2SM-RC-ActionDefinition-Format1.h"
+#include "E2SM-RC-ActionDefinition-Format2.h"
+#include "E2SM-RC-ActionDefinition-Format3.h"
+static asn_oer_constraints_t asn_OER_type_ric_actionDefinition_formats_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_actionDefinition_formats_constr_3 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 asn_TYPE_member_t asn_MBR_ric_actionDefinition_formats_3[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats, choice.actionDefinition_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_ActionDefinition_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"actionDefinition-Format1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats, choice.actionDefinition_Format2),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_ActionDefinition_Format2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"actionDefinition-Format2"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats, choice.actionDefinition_Format3),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_ActionDefinition_Format3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"actionDefinition-Format3"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_actionDefinition_formats_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* actionDefinition-Format1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* actionDefinition-Format2 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* actionDefinition-Format3 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_actionDefinition_formats_specs_3 = {
+	sizeof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats),
+	offsetof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats, present),
+	sizeof(((struct E2SM_RC_ActionDefinition__ric_actionDefinition_formats *)0)->present),
+	asn_MAP_ric_actionDefinition_formats_tag2el_3,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_actionDefinition_formats_3 = {
+	"ric-actionDefinition-formats",
+	"ric-actionDefinition-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_actionDefinition_formats_constr_3, &asn_PER_type_ric_actionDefinition_formats_constr_3, CHOICE_constraint },
+	asn_MBR_ric_actionDefinition_formats_3,
+	3,	/* Elements count */
+	&asn_SPC_ric_actionDefinition_formats_specs_3	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_ActionDefinition_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition, ric_Style_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-Style-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ActionDefinition, ric_actionDefinition_formats),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_actionDefinition_formats_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-actionDefinition-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ActionDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ActionDefinition_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-actionDefinition-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ActionDefinition_specs_1 = {
+	sizeof(struct E2SM_RC_ActionDefinition),
+	offsetof(struct E2SM_RC_ActionDefinition, _asn_ctx),
+	asn_MAP_E2SM_RC_ActionDefinition_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_E2SM_RC_ActionDefinition = {
+	"E2SM-RC-ActionDefinition",
+	"E2SM-RC-ActionDefinition",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ActionDefinition_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ActionDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ActionDefinition_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ActionDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ActionDefinition_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_ActionDefinition_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-CallProcessID-Format1.c b/e2sm/lib/E2SM-RC-CallProcessID-Format1.c
new file mode 100644
index 0000000..d3a25c1
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-CallProcessID-Format1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-CallProcessID-Format1.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_CallProcessID_Format1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_CallProcessID_Format1, ric_callProcess_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RAN_CallProcess_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-callProcess-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_CallProcessID_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-callProcess-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_CallProcessID_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_CallProcessID_Format1),
+	offsetof(struct E2SM_RC_CallProcessID_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_CallProcessID_Format1_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_E2SM_RC_CallProcessID_Format1 = {
+	"E2SM-RC-CallProcessID-Format1",
+	"E2SM-RC-CallProcessID-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_CallProcessID_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_CallProcessID_Format1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_CallProcessID_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-CallProcessID.c b/e2sm/lib/E2SM-RC-CallProcessID.c
new file mode 100644
index 0000000..f92d4aa
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-CallProcessID.c
@@ -0,0 +1,98 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-CallProcessID.h"
+
+#include "E2SM-RC-CallProcessID-Format1.h"
+static asn_oer_constraints_t asn_OER_type_ric_callProcessID_formats_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_callProcessID_formats_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_callProcessID_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_CallProcessID__ric_callProcessID_formats, choice.callProcessID_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_CallProcessID_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcessID-Format1"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_callProcessID_formats_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* callProcessID-Format1 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_callProcessID_formats_specs_2 = {
+	sizeof(struct E2SM_RC_CallProcessID__ric_callProcessID_formats),
+	offsetof(struct E2SM_RC_CallProcessID__ric_callProcessID_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_CallProcessID__ric_callProcessID_formats, present),
+	sizeof(((struct E2SM_RC_CallProcessID__ric_callProcessID_formats *)0)->present),
+	asn_MAP_ric_callProcessID_formats_tag2el_2,
+	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_ric_callProcessID_formats_2 = {
+	"ric-callProcessID-formats",
+	"ric-callProcessID-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_callProcessID_formats_constr_2, &asn_PER_type_ric_callProcessID_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_callProcessID_formats_2,
+	1,	/* Elements count */
+	&asn_SPC_ric_callProcessID_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_CallProcessID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_CallProcessID, ric_callProcessID_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_callProcessID_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-callProcessID-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_CallProcessID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_CallProcessID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-callProcessID-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_CallProcessID_specs_1 = {
+	sizeof(struct E2SM_RC_CallProcessID),
+	offsetof(struct E2SM_RC_CallProcessID, _asn_ctx),
+	asn_MAP_E2SM_RC_CallProcessID_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_E2SM_RC_CallProcessID = {
+	"E2SM-RC-CallProcessID",
+	"E2SM-RC-CallProcessID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_CallProcessID_tags_1,
+	sizeof(asn_DEF_E2SM_RC_CallProcessID_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_CallProcessID_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_CallProcessID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_CallProcessID_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_CallProcessID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_CallProcessID_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_CallProcessID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ControlHeader-Format1.c b/e2sm/lib/E2SM-RC-ControlHeader-Format1.c
index e953ec7..7388ce6 100644
--- a/e2sm/lib/E2SM-RC-ControlHeader-Format1.c
+++ b/e2sm/lib/E2SM-RC-ControlHeader-Format1.c
@@ -1,30 +1,81 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2SM-RC-ControlHeader-Format1.h"
 
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_ric_ControlDecision_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_ControlDecision_constr_5 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_ric_ControlDecision_value2enum_5[] = {
+	{ 0,	6,	"accept" },
+	{ 1,	6,	"reject" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_ric_ControlDecision_enum2value_5[] = {
+	0,	/* accept(0) */
+	1	/* reject(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_ric_ControlDecision_specs_5 = {
+	asn_MAP_ric_ControlDecision_value2enum_5,	/* "tag" => N; sorted by tag */
+	asn_MAP_ric_ControlDecision_enum2value_5,	/* 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_ric_ControlDecision_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_ControlDecision_5 = {
+	"ric-ControlDecision",
+	"ric-ControlDecision",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_ric_ControlDecision_tags_5,
+	sizeof(asn_DEF_ric_ControlDecision_tags_5)
+		/sizeof(asn_DEF_ric_ControlDecision_tags_5[0]) - 1, /* 1 */
+	asn_DEF_ric_ControlDecision_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ric_ControlDecision_tags_5)
+		/sizeof(asn_DEF_ric_ControlDecision_tags_5[0]), /* 2 */
+	{ &asn_OER_type_ric_ControlDecision_constr_5, &asn_PER_type_ric_ControlDecision_constr_5, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_ric_ControlDecision_specs_5	/* Additional specs */
+};
+
 asn_TYPE_member_t asn_MBR_E2SM_RC_ControlHeader_Format1_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader_Format1, ueId),
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader_Format1, ueID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_UE_Identity,
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ueId"
+		"ueID"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader_Format1, ric_ControlStyle_Type),
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader_Format1, ric_Style_Type),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RIC_Style_Type,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ric-ControlStyle-Type"
+		"ric-Style-Type"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader_Format1, ric_ControlAction_ID),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
@@ -35,22 +86,34 @@
 		0, 0, /* No default value */
 		"ric-ControlAction-ID"
 		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_ControlHeader_Format1, ric_ControlDecision),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ric_ControlDecision_5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlDecision"
+		},
 };
+static const int asn_MAP_E2SM_RC_ControlHeader_Format1_oms_1[] = { 3 };
 static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlHeader_Format1_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlHeader_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ControlStyle-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-ControlAction-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-Style-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ControlAction-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-ControlDecision */
 };
 asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlHeader_Format1_specs_1 = {
 	sizeof(struct E2SM_RC_ControlHeader_Format1),
 	offsetof(struct E2SM_RC_ControlHeader_Format1, _asn_ctx),
 	asn_MAP_E2SM_RC_ControlHeader_Format1_tag2el_1,
-	3,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	3,	/* First extension addition */
+	4,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_ControlHeader_Format1_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ControlHeader_Format1 = {
 	"E2SM-RC-ControlHeader-Format1",
@@ -64,7 +127,7 @@
 		/sizeof(asn_DEF_E2SM_RC_ControlHeader_Format1_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_E2SM_RC_ControlHeader_Format1_1,
-	3,	/* Elements count */
+	4,	/* Elements count */
 	&asn_SPC_E2SM_RC_ControlHeader_Format1_specs_1	/* Additional specs */
 };
 
diff --git a/e2sm/lib/E2SM-RC-ControlHeader.c b/e2sm/lib/E2SM-RC-ControlHeader.c
index 8de1e6c..0a3ff61 100644
--- a/e2sm/lib/E2SM-RC-ControlHeader.c
+++ b/e2sm/lib/E2SM-RC-ControlHeader.c
@@ -1,23 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2SM-RC-ControlHeader.h"
 
 #include "E2SM-RC-ControlHeader-Format1.h"
-static asn_oer_constraints_t asn_OER_type_E2SM_RC_ControlHeader_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ric_controlHeader_formats_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
 	-1};
-static asn_per_constraints_t asn_PER_type_E2SM_RC_ControlHeader_constr_1 CC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ric_controlHeader_formats_constr_2 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_E2SM_RC_ControlHeader_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ControlHeader, choice.controlHeader_Format1),
+static asn_TYPE_member_t asn_MBR_ric_controlHeader_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ControlHeader__ric_controlHeader_formats, choice.controlHeader_Format1),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_E2SM_RC_ControlHeader_Format1,
@@ -27,28 +27,70 @@
 		"controlHeader-Format1"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlHeader_tag2el_1[] = {
+static const asn_TYPE_tag2member_t asn_MAP_ric_controlHeader_formats_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlHeader-Format1 */
 };
-static asn_CHOICE_specifics_t asn_SPC_E2SM_RC_ControlHeader_specs_1 = {
-	sizeof(struct E2SM_RC_ControlHeader),
-	offsetof(struct E2SM_RC_ControlHeader, _asn_ctx),
-	offsetof(struct E2SM_RC_ControlHeader, present),
-	sizeof(((struct E2SM_RC_ControlHeader *)0)->present),
-	asn_MAP_E2SM_RC_ControlHeader_tag2el_1,
+static asn_CHOICE_specifics_t asn_SPC_ric_controlHeader_formats_specs_2 = {
+	sizeof(struct E2SM_RC_ControlHeader__ric_controlHeader_formats),
+	offsetof(struct E2SM_RC_ControlHeader__ric_controlHeader_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_ControlHeader__ric_controlHeader_formats, present),
+	sizeof(((struct E2SM_RC_ControlHeader__ric_controlHeader_formats *)0)->present),
+	asn_MAP_ric_controlHeader_formats_tag2el_2,
 	1,	/* Count of tags in the map */
 	0, 0,
 	1	/* Extensions start */
 };
-asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ControlHeader = {
-	"E2SM-RC-ControlHeader",
-	"E2SM-RC-ControlHeader",
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_controlHeader_formats_2 = {
+	"ric-controlHeader-formats",
+	"ric-controlHeader-formats",
 	&asn_OP_CHOICE,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_E2SM_RC_ControlHeader_constr_1, &asn_PER_type_E2SM_RC_ControlHeader_constr_1, CHOICE_constraint },
+	{ &asn_OER_type_ric_controlHeader_formats_constr_2, &asn_PER_type_ric_controlHeader_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_controlHeader_formats_2,
+	1,	/* Elements count */
+	&asn_SPC_ric_controlHeader_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_ControlHeader_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlHeader, ric_controlHeader_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_controlHeader_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-controlHeader-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlHeader_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-controlHeader-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlHeader_specs_1 = {
+	sizeof(struct E2SM_RC_ControlHeader),
+	offsetof(struct E2SM_RC_ControlHeader, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlHeader_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_E2SM_RC_ControlHeader = {
+	"E2SM-RC-ControlHeader",
+	"E2SM-RC-ControlHeader",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlHeader_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlHeader_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlHeader_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlHeader_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_E2SM_RC_ControlHeader_1,
 	1,	/* Elements count */
 	&asn_SPC_E2SM_RC_ControlHeader_specs_1	/* Additional specs */
diff --git a/e2sm/lib/E2SM-RC-ControlMessage-Format1-Item.c b/e2sm/lib/E2SM-RC-ControlMessage-Format1-Item.c
new file mode 100644
index 0000000..4d3194c
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ControlMessage-Format1-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ControlMessage-Format1-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ControlMessage_Format1_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlMessage_Format1_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlMessage_Format1_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlMessage_Format1_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlMessage_Format1_Item_specs_1 = {
+	sizeof(struct E2SM_RC_ControlMessage_Format1_Item),
+	offsetof(struct E2SM_RC_ControlMessage_Format1_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlMessage_Format1_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_E2SM_RC_ControlMessage_Format1_Item = {
+	"E2SM-RC-ControlMessage-Format1-Item",
+	"E2SM-RC-ControlMessage-Format1-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlMessage_Format1_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ControlMessage_Format1_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_ControlMessage_Format1_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ControlMessage-Format1.c b/e2sm/lib/E2SM-RC-ControlMessage-Format1.c
index 7ba5bba..b7972a2 100644
--- a/e2sm/lib/E2SM-RC-ControlMessage-Format1.c
+++ b/e2sm/lib/E2SM-RC-ControlMessage-Format1.c
@@ -1,15 +1,15 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2SM-RC-ControlMessage-Format1.h"
 
-#include "RANParameter-Item.h"
+#include "E2SM-RC-ControlMessage-Format1-Item.h"
 static int
-memb_ranParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_ranP_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -23,7 +23,7 @@
 	/* Determine the number of elements */
 	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
 	
-	if((size >= 1 && size <= 4294967295)) {
+	if((size <= 65535)) {
 		/* Perform validation of the inner elements */
 		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 	} else {
@@ -34,84 +34,82 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_type_ranParameters_List_constr_2 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ranP_List_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_type_ranParameters_List_constr_2 CC_NOTUSED = {
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_List_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_ranParameters_List_constr_2 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_memb_ranP_List_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_memb_ranParameters_List_constr_2 CC_NOTUSED = {
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_List_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_ranParameters_List_2[] = {
+static asn_TYPE_member_t asn_MBR_ranP_List_2[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANParameter_Item,
+		&asn_DEF_E2SM_RC_ControlMessage_Format1_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_ranParameters_List_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ranP_List_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_ranParameters_List_specs_2 = {
-	sizeof(struct E2SM_RC_ControlMessage_Format1__ranParameters_List),
-	offsetof(struct E2SM_RC_ControlMessage_Format1__ranParameters_List, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_ranP_List_specs_2 = {
+	sizeof(struct E2SM_RC_ControlMessage_Format1__ranP_List),
+	offsetof(struct E2SM_RC_ControlMessage_Format1__ranP_List, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ranParameters_List_2 = {
-	"ranParameters-List",
-	"ranParameters-List",
+asn_TYPE_descriptor_t asn_DEF_ranP_List_2 = {
+	"ranP-List",
+	"ranP-List",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ranParameters_List_tags_2,
-	sizeof(asn_DEF_ranParameters_List_tags_2)
-		/sizeof(asn_DEF_ranParameters_List_tags_2[0]) - 1, /* 1 */
-	asn_DEF_ranParameters_List_tags_2,	/* Same as above */
-	sizeof(asn_DEF_ranParameters_List_tags_2)
-		/sizeof(asn_DEF_ranParameters_List_tags_2[0]), /* 2 */
-	{ &asn_OER_type_ranParameters_List_constr_2, &asn_PER_type_ranParameters_List_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_ranParameters_List_2,
+	asn_DEF_ranP_List_tags_2,
+	sizeof(asn_DEF_ranP_List_tags_2)
+		/sizeof(asn_DEF_ranP_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_List_tags_2)
+		/sizeof(asn_DEF_ranP_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_List_constr_2, &asn_PER_type_ranP_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_List_2,
 	1,	/* Single element */
-	&asn_SPC_ranParameters_List_specs_2	/* Additional specs */
+	&asn_SPC_ranP_List_specs_2	/* Additional specs */
 };
 
 asn_TYPE_member_t asn_MBR_E2SM_RC_ControlMessage_Format1_1[] = {
-	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_ControlMessage_Format1, ranParameters_List),
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlMessage_Format1, ranP_List),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_ranParameters_List_2,
+		&asn_DEF_ranP_List_2,
 		0,
-		{ &asn_OER_memb_ranParameters_List_constr_2, &asn_PER_memb_ranParameters_List_constr_2,  memb_ranParameters_List_constraint_1 },
+		{ &asn_OER_memb_ranP_List_constr_2, &asn_PER_memb_ranP_List_constr_2,  memb_ranP_List_constraint_1 },
 		0, 0, /* No default value */
-		"ranParameters-List"
+		"ranP-List"
 		},
 };
-static const int asn_MAP_E2SM_RC_ControlMessage_Format1_oms_1[] = { 0 };
 static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlMessage_Format1_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlMessage_Format1_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameters-List */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranP-List */
 };
 asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlMessage_Format1_specs_1 = {
 	sizeof(struct E2SM_RC_ControlMessage_Format1),
 	offsetof(struct E2SM_RC_ControlMessage_Format1, _asn_ctx),
 	asn_MAP_E2SM_RC_ControlMessage_Format1_tag2el_1,
 	1,	/* Count of tags in the map */
-	asn_MAP_E2SM_RC_ControlMessage_Format1_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
+	0, 0, 0,	/* Optional elements (not needed) */
 	1,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ControlMessage_Format1 = {
diff --git a/e2sm/lib/E2SM-RC-ControlMessage.c b/e2sm/lib/E2SM-RC-ControlMessage.c
index 15a6afe..295c133 100644
--- a/e2sm/lib/E2SM-RC-ControlMessage.c
+++ b/e2sm/lib/E2SM-RC-ControlMessage.c
@@ -1,23 +1,23 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2SM-RC-ControlMessage.h"
 
 #include "E2SM-RC-ControlMessage-Format1.h"
-static asn_oer_constraints_t asn_OER_type_E2SM_RC_ControlMessage_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_ric_controlMessage_formats_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
 	-1};
-static asn_per_constraints_t asn_PER_type_E2SM_RC_ControlMessage_constr_1 CC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ric_controlMessage_formats_constr_2 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_E2SM_RC_ControlMessage_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ControlMessage, choice.controlMessage_Format1),
+static asn_TYPE_member_t asn_MBR_ric_controlMessage_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ControlMessage__ric_controlMessage_formats, choice.controlMessage_Format1),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_E2SM_RC_ControlMessage_Format1,
@@ -27,28 +27,70 @@
 		"controlMessage-Format1"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlMessage_tag2el_1[] = {
+static const asn_TYPE_tag2member_t asn_MAP_ric_controlMessage_formats_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlMessage-Format1 */
 };
-static asn_CHOICE_specifics_t asn_SPC_E2SM_RC_ControlMessage_specs_1 = {
-	sizeof(struct E2SM_RC_ControlMessage),
-	offsetof(struct E2SM_RC_ControlMessage, _asn_ctx),
-	offsetof(struct E2SM_RC_ControlMessage, present),
-	sizeof(((struct E2SM_RC_ControlMessage *)0)->present),
-	asn_MAP_E2SM_RC_ControlMessage_tag2el_1,
+static asn_CHOICE_specifics_t asn_SPC_ric_controlMessage_formats_specs_2 = {
+	sizeof(struct E2SM_RC_ControlMessage__ric_controlMessage_formats),
+	offsetof(struct E2SM_RC_ControlMessage__ric_controlMessage_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_ControlMessage__ric_controlMessage_formats, present),
+	sizeof(((struct E2SM_RC_ControlMessage__ric_controlMessage_formats *)0)->present),
+	asn_MAP_ric_controlMessage_formats_tag2el_2,
 	1,	/* Count of tags in the map */
 	0, 0,
 	1	/* Extensions start */
 };
-asn_TYPE_descriptor_t asn_DEF_E2SM_RC_ControlMessage = {
-	"E2SM-RC-ControlMessage",
-	"E2SM-RC-ControlMessage",
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_controlMessage_formats_2 = {
+	"ric-controlMessage-formats",
+	"ric-controlMessage-formats",
 	&asn_OP_CHOICE,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_E2SM_RC_ControlMessage_constr_1, &asn_PER_type_E2SM_RC_ControlMessage_constr_1, CHOICE_constraint },
+	{ &asn_OER_type_ric_controlMessage_formats_constr_2, &asn_PER_type_ric_controlMessage_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_controlMessage_formats_2,
+	1,	/* Elements count */
+	&asn_SPC_ric_controlMessage_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_ControlMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlMessage, ric_controlMessage_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_controlMessage_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-controlMessage-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-controlMessage-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlMessage_specs_1 = {
+	sizeof(struct E2SM_RC_ControlMessage),
+	offsetof(struct E2SM_RC_ControlMessage, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlMessage_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_E2SM_RC_ControlMessage = {
+	"E2SM-RC-ControlMessage",
+	"E2SM-RC-ControlMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlMessage_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlMessage_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlMessage_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_E2SM_RC_ControlMessage_1,
 	1,	/* Elements count */
 	&asn_SPC_E2SM_RC_ControlMessage_specs_1	/* Additional specs */
diff --git a/e2sm/lib/E2SM-RC-ControlOutcome-Format1-Item.c b/e2sm/lib/E2SM-RC-ControlOutcome-Format1-Item.c
new file mode 100644
index 0000000..f9b0bfd
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ControlOutcome-Format1-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ControlOutcome-Format1-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ControlOutcome_Format1_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlOutcome_Format1_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlOutcome_Format1_Item, ranParameter_value),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlOutcome_Format1_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlOutcome_Format1_Item_specs_1 = {
+	sizeof(struct E2SM_RC_ControlOutcome_Format1_Item),
+	offsetof(struct E2SM_RC_ControlOutcome_Format1_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlOutcome_Format1_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_E2SM_RC_ControlOutcome_Format1_Item = {
+	"E2SM-RC-ControlOutcome-Format1-Item",
+	"E2SM-RC-ControlOutcome-Format1-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ControlOutcome_Format1_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_ControlOutcome_Format1_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ControlOutcome-Format1.c b/e2sm/lib/E2SM-RC-ControlOutcome-Format1.c
new file mode 100644
index 0000000..8b78e0f
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ControlOutcome-Format1.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ControlOutcome-Format1.h"
+
+#include "E2SM-RC-ControlOutcome-Format1-Item.h"
+static int
+memb_ranP_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 255)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..255)) */};
+static asn_per_constraints_t asn_PER_type_ranP_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (SIZE(0..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranP_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..255)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (SIZE(0..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranP_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_ControlOutcome_Format1_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_List_specs_2 = {
+	sizeof(struct E2SM_RC_ControlOutcome_Format1__ranP_List),
+	offsetof(struct E2SM_RC_ControlOutcome_Format1__ranP_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_List_2 = {
+	"ranP-List",
+	"ranP-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_List_tags_2,
+	sizeof(asn_DEF_ranP_List_tags_2)
+		/sizeof(asn_DEF_ranP_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_List_tags_2)
+		/sizeof(asn_DEF_ranP_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_List_constr_2, &asn_PER_type_ranP_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_List_2,
+	1,	/* Single element */
+	&asn_SPC_ranP_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_ControlOutcome_Format1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlOutcome_Format1, ranP_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranP_List_2,
+		0,
+		{ &asn_OER_memb_ranP_List_constr_2, &asn_PER_memb_ranP_List_constr_2,  memb_ranP_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlOutcome_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranP-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlOutcome_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_ControlOutcome_Format1),
+	offsetof(struct E2SM_RC_ControlOutcome_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlOutcome_Format1_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_E2SM_RC_ControlOutcome_Format1 = {
+	"E2SM-RC-ControlOutcome-Format1",
+	"E2SM-RC-ControlOutcome-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ControlOutcome_Format1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ControlOutcome_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-ControlOutcome.c b/e2sm/lib/E2SM-RC-ControlOutcome.c
new file mode 100644
index 0000000..8e6ce7b
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-ControlOutcome.c
@@ -0,0 +1,98 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-ControlOutcome.h"
+
+#include "E2SM-RC-ControlOutcome-Format1.h"
+static asn_oer_constraints_t asn_OER_type_ric_controlOutcome_formats_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_controlOutcome_formats_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_controlOutcome_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_ControlOutcome__ric_controlOutcome_formats, choice.controlOutcome_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_ControlOutcome_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"controlOutcome-Format1"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_controlOutcome_formats_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlOutcome-Format1 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_controlOutcome_formats_specs_2 = {
+	sizeof(struct E2SM_RC_ControlOutcome__ric_controlOutcome_formats),
+	offsetof(struct E2SM_RC_ControlOutcome__ric_controlOutcome_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_ControlOutcome__ric_controlOutcome_formats, present),
+	sizeof(((struct E2SM_RC_ControlOutcome__ric_controlOutcome_formats *)0)->present),
+	asn_MAP_ric_controlOutcome_formats_tag2el_2,
+	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_ric_controlOutcome_formats_2 = {
+	"ric-controlOutcome-formats",
+	"ric-controlOutcome-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_controlOutcome_formats_constr_2, &asn_PER_type_ric_controlOutcome_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_controlOutcome_formats_2,
+	1,	/* Elements count */
+	&asn_SPC_ric_controlOutcome_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_ControlOutcome_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_ControlOutcome, ric_controlOutcome_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_controlOutcome_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-controlOutcome-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_ControlOutcome_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_ControlOutcome_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-controlOutcome-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_ControlOutcome_specs_1 = {
+	sizeof(struct E2SM_RC_ControlOutcome),
+	offsetof(struct E2SM_RC_ControlOutcome, _asn_ctx),
+	asn_MAP_E2SM_RC_ControlOutcome_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_E2SM_RC_ControlOutcome = {
+	"E2SM-RC-ControlOutcome",
+	"E2SM-RC-ControlOutcome",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_ControlOutcome_tags_1,
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_ControlOutcome_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_ControlOutcome_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_ControlOutcome_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_ControlOutcome_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_ControlOutcome_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format1-Item.c b/e2sm/lib/E2SM-RC-EventTrigger-Format1-Item.c
new file mode 100644
index 0000000..346cf2e
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format1-Item.c
@@ -0,0 +1,155 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format1-Item.h"
+
+#include "EventTrigger-UE-Info.h"
+#include "EventTrigger-UEevent-Info.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_messageDirection_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_messageDirection_constr_4 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_messageDirection_value2enum_4[] = {
+	{ 0,	8,	"incoming" },
+	{ 1,	8,	"outgoing" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_messageDirection_enum2value_4[] = {
+	0,	/* incoming(0) */
+	1	/* outgoing(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_messageDirection_specs_4 = {
+	asn_MAP_messageDirection_value2enum_4,	/* "tag" => N; sorted by tag */
+	asn_MAP_messageDirection_enum2value_4,	/* 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_messageDirection_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_messageDirection_4 = {
+	"messageDirection",
+	"messageDirection",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_messageDirection_tags_4,
+	sizeof(asn_DEF_messageDirection_tags_4)
+		/sizeof(asn_DEF_messageDirection_tags_4[0]) - 1, /* 1 */
+	asn_DEF_messageDirection_tags_4,	/* Same as above */
+	sizeof(asn_DEF_messageDirection_tags_4)
+		/sizeof(asn_DEF_messageDirection_tags_4[0]), /* 2 */
+	{ &asn_OER_type_messageDirection_constr_4, &asn_PER_type_messageDirection_constr_4, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_messageDirection_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format1_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, ric_eventTriggerCondition_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTriggerCondition_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-eventTriggerCondition-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, messageType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_MessageType_Choice,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageType"
+		},
+	{ ATF_POINTER, 4, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, messageDirection),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_messageDirection_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageDirection"
+		},
+	{ ATF_POINTER, 3, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, associatedUEInfo),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedUEInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, associatedUEEvent),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UEevent_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedUEEvent"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format1_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format1_Item_oms_1[] = { 2, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format1_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-eventTriggerCondition-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* messageType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* messageDirection */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* associatedUEInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* associatedUEEvent */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format1_Item_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format1_Item),
+	offsetof(struct E2SM_RC_EventTrigger_Format1_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format1_Item_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format1_Item_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format1_Item = {
+	"E2SM-RC-EventTrigger-Format1-Item",
+	"E2SM-RC-EventTrigger-Format1-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format1_Item_1,
+	6,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format1_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format1.c b/e2sm/lib/E2SM-RC-EventTrigger-Format1.c
new file mode 100644
index 0000000..c8911e9
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format1.c
@@ -0,0 +1,143 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format1.h"
+
+#include "EventTrigger-UE-Info.h"
+#include "E2SM-RC-EventTrigger-Format1-Item.h"
+static int
+memb_message_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_message_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_message_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_message_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_message_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_message_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_EventTrigger_Format1_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_message_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_message_List_specs_2 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format1__message_List),
+	offsetof(struct E2SM_RC_EventTrigger_Format1__message_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_message_List_2 = {
+	"message-List",
+	"message-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_message_List_tags_2,
+	sizeof(asn_DEF_message_List_tags_2)
+		/sizeof(asn_DEF_message_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_message_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_message_List_tags_2)
+		/sizeof(asn_DEF_message_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_message_List_constr_2, &asn_PER_type_message_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_message_List_2,
+	1,	/* Single element */
+	&asn_SPC_message_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format1, message_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_message_List_2,
+		0,
+		{ &asn_OER_memb_message_List_constr_2, &asn_PER_memb_message_List_constr_2,  memb_message_List_constraint_1 },
+		0, 0, /* No default value */
+		"message-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format1, globalAssociatedUEInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalAssociatedUEInfo"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format1_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* message-List */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* globalAssociatedUEInfo */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format1),
+	offsetof(struct E2SM_RC_EventTrigger_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format1_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format1_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format1 = {
+	"E2SM-RC-EventTrigger-Format1",
+	"E2SM-RC-EventTrigger-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format1_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format2.c b/e2sm/lib/E2SM-RC-EventTrigger-Format2.c
new file mode 100644
index 0000000..54a8e9d
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format2.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format2.h"
+
+#include "RANParameter-Testing.h"
+#include "EventTrigger-UE-Info.h"
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format2, ric_callProcessType_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessType_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-callProcessType-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format2, ric_callProcessBreakpoint_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessBreakpoint_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-callProcessBreakpoint-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_EventTrigger_Format2, associatedE2NodeInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedE2NodeInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format2, associatedUEInfo),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedUEInfo"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format2_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-callProcessType-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-callProcessBreakpoint-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* associatedE2NodeInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* associatedUEInfo */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format2_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format2),
+	offsetof(struct E2SM_RC_EventTrigger_Format2, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format2_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format2_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format2 = {
+	"E2SM-RC-EventTrigger-Format2",
+	"E2SM-RC-EventTrigger-Format2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format2_1,
+	4,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format2_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format3-Item.c b/e2sm/lib/E2SM-RC-EventTrigger-Format3-Item.c
new file mode 100644
index 0000000..9781e8e
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format3-Item.c
@@ -0,0 +1,116 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format3-Item.h"
+
+#include "EventTrigger-Cell-Info.h"
+static int
+memb_e2NodeInfoChange_ID_constraint_1(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 >= 1 && value <= 512)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_e2NodeInfoChange_ID_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_e2NodeInfoChange_ID_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  1,  512 }	/* (1..512,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format3_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format3_Item, ric_eventTriggerCondition_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTriggerCondition_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-eventTriggerCondition-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format3_Item, e2NodeInfoChange_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_e2NodeInfoChange_ID_constr_3, &asn_PER_memb_e2NodeInfoChange_ID_constr_3,  memb_e2NodeInfoChange_ID_constraint_1 },
+		0, 0, /* No default value */
+		"e2NodeInfoChange-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_EventTrigger_Format3_Item, associatedCellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_Cell_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedCellInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format3_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format3_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format3_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-eventTriggerCondition-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e2NodeInfoChange-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* associatedCellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format3_Item_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format3_Item),
+	offsetof(struct E2SM_RC_EventTrigger_Format3_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format3_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format3_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format3_Item = {
+	"E2SM-RC-EventTrigger-Format3-Item",
+	"E2SM-RC-EventTrigger-Format3-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format3_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format3_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format3.c b/e2sm/lib/E2SM-RC-EventTrigger-Format3.c
new file mode 100644
index 0000000..2f0efcd
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format3.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format3.h"
+
+#include "E2SM-RC-EventTrigger-Format3-Item.h"
+static int
+memb_e2NodeInfoChange_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_e2NodeInfoChange_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_e2NodeInfoChange_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_e2NodeInfoChange_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_e2NodeInfoChange_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_e2NodeInfoChange_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_EventTrigger_Format3_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_e2NodeInfoChange_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_e2NodeInfoChange_List_specs_2 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format3__e2NodeInfoChange_List),
+	offsetof(struct E2SM_RC_EventTrigger_Format3__e2NodeInfoChange_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_e2NodeInfoChange_List_2 = {
+	"e2NodeInfoChange-List",
+	"e2NodeInfoChange-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_e2NodeInfoChange_List_tags_2,
+	sizeof(asn_DEF_e2NodeInfoChange_List_tags_2)
+		/sizeof(asn_DEF_e2NodeInfoChange_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_e2NodeInfoChange_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_e2NodeInfoChange_List_tags_2)
+		/sizeof(asn_DEF_e2NodeInfoChange_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_e2NodeInfoChange_List_constr_2, &asn_PER_type_e2NodeInfoChange_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_e2NodeInfoChange_List_2,
+	1,	/* Single element */
+	&asn_SPC_e2NodeInfoChange_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format3_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format3, e2NodeInfoChange_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_e2NodeInfoChange_List_2,
+		0,
+		{ &asn_OER_memb_e2NodeInfoChange_List_constr_2, &asn_PER_memb_e2NodeInfoChange_List_constr_2,  memb_e2NodeInfoChange_List_constraint_1 },
+		0, 0, /* No default value */
+		"e2NodeInfoChange-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* e2NodeInfoChange-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format3_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format3),
+	offsetof(struct E2SM_RC_EventTrigger_Format3, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format3_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_E2SM_RC_EventTrigger_Format3 = {
+	"E2SM-RC-EventTrigger-Format3",
+	"E2SM-RC-EventTrigger-Format3",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format3_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format3_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format3_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format4-Item.c b/e2sm/lib/E2SM-RC-EventTrigger-Format4-Item.c
new file mode 100644
index 0000000..35d496a
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format4-Item.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format4-Item.h"
+
+#include "EventTrigger-UE-Info.h"
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format4_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format4_Item, ric_eventTriggerCondition_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTriggerCondition_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-eventTriggerCondition-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format4_Item, triggerType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_TriggerType_Choice,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggerType"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_EventTrigger_Format4_Item, associatedUEInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedUEInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format4_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format4_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format4_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-eventTriggerCondition-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggerType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* associatedUEInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format4_Item_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format4_Item),
+	offsetof(struct E2SM_RC_EventTrigger_Format4_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format4_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format4_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format4_Item = {
+	"E2SM-RC-EventTrigger-Format4-Item",
+	"E2SM-RC-EventTrigger-Format4-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format4_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format4_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format4.c b/e2sm/lib/E2SM-RC-EventTrigger-Format4.c
new file mode 100644
index 0000000..8fa15b7
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format4.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format4.h"
+
+#include "E2SM-RC-EventTrigger-Format4-Item.h"
+static int
+memb_uEInfoChange_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_uEInfoChange_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_uEInfoChange_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_uEInfoChange_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_uEInfoChange_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_uEInfoChange_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_EventTrigger_Format4_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_uEInfoChange_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_uEInfoChange_List_specs_2 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format4__uEInfoChange_List),
+	offsetof(struct E2SM_RC_EventTrigger_Format4__uEInfoChange_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_uEInfoChange_List_2 = {
+	"uEInfoChange-List",
+	"uEInfoChange-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_uEInfoChange_List_tags_2,
+	sizeof(asn_DEF_uEInfoChange_List_tags_2)
+		/sizeof(asn_DEF_uEInfoChange_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_uEInfoChange_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_uEInfoChange_List_tags_2)
+		/sizeof(asn_DEF_uEInfoChange_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_uEInfoChange_List_constr_2, &asn_PER_type_uEInfoChange_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_uEInfoChange_List_2,
+	1,	/* Single element */
+	&asn_SPC_uEInfoChange_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format4_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format4, uEInfoChange_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_uEInfoChange_List_2,
+		0,
+		{ &asn_OER_memb_uEInfoChange_List_constr_2, &asn_PER_memb_uEInfoChange_List_constr_2,  memb_uEInfoChange_List_constraint_1 },
+		0, 0, /* No default value */
+		"uEInfoChange-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format4_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* uEInfoChange-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format4_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format4),
+	offsetof(struct E2SM_RC_EventTrigger_Format4, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format4_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_E2SM_RC_EventTrigger_Format4 = {
+	"E2SM-RC-EventTrigger-Format4",
+	"E2SM-RC-EventTrigger-Format4",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format4_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format4_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format4_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger-Format5.c b/e2sm/lib/E2SM-RC-EventTrigger-Format5.c
new file mode 100644
index 0000000..f7ebe17
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger-Format5.c
@@ -0,0 +1,123 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger-Format5.h"
+
+#include "EventTrigger-UE-Info.h"
+#include "EventTrigger-Cell-Info.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_onDemand_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_onDemand_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_onDemand_value2enum_2[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_onDemand_enum2value_2[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_onDemand_specs_2 = {
+	asn_MAP_onDemand_value2enum_2,	/* "tag" => N; sorted by tag */
+	asn_MAP_onDemand_enum2value_2,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_onDemand_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_onDemand_2 = {
+	"onDemand",
+	"onDemand",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_onDemand_tags_2,
+	sizeof(asn_DEF_onDemand_tags_2)
+		/sizeof(asn_DEF_onDemand_tags_2[0]) - 1, /* 1 */
+	asn_DEF_onDemand_tags_2,	/* Same as above */
+	sizeof(asn_DEF_onDemand_tags_2)
+		/sizeof(asn_DEF_onDemand_tags_2[0]), /* 2 */
+	{ &asn_OER_type_onDemand_constr_2, &asn_PER_type_onDemand_constr_2, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_onDemand_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_Format5_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger_Format5, onDemand),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_onDemand_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"onDemand"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_EventTrigger_Format5, associatedUEInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedUEInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_EventTrigger_Format5, associatedCellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_Cell_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedCellInfo"
+		},
+};
+static const int asn_MAP_E2SM_RC_EventTrigger_Format5_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_Format5_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* onDemand */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* associatedUEInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* associatedCellInfo */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_Format5_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger_Format5),
+	offsetof(struct E2SM_RC_EventTrigger_Format5, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_Format5_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_EventTrigger_Format5_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_EventTrigger_Format5 = {
+	"E2SM-RC-EventTrigger-Format5",
+	"E2SM-RC-EventTrigger-Format5",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_Format5_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_Format5_1,
+	3,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_Format5_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-EventTrigger.c b/e2sm/lib/E2SM-RC-EventTrigger.c
new file mode 100644
index 0000000..6991f39
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-EventTrigger.c
@@ -0,0 +1,142 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-EventTrigger.h"
+
+#include "E2SM-RC-EventTrigger-Format1.h"
+#include "E2SM-RC-EventTrigger-Format2.h"
+#include "E2SM-RC-EventTrigger-Format3.h"
+#include "E2SM-RC-EventTrigger-Format4.h"
+#include "E2SM-RC-EventTrigger-Format5.h"
+static asn_oer_constraints_t asn_OER_type_ric_eventTrigger_formats_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_eventTrigger_formats_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_eventTrigger_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, choice.eventTrigger_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_EventTrigger_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTrigger-Format1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, choice.eventTrigger_Format2),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_EventTrigger_Format2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTrigger-Format2"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, choice.eventTrigger_Format3),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_EventTrigger_Format3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTrigger-Format3"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, choice.eventTrigger_Format4),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_EventTrigger_Format4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTrigger-Format4"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, choice.eventTrigger_Format5),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_EventTrigger_Format5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTrigger-Format5"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_eventTrigger_formats_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventTrigger-Format1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eventTrigger-Format2 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eventTrigger-Format3 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* eventTrigger-Format4 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* eventTrigger-Format5 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_eventTrigger_formats_specs_2 = {
+	sizeof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats),
+	offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_EventTrigger__ric_eventTrigger_formats, present),
+	sizeof(((struct E2SM_RC_EventTrigger__ric_eventTrigger_formats *)0)->present),
+	asn_MAP_ric_eventTrigger_formats_tag2el_2,
+	5,	/* Count of tags in the map */
+	0, 0,
+	5	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_eventTrigger_formats_2 = {
+	"ric-eventTrigger-formats",
+	"ric-eventTrigger-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_eventTrigger_formats_constr_2, &asn_PER_type_ric_eventTrigger_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_eventTrigger_formats_2,
+	5,	/* Elements count */
+	&asn_SPC_ric_eventTrigger_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_EventTrigger_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_EventTrigger, ric_eventTrigger_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_eventTrigger_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-eventTrigger-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_EventTrigger_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_EventTrigger_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-eventTrigger-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_EventTrigger_specs_1 = {
+	sizeof(struct E2SM_RC_EventTrigger),
+	offsetof(struct E2SM_RC_EventTrigger, _asn_ctx),
+	asn_MAP_E2SM_RC_EventTrigger_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_E2SM_RC_EventTrigger = {
+	"E2SM-RC-EventTrigger",
+	"E2SM-RC-EventTrigger",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_EventTrigger_tags_1,
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_EventTrigger_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_EventTrigger_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_EventTrigger_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_EventTrigger_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_EventTrigger_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationHeader-Format1.c b/e2sm/lib/E2SM-RC-IndicationHeader-Format1.c
new file mode 100644
index 0000000..7a880ae
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationHeader-Format1.c
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationHeader-Format1.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationHeader_Format1_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_IndicationHeader_Format1, ric_eventTriggerCondition_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTriggerCondition_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-eventTriggerCondition-ID"
+		},
+};
+static const int asn_MAP_E2SM_RC_IndicationHeader_Format1_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationHeader_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-eventTriggerCondition-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationHeader_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationHeader_Format1),
+	offsetof(struct E2SM_RC_IndicationHeader_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationHeader_Format1_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_IndicationHeader_Format1_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationHeader_Format1 = {
+	"E2SM-RC-IndicationHeader-Format1",
+	"E2SM-RC-IndicationHeader-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationHeader_Format1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationHeader_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationHeader-Format2.c b/e2sm/lib/E2SM-RC-IndicationHeader-Format2.c
new file mode 100644
index 0000000..4b7724c
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationHeader-Format2.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationHeader-Format2.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationHeader_Format2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationHeader_Format2, ueID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationHeader_Format2, ric_InsertStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationHeader_Format2, ric_InsertIndication_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_InsertIndication_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertIndication-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationHeader_Format2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-InsertStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-InsertIndication-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationHeader_Format2_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationHeader_Format2),
+	offsetof(struct E2SM_RC_IndicationHeader_Format2, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationHeader_Format2_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationHeader_Format2 = {
+	"E2SM-RC-IndicationHeader-Format2",
+	"E2SM-RC-IndicationHeader-Format2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_Format2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationHeader_Format2_1,
+	3,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationHeader_Format2_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationHeader.c b/e2sm/lib/E2SM-RC-IndicationHeader.c
new file mode 100644
index 0000000..c5764a4
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationHeader.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationHeader.h"
+
+#include "E2SM-RC-IndicationHeader-Format1.h"
+#include "E2SM-RC-IndicationHeader-Format2.h"
+static asn_oer_constraints_t asn_OER_type_ric_indicationHeader_formats_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_indicationHeader_formats_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 asn_TYPE_member_t asn_MBR_ric_indicationHeader_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats, choice.indicationHeader_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationHeader_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationHeader-Format1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats, choice.indicationHeader_Format2),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationHeader_Format2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationHeader-Format2"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_indicationHeader_formats_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* indicationHeader-Format1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationHeader-Format2 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_indicationHeader_formats_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats),
+	offsetof(struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats, present),
+	sizeof(((struct E2SM_RC_IndicationHeader__ric_indicationHeader_formats *)0)->present),
+	asn_MAP_ric_indicationHeader_formats_tag2el_2,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_indicationHeader_formats_2 = {
+	"ric-indicationHeader-formats",
+	"ric-indicationHeader-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_indicationHeader_formats_constr_2, &asn_PER_type_ric_indicationHeader_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_indicationHeader_formats_2,
+	2,	/* Elements count */
+	&asn_SPC_ric_indicationHeader_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationHeader_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationHeader, ric_indicationHeader_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_indicationHeader_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-indicationHeader-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationHeader_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-indicationHeader-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationHeader_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationHeader),
+	offsetof(struct E2SM_RC_IndicationHeader, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationHeader_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_E2SM_RC_IndicationHeader = {
+	"E2SM-RC-IndicationHeader",
+	"E2SM-RC-IndicationHeader",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationHeader_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationHeader_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationHeader_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationHeader_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationHeader_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format1-Item.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format1-Item.c
new file mode 100644
index 0000000..b84dcc1
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format1-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format1-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format1_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format1_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format1_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format1_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format1_Item_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format1_Item),
+	offsetof(struct E2SM_RC_IndicationMessage_Format1_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format1_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_E2SM_RC_IndicationMessage_Format1_Item = {
+	"E2SM-RC-IndicationMessage-Format1-Item",
+	"E2SM-RC-IndicationMessage-Format1-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format1_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format1_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format1.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format1.c
new file mode 100644
index 0000000..0395dbd
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format1.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format1.h"
+
+#include "E2SM-RC-IndicationMessage-Format1-Item.h"
+static int
+memb_ranP_Reported_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_Reported_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_Reported_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranP_Reported_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_Reported_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranP_Reported_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format1_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_Reported_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_Reported_List_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format1__ranP_Reported_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format1__ranP_Reported_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_Reported_List_2 = {
+	"ranP-Reported-List",
+	"ranP-Reported-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_Reported_List_tags_2,
+	sizeof(asn_DEF_ranP_Reported_List_tags_2)
+		/sizeof(asn_DEF_ranP_Reported_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_Reported_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_Reported_List_tags_2)
+		/sizeof(asn_DEF_ranP_Reported_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_Reported_List_constr_2, &asn_PER_type_ranP_Reported_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_Reported_List_2,
+	1,	/* Single element */
+	&asn_SPC_ranP_Reported_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format1, ranP_Reported_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranP_Reported_List_2,
+		0,
+		{ &asn_OER_memb_ranP_Reported_List_constr_2, &asn_PER_memb_ranP_Reported_List_constr_2,  memb_ranP_Reported_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-Reported-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranP-Reported-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format1_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format1),
+	offsetof(struct E2SM_RC_IndicationMessage_Format1, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format1_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_E2SM_RC_IndicationMessage_Format1 = {
+	"E2SM-RC-IndicationMessage-Format1",
+	"E2SM-RC-IndicationMessage-Format1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format1_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format2-Item.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format2-Item.c
new file mode 100644
index 0000000..5091cd5
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format2-Item.c
@@ -0,0 +1,140 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format2-Item.h"
+
+#include "E2SM-RC-IndicationMessage-Format2-RANParameter-Item.h"
+static int
+memb_ranP_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranP_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranP_List_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_List_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_List_specs_3 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format2_Item__ranP_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format2_Item__ranP_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_List_3 = {
+	"ranP-List",
+	"ranP-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_List_tags_3,
+	sizeof(asn_DEF_ranP_List_tags_3)
+		/sizeof(asn_DEF_ranP_List_tags_3[0]) - 1, /* 1 */
+	asn_DEF_ranP_List_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ranP_List_tags_3)
+		/sizeof(asn_DEF_ranP_List_tags_3[0]), /* 2 */
+	{ &asn_OER_type_ranP_List_constr_3, &asn_PER_type_ranP_List_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_List_3,
+	1,	/* Single element */
+	&asn_SPC_ranP_List_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format2_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format2_Item, ueID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format2_Item, ranP_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_ranP_List_3,
+		0,
+		{ &asn_OER_memb_ranP_List_constr_3, &asn_PER_memb_ranP_List_constr_3,  memb_ranP_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format2_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranP-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format2_Item_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format2_Item),
+	offsetof(struct E2SM_RC_IndicationMessage_Format2_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format2_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_E2SM_RC_IndicationMessage_Format2_Item = {
+	"E2SM-RC-IndicationMessage-Format2-Item",
+	"E2SM-RC-IndicationMessage-Format2-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format2_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format2_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format2-RANParameter-Item.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format2-RANParameter-Item.c
new file mode 100644
index 0000000..c750920
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format2-RANParameter-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format2-RANParameter-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format2_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format2_RANParameter_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format2_RANParameter_Item),
+	offsetof(struct E2SM_RC_IndicationMessage_Format2_RANParameter_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format2_RANParameter_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_E2SM_RC_IndicationMessage_Format2_RANParameter_Item = {
+	"E2SM-RC-IndicationMessage-Format2-RANParameter-Item",
+	"E2SM-RC-IndicationMessage-Format2-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format2_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format2.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format2.c
new file mode 100644
index 0000000..a4210cc
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format2.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format2.h"
+
+#include "E2SM-RC-IndicationMessage-Format2-Item.h"
+static int
+memb_ueParameter_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ueParameter_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ueParameter_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ueParameter_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ueParameter_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ueParameter_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format2_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ueParameter_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ueParameter_List_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format2__ueParameter_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format2__ueParameter_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ueParameter_List_2 = {
+	"ueParameter-List",
+	"ueParameter-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ueParameter_List_tags_2,
+	sizeof(asn_DEF_ueParameter_List_tags_2)
+		/sizeof(asn_DEF_ueParameter_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ueParameter_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ueParameter_List_tags_2)
+		/sizeof(asn_DEF_ueParameter_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ueParameter_List_constr_2, &asn_PER_type_ueParameter_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ueParameter_List_2,
+	1,	/* Single element */
+	&asn_SPC_ueParameter_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format2, ueParameter_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ueParameter_List_2,
+		0,
+		{ &asn_OER_memb_ueParameter_List_constr_2, &asn_PER_memb_ueParameter_List_constr_2,  memb_ueParameter_List_constraint_1 },
+		0, 0, /* No default value */
+		"ueParameter-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueParameter-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format2_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format2),
+	offsetof(struct E2SM_RC_IndicationMessage_Format2, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format2_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_E2SM_RC_IndicationMessage_Format2 = {
+	"E2SM-RC-IndicationMessage-Format2",
+	"E2SM-RC-IndicationMessage-Format2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format2_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format2_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format3-Item.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format3-Item.c
new file mode 100644
index 0000000..2dd2b21
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format3-Item.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format3-Item.h"
+
+#include "NeighborRelation-Info.h"
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format3_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format3_Item, cellGlobal_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellGlobal-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct E2SM_RC_IndicationMessage_Format3_Item, cellContextInfo),
+		(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 */
+		"cellContextInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_IndicationMessage_Format3_Item, cellDeleted),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellDeleted"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_IndicationMessage_Format3_Item, neighborRelation_Table),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NeighborRelation_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"neighborRelation-Table"
+		},
+};
+static const int asn_MAP_E2SM_RC_IndicationMessage_Format3_Item_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format3_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobal-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellContextInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellDeleted */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* neighborRelation-Table */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format3_Item_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format3_Item),
+	offsetof(struct E2SM_RC_IndicationMessage_Format3_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format3_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_IndicationMessage_Format3_Item_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationMessage_Format3_Item = {
+	"E2SM-RC-IndicationMessage-Format3-Item",
+	"E2SM-RC-IndicationMessage-Format3-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format3_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format3_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format3.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format3.c
new file mode 100644
index 0000000..2573d44
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format3.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format3.h"
+
+#include "E2SM-RC-IndicationMessage-Format3-Item.h"
+static int
+memb_cellInfo_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_cellInfo_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format3_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_cellInfo_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_cellInfo_List_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format3__cellInfo_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format3__cellInfo_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_cellInfo_List_2 = {
+	"cellInfo-List",
+	"cellInfo-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_cellInfo_List_tags_2,
+	sizeof(asn_DEF_cellInfo_List_tags_2)
+		/sizeof(asn_DEF_cellInfo_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_cellInfo_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_cellInfo_List_tags_2)
+		/sizeof(asn_DEF_cellInfo_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_cellInfo_List_constr_2, &asn_PER_type_cellInfo_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_cellInfo_List_2,
+	1,	/* Single element */
+	&asn_SPC_cellInfo_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format3_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format3, cellInfo_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_cellInfo_List_2,
+		0,
+		{ &asn_OER_memb_cellInfo_List_constr_2, &asn_PER_memb_cellInfo_List_constr_2,  memb_cellInfo_List_constraint_1 },
+		0, 0, /* No default value */
+		"cellInfo-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellInfo-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format3_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format3),
+	offsetof(struct E2SM_RC_IndicationMessage_Format3, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format3_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_E2SM_RC_IndicationMessage_Format3 = {
+	"E2SM-RC-IndicationMessage-Format3",
+	"E2SM-RC-IndicationMessage-Format3",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format3_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format3_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format3_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemCell.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemCell.c
new file mode 100644
index 0000000..113d318
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemCell.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format4-ItemCell.h"
+
+#include "NeighborRelation-Info.h"
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format4_ItemCell_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemCell, cellGlobal_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellGlobal-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemCell, cellContextInfo),
+		(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 */
+		"cellContextInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemCell, neighborRelation_Table),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NeighborRelation_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"neighborRelation-Table"
+		},
+};
+static const int asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemCell_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemCell_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobal-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellContextInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighborRelation-Table */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format4_ItemCell_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format4_ItemCell),
+	offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemCell, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemCell_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemCell_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell = {
+	"E2SM-RC-IndicationMessage-Format4-ItemCell",
+	"E2SM-RC-IndicationMessage-Format4-ItemCell",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format4_ItemCell_1,
+	3,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format4_ItemCell_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemUE.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemUE.c
new file mode 100644
index 0000000..857e906
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format4-ItemUE.c
@@ -0,0 +1,72 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format4-ItemUE.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format4_ItemUE_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemUE, ueID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemUE, ueContextInfo),
+		(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 */
+		"ueContextInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemUE, cellGlobal_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellGlobal-ID"
+		},
+};
+static const int asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemUE_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemUE_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ueContextInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellGlobal-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format4_ItemUE_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format4_ItemUE),
+	offsetof(struct E2SM_RC_IndicationMessage_Format4_ItemUE, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemUE_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2SM_RC_IndicationMessage_Format4_ItemUE_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE = {
+	"E2SM-RC-IndicationMessage-Format4-ItemUE",
+	"E2SM-RC-IndicationMessage-Format4-ItemUE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format4_ItemUE_1,
+	3,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format4_ItemUE_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format4.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format4.c
new file mode 100644
index 0000000..dfcc96a
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format4.c
@@ -0,0 +1,220 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format4.h"
+
+#include "E2SM-RC-IndicationMessage-Format4-ItemUE.h"
+#include "E2SM-RC-IndicationMessage-Format4-ItemCell.h"
+static int
+memb_ueInfo_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_cellInfo_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_type_ueInfo_List_constr_2 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_cellInfo_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_type_cellInfo_List_constr_4 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_memb_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ueInfo_List_constr_2 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_memb_cellInfo_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_memb_cellInfo_List_constr_4 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_TYPE_member_t asn_MBR_ueInfo_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemUE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ueInfo_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ueInfo_List_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format4__ueInfo_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format4__ueInfo_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ueInfo_List_2 = {
+	"ueInfo-List",
+	"ueInfo-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ueInfo_List_tags_2,
+	sizeof(asn_DEF_ueInfo_List_tags_2)
+		/sizeof(asn_DEF_ueInfo_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ueInfo_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ueInfo_List_tags_2)
+		/sizeof(asn_DEF_ueInfo_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ueInfo_List_constr_2, &asn_PER_type_ueInfo_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ueInfo_List_2,
+	1,	/* Single element */
+	&asn_SPC_ueInfo_List_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_cellInfo_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format4_ItemCell,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_cellInfo_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_cellInfo_List_specs_4 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format4__cellInfo_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format4__cellInfo_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_cellInfo_List_4 = {
+	"cellInfo-List",
+	"cellInfo-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_cellInfo_List_tags_4,
+	sizeof(asn_DEF_cellInfo_List_tags_4)
+		/sizeof(asn_DEF_cellInfo_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_cellInfo_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_cellInfo_List_tags_4)
+		/sizeof(asn_DEF_cellInfo_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_cellInfo_List_constr_4, &asn_PER_type_cellInfo_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_cellInfo_List_4,
+	1,	/* Single element */
+	&asn_SPC_cellInfo_List_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format4_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format4, ueInfo_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ueInfo_List_2,
+		0,
+		{ &asn_OER_memb_ueInfo_List_constr_2, &asn_PER_memb_ueInfo_List_constr_2,  memb_ueInfo_List_constraint_1 },
+		0, 0, /* No default value */
+		"ueInfo-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format4, cellInfo_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_cellInfo_List_4,
+		0,
+		{ &asn_OER_memb_cellInfo_List_constr_4, &asn_PER_memb_cellInfo_List_constr_4,  memb_cellInfo_List_constraint_1 },
+		0, 0, /* No default value */
+		"cellInfo-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format4_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueInfo-List */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellInfo-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format4_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format4),
+	offsetof(struct E2SM_RC_IndicationMessage_Format4, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format4_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_E2SM_RC_IndicationMessage_Format4 = {
+	"E2SM-RC-IndicationMessage-Format4",
+	"E2SM-RC-IndicationMessage-Format4",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format4_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format4_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format4_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format5-Item.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format5-Item.c
new file mode 100644
index 0000000..3b9541d
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format5-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format5-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format5_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format5_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format5_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format5_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format5_Item_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format5_Item),
+	offsetof(struct E2SM_RC_IndicationMessage_Format5_Item, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format5_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_E2SM_RC_IndicationMessage_Format5_Item = {
+	"E2SM-RC-IndicationMessage-Format5-Item",
+	"E2SM-RC-IndicationMessage-Format5-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format5_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format5_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage-Format5.c b/e2sm/lib/E2SM-RC-IndicationMessage-Format5.c
new file mode 100644
index 0000000..3a5f71b
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage-Format5.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage-Format5.h"
+
+#include "E2SM-RC-IndicationMessage-Format5-Item.h"
+static int
+memb_ranP_Requested_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranP_Requested_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranP_Requested_List_constr_2 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_memb_ranP_Requested_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranP_Requested_List_constr_2 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_TYPE_member_t asn_MBR_ranP_Requested_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2SM_RC_IndicationMessage_Format5_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranP_Requested_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranP_Requested_List_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format5__ranP_Requested_List),
+	offsetof(struct E2SM_RC_IndicationMessage_Format5__ranP_Requested_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_Requested_List_2 = {
+	"ranP-Requested-List",
+	"ranP-Requested-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranP_Requested_List_tags_2,
+	sizeof(asn_DEF_ranP_Requested_List_tags_2)
+		/sizeof(asn_DEF_ranP_Requested_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_Requested_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_Requested_List_tags_2)
+		/sizeof(asn_DEF_ranP_Requested_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_Requested_List_constr_2, &asn_PER_type_ranP_Requested_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranP_Requested_List_2,
+	1,	/* Single element */
+	&asn_SPC_ranP_Requested_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_Format5_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage_Format5, ranP_Requested_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranP_Requested_List_2,
+		0,
+		{ &asn_OER_memb_ranP_Requested_List_constr_2, &asn_PER_memb_ranP_Requested_List_constr_2,  memb_ranP_Requested_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranP-Requested-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_Format5_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranP-Requested-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_Format5_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage_Format5),
+	offsetof(struct E2SM_RC_IndicationMessage_Format5, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_Format5_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_E2SM_RC_IndicationMessage_Format5 = {
+	"E2SM-RC-IndicationMessage-Format5",
+	"E2SM-RC-IndicationMessage-Format5",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_Format5_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_Format5_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_Format5_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-IndicationMessage.c b/e2sm/lib/E2SM-RC-IndicationMessage.c
new file mode 100644
index 0000000..3a4cd00
--- /dev/null
+++ b/e2sm/lib/E2SM-RC-IndicationMessage.c
@@ -0,0 +1,142 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "E2SM-RC-IndicationMessage.h"
+
+#include "E2SM-RC-IndicationMessage-Format1.h"
+#include "E2SM-RC-IndicationMessage-Format2.h"
+#include "E2SM-RC-IndicationMessage-Format3.h"
+#include "E2SM-RC-IndicationMessage-Format4.h"
+#include "E2SM-RC-IndicationMessage-Format5.h"
+static asn_oer_constraints_t asn_OER_type_ric_indicationMessage_formats_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ric_indicationMessage_formats_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_indicationMessage_formats_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, choice.indicationMessage_Format1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationMessage_Format1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationMessage-Format1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, choice.indicationMessage_Format2),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationMessage_Format2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationMessage-Format2"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, choice.indicationMessage_Format3),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationMessage_Format3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationMessage-Format3"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, choice.indicationMessage_Format4),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationMessage_Format4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationMessage-Format4"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, choice.indicationMessage_Format5),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2SM_RC_IndicationMessage_Format5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"indicationMessage-Format5"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ric_indicationMessage_formats_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* indicationMessage-Format1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* indicationMessage-Format2 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* indicationMessage-Format3 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* indicationMessage-Format4 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* indicationMessage-Format5 */
+};
+static asn_CHOICE_specifics_t asn_SPC_ric_indicationMessage_formats_specs_2 = {
+	sizeof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats),
+	offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, _asn_ctx),
+	offsetof(struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats, present),
+	sizeof(((struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats *)0)->present),
+	asn_MAP_ric_indicationMessage_formats_tag2el_2,
+	5,	/* Count of tags in the map */
+	0, 0,
+	5	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_indicationMessage_formats_2 = {
+	"ric-indicationMessage-formats",
+	"ric-indicationMessage-formats",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ric_indicationMessage_formats_constr_2, &asn_PER_type_ric_indicationMessage_formats_constr_2, CHOICE_constraint },
+	asn_MBR_ric_indicationMessage_formats_2,
+	5,	/* Elements count */
+	&asn_SPC_ric_indicationMessage_formats_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2SM_RC_IndicationMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_IndicationMessage, ric_indicationMessage_formats),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ric_indicationMessage_formats_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-indicationMessage-formats"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2SM_RC_IndicationMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_IndicationMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-indicationMessage-formats */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_IndicationMessage_specs_1 = {
+	sizeof(struct E2SM_RC_IndicationMessage),
+	offsetof(struct E2SM_RC_IndicationMessage, _asn_ctx),
+	asn_MAP_E2SM_RC_IndicationMessage_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_E2SM_RC_IndicationMessage = {
+	"E2SM-RC-IndicationMessage",
+	"E2SM-RC-IndicationMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2SM_RC_IndicationMessage_tags_1,
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2SM_RC_IndicationMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2SM_RC_IndicationMessage_tags_1)
+		/sizeof(asn_DEF_E2SM_RC_IndicationMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2SM_RC_IndicationMessage_1,
+	1,	/* Elements count */
+	&asn_SPC_E2SM_RC_IndicationMessage_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/E2SM-RC-RANFunctionDefinition.c b/e2sm/lib/E2SM-RC-RANFunctionDefinition.c
index e3ff8fe..dddb336 100644
--- a/e2sm/lib/E2SM-RC-RANFunctionDefinition.c
+++ b/e2sm/lib/E2SM-RC-RANFunctionDefinition.c
@@ -1,172 +1,17 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "E2SM-RC-RANFunctionDefinition.h"
 
-#include "RIC-EventTriggerStyle-Item.h"
-#include "RIC-ControlStyle-Item.h"
-static int
-memb_ric_EventTriggerStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 63)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static int
-memb_ric_ControlStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 63)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_type_ric_ControlStyle_List_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_type_ric_ControlStyle_List_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ric_ControlStyle_List_constr_5 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..63)) */};
-static asn_per_constraints_t asn_PER_memb_ric_ControlStyle_List_constr_5 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_3[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RIC_EventTriggerStyle_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_3 = {
-	sizeof(struct E2SM_RC_RANFunctionDefinition__ric_EventTriggerStyle_List),
-	offsetof(struct E2SM_RC_RANFunctionDefinition__ric_EventTriggerStyle_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_3 = {
-	"ric-EventTriggerStyle-List",
-	"ric-EventTriggerStyle-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ric_EventTriggerStyle_List_tags_3,
-	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3)
-		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]) - 1, /* 1 */
-	asn_DEF_ric_EventTriggerStyle_List_tags_3,	/* Same as above */
-	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3)
-		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]), /* 2 */
-	{ &asn_OER_type_ric_EventTriggerStyle_List_constr_3, &asn_PER_type_ric_EventTriggerStyle_List_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_ric_EventTriggerStyle_List_3,
-	1,	/* Single element */
-	&asn_SPC_ric_EventTriggerStyle_List_specs_3	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_ric_ControlStyle_List_5[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RIC_ControlStyle_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ric_ControlStyle_List_tags_5[] = {
-	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ric_ControlStyle_List_specs_5 = {
-	sizeof(struct E2SM_RC_RANFunctionDefinition__ric_ControlStyle_List),
-	offsetof(struct E2SM_RC_RANFunctionDefinition__ric_ControlStyle_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ric_ControlStyle_List_5 = {
-	"ric-ControlStyle-List",
-	"ric-ControlStyle-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ric_ControlStyle_List_tags_5,
-	sizeof(asn_DEF_ric_ControlStyle_List_tags_5)
-		/sizeof(asn_DEF_ric_ControlStyle_List_tags_5[0]) - 1, /* 1 */
-	asn_DEF_ric_ControlStyle_List_tags_5,	/* Same as above */
-	sizeof(asn_DEF_ric_ControlStyle_List_tags_5)
-		/sizeof(asn_DEF_ric_ControlStyle_List_tags_5[0]), /* 2 */
-	{ &asn_OER_type_ric_ControlStyle_List_constr_5, &asn_PER_type_ric_ControlStyle_List_constr_5, SEQUENCE_OF_constraint },
-	asn_MBR_ric_ControlStyle_List_5,
-	1,	/* Single element */
-	&asn_SPC_ric_ControlStyle_List_specs_5	/* Additional specs */
-};
-
+#include "RANFunctionDefinition-EventTrigger.h"
+#include "RANFunctionDefinition-Report.h"
+#include "RANFunctionDefinition-Insert.h"
+#include "RANFunctionDefinition-Control.h"
+#include "RANFunctionDefinition-Policy.h"
 static asn_TYPE_member_t asn_MBR_E2SM_RC_RANFunctionDefinition_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunction_Name),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
@@ -177,42 +22,72 @@
 		0, 0, /* No default value */
 		"ranFunction-Name"
 		},
-	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_RANFunctionDefinition, ric_EventTriggerStyle_List),
+	{ ATF_POINTER, 5, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunctionDefinition_EventTrigger),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANFunctionDefinition_EventTrigger,
 		0,
-		&asn_DEF_ric_EventTriggerStyle_List_3,
-		0,
-		{ &asn_OER_memb_ric_EventTriggerStyle_List_constr_3, &asn_PER_memb_ric_EventTriggerStyle_List_constr_3,  memb_ric_EventTriggerStyle_List_constraint_1 },
+		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ric-EventTriggerStyle-List"
+		"ranFunctionDefinition-EventTrigger"
 		},
-	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_RANFunctionDefinition, ric_ControlStyle_List),
+	{ ATF_POINTER, 4, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunctionDefinition_Report),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANFunctionDefinition_Report,
 		0,
-		&asn_DEF_ric_ControlStyle_List_5,
-		0,
-		{ &asn_OER_memb_ric_ControlStyle_List_constr_5, &asn_PER_memb_ric_ControlStyle_List_constr_5,  memb_ric_ControlStyle_List_constraint_1 },
+		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ric-ControlStyle-List"
+		"ranFunctionDefinition-Report"
+		},
+	{ ATF_POINTER, 3, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunctionDefinition_Insert),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANFunctionDefinition_Insert,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionDefinition-Insert"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunctionDefinition_Control),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANFunctionDefinition_Control,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionDefinition-Control"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2SM_RC_RANFunctionDefinition, ranFunctionDefinition_Policy),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANFunctionDefinition_Policy,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionDefinition-Policy"
 		},
 };
-static const int asn_MAP_E2SM_RC_RANFunctionDefinition_oms_1[] = { 1, 2 };
+static const int asn_MAP_E2SM_RC_RANFunctionDefinition_oms_1[] = { 1, 2, 3, 4, 5 };
 static const ber_tlv_tag_t asn_DEF_E2SM_RC_RANFunctionDefinition_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_E2SM_RC_RANFunctionDefinition_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-List */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-ControlStyle-List */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition-EventTrigger */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunctionDefinition-Report */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ranFunctionDefinition-Insert */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ranFunctionDefinition-Control */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ranFunctionDefinition-Policy */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_E2SM_RC_RANFunctionDefinition_specs_1 = {
 	sizeof(struct E2SM_RC_RANFunctionDefinition),
 	offsetof(struct E2SM_RC_RANFunctionDefinition, _asn_ctx),
 	asn_MAP_E2SM_RC_RANFunctionDefinition_tag2el_1,
-	3,	/* Count of tags in the map */
+	6,	/* Count of tags in the map */
 	asn_MAP_E2SM_RC_RANFunctionDefinition_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
+	5, 0,	/* Root/Additions */
+	6,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_E2SM_RC_RANFunctionDefinition = {
 	"E2SM-RC-RANFunctionDefinition",
@@ -226,7 +101,7 @@
 		/sizeof(asn_DEF_E2SM_RC_RANFunctionDefinition_tags_1[0]), /* 1 */
 	{ 0, 0, SEQUENCE_constraint },
 	asn_MBR_E2SM_RC_RANFunctionDefinition_1,
-	3,	/* Elements count */
+	6,	/* Elements count */
 	&asn_SPC_E2SM_RC_RANFunctionDefinition_specs_1	/* Additional specs */
 };
 
diff --git a/e2sm/lib/EN-GNB-ID.c b/e2sm/lib/EN-GNB-ID.c
new file mode 100644
index 0000000..98b8263
--- /dev/null
+++ b/e2sm/lib/EN-GNB-ID.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EN-GNB-ID.h"
+
+static int
+memb_en_gNB_ID_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 >= 22 && size <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_en_gNB_ID_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(22..32)) */};
+static asn_per_constraints_t asn_PER_memb_en_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_EN_GNB_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_EN_GNB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_EN_GNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EN_GNB_ID, choice.en_gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_en_gNB_ID_constr_2, &asn_PER_memb_en_gNB_ID_constr_2,  memb_en_gNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"en-gNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_EN_GNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* en-gNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_EN_GNB_ID_specs_1 = {
+	sizeof(struct EN_GNB_ID),
+	offsetof(struct EN_GNB_ID, _asn_ctx),
+	offsetof(struct EN_GNB_ID, present),
+	sizeof(((struct EN_GNB_ID *)0)->present),
+	asn_MAP_EN_GNB_ID_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0,
+	1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_EN_GNB_ID = {
+	"EN-GNB-ID",
+	"EN-GNB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_EN_GNB_ID_constr_1, &asn_PER_type_EN_GNB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_EN_GNB_ID_1,
+	1,	/* Elements count */
+	&asn_SPC_EN_GNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ENB-ID-Choice.c b/e2sm/lib/ENB-ID-Choice.c
deleted file mode 100644
index 8ce2abe..0000000
--- a/e2sm/lib/ENB-ID-Choice.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ENB-ID-Choice.h"
-
-static int
-memb_enb_ID_macro_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 == 20)) {
-		/* 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_enb_ID_shortmacro_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 == 18)) {
-		/* 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_enb_ID_longmacro_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 == 21)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_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 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-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, 0, /* No default value */
-		"enb-ID-macro"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-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, 0, /* No default value */
-		"enb-ID-shortmacro"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-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, 0, /* No default value */
-		"enb-ID-longmacro"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */
-};
-asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = {
-	sizeof(struct ENB_ID_Choice),
-	offsetof(struct ENB_ID_Choice, _asn_ctx),
-	offsetof(struct ENB_ID_Choice, present),
-	sizeof(((struct ENB_ID_Choice *)0)->present),
-	asn_MAP_ENB_ID_Choice_tag2el_1,
-	3,	/* Count of tags in the map */
-	0, 0,
-	3	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = {
-	"ENB-ID-Choice",
-	"ENB-ID-Choice",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	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 },
-	asn_MBR_ENB_ID_Choice_1,
-	3,	/* Elements count */
-	&asn_SPC_ENB_ID_Choice_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ENB-ID.c b/e2sm/lib/ENB-ID.c
index e2a5f89..faab5f7 100644
--- a/e2sm/lib/ENB-ID.c
+++ b/e2sm/lib/ENB-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/ENB-UE-X2AP-ID-Extension.c b/e2sm/lib/ENB-UE-X2AP-ID-Extension.c
new file mode 100644
index 0000000..d9f8c31
--- /dev/null
+++ b/e2sm/lib/ENB-UE-X2AP-ID-Extension.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ENB-UE-X2AP-ID-Extension.h"
+
+int
+ENB_UE_X2AP_ID_Extension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_ENB_UE_X2AP_ID_Extension_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_Extension_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  12,  12,  0,  4095 }	/* (0..4095,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID_Extension = {
+	"ENB-UE-X2AP-ID-Extension",
+	"ENB-UE-X2AP-ID-Extension",
+	&asn_OP_NativeInteger,
+	asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1,
+	sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1)
+		/sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */
+	asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1)
+		/sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */
+	{ &asn_OER_type_ENB_UE_X2AP_ID_Extension_constr_1, &asn_PER_type_ENB_UE_X2AP_ID_Extension_constr_1, ENB_UE_X2AP_ID_Extension_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/ENB-UE-X2AP-ID.c b/e2sm/lib/ENB-UE-X2AP-ID.c
new file mode 100644
index 0000000..8af2e3f
--- /dev/null
+++ b/e2sm/lib/ENB-UE-X2AP-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ENB-UE-X2AP-ID.h"
+
+int
+ENB_UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_ENB_UE_X2AP_ID_constr_1 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..4095) */,
+	-1};
+asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_ENB_UE_X2AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID = {
+	"ENB-UE-X2AP-ID",
+	"ENB-UE-X2AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_ENB_UE_X2AP_ID_tags_1,
+	sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_ENB_UE_X2AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_ENB_UE_X2AP_ID_constr_1, &asn_PER_type_ENB_UE_X2AP_ID_constr_1, ENB_UE_X2AP_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/EPC-CUUP-PM-Format.c b/e2sm/lib/EPC-CUUP-PM-Format.c
deleted file mode 100644
index 5fb414a..0000000
--- a/e2sm/lib/EPC-CUUP-PM-Format.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "EPC-CUUP-PM-Format.h"
-
-#include "PerQCIReportListItemFormat.h"
-static int
-memb_perQCIReportList_cuup_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 256)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_perQCIReportList_cuup_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..256)) */};
-static asn_per_constraints_t asn_PER_type_perQCIReportList_cuup_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_perQCIReportList_cuup_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..256)) */};
-static asn_per_constraints_t asn_PER_memb_perQCIReportList_cuup_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_perQCIReportList_cuup_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PerQCIReportListItemFormat,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_perQCIReportList_cuup_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_cuup_specs_2 = {
-	sizeof(struct EPC_CUUP_PM_Format__perQCIReportList_cuup),
-	offsetof(struct EPC_CUUP_PM_Format__perQCIReportList_cuup, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_perQCIReportList_cuup_2 = {
-	"perQCIReportList-cuup",
-	"perQCIReportList-cuup",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_perQCIReportList_cuup_tags_2,
-	sizeof(asn_DEF_perQCIReportList_cuup_tags_2)
-		/sizeof(asn_DEF_perQCIReportList_cuup_tags_2[0]) - 1, /* 1 */
-	asn_DEF_perQCIReportList_cuup_tags_2,	/* Same as above */
-	sizeof(asn_DEF_perQCIReportList_cuup_tags_2)
-		/sizeof(asn_DEF_perQCIReportList_cuup_tags_2[0]), /* 2 */
-	{ &asn_OER_type_perQCIReportList_cuup_constr_2, &asn_PER_type_perQCIReportList_cuup_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_perQCIReportList_cuup_2,
-	1,	/* Single element */
-	&asn_SPC_perQCIReportList_cuup_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList_cuup),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_perQCIReportList_cuup_2,
-		0,
-		{ &asn_OER_memb_perQCIReportList_cuup_constr_2, &asn_PER_memb_perQCIReportList_cuup_constr_2,  memb_perQCIReportList_cuup_constraint_1 },
-		0, 0, /* No default value */
-		"perQCIReportList-cuup"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList-cuup */
-};
-asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = {
-	sizeof(struct EPC_CUUP_PM_Format),
-	offsetof(struct EPC_CUUP_PM_Format, _asn_ctx),
-	asn_MAP_EPC_CUUP_PM_Format_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_EPC_CUUP_PM_Format = {
-	"EPC-CUUP-PM-Format",
-	"EPC-CUUP-PM-Format",
-	&asn_OP_SEQUENCE,
-	asn_DEF_EPC_CUUP_PM_Format_tags_1,
-	sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1)
-		/sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */
-	asn_DEF_EPC_CUUP_PM_Format_tags_1,	/* Same as above */
-	sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1)
-		/sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_EPC_CUUP_PM_Format_1,
-	1,	/* Elements count */
-	&asn_SPC_EPC_CUUP_PM_Format_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/EPC-DU-PM-Container.c b/e2sm/lib/EPC-DU-PM-Container.c
deleted file mode 100644
index 801080e..0000000
--- a/e2sm/lib/EPC-DU-PM-Container.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "EPC-DU-PM-Container.h"
-
-#include "PerQCIReportListItem.h"
-static int
-memb_perQCIReportList_du_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 256)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_perQCIReportList_du_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..256)) */};
-static asn_per_constraints_t asn_PER_type_perQCIReportList_du_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_perQCIReportList_du_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..256)) */};
-static asn_per_constraints_t asn_PER_memb_perQCIReportList_du_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_perQCIReportList_du_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PerQCIReportListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_perQCIReportList_du_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_du_specs_2 = {
-	sizeof(struct EPC_DU_PM_Container__perQCIReportList_du),
-	offsetof(struct EPC_DU_PM_Container__perQCIReportList_du, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_perQCIReportList_du_2 = {
-	"perQCIReportList-du",
-	"perQCIReportList-du",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_perQCIReportList_du_tags_2,
-	sizeof(asn_DEF_perQCIReportList_du_tags_2)
-		/sizeof(asn_DEF_perQCIReportList_du_tags_2[0]) - 1, /* 1 */
-	asn_DEF_perQCIReportList_du_tags_2,	/* Same as above */
-	sizeof(asn_DEF_perQCIReportList_du_tags_2)
-		/sizeof(asn_DEF_perQCIReportList_du_tags_2[0]), /* 2 */
-	{ &asn_OER_type_perQCIReportList_du_constr_2, &asn_PER_type_perQCIReportList_du_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_perQCIReportList_du_2,
-	1,	/* Single element */
-	&asn_SPC_perQCIReportList_du_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList_du),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_perQCIReportList_du_2,
-		0,
-		{ &asn_OER_memb_perQCIReportList_du_constr_2, &asn_PER_memb_perQCIReportList_du_constr_2,  memb_perQCIReportList_du_constraint_1 },
-		0, 0, /* No default value */
-		"perQCIReportList-du"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList-du */
-};
-asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = {
-	sizeof(struct EPC_DU_PM_Container),
-	offsetof(struct EPC_DU_PM_Container, _asn_ctx),
-	asn_MAP_EPC_DU_PM_Container_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_EPC_DU_PM_Container = {
-	"EPC-DU-PM-Container",
-	"EPC-DU-PM-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_EPC_DU_PM_Container_tags_1,
-	sizeof(asn_DEF_EPC_DU_PM_Container_tags_1)
-		/sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */
-	asn_DEF_EPC_DU_PM_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_EPC_DU_PM_Container_tags_1)
-		/sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_EPC_DU_PM_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_EPC_DU_PM_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/EUTRA-CGI.c b/e2sm/lib/EUTRA-CGI.c
new file mode 100644
index 0000000..985c769
--- /dev/null
+++ b/e2sm/lib/EUTRA-CGI.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EUTRA-CGI.h"
+
+asn_TYPE_member_t asn_MBR_EUTRA_CGI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EUTRA_CGI, pLMNIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNIdentity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct EUTRA_CGI, eUTRACellIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EUTRACellIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRACellIdentity"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EUTRA_CGI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EUTRA_CGI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRACellIdentity */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EUTRA_CGI_specs_1 = {
+	sizeof(struct EUTRA_CGI),
+	offsetof(struct EUTRA_CGI, _asn_ctx),
+	asn_MAP_EUTRA_CGI_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_EUTRA_CGI = {
+	"EUTRA-CGI",
+	"EUTRA-CGI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EUTRA_CGI_tags_1,
+	sizeof(asn_DEF_EUTRA_CGI_tags_1)
+		/sizeof(asn_DEF_EUTRA_CGI_tags_1[0]), /* 1 */
+	asn_DEF_EUTRA_CGI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EUTRA_CGI_tags_1)
+		/sizeof(asn_DEF_EUTRA_CGI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EUTRA_CGI_1,
+	2,	/* Elements count */
+	&asn_SPC_EUTRA_CGI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EUTRACellIdentity.c b/e2sm/lib/EUTRACellIdentity.c
new file mode 100644
index 0000000..cefaeb9
--- /dev/null
+++ b/e2sm/lib/EUTRACellIdentity.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EUTRACellIdentity.h"
+
+int
+EUTRACellIdentity_constraint(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 == 28)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_EUTRACellIdentity_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	28	/* (SIZE(28..28)) */};
+asn_per_constraints_t asn_PER_type_EUTRACellIdentity_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  28,  28 }	/* (SIZE(28..28)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_EUTRACellIdentity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EUTRACellIdentity = {
+	"EUTRACellIdentity",
+	"EUTRACellIdentity",
+	&asn_OP_BIT_STRING,
+	asn_DEF_EUTRACellIdentity_tags_1,
+	sizeof(asn_DEF_EUTRACellIdentity_tags_1)
+		/sizeof(asn_DEF_EUTRACellIdentity_tags_1[0]), /* 1 */
+	asn_DEF_EUTRACellIdentity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EUTRACellIdentity_tags_1)
+		/sizeof(asn_DEF_EUTRACellIdentity_tags_1[0]), /* 1 */
+	{ &asn_OER_type_EUTRACellIdentity_constr_1, &asn_PER_type_EUTRACellIdentity_constr_1, EUTRACellIdentity_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Group.c b/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Group.c
new file mode 100644
index 0000000..2f6269f
--- /dev/null
+++ b/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Group.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-Cell-Info-Item-Choice-Group.h"
+
+asn_TYPE_member_t asn_MBR_EventTrigger_Cell_Info_Item_Choice_Group_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_Cell_Info_Item_Choice_Group, ranParameterTesting),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameterTesting"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_Cell_Info_Item_Choice_Group_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameterTesting */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_Cell_Info_Item_Choice_Group_specs_1 = {
+	sizeof(struct EventTrigger_Cell_Info_Item_Choice_Group),
+	offsetof(struct EventTrigger_Cell_Info_Item_Choice_Group, _asn_ctx),
+	asn_MAP_EventTrigger_Cell_Info_Item_Choice_Group_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_EventTrigger_Cell_Info_Item_Choice_Group = {
+	"EventTrigger-Cell-Info-Item-Choice-Group",
+	"EventTrigger-Cell-Info-Item-Choice-Group",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1,
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_Cell_Info_Item_Choice_Group_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_Cell_Info_Item_Choice_Group_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Individual.c b/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Individual.c
new file mode 100644
index 0000000..1cf5866
--- /dev/null
+++ b/e2sm/lib/EventTrigger-Cell-Info-Item-Choice-Individual.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-Cell-Info-Item-Choice-Individual.h"
+
+asn_TYPE_member_t asn_MBR_EventTrigger_Cell_Info_Item_Choice_Individual_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_Cell_Info_Item_Choice_Individual, cellGlobalID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellGlobalID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_Cell_Info_Item_Choice_Individual_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellGlobalID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_Cell_Info_Item_Choice_Individual_specs_1 = {
+	sizeof(struct EventTrigger_Cell_Info_Item_Choice_Individual),
+	offsetof(struct EventTrigger_Cell_Info_Item_Choice_Individual, _asn_ctx),
+	asn_MAP_EventTrigger_Cell_Info_Item_Choice_Individual_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_EventTrigger_Cell_Info_Item_Choice_Individual = {
+	"EventTrigger-Cell-Info-Item-Choice-Individual",
+	"EventTrigger-Cell-Info-Item-Choice-Individual",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1,
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_Cell_Info_Item_Choice_Individual_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_Cell_Info_Item_Choice_Individual_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-Cell-Info-Item.c b/e2sm/lib/EventTrigger-Cell-Info-Item.c
new file mode 100644
index 0000000..e96053a
--- /dev/null
+++ b/e2sm/lib/EventTrigger-Cell-Info-Item.c
@@ -0,0 +1,131 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-Cell-Info-Item.h"
+
+#include "EventTrigger-Cell-Info-Item-Choice-Individual.h"
+#include "EventTrigger-Cell-Info-Item-Choice-Group.h"
+static asn_oer_constraints_t asn_OER_type_cellType_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_cellType_constr_3 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 asn_TYPE_member_t asn_MBR_cellType_3[] = {
+	{ ATF_POINTER, 0, offsetof(struct EventTrigger_Cell_Info_Item__cellType, choice.cellType_Choice_Individual),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_Cell_Info_Item_Choice_Individual,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellType-Choice-Individual"
+		},
+	{ ATF_POINTER, 0, offsetof(struct EventTrigger_Cell_Info_Item__cellType, choice.cellType_Choice_Group),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_Cell_Info_Item_Choice_Group,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellType-Choice-Group"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_cellType_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellType-Choice-Individual */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellType-Choice-Group */
+};
+static asn_CHOICE_specifics_t asn_SPC_cellType_specs_3 = {
+	sizeof(struct EventTrigger_Cell_Info_Item__cellType),
+	offsetof(struct EventTrigger_Cell_Info_Item__cellType, _asn_ctx),
+	offsetof(struct EventTrigger_Cell_Info_Item__cellType, present),
+	sizeof(((struct EventTrigger_Cell_Info_Item__cellType *)0)->present),
+	asn_MAP_cellType_tag2el_3,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_cellType_3 = {
+	"cellType",
+	"cellType",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_cellType_constr_3, &asn_PER_type_cellType_constr_3, CHOICE_constraint },
+	asn_MBR_cellType_3,
+	2,	/* Elements count */
+	&asn_SPC_cellType_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_EventTrigger_Cell_Info_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_Cell_Info_Item, eventTriggerCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTrigger_Cell_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTriggerCellID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_Cell_Info_Item, cellType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_cellType_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellType"
+		},
+	{ ATF_POINTER, 1, offsetof(struct EventTrigger_Cell_Info_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_EventTrigger_Cell_Info_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_EventTrigger_Cell_Info_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_Cell_Info_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventTriggerCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_Cell_Info_Item_specs_1 = {
+	sizeof(struct EventTrigger_Cell_Info_Item),
+	offsetof(struct EventTrigger_Cell_Info_Item, _asn_ctx),
+	asn_MAP_EventTrigger_Cell_Info_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_EventTrigger_Cell_Info_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_EventTrigger_Cell_Info_Item = {
+	"EventTrigger-Cell-Info-Item",
+	"EventTrigger-Cell-Info-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_Cell_Info_Item_tags_1,
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_Cell_Info_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_Cell_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_Cell_Info_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_EventTrigger_Cell_Info_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-Cell-Info.c b/e2sm/lib/EventTrigger-Cell-Info.c
new file mode 100644
index 0000000..30273f7
--- /dev/null
+++ b/e2sm/lib/EventTrigger-Cell-Info.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-Cell-Info.h"
+
+#include "EventTrigger-Cell-Info-Item.h"
+static int
+memb_cellInfo_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_cellInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_cellInfo_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_EventTrigger_Cell_Info_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_cellInfo_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_cellInfo_List_specs_2 = {
+	sizeof(struct EventTrigger_Cell_Info__cellInfo_List),
+	offsetof(struct EventTrigger_Cell_Info__cellInfo_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_cellInfo_List_2 = {
+	"cellInfo-List",
+	"cellInfo-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_cellInfo_List_tags_2,
+	sizeof(asn_DEF_cellInfo_List_tags_2)
+		/sizeof(asn_DEF_cellInfo_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_cellInfo_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_cellInfo_List_tags_2)
+		/sizeof(asn_DEF_cellInfo_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_cellInfo_List_constr_2, &asn_PER_type_cellInfo_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_cellInfo_List_2,
+	1,	/* Single element */
+	&asn_SPC_cellInfo_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_EventTrigger_Cell_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_Cell_Info, cellInfo_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_cellInfo_List_2,
+		0,
+		{ &asn_OER_memb_cellInfo_List_constr_2, &asn_PER_memb_cellInfo_List_constr_2,  memb_cellInfo_List_constraint_1 },
+		0, 0, /* No default value */
+		"cellInfo-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_Cell_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_Cell_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellInfo-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_Cell_Info_specs_1 = {
+	sizeof(struct EventTrigger_Cell_Info),
+	offsetof(struct EventTrigger_Cell_Info, _asn_ctx),
+	asn_MAP_EventTrigger_Cell_Info_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_EventTrigger_Cell_Info = {
+	"EventTrigger-Cell-Info",
+	"EventTrigger-Cell-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_Cell_Info_tags_1,
+	sizeof(asn_DEF_EventTrigger_Cell_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_Cell_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_Cell_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_Cell_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_Cell_Info_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_Cell_Info_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Group.c b/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Group.c
new file mode 100644
index 0000000..d819bc1
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Group.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UE-Info-Item-Choice-Group.h"
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UE_Info_Item_Choice_Group_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info_Item_Choice_Group, ranParameterTesting),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameterTesting"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UE_Info_Item_Choice_Group_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameterTesting */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UE_Info_Item_Choice_Group_specs_1 = {
+	sizeof(struct EventTrigger_UE_Info_Item_Choice_Group),
+	offsetof(struct EventTrigger_UE_Info_Item_Choice_Group, _asn_ctx),
+	asn_MAP_EventTrigger_UE_Info_Item_Choice_Group_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_EventTrigger_UE_Info_Item_Choice_Group = {
+	"EventTrigger-UE-Info-Item-Choice-Group",
+	"EventTrigger-UE-Info-Item-Choice-Group",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1,
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Group_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UE_Info_Item_Choice_Group_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_UE_Info_Item_Choice_Group_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Individual.c b/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Individual.c
new file mode 100644
index 0000000..d822187
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UE-Info-Item-Choice-Individual.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UE-Info-Item-Choice-Individual.h"
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UE_Info_Item_Choice_Individual_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info_Item_Choice_Individual, ueID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info_Item_Choice_Individual, ranParameterTesting),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameterTesting"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UE_Info_Item_Choice_Individual_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameterTesting */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UE_Info_Item_Choice_Individual_specs_1 = {
+	sizeof(struct EventTrigger_UE_Info_Item_Choice_Individual),
+	offsetof(struct EventTrigger_UE_Info_Item_Choice_Individual, _asn_ctx),
+	asn_MAP_EventTrigger_UE_Info_Item_Choice_Individual_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_EventTrigger_UE_Info_Item_Choice_Individual = {
+	"EventTrigger-UE-Info-Item-Choice-Individual",
+	"EventTrigger-UE-Info-Item-Choice-Individual",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1,
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UE_Info_Item_Choice_Individual_1,
+	2,	/* Elements count */
+	&asn_SPC_EventTrigger_UE_Info_Item_Choice_Individual_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UE-Info-Item.c b/e2sm/lib/EventTrigger-UE-Info-Item.c
new file mode 100644
index 0000000..dfb34d0
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UE-Info-Item.c
@@ -0,0 +1,131 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UE-Info-Item.h"
+
+#include "EventTrigger-UE-Info-Item-Choice-Individual.h"
+#include "EventTrigger-UE-Info-Item-Choice-Group.h"
+static asn_oer_constraints_t asn_OER_type_ueType_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ueType_constr_3 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 asn_TYPE_member_t asn_MBR_ueType_3[] = {
+	{ ATF_POINTER, 0, offsetof(struct EventTrigger_UE_Info_Item__ueType, choice.ueType_Choice_Individual),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info_Item_Choice_Individual,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueType-Choice-Individual"
+		},
+	{ ATF_POINTER, 0, offsetof(struct EventTrigger_UE_Info_Item__ueType, choice.ueType_Choice_Group),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EventTrigger_UE_Info_Item_Choice_Group,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueType-Choice-Group"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ueType_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueType-Choice-Individual */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueType-Choice-Group */
+};
+static asn_CHOICE_specifics_t asn_SPC_ueType_specs_3 = {
+	sizeof(struct EventTrigger_UE_Info_Item__ueType),
+	offsetof(struct EventTrigger_UE_Info_Item__ueType, _asn_ctx),
+	offsetof(struct EventTrigger_UE_Info_Item__ueType, present),
+	sizeof(((struct EventTrigger_UE_Info_Item__ueType *)0)->present),
+	asn_MAP_ueType_tag2el_3,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ueType_3 = {
+	"ueType",
+	"ueType",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ueType_constr_3, &asn_PER_type_ueType_constr_3, CHOICE_constraint },
+	asn_MBR_ueType_3,
+	2,	/* Elements count */
+	&asn_SPC_ueType_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UE_Info_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info_Item, eventTriggerUEID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTrigger_UE_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventTriggerUEID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info_Item, ueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ueType_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueType"
+		},
+	{ ATF_POINTER, 1, offsetof(struct EventTrigger_UE_Info_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_EventTrigger_UE_Info_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UE_Info_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UE_Info_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventTriggerUEID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ueType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UE_Info_Item_specs_1 = {
+	sizeof(struct EventTrigger_UE_Info_Item),
+	offsetof(struct EventTrigger_UE_Info_Item, _asn_ctx),
+	asn_MAP_EventTrigger_UE_Info_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_EventTrigger_UE_Info_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_EventTrigger_UE_Info_Item = {
+	"EventTrigger-UE-Info-Item",
+	"EventTrigger-UE-Info-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UE_Info_Item_tags_1,
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UE_Info_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UE_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UE_Info_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_EventTrigger_UE_Info_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UE-Info.c b/e2sm/lib/EventTrigger-UE-Info.c
new file mode 100644
index 0000000..85a6492
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UE-Info.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UE-Info.h"
+
+#include "EventTrigger-UE-Info-Item.h"
+static int
+memb_ueInfo_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ueInfo_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ueInfo_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_EventTrigger_UE_Info_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ueInfo_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ueInfo_List_specs_2 = {
+	sizeof(struct EventTrigger_UE_Info__ueInfo_List),
+	offsetof(struct EventTrigger_UE_Info__ueInfo_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ueInfo_List_2 = {
+	"ueInfo-List",
+	"ueInfo-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ueInfo_List_tags_2,
+	sizeof(asn_DEF_ueInfo_List_tags_2)
+		/sizeof(asn_DEF_ueInfo_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ueInfo_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ueInfo_List_tags_2)
+		/sizeof(asn_DEF_ueInfo_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ueInfo_List_constr_2, &asn_PER_type_ueInfo_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ueInfo_List_2,
+	1,	/* Single element */
+	&asn_SPC_ueInfo_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UE_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UE_Info, ueInfo_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ueInfo_List_2,
+		0,
+		{ &asn_OER_memb_ueInfo_List_constr_2, &asn_PER_memb_ueInfo_List_constr_2,  memb_ueInfo_List_constraint_1 },
+		0, 0, /* No default value */
+		"ueInfo-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UE_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UE_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueInfo-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UE_Info_specs_1 = {
+	sizeof(struct EventTrigger_UE_Info),
+	offsetof(struct EventTrigger_UE_Info, _asn_ctx),
+	asn_MAP_EventTrigger_UE_Info_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_EventTrigger_UE_Info = {
+	"EventTrigger-UE-Info",
+	"EventTrigger-UE-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UE_Info_tags_1,
+	sizeof(asn_DEF_EventTrigger_UE_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UE_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UE_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UE_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UE_Info_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_UE_Info_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UEevent-Info-Item.c b/e2sm/lib/EventTrigger-UEevent-Info-Item.c
new file mode 100644
index 0000000..868fa6b
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UEevent-Info-Item.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UEevent-Info-Item.h"
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UEevent_Info_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UEevent_Info_Item, ueEventID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_EventTrigger_UEevent_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ueEventID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct EventTrigger_UEevent_Info_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_EventTrigger_UEevent_Info_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UEevent_Info_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UEevent_Info_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueEventID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UEevent_Info_Item_specs_1 = {
+	sizeof(struct EventTrigger_UEevent_Info_Item),
+	offsetof(struct EventTrigger_UEevent_Info_Item, _asn_ctx),
+	asn_MAP_EventTrigger_UEevent_Info_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_EventTrigger_UEevent_Info_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_EventTrigger_UEevent_Info_Item = {
+	"EventTrigger-UEevent-Info-Item",
+	"EventTrigger-UEevent-Info-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UEevent_Info_Item_tags_1,
+	sizeof(asn_DEF_EventTrigger_UEevent_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UEevent_Info_Item_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UEevent_Info_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UEevent_Info_Item_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UEevent_Info_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UEevent_Info_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_EventTrigger_UEevent_Info_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/EventTrigger-UEevent-Info.c b/e2sm/lib/EventTrigger-UEevent-Info.c
new file mode 100644
index 0000000..77a5ed7
--- /dev/null
+++ b/e2sm/lib/EventTrigger-UEevent-Info.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "EventTrigger-UEevent-Info.h"
+
+#include "EventTrigger-UEevent-Info-Item.h"
+static int
+memb_ueEvent_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ueEvent_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ueEvent_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ueEvent_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ueEvent_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ueEvent_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_EventTrigger_UEevent_Info_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ueEvent_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ueEvent_List_specs_2 = {
+	sizeof(struct EventTrigger_UEevent_Info__ueEvent_List),
+	offsetof(struct EventTrigger_UEevent_Info__ueEvent_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ueEvent_List_2 = {
+	"ueEvent-List",
+	"ueEvent-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ueEvent_List_tags_2,
+	sizeof(asn_DEF_ueEvent_List_tags_2)
+		/sizeof(asn_DEF_ueEvent_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ueEvent_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ueEvent_List_tags_2)
+		/sizeof(asn_DEF_ueEvent_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ueEvent_List_constr_2, &asn_PER_type_ueEvent_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ueEvent_List_2,
+	1,	/* Single element */
+	&asn_SPC_ueEvent_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_EventTrigger_UEevent_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct EventTrigger_UEevent_Info, ueEvent_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ueEvent_List_2,
+		0,
+		{ &asn_OER_memb_ueEvent_List_constr_2, &asn_PER_memb_ueEvent_List_constr_2,  memb_ueEvent_List_constraint_1 },
+		0, 0, /* No default value */
+		"ueEvent-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_EventTrigger_UEevent_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_EventTrigger_UEevent_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueEvent-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_EventTrigger_UEevent_Info_specs_1 = {
+	sizeof(struct EventTrigger_UEevent_Info),
+	offsetof(struct EventTrigger_UEevent_Info, _asn_ctx),
+	asn_MAP_EventTrigger_UEevent_Info_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_EventTrigger_UEevent_Info = {
+	"EventTrigger-UEevent-Info",
+	"EventTrigger-UEevent-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_EventTrigger_UEevent_Info_tags_1,
+	sizeof(asn_DEF_EventTrigger_UEevent_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UEevent_Info_tags_1[0]), /* 1 */
+	asn_DEF_EventTrigger_UEevent_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EventTrigger_UEevent_Info_tags_1)
+		/sizeof(asn_DEF_EventTrigger_UEevent_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_EventTrigger_UEevent_Info_1,
+	1,	/* Elements count */
+	&asn_SPC_EventTrigger_UEevent_Info_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/FGC-CUUP-PM-Format.c b/e2sm/lib/FGC-CUUP-PM-Format.c
deleted file mode 100644
index 634e092..0000000
--- a/e2sm/lib/FGC-CUUP-PM-Format.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "FGC-CUUP-PM-Format.h"
-
-#include "SliceToReportListItem.h"
-static int
-memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 1024)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..1024)) */};
-static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..1024)) */};
-static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_SliceToReportListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = {
-	sizeof(struct FGC_CUUP_PM_Format__sliceToReportList),
-	offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = {
-	"sliceToReportList",
-	"sliceToReportList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_sliceToReportList_tags_2,
-	sizeof(asn_DEF_sliceToReportList_tags_2)
-		/sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sliceToReportList_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sliceToReportList_tags_2)
-		/sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */
-	{ &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_sliceToReportList_2,
-	1,	/* Single element */
-	&asn_SPC_sliceToReportList_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_sliceToReportList_2,
-		0,
-		{ &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2,  memb_sliceToReportList_constraint_1 },
-		0, 0, /* No default value */
-		"sliceToReportList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = {
-	sizeof(struct FGC_CUUP_PM_Format),
-	offsetof(struct FGC_CUUP_PM_Format, _asn_ctx),
-	asn_MAP_FGC_CUUP_PM_Format_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_FGC_CUUP_PM_Format = {
-	"FGC-CUUP-PM-Format",
-	"FGC-CUUP-PM-Format",
-	&asn_OP_SEQUENCE,
-	asn_DEF_FGC_CUUP_PM_Format_tags_1,
-	sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1)
-		/sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */
-	asn_DEF_FGC_CUUP_PM_Format_tags_1,	/* Same as above */
-	sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1)
-		/sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_FGC_CUUP_PM_Format_1,
-	1,	/* Elements count */
-	&asn_SPC_FGC_CUUP_PM_Format_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/FGC-DU-PM-Container.c b/e2sm/lib/FGC-DU-PM-Container.c
deleted file mode 100644
index 859867f..0000000
--- a/e2sm/lib/FGC-DU-PM-Container.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "FGC-DU-PM-Container.h"
-
-#include "SlicePerPlmnPerCellListItem.h"
-static int
-memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 1024)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..1024)) */};
-static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..1024)) */};
-static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_SlicePerPlmnPerCellListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = {
-	sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList),
-	offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = {
-	"slicePerPlmnPerCellList",
-	"slicePerPlmnPerCellList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_slicePerPlmnPerCellList_tags_2,
-	sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2)
-		/sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */
-	asn_DEF_slicePerPlmnPerCellList_tags_2,	/* Same as above */
-	sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2)
-		/sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */
-	{ &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_slicePerPlmnPerCellList_2,
-	1,	/* Single element */
-	&asn_SPC_slicePerPlmnPerCellList_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_slicePerPlmnPerCellList_2,
-		0,
-		{ &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2,  memb_slicePerPlmnPerCellList_constraint_1 },
-		0, 0, /* No default value */
-		"slicePerPlmnPerCellList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = {
-	sizeof(struct FGC_DU_PM_Container),
-	offsetof(struct FGC_DU_PM_Container, _asn_ctx),
-	asn_MAP_FGC_DU_PM_Container_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_FGC_DU_PM_Container = {
-	"FGC-DU-PM-Container",
-	"FGC-DU-PM-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_FGC_DU_PM_Container_tags_1,
-	sizeof(asn_DEF_FGC_DU_PM_Container_tags_1)
-		/sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */
-	asn_DEF_FGC_DU_PM_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_FGC_DU_PM_Container_tags_1)
-		/sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_FGC_DU_PM_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_FGC_DU_PM_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/FQIPERSlicesPerPlmnListItem.c b/e2sm/lib/FQIPERSlicesPerPlmnListItem.c
deleted file mode 100644
index e875ee2..0000000
--- a/e2sm/lib/FQIPERSlicesPerPlmnListItem.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "FQIPERSlicesPerPlmnListItem.h"
-
-static int
-memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const INTEGER_t *st = (const INTEGER_t *)sptr;
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if(asn_INTEGER2long(st, &value)) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value too large (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if((value >= 0 && value <= 10000000000)) {
-		/* 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_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const INTEGER_t *st = (const INTEGER_t *)sptr;
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if(asn_INTEGER2long(st, &value)) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value too large (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if((value >= 0 && value <= 10000000000)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  34, -1,  0,  10000000000 }	/* (0..10000000000,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  34, -1,  0,  10000000000 }	/* (0..10000000000,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_FiveQI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"fiveQI"
-		},
-	{ ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_INTEGER,
-		0,
-		{ &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3,  memb_pDCPBytesDL_constraint_1 },
-		0, 0, /* No default value */
-		"pDCPBytesDL"
-		},
-	{ ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_INTEGER,
-		0,
-		{ &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4,  memb_pDCPBytesUL_constraint_1 },
-		0, 0, /* No default value */
-		"pDCPBytesUL"
-		},
-};
-static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */
-};
-asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = {
-	sizeof(struct FQIPERSlicesPerPlmnListItem),
-	offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx),
-	asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = {
-	"FQIPERSlicesPerPlmnListItem",
-	"FQIPERSlicesPerPlmnListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1,
-	sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1)
-		/sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */
-	asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1)
-		/sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_FQIPERSlicesPerPlmnListItem_1,
-	3,	/* Elements count */
-	&asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sm/lib/FQIPERSlicesPerPlmnPerCellListItem.c
deleted file mode 100644
index d69f8a1..0000000
--- a/e2sm/lib/FQIPERSlicesPerPlmnPerCellListItem.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "FQIPERSlicesPerPlmnPerCellListItem.h"
-
-static int
-memb_dl_PRBUsage_constraint_1(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 <= 273)) {
-		/* 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_ul_PRBUsage_constraint_1(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 <= 273)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..273) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 9,  9,  0,  273 }	/* (0..273) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..273) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 9,  9,  0,  273 }	/* (0..273) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_FiveQI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"fiveQI"
-		},
-	{ ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3,  memb_dl_PRBUsage_constraint_1 },
-		0, 0, /* No default value */
-		"dl-PRBUsage"
-		},
-	{ ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4,  memb_ul_PRBUsage_constraint_1 },
-		0, 0, /* No default value */
-		"ul-PRBUsage"
-		},
-};
-static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */
-};
-asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = {
-	sizeof(struct FQIPERSlicesPerPlmnPerCellListItem),
-	offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx),
-	asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = {
-	"FQIPERSlicesPerPlmnPerCellListItem",
-	"FQIPERSlicesPerPlmnPerCellListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1,
-	sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */
-	asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1,
-	3,	/* Elements count */
-	&asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/FiveGS-TAC.c b/e2sm/lib/FiveGS-TAC.c
new file mode 100644
index 0000000..48ff439
--- /dev/null
+++ b/e2sm/lib/FiveGS-TAC.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "FiveGS-TAC.h"
+
+int
+FiveGS_TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_FiveGS_TAC_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	3	/* (SIZE(3..3)) */};
+asn_per_constraints_t asn_PER_type_FiveGS_TAC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_FiveGS_TAC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_FiveGS_TAC = {
+	"FiveGS-TAC",
+	"FiveGS-TAC",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_FiveGS_TAC_tags_1,
+	sizeof(asn_DEF_FiveGS_TAC_tags_1)
+		/sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */
+	asn_DEF_FiveGS_TAC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_FiveGS_TAC_tags_1)
+		/sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */
+	{ &asn_OER_type_FiveGS_TAC_constr_1, &asn_PER_type_FiveGS_TAC_constr_1, FiveGS_TAC_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/FiveQI.c b/e2sm/lib/FiveQI.c
index 15d32c9..c19218b 100644
--- a/e2sm/lib/FiveQI.c
+++ b/e2sm/lib/FiveQI.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/FreqBandNrItem.c b/e2sm/lib/FreqBandNrItem.c
new file mode 100644
index 0000000..d5cff17
--- /dev/null
+++ b/e2sm/lib/FreqBandNrItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "FreqBandNrItem.h"
+
+static int
+memb_freqBandIndicatorNr_constraint_1(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 >= 1 && value <= 1024)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1024 }	/* (1..1024,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_FreqBandNrItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem, freqBandIndicatorNr),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_freqBandIndicatorNr_constr_2, &asn_PER_memb_freqBandIndicatorNr_constr_2,  memb_freqBandIndicatorNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandIndicatorNr"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_FreqBandNrItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_FreqBandNrItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* freqBandIndicatorNr */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_specs_1 = {
+	sizeof(struct FreqBandNrItem),
+	offsetof(struct FreqBandNrItem, _asn_ctx),
+	asn_MAP_FreqBandNrItem_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_FreqBandNrItem = {
+	"FreqBandNrItem",
+	"FreqBandNrItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_FreqBandNrItem_tags_1,
+	sizeof(asn_DEF_FreqBandNrItem_tags_1)
+		/sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */
+	asn_DEF_FreqBandNrItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_FreqBandNrItem_tags_1)
+		/sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_FreqBandNrItem_1,
+	1,	/* Elements count */
+	&asn_SPC_FreqBandNrItem_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c b/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c
new file mode 100644
index 0000000..d18a479
--- /dev/null
+++ b/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GNB-CU-CP-UE-E1AP-ID.h"
+
+int
+GNB_CU_CP_UE_E1AP_ID_constraint(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;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_UE_E1AP_ID_constr_1 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..4294967295) */,
+	-1};
+asn_per_constraints_t asn_PER_type_GNB_CU_CP_UE_E1AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_GNB_CU_CP_UE_E1AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_UE_E1AP_ID = {
+	"GNB-CU-CP-UE-E1AP-ID",
+	"GNB-CU-CP-UE-E1AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1,
+	sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1)
+		/sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1)
+		/sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_GNB_CU_CP_UE_E1AP_ID_constr_1, &asn_PER_type_GNB_CU_CP_UE_E1AP_ID_constr_1, GNB_CU_CP_UE_E1AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_GNB_CU_CP_UE_E1AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GNB-CU-UE-F1AP-ID.c b/e2sm/lib/GNB-CU-UE-F1AP-ID.c
new file mode 100644
index 0000000..5b6c575
--- /dev/null
+++ b/e2sm/lib/GNB-CU-UE-F1AP-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GNB-CU-UE-F1AP-ID.h"
+
+int
+GNB_CU_UE_F1AP_ID_constraint(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;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_GNB_CU_UE_F1AP_ID_constr_1 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..4294967295) */,
+	-1};
+asn_per_constraints_t asn_PER_type_GNB_CU_UE_F1AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_GNB_CU_UE_F1AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_GNB_CU_UE_F1AP_ID = {
+	"GNB-CU-UE-F1AP-ID",
+	"GNB-CU-UE-F1AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_GNB_CU_UE_F1AP_ID_tags_1,
+	sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1)
+		/sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_GNB_CU_UE_F1AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1)
+		/sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_GNB_CU_UE_F1AP_ID_constr_1, &asn_PER_type_GNB_CU_UE_F1AP_ID_constr_1, GNB_CU_UE_F1AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_GNB_CU_UE_F1AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GNB-CU-UP-ID.c b/e2sm/lib/GNB-CU-UP-ID.c
index a6e0e86..f4c8012 100644
--- a/e2sm/lib/GNB-CU-UP-ID.c
+++ b/e2sm/lib/GNB-CU-UP-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/GNB-DU-ID.c b/e2sm/lib/GNB-DU-ID.c
index bae29c8..3bbd52c 100644
--- a/e2sm/lib/GNB-DU-ID.c
+++ b/e2sm/lib/GNB-DU-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/GNB-ID-Choice.c b/e2sm/lib/GNB-ID-Choice.c
deleted file mode 100644
index 34d5450..0000000
--- a/e2sm/lib/GNB-ID-Choice.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GNB-ID-Choice.h"
-
-static int
-memb_gnb_ID_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 >= 22 && size <= 32)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_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 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-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, 0, /* No default value */
-		"gnb-ID"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */
-};
-asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = {
-	sizeof(struct GNB_ID_Choice),
-	offsetof(struct GNB_ID_Choice, _asn_ctx),
-	offsetof(struct GNB_ID_Choice, present),
-	sizeof(((struct GNB_ID_Choice *)0)->present),
-	asn_MAP_GNB_ID_Choice_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0,
-	1	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = {
-	"GNB-ID-Choice",
-	"GNB-ID-Choice",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	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 },
-	asn_MBR_GNB_ID_Choice_1,
-	1,	/* Elements count */
-	&asn_SPC_GNB_ID_Choice_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ENGNB-ID.c b/e2sm/lib/GNB-ID.c
similarity index 69%
rename from e2sm/lib/ENGNB-ID.c
rename to e2sm/lib/GNB-ID.c
index 5577266..ccde106 100644
--- a/e2sm/lib/ENGNB-ID.c
+++ b/e2sm/lib/GNB-ID.c
@@ -1,11 +1,11 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
-#include "ENGNB-ID.h"
+#include "GNB-ID.h"
 
 static int
 memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
@@ -46,16 +46,16 @@
 	{ 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 = {
+static asn_oer_constraints_t asn_OER_type_GNB_ID_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1};
-asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_GNB_ID_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID),
+asn_TYPE_member_t asn_MBR_GNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GNB_ID, choice.gNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_BIT_STRING,
@@ -65,30 +65,30 @@
 		"gNB-ID"
 		},
 };
-static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = {
+static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */
 };
-asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = {
-	sizeof(struct ENGNB_ID),
-	offsetof(struct ENGNB_ID, _asn_ctx),
-	offsetof(struct ENGNB_ID, present),
-	sizeof(((struct ENGNB_ID *)0)->present),
-	asn_MAP_ENGNB_ID_tag2el_1,
+asn_CHOICE_specifics_t asn_SPC_GNB_ID_specs_1 = {
+	sizeof(struct GNB_ID),
+	offsetof(struct GNB_ID, _asn_ctx),
+	offsetof(struct GNB_ID, present),
+	sizeof(((struct GNB_ID *)0)->present),
+	asn_MAP_GNB_ID_tag2el_1,
 	1,	/* Count of tags in the map */
 	0, 0,
 	1	/* Extensions start */
 };
-asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = {
-	"ENGNB-ID",
-	"ENGNB-ID",
+asn_TYPE_descriptor_t asn_DEF_GNB_ID = {
+	"GNB-ID",
+	"GNB-ID",
 	&asn_OP_CHOICE,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	{ &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint },
-	asn_MBR_ENGNB_ID_1,
+	{ &asn_OER_type_GNB_ID_constr_1, &asn_PER_type_GNB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_GNB_ID_1,
 	1,	/* Elements count */
-	&asn_SPC_ENGNB_ID_specs_1	/* Additional specs */
+	&asn_SPC_GNB_ID_specs_1	/* Additional specs */
 };
 
diff --git a/e2sm/lib/GUAMI.c b/e2sm/lib/GUAMI.c
new file mode 100644
index 0000000..05040f5
--- /dev/null
+++ b/e2sm/lib/GUAMI.c
@@ -0,0 +1,80 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GUAMI.h"
+
+asn_TYPE_member_t asn_MBR_GUAMI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GUAMI, pLMNIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNIdentity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFRegionID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMFRegionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"aMFRegionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFSetID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMFSetID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"aMFSetID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFPointer),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMFPointer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"aMFPointer"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_GUAMI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_GUAMI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* aMFRegionID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aMFSetID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* aMFPointer */
+};
+asn_SEQUENCE_specifics_t asn_SPC_GUAMI_specs_1 = {
+	sizeof(struct GUAMI),
+	offsetof(struct GUAMI, _asn_ctx),
+	asn_MAP_GUAMI_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_GUAMI = {
+	"GUAMI",
+	"GUAMI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_GUAMI_tags_1,
+	sizeof(asn_DEF_GUAMI_tags_1)
+		/sizeof(asn_DEF_GUAMI_tags_1[0]), /* 1 */
+	asn_DEF_GUAMI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GUAMI_tags_1)
+		/sizeof(asn_DEF_GUAMI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_GUAMI_1,
+	4,	/* Elements count */
+	&asn_SPC_GUAMI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GUMMEI.c b/e2sm/lib/GUMMEI.c
new file mode 100644
index 0000000..ac0bf5b
--- /dev/null
+++ b/e2sm/lib/GUMMEI.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GUMMEI.h"
+
+asn_TYPE_member_t asn_MBR_GUMMEI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GUMMEI, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GUMMEI, mME_Group_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MME_Group_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-Group-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GUMMEI, mME_Code),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MME_Code,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-Code"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_GUMMEI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_GUMMEI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Group-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* mME-Code */
+};
+asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_specs_1 = {
+	sizeof(struct GUMMEI),
+	offsetof(struct GUMMEI, _asn_ctx),
+	asn_MAP_GUMMEI_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_GUMMEI = {
+	"GUMMEI",
+	"GUMMEI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_GUMMEI_tags_1,
+	sizeof(asn_DEF_GUMMEI_tags_1)
+		/sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */
+	asn_DEF_GUMMEI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GUMMEI_tags_1)
+		/sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_GUMMEI_1,
+	3,	/* Elements count */
+	&asn_SPC_GUMMEI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GlobalE2node-ID.c b/e2sm/lib/GlobalE2node-ID.c
deleted file mode 100644
index 07879f0..0000000
--- a/e2sm/lib/GlobalE2node-ID.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalE2node-ID.h"
-
-#include "GlobalE2node-gNB-ID.h"
-#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};
-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 */
-};
-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 */
-		&asn_DEF_GlobalE2node_gNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB"
-		},
-	{ ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalE2node_en_gNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"en-gNB"
-		},
-	{ ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalE2node_ng_eNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ng-eNB"
-		},
-	{ ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalE2node_eNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eNB"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */
-};
-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),
-	sizeof(((struct GlobalE2node_ID *)0)->present),
-	asn_MAP_GlobalE2node_ID_tag2el_1,
-	4,	/* Count of tags in the map */
-	0, 0,
-	4	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = {
-	"GlobalE2node-ID",
-	"GlobalE2node-ID",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_GlobalE2node_ID_constr_1, &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/e2sm/lib/GlobalE2node-eNB-ID.c b/e2sm/lib/GlobalE2node-eNB-ID.c
deleted file mode 100644
index 5848da9..0000000
--- a/e2sm/lib/GlobalE2node-eNB-ID.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalE2node-eNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalENB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-eNB-ID"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = {
-	sizeof(struct GlobalE2node_eNB_ID),
-	offsetof(struct GlobalE2node_eNB_ID, _asn_ctx),
-	asn_MAP_GlobalE2node_eNB_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_GlobalE2node_eNB_ID = {
-	"GlobalE2node-eNB-ID",
-	"GlobalE2node-eNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalE2node_eNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalE2node_eNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalE2node_eNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalE2node_eNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalE2node-en-gNB-ID.c b/e2sm/lib/GlobalE2node-en-gNB-ID.c
deleted file mode 100644
index 53c81ad..0000000
--- a/e2sm/lib/GlobalE2node-en-gNB-ID.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalE2node-en-gNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalenGNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-gNB-ID"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = {
-	sizeof(struct GlobalE2node_en_gNB_ID),
-	offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx),
-	asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = {
-	"GlobalE2node-en-gNB-ID",
-	"GlobalE2node-en-gNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalE2node_en_gNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalE2node_en_gNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalE2node_en_gNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalE2node_en_gNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalE2node-gNB-ID.c b/e2sm/lib/GlobalE2node-gNB-ID.c
deleted file mode 100644
index 6be7447..0000000
--- a/e2sm/lib/GlobalE2node-gNB-ID.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalE2node-gNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalgNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-gNB-ID"
-		},
-	{ ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GNB_CU_UP_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB-CU-UP-ID"
-		},
-	{ ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GNB_DU_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB-DU-ID"
-		},
-};
-static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = {
-	sizeof(struct GlobalE2node_gNB_ID),
-	offsetof(struct GlobalE2node_gNB_ID, _asn_ctx),
-	asn_MAP_GlobalE2node_gNB_ID_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_GlobalE2node_gNB_ID_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = {
-	"GlobalE2node-gNB-ID",
-	"GlobalE2node-gNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalE2node_gNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalE2node_gNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalE2node_gNB_ID_1,
-	3,	/* Elements count */
-	&asn_SPC_GlobalE2node_gNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalE2node-ng-eNB-ID.c b/e2sm/lib/GlobalE2node-ng-eNB-ID.c
deleted file mode 100644
index 8ae9e02..0000000
--- a/e2sm/lib/GlobalE2node-ng-eNB-ID.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalE2node-ng-eNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalngeNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-ng-eNB-ID"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = {
-	sizeof(struct GlobalE2node_ng_eNB_ID),
-	offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx),
-	asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	1,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = {
-	"GlobalE2node-ng-eNB-ID",
-	"GlobalE2node-ng-eNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalE2node_ng_eNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalE2node_ng_eNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalE2node_ng_eNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalE2node_ng_eNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalENB-ID.c b/e2sm/lib/GlobalENB-ID.c
index fccb2e0..731c16e 100644
--- a/e2sm/lib/GlobalENB-ID.c
+++ b/e2sm/lib/GlobalENB-ID.c
@@ -1,21 +1,21 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "GlobalENB-ID.h"
 
 asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity),
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMNIdentity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
+		&asn_DEF_PLMNIdentity,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"pLMN-Identity"
+		"pLMNIdentity"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
@@ -31,7 +31,7 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = {
diff --git a/e2sm/lib/GlobalGNB-ID.c b/e2sm/lib/GlobalGNB-ID.c
new file mode 100644
index 0000000..47f17dd
--- /dev/null
+++ b/e2sm/lib/GlobalGNB-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GlobalGNB-ID.h"
+
+asn_TYPE_member_t asn_MBR_GlobalGNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, pLMNIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNIdentity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_GNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_GlobalGNB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_GlobalGNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_specs_1 = {
+	sizeof(struct GlobalGNB_ID),
+	offsetof(struct GlobalGNB_ID, _asn_ctx),
+	asn_MAP_GlobalGNB_ID_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_GlobalGNB_ID = {
+	"GlobalGNB-ID",
+	"GlobalGNB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_GlobalGNB_ID_tags_1,
+	sizeof(asn_DEF_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */
+	asn_DEF_GlobalGNB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_GlobalGNB_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_GlobalGNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GlobalKPMnode-ID.c b/e2sm/lib/GlobalKPMnode-ID.c
deleted file mode 100644
index db52419..0000000
--- a/e2sm/lib/GlobalKPMnode-ID.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-IEs"
- * 	found in "E2SM-KPM-Prespec.asn"
- * 	`asn1c -D ./e2sm-kpm -gen-PER`
- */
-
-#include "GlobalKPMnode-ID.h"
-
-static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_GlobalKPMnode_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 */
-};
-asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalKPMnode_gNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalKPMnode_en_gNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"en-gNB"
-		},
-
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalKPMnode_ng_eNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ng-eNB"
-		},
-
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalKPMnode_eNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eNB"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */
-};
-asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = {
-	sizeof(struct GlobalKPMnode_ID),
-	offsetof(struct GlobalKPMnode_ID, _asn_ctx),
-	offsetof(struct GlobalKPMnode_ID, present),
-	sizeof(((struct GlobalKPMnode_ID *)0)->present),
-	asn_MAP_GlobalKPMnode_ID_tag2el_1,
-	4,	/* Count of tags in the map */
-	0, 0,
-	4	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = {
-	"GlobalKPMnode-ID",
-	"GlobalKPMnode-ID",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint },
-	asn_MBR_GlobalKPMnode_ID_1,
-	4,	/* Elements count */
-	&asn_SPC_GlobalKPMnode_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalKPMnode-eNB-ID.c b/e2sm/lib/GlobalKPMnode-eNB-ID.c
deleted file mode 100644
index 5d6e935..0000000
--- a/e2sm/lib/GlobalKPMnode-eNB-ID.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-IEs"
- * 	found in "E2SM-KPM-Prespec.asn"
- * 	`asn1c -D ./e2sm-kpm -gen-PER`
- */
-
-#include "GlobalKPMnode-eNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalENB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-eNB-ID"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = {
-	sizeof(struct GlobalKPMnode_eNB_ID),
-	offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx),
-	asn_MAP_GlobalKPMnode_eNB_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_GlobalKPMnode_eNB_ID = {
-	"GlobalKPMnode-eNB-ID",
-	"GlobalKPMnode-eNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalKPMnode_eNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalKPMnode_eNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalKPMnode_eNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalKPMnode_eNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalKPMnode-en-gNB-ID.c b/e2sm/lib/GlobalKPMnode-en-gNB-ID.c
deleted file mode 100644
index 4c4f222..0000000
--- a/e2sm/lib/GlobalKPMnode-en-gNB-ID.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-IEs"
- * 	found in "E2SM-KPM-Prespec.asn"
- * 	`asn1c -D ./e2sm-kpm -gen-PER`
- */
-
-#include "GlobalKPMnode-en-gNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalenGNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-gNB-ID"
-		},
-};
-
-static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = {
-	sizeof(struct GlobalKPMnode_en_gNB_ID),
-	offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx),
-	asn_MAP_GlobalKPMnode_en_gNB_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_GlobalKPMnode_en_gNB_ID = {
-	"GlobalKPMnode-en-gNB-ID",
-	"GlobalKPMnode-en-gNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalKPMnode_en_gNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalKPMnode-gNB-ID.c b/e2sm/lib/GlobalKPMnode-gNB-ID.c
deleted file mode 100644
index 19f2769..0000000
--- a/e2sm/lib/GlobalKPMnode-gNB-ID.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-IEs"
- * 	found in "E2SM-KPM-Prespec.asn"
- * 	`asn1c -D ./e2sm-kpm -gen-PER`
- */
-
-#include "GlobalKPMnode-gNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalgNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-gNB-ID"
-		},
-	{ ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GNB_CU_UP_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB-CU-UP-ID"
-		},
-	{ ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GNB_DU_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gNB-DU-ID"
-		},
-};
-static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = {
-	sizeof(struct GlobalKPMnode_gNB_ID),
-	offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx),
-	asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_GlobalKPMnode_gNB_ID_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = {
-	"GlobalKPMnode-gNB-ID",
-	"GlobalKPMnode-gNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalKPMnode_gNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalKPMnode_gNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalKPMnode_gNB_ID_1,
-	3,	/* Elements count */
-	&asn_SPC_GlobalKPMnode_gNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalKPMnode-ng-eNB-ID.c b/e2sm/lib/GlobalKPMnode-ng-eNB-ID.c
deleted file mode 100644
index 6d04929..0000000
--- a/e2sm/lib/GlobalKPMnode-ng-eNB-ID.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-IEs"
- * 	found in "E2SM-KPM-Prespec.asn"
- * 	`asn1c -D ./e2sm-kpm -gen-PER`
- */
-
-#include "GlobalKPMnode-ng-eNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_GlobalngeNB_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"global-ng-eNB-ID"
-		},
-};
-
-static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = {
-	sizeof(struct GlobalKPMnode_ng_eNB_ID),
-	offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx),
-	asn_MAP_GlobalKPMnode_ng_eNB_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_GlobalKPMnode_ng_eNB_ID = {
-	"GlobalKPMnode-ng-eNB-ID",
-	"GlobalKPMnode-ng-eNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalKPMnode_ng_eNB_ID_1,
-	1,	/* Elements count */
-	&asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalNGRANNodeID.c b/e2sm/lib/GlobalNGRANNodeID.c
new file mode 100644
index 0000000..58de505
--- /dev/null
+++ b/e2sm/lib/GlobalNGRANNodeID.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GlobalNGRANNodeID.h"
+
+#include "GlobalGNB-ID.h"
+#include "GlobalNgENB-ID.h"
+static asn_oer_constraints_t asn_OER_type_GlobalNGRANNodeID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_GlobalNGRANNodeID_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_GlobalNGRANNodeID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct GlobalNGRANNodeID, choice.gNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct GlobalNGRANNodeID, choice.ng_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalNgENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_GlobalNGRANNodeID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ng-eNB */
+};
+asn_CHOICE_specifics_t asn_SPC_GlobalNGRANNodeID_specs_1 = {
+	sizeof(struct GlobalNGRANNodeID),
+	offsetof(struct GlobalNGRANNodeID, _asn_ctx),
+	offsetof(struct GlobalNGRANNodeID, present),
+	sizeof(((struct GlobalNGRANNodeID *)0)->present),
+	asn_MAP_GlobalNGRANNodeID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_GlobalNGRANNodeID = {
+	"GlobalNGRANNodeID",
+	"GlobalNGRANNodeID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_GlobalNGRANNodeID_constr_1, &asn_PER_type_GlobalNGRANNodeID_constr_1, CHOICE_constraint },
+	asn_MBR_GlobalNGRANNodeID_1,
+	2,	/* Elements count */
+	&asn_SPC_GlobalNGRANNodeID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GlobalNgENB-ID.c b/e2sm/lib/GlobalNgENB-ID.c
new file mode 100644
index 0000000..549617a
--- /dev/null
+++ b/e2sm/lib/GlobalNgENB-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GlobalNgENB-ID.h"
+
+asn_TYPE_member_t asn_MBR_GlobalNgENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalNgENB_ID, pLMNIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNIdentity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalNgENB_ID, ngENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_NgENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ngENB-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_GlobalNgENB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_GlobalNgENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ngENB-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_GlobalNgENB_ID_specs_1 = {
+	sizeof(struct GlobalNgENB_ID),
+	offsetof(struct GlobalNgENB_ID, _asn_ctx),
+	asn_MAP_GlobalNgENB_ID_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_GlobalNgENB_ID = {
+	"GlobalNgENB-ID",
+	"GlobalNgENB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_GlobalNgENB_ID_tags_1,
+	sizeof(asn_DEF_GlobalNgENB_ID_tags_1)
+		/sizeof(asn_DEF_GlobalNgENB_ID_tags_1[0]), /* 1 */
+	asn_DEF_GlobalNgENB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_GlobalNgENB_ID_tags_1)
+		/sizeof(asn_DEF_GlobalNgENB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_GlobalNgENB_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_GlobalNgENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/GlobalenGNB-ID.c b/e2sm/lib/GlobalenGNB-ID.c
index 1824a11..887b8a4 100644
--- a/e2sm/lib/GlobalenGNB-ID.c
+++ b/e2sm/lib/GlobalenGNB-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -11,20 +11,20 @@
 	{ ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
+		&asn_DEF_PLMNIdentity,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
 		"pLMN-Identity"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID),
+	{ ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, en_gNB_ID),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_ENGNB_ID,
+		&asn_DEF_EN_GNB_ID,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"gNB-ID"
+		"en-gNB-ID"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = {
@@ -32,7 +32,7 @@
 };
 static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* en-gNB-ID */
 };
 asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = {
 	sizeof(struct GlobalenGNB_ID),
diff --git a/e2sm/lib/GlobalgNB-ID.c b/e2sm/lib/GlobalgNB-ID.c
deleted file mode 100644
index 40d7462..0000000
--- a/e2sm/lib/GlobalgNB-ID.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalgNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"plmn-id"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_GNB_ID_Choice,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"gnb-id"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = {
-	sizeof(struct GlobalgNB_ID),
-	offsetof(struct GlobalgNB_ID, _asn_ctx),
-	asn_MAP_GlobalgNB_ID_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_GlobalgNB_ID = {
-	"GlobalgNB-ID",
-	"GlobalgNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalgNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalgNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalgNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalgNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalgNB_ID_1,
-	2,	/* Elements count */
-	&asn_SPC_GlobalgNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GlobalngeNB-ID.c b/e2sm/lib/GlobalngeNB-ID.c
deleted file mode 100644
index 91873a1..0000000
--- a/e2sm/lib/GlobalngeNB-ID.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "GlobalngeNB-ID.h"
-
-asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"plmn-id"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_ENB_ID_Choice,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"enb-id"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */
-};
-asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = {
-	sizeof(struct GlobalngeNB_ID),
-	offsetof(struct GlobalngeNB_ID, _asn_ctx),
-	asn_MAP_GlobalngeNB_ID_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_GlobalngeNB_ID = {
-	"GlobalngeNB-ID",
-	"GlobalngeNB-ID",
-	&asn_OP_SEQUENCE,
-	asn_DEF_GlobalngeNB_ID_tags_1,
-	sizeof(asn_DEF_GlobalngeNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */
-	asn_DEF_GlobalngeNB_ID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_GlobalngeNB_ID_tags_1)
-		/sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_GlobalngeNB_ID_1,
-	2,	/* Elements count */
-	&asn_SPC_GlobalngeNB_ID_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/GroupID.c b/e2sm/lib/GroupID.c
new file mode 100644
index 0000000..4fe3f18
--- /dev/null
+++ b/e2sm/lib/GroupID.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "GroupID.h"
+
+static asn_oer_constraints_t asn_OER_type_GroupID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_GroupID_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 */
+};
+static asn_TYPE_member_t asn_MBR_GroupID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct GroupID, choice.fiveGC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_FiveQI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct GroupID, choice.ePC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_QCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ePC"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_GroupID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */
+};
+static asn_CHOICE_specifics_t asn_SPC_GroupID_specs_1 = {
+	sizeof(struct GroupID),
+	offsetof(struct GroupID, _asn_ctx),
+	offsetof(struct GroupID, present),
+	sizeof(((struct GroupID *)0)->present),
+	asn_MAP_GroupID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_GroupID = {
+	"GroupID",
+	"GroupID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_GroupID_constr_1, &asn_PER_type_GroupID_constr_1, CHOICE_constraint },
+	asn_MBR_GroupID_1,
+	2,	/* Elements count */
+	&asn_SPC_GroupID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/IndexToRFSP.c b/e2sm/lib/IndexToRFSP.c
new file mode 100644
index 0000000..cd7b378
--- /dev/null
+++ b/e2sm/lib/IndexToRFSP.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "IndexToRFSP.h"
+
+int
+IndexToRFSP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_IndexToRFSP_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_IndexToRFSP_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  256 }	/* (1..256,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_IndexToRFSP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IndexToRFSP = {
+	"IndexToRFSP",
+	"IndexToRFSP",
+	&asn_OP_NativeInteger,
+	asn_DEF_IndexToRFSP_tags_1,
+	sizeof(asn_DEF_IndexToRFSP_tags_1)
+		/sizeof(asn_DEF_IndexToRFSP_tags_1[0]), /* 1 */
+	asn_DEF_IndexToRFSP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_IndexToRFSP_tags_1)
+		/sizeof(asn_DEF_IndexToRFSP_tags_1[0]), /* 1 */
+	{ &asn_OER_type_IndexToRFSP_constr_1, &asn_PER_type_IndexToRFSP_constr_1, IndexToRFSP_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/InsertIndication-RANParameter-Item.c b/e2sm/lib/InsertIndication-RANParameter-Item.c
new file mode 100644
index 0000000..0577b21
--- /dev/null
+++ b/e2sm/lib/InsertIndication-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InsertIndication-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_InsertIndication_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InsertIndication_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InsertIndication_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct InsertIndication_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_InsertIndication_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_InsertIndication_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InsertIndication_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InsertIndication_RANParameter_Item_specs_1 = {
+	sizeof(struct InsertIndication_RANParameter_Item),
+	offsetof(struct InsertIndication_RANParameter_Item, _asn_ctx),
+	asn_MAP_InsertIndication_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_InsertIndication_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_InsertIndication_RANParameter_Item = {
+	"InsertIndication-RANParameter-Item",
+	"InsertIndication-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InsertIndication_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_InsertIndication_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_InsertIndication_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_InsertIndication_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InsertIndication_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_InsertIndication_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InsertIndication_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_InsertIndication_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/Interface-MessageID.c b/e2sm/lib/Interface-MessageID.c
new file mode 100644
index 0000000..6f78561
--- /dev/null
+++ b/e2sm/lib/Interface-MessageID.c
@@ -0,0 +1,113 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "Interface-MessageID.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_messageType_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_messageType_constr_3 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_messageType_value2enum_3[] = {
+	{ 0,	17,	"initiatingMessage" },
+	{ 1,	17,	"successfulOutcome" },
+	{ 2,	19,	"unsuccessfulOutcome" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_messageType_enum2value_3[] = {
+	0,	/* initiatingMessage(0) */
+	1,	/* successfulOutcome(1) */
+	2	/* unsuccessfulOutcome(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_messageType_specs_3 = {
+	asn_MAP_messageType_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_messageType_enum2value_3,	/* 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_messageType_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_messageType_3 = {
+	"messageType",
+	"messageType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_messageType_tags_3,
+	sizeof(asn_DEF_messageType_tags_3)
+		/sizeof(asn_DEF_messageType_tags_3[0]) - 1, /* 1 */
+	asn_DEF_messageType_tags_3,	/* Same as above */
+	sizeof(asn_DEF_messageType_tags_3)
+		/sizeof(asn_DEF_messageType_tags_3[0]), /* 2 */
+	{ &asn_OER_type_messageType_constr_3, &asn_PER_type_messageType_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_messageType_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Interface_MessageID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Interface_MessageID, interfaceProcedureID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceProcedureID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Interface_MessageID, messageType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_messageType_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_Interface_MessageID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Interface_MessageID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interfaceProcedureID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Interface_MessageID_specs_1 = {
+	sizeof(struct Interface_MessageID),
+	offsetof(struct Interface_MessageID, _asn_ctx),
+	asn_MAP_Interface_MessageID_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_Interface_MessageID = {
+	"Interface-MessageID",
+	"Interface-MessageID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_Interface_MessageID_tags_1,
+	sizeof(asn_DEF_Interface_MessageID_tags_1)
+		/sizeof(asn_DEF_Interface_MessageID_tags_1[0]), /* 1 */
+	asn_DEF_Interface_MessageID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_Interface_MessageID_tags_1)
+		/sizeof(asn_DEF_Interface_MessageID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_Interface_MessageID_1,
+	2,	/* Elements count */
+	&asn_SPC_Interface_MessageID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-E1.c b/e2sm/lib/InterfaceID-E1.c
new file mode 100644
index 0000000..3c6109f
--- /dev/null
+++ b/e2sm/lib/InterfaceID-E1.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-E1.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_E1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_E1, globalGNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalGNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_E1, gNB_CU_UP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_E1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_E1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* globalGNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-CU-UP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_E1_specs_1 = {
+	sizeof(struct InterfaceID_E1),
+	offsetof(struct InterfaceID_E1, _asn_ctx),
+	asn_MAP_InterfaceID_E1_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_InterfaceID_E1 = {
+	"InterfaceID-E1",
+	"InterfaceID-E1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_E1_tags_1,
+	sizeof(asn_DEF_InterfaceID_E1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_E1_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_E1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_E1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_E1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_E1_1,
+	2,	/* Elements count */
+	&asn_SPC_InterfaceID_E1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-F1.c b/e2sm/lib/InterfaceID-F1.c
new file mode 100644
index 0000000..cd36650
--- /dev/null
+++ b/e2sm/lib/InterfaceID-F1.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-F1.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_F1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, globalGNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalGNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, gNB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 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_InterfaceID_F1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_F1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* globalGNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-DU-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_F1_specs_1 = {
+	sizeof(struct InterfaceID_F1),
+	offsetof(struct InterfaceID_F1, _asn_ctx),
+	asn_MAP_InterfaceID_F1_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_InterfaceID_F1 = {
+	"InterfaceID-F1",
+	"InterfaceID-F1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_F1_tags_1,
+	sizeof(asn_DEF_InterfaceID_F1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_F1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_F1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_F1_1,
+	2,	/* Elements count */
+	&asn_SPC_InterfaceID_F1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-NG.c b/e2sm/lib/InterfaceID-NG.c
new file mode 100644
index 0000000..a1cc25c
--- /dev/null
+++ b/e2sm/lib/InterfaceID-NG.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-NG.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_NG_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_NG, guami),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUAMI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"guami"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_NG_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_NG_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* guami */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_NG_specs_1 = {
+	sizeof(struct InterfaceID_NG),
+	offsetof(struct InterfaceID_NG, _asn_ctx),
+	asn_MAP_InterfaceID_NG_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_InterfaceID_NG = {
+	"InterfaceID-NG",
+	"InterfaceID-NG",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_NG_tags_1,
+	sizeof(asn_DEF_InterfaceID_NG_tags_1)
+		/sizeof(asn_DEF_InterfaceID_NG_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_NG_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_NG_tags_1)
+		/sizeof(asn_DEF_InterfaceID_NG_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_NG_1,
+	1,	/* Elements count */
+	&asn_SPC_InterfaceID_NG_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-S1.c b/e2sm/lib/InterfaceID-S1.c
new file mode 100644
index 0000000..2710359
--- /dev/null
+++ b/e2sm/lib/InterfaceID-S1.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-S1.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_S1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_S1, gUMMEI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUMMEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gUMMEI"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_S1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_S1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gUMMEI */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_S1_specs_1 = {
+	sizeof(struct InterfaceID_S1),
+	offsetof(struct InterfaceID_S1, _asn_ctx),
+	asn_MAP_InterfaceID_S1_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_InterfaceID_S1 = {
+	"InterfaceID-S1",
+	"InterfaceID-S1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_S1_tags_1,
+	sizeof(asn_DEF_InterfaceID_S1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_S1_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_S1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_S1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_S1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_S1_1,
+	1,	/* Elements count */
+	&asn_SPC_InterfaceID_S1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-W1.c b/e2sm/lib/InterfaceID-W1.c
new file mode 100644
index 0000000..4bbd6a6
--- /dev/null
+++ b/e2sm/lib/InterfaceID-W1.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-W1.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_W1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_W1, global_ng_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalNgENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-ng-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_W1, ng_eNB_DU_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NGENB_DU_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-DU-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_W1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_W1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-ng-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ng-eNB-DU-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_W1_specs_1 = {
+	sizeof(struct InterfaceID_W1),
+	offsetof(struct InterfaceID_W1, _asn_ctx),
+	asn_MAP_InterfaceID_W1_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_InterfaceID_W1 = {
+	"InterfaceID-W1",
+	"InterfaceID-W1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_W1_tags_1,
+	sizeof(asn_DEF_InterfaceID_W1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_W1_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_W1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_W1_tags_1)
+		/sizeof(asn_DEF_InterfaceID_W1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_W1_1,
+	2,	/* Elements count */
+	&asn_SPC_InterfaceID_W1_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-X2.c b/e2sm/lib/InterfaceID-X2.c
new file mode 100644
index 0000000..f410123
--- /dev/null
+++ b/e2sm/lib/InterfaceID-X2.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-X2.h"
+
+#include "GlobalENB-ID.h"
+#include "GlobalenGNB-ID.h"
+static asn_oer_constraints_t asn_OER_type_nodeType_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_nodeType_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 asn_TYPE_member_t asn_MBR_nodeType_2[] = {
+	{ ATF_POINTER, 0, offsetof(struct InterfaceID_X2__nodeType, choice.global_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-eNB-ID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceID_X2__nodeType, choice.global_en_gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalenGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-en-gNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_nodeType_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global-en-gNB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_nodeType_specs_2 = {
+	sizeof(struct InterfaceID_X2__nodeType),
+	offsetof(struct InterfaceID_X2__nodeType, _asn_ctx),
+	offsetof(struct InterfaceID_X2__nodeType, present),
+	sizeof(((struct InterfaceID_X2__nodeType *)0)->present),
+	asn_MAP_nodeType_tag2el_2,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_nodeType_2 = {
+	"nodeType",
+	"nodeType",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_nodeType_constr_2, &asn_PER_type_nodeType_constr_2, CHOICE_constraint },
+	asn_MBR_nodeType_2,
+	2,	/* Elements count */
+	&asn_SPC_nodeType_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_InterfaceID_X2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_X2, nodeType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_nodeType_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nodeType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_X2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_X2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nodeType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_X2_specs_1 = {
+	sizeof(struct InterfaceID_X2),
+	offsetof(struct InterfaceID_X2, _asn_ctx),
+	asn_MAP_InterfaceID_X2_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_InterfaceID_X2 = {
+	"InterfaceID-X2",
+	"InterfaceID-X2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_X2_tags_1,
+	sizeof(asn_DEF_InterfaceID_X2_tags_1)
+		/sizeof(asn_DEF_InterfaceID_X2_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_X2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_X2_tags_1)
+		/sizeof(asn_DEF_InterfaceID_X2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_X2_1,
+	1,	/* Elements count */
+	&asn_SPC_InterfaceID_X2_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceID-Xn.c b/e2sm/lib/InterfaceID-Xn.c
new file mode 100644
index 0000000..de8e414
--- /dev/null
+++ b/e2sm/lib/InterfaceID-Xn.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceID-Xn.h"
+
+asn_TYPE_member_t asn_MBR_InterfaceID_Xn_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_Xn, global_NG_RAN_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_GlobalNGRANNodeID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-NG-RAN-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceID_Xn_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_Xn_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-NG-RAN-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_Xn_specs_1 = {
+	sizeof(struct InterfaceID_Xn),
+	offsetof(struct InterfaceID_Xn, _asn_ctx),
+	asn_MAP_InterfaceID_Xn_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_InterfaceID_Xn = {
+	"InterfaceID-Xn",
+	"InterfaceID-Xn",
+	&asn_OP_SEQUENCE,
+	asn_DEF_InterfaceID_Xn_tags_1,
+	sizeof(asn_DEF_InterfaceID_Xn_tags_1)
+		/sizeof(asn_DEF_InterfaceID_Xn_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceID_Xn_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceID_Xn_tags_1)
+		/sizeof(asn_DEF_InterfaceID_Xn_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_InterfaceID_Xn_1,
+	1,	/* Elements count */
+	&asn_SPC_InterfaceID_Xn_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceIdentifier.c b/e2sm/lib/InterfaceIdentifier.c
new file mode 100644
index 0000000..b04564e
--- /dev/null
+++ b/e2sm/lib/InterfaceIdentifier.c
@@ -0,0 +1,122 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceIdentifier.h"
+
+#include "InterfaceID-NG.h"
+#include "InterfaceID-Xn.h"
+#include "InterfaceID-F1.h"
+#include "InterfaceID-E1.h"
+#include "InterfaceID-S1.h"
+#include "InterfaceID-X2.h"
+#include "InterfaceID-W1.h"
+static asn_oer_constraints_t asn_OER_type_InterfaceIdentifier_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_InterfaceIdentifier_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_InterfaceIdentifier_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.nG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_NG,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nG"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.xN),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_Xn,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"xN"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.f1),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_F1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"f1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.e1),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_E1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.s1),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_S1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.x2),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_X2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"x2"
+		},
+	{ ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.w1),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceID_W1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"w1"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_InterfaceIdentifier_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* xN */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* f1 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e1 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* x2 */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* w1 */
+};
+asn_CHOICE_specifics_t asn_SPC_InterfaceIdentifier_specs_1 = {
+	sizeof(struct InterfaceIdentifier),
+	offsetof(struct InterfaceIdentifier, _asn_ctx),
+	offsetof(struct InterfaceIdentifier, present),
+	sizeof(((struct InterfaceIdentifier *)0)->present),
+	asn_MAP_InterfaceIdentifier_tag2el_1,
+	7,	/* Count of tags in the map */
+	0, 0,
+	7	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_InterfaceIdentifier = {
+	"InterfaceIdentifier",
+	"InterfaceIdentifier",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_InterfaceIdentifier_constr_1, &asn_PER_type_InterfaceIdentifier_constr_1, CHOICE_constraint },
+	asn_MBR_InterfaceIdentifier_1,
+	7,	/* Elements count */
+	&asn_SPC_InterfaceIdentifier_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/InterfaceType.c b/e2sm/lib/InterfaceType.c
new file mode 100644
index 0000000..359cad7
--- /dev/null
+++ b/e2sm/lib/InterfaceType.c
@@ -0,0 +1,68 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "InterfaceType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_InterfaceType_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_InterfaceType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_InterfaceType_value2enum_1[] = {
+	{ 0,	2,	"nG" },
+	{ 1,	2,	"xn" },
+	{ 2,	2,	"f1" },
+	{ 3,	2,	"e1" },
+	{ 4,	2,	"s1" },
+	{ 5,	2,	"x2" },
+	{ 6,	2,	"w1" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_InterfaceType_enum2value_1[] = {
+	3,	/* e1(3) */
+	2,	/* f1(2) */
+	0,	/* nG(0) */
+	4,	/* s1(4) */
+	6,	/* w1(6) */
+	5,	/* x2(5) */
+	1	/* xn(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_InterfaceType_specs_1 = {
+	asn_MAP_InterfaceType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_InterfaceType_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_InterfaceType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_InterfaceType = {
+	"InterfaceType",
+	"InterfaceType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_InterfaceType_tags_1,
+	sizeof(asn_DEF_InterfaceType_tags_1)
+		/sizeof(asn_DEF_InterfaceType_tags_1[0]), /* 1 */
+	asn_DEF_InterfaceType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_InterfaceType_tags_1)
+		/sizeof(asn_DEF_InterfaceType_tags_1[0]), /* 1 */
+	{ &asn_OER_type_InterfaceType_constr_1, &asn_PER_type_InterfaceType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_InterfaceType_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/L2Parameters-RANParameter-Item.c b/e2sm/lib/L2Parameters-RANParameter-Item.c
new file mode 100644
index 0000000..929135d
--- /dev/null
+++ b/e2sm/lib/L2Parameters-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "L2Parameters-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_L2Parameters_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct L2Parameters_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct L2Parameters_RANParameter_Item, ranParameter_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct L2Parameters_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_L2Parameters_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_L2Parameters_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_L2Parameters_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_L2Parameters_RANParameter_Item_specs_1 = {
+	sizeof(struct L2Parameters_RANParameter_Item),
+	offsetof(struct L2Parameters_RANParameter_Item, _asn_ctx),
+	asn_MAP_L2Parameters_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_L2Parameters_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_L2Parameters_RANParameter_Item = {
+	"L2Parameters-RANParameter-Item",
+	"L2Parameters-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_L2Parameters_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_L2Parameters_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_L2Parameters_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_L2Parameters_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_L2Parameters_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_L2Parameters_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_L2Parameters_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_L2Parameters_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/L3-RRC-Measurements.c b/e2sm/lib/L3-RRC-Measurements.c
deleted file mode 100644
index df7009d..0000000
--- a/e2sm/lib/L3-RRC-Measurements.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "L3-RRC-Measurements.h"
-
-#include "ServingCellMeasurements.h"
-#include "MeasResultNeighCells.h"
-asn_TYPE_member_t asn_MBR_L3_RRC_Measurements_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct L3_RRC_Measurements, rrcEvent),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RRCEvent,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rrcEvent"
-		},
-	{ ATF_POINTER, 2, offsetof(struct L3_RRC_Measurements, servingCellMeasurements),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_ServingCellMeasurements,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"servingCellMeasurements"
-		},
-	{ ATF_POINTER, 1, offsetof(struct L3_RRC_Measurements, measResultNeighCells),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_MeasResultNeighCells,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResultNeighCells"
-		},
-};
-static const int asn_MAP_L3_RRC_Measurements_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_L3_RRC_Measurements_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_L3_RRC_Measurements_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcEvent */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servingCellMeasurements */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResultNeighCells */
-};
-asn_SEQUENCE_specifics_t asn_SPC_L3_RRC_Measurements_specs_1 = {
-	sizeof(struct L3_RRC_Measurements),
-	offsetof(struct L3_RRC_Measurements, _asn_ctx),
-	asn_MAP_L3_RRC_Measurements_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_L3_RRC_Measurements_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_L3_RRC_Measurements = {
-	"L3-RRC-Measurements",
-	"L3-RRC-Measurements",
-	&asn_OP_SEQUENCE,
-	asn_DEF_L3_RRC_Measurements_tags_1,
-	sizeof(asn_DEF_L3_RRC_Measurements_tags_1)
-		/sizeof(asn_DEF_L3_RRC_Measurements_tags_1[0]), /* 1 */
-	asn_DEF_L3_RRC_Measurements_tags_1,	/* Same as above */
-	sizeof(asn_DEF_L3_RRC_Measurements_tags_1)
-		/sizeof(asn_DEF_L3_RRC_Measurements_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_L3_RRC_Measurements_1,
-	3,	/* Elements count */
-	&asn_SPC_L3_RRC_Measurements_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/LogicalOR.c b/e2sm/lib/LogicalOR.c
new file mode 100644
index 0000000..4201a8e
--- /dev/null
+++ b/e2sm/lib/LogicalOR.c
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "LogicalOR.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_LogicalOR_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_LogicalOR_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 */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_LogicalOR_value2enum_1[] = {
+	{ 0,	4,	"true" },
+	{ 1,	5,	"false" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_LogicalOR_enum2value_1[] = {
+	1,	/* false(1) */
+	0	/* true(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_LogicalOR_specs_1 = {
+	asn_MAP_LogicalOR_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_LogicalOR_enum2value_1,	/* 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_LogicalOR_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_LogicalOR = {
+	"LogicalOR",
+	"LogicalOR",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_LogicalOR_tags_1,
+	sizeof(asn_DEF_LogicalOR_tags_1)
+		/sizeof(asn_DEF_LogicalOR_tags_1[0]), /* 1 */
+	asn_DEF_LogicalOR_tags_1,	/* Same as above */
+	sizeof(asn_DEF_LogicalOR_tags_1)
+		/sizeof(asn_DEF_LogicalOR_tags_1[0]), /* 1 */
+	{ &asn_OER_type_LogicalOR_constr_1, &asn_PER_type_LogicalOR_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_LogicalOR_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/MME-Code.c b/e2sm/lib/MME-Code.c
new file mode 100644
index 0000000..193d640
--- /dev/null
+++ b/e2sm/lib/MME-Code.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MME-Code.h"
+
+int
+MME_Code_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 1)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_MME_Code_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	1	/* (SIZE(1..1)) */};
+asn_per_constraints_t asn_PER_type_MME_Code_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  1,  1 }	/* (SIZE(1..1)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_MME_Code_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MME_Code = {
+	"MME-Code",
+	"MME-Code",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_MME_Code_tags_1,
+	sizeof(asn_DEF_MME_Code_tags_1)
+		/sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */
+	asn_DEF_MME_Code_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MME_Code_tags_1)
+		/sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */
+	{ &asn_OER_type_MME_Code_constr_1, &asn_PER_type_MME_Code_constr_1, MME_Code_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/MME-Group-ID.c b/e2sm/lib/MME-Group-ID.c
new file mode 100644
index 0000000..cc5af21
--- /dev/null
+++ b/e2sm/lib/MME-Group-ID.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MME-Group-ID.h"
+
+int
+MME_Group_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_MME_Group_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	2	/* (SIZE(2..2)) */};
+asn_per_constraints_t asn_PER_type_MME_Group_ID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_MME_Group_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MME_Group_ID = {
+	"MME-Group-ID",
+	"MME-Group-ID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_MME_Group_ID_tags_1,
+	sizeof(asn_DEF_MME_Group_ID_tags_1)
+		/sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */
+	asn_DEF_MME_Group_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MME_Group_ID_tags_1)
+		/sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_MME_Group_ID_constr_1, &asn_PER_type_MME_Group_ID_constr_1, MME_Group_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/MME-UE-S1AP-ID.c b/e2sm/lib/MME-UE-S1AP-ID.c
new file mode 100644
index 0000000..5e89d7f
--- /dev/null
+++ b/e2sm/lib/MME-UE-S1AP-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MME-UE-S1AP-ID.h"
+
+int
+MME_UE_S1AP_ID_constraint(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;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_MME_UE_S1AP_ID_constr_1 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..4294967295) */,
+	-1};
+asn_per_constraints_t asn_PER_type_MME_UE_S1AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_MME_UE_S1AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_MME_UE_S1AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MME_UE_S1AP_ID = {
+	"MME-UE-S1AP-ID",
+	"MME-UE-S1AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_MME_UE_S1AP_ID_tags_1,
+	sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1)
+		/sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_MME_UE_S1AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1)
+		/sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_MME_UE_S1AP_ID_constr_1, &asn_PER_type_MME_UE_S1AP_ID_constr_1, MME_UE_S1AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_MME_UE_S1AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/Makefile.am.libasncodec b/e2sm/lib/Makefile.am.libasncodec
new file mode 100644
index 0000000..dca4816
--- /dev/null
+++ b/e2sm/lib/Makefile.am.libasncodec
@@ -0,0 +1,544 @@
+ASN_MODULE_SRCS=	\
+	./CGI.c	\
+	./CoreCPID.c	\
+	./InterfaceIdentifier.c	\
+	./InterfaceID-NG.c	\
+	./InterfaceID-Xn.c	\
+	./InterfaceID-F1.c	\
+	./InterfaceID-E1.c	\
+	./InterfaceID-S1.c	\
+	./InterfaceID-X2.c	\
+	./InterfaceID-W1.c	\
+	./Interface-MessageID.c	\
+	./InterfaceType.c	\
+	./GroupID.c	\
+	./QoSID.c	\
+	./RANfunction-Name.c	\
+	./RIC-Format-Type.c	\
+	./RIC-Style-Type.c	\
+	./RIC-Style-Name.c	\
+	./RRC-MessageID.c	\
+	./RRCclass-LTE.c	\
+	./RRCclass-NR.c	\
+	./ServingCell-ARFCN.c	\
+	./ServingCell-PCI.c	\
+	./UEID.c	\
+	./UEID-GNB.c	\
+	./UEID-GNB-CU-CP-E1AP-ID-List.c	\
+	./UEID-GNB-CU-CP-E1AP-ID-Item.c	\
+	./UEID-GNB-CU-F1AP-ID-List.c	\
+	./UEID-GNB-CU-CP-F1AP-ID-Item.c	\
+	./UEID-GNB-DU.c	\
+	./UEID-GNB-CU-UP.c	\
+	./UEID-NG-ENB.c	\
+	./UEID-NG-ENB-DU.c	\
+	./UEID-EN-GNB.c	\
+	./UEID-ENB.c	\
+	./ENB-ID.c	\
+	./GlobalENB-ID.c	\
+	./GUMMEI.c	\
+	./MME-Group-ID.c	\
+	./MME-Code.c	\
+	./MME-UE-S1AP-ID.c	\
+	./QCI.c	\
+	./SubscriberProfileIDforRFP.c	\
+	./EN-GNB-ID.c	\
+	./ENB-UE-X2AP-ID.c	\
+	./ENB-UE-X2AP-ID-Extension.c	\
+	./E-UTRA-ARFCN.c	\
+	./E-UTRA-PCI.c	\
+	./E-UTRA-TAC.c	\
+	./GlobalenGNB-ID.c	\
+	./NGENB-CU-UE-W1AP-ID.c	\
+	./NGENB-DU-ID.c	\
+	./AMFPointer.c	\
+	./AMFRegionID.c	\
+	./AMFSetID.c	\
+	./AMF-UE-NGAP-ID.c	\
+	./EUTRACellIdentity.c	\
+	./EUTRA-CGI.c	\
+	./FiveQI.c	\
+	./GlobalGNB-ID.c	\
+	./GlobalNgENB-ID.c	\
+	./GNB-ID.c	\
+	./GUAMI.c	\
+	./IndexToRFSP.c	\
+	./NgENB-ID.c	\
+	./NRCellIdentity.c	\
+	./NR-CGI.c	\
+	./PLMNIdentity.c	\
+	./QosFlowIdentifier.c	\
+	./SD.c	\
+	./S-NSSAI.c	\
+	./SST.c	\
+	./NG-RANnodeUEXnAPID.c	\
+	./GlobalNGRANNodeID.c	\
+	./GNB-CU-CP-UE-E1AP-ID.c	\
+	./GNB-CU-UP-ID.c	\
+	./FiveGS-TAC.c	\
+	./FreqBandNrItem.c	\
+	./GNB-CU-UE-F1AP-ID.c	\
+	./GNB-DU-ID.c	\
+	./NR-PCI.c	\
+	./NR-ARFCN.c	\
+	./NRFrequencyBand-List.c	\
+	./NRFrequencyBandItem.c	\
+	./NRFrequencyInfo.c	\
+	./NRFrequencyShift7p5khz.c	\
+	./RANUEID.c	\
+	./SupportedSULBandList.c	\
+	./SupportedSULFreqBandItem.c	\
+	./LogicalOR.c	\
+	./NeighborCell-List.c	\
+	./NeighborCell-Item.c	\
+	./NeighborCell-Item-Choice-NR.c	\
+	./NeighborCell-Item-Choice-E-UTRA.c	\
+	./NeighborRelation-Info.c	\
+	./RRC-State.c	\
+	./EventTrigger-Cell-Info.c	\
+	./EventTrigger-Cell-Info-Item.c	\
+	./EventTrigger-Cell-Info-Item-Choice-Individual.c	\
+	./EventTrigger-Cell-Info-Item-Choice-Group.c	\
+	./EventTrigger-UE-Info.c	\
+	./EventTrigger-UE-Info-Item.c	\
+	./EventTrigger-UE-Info-Item-Choice-Individual.c	\
+	./EventTrigger-UE-Info-Item-Choice-Group.c	\
+	./EventTrigger-UEevent-Info.c	\
+	./EventTrigger-UEevent-Info-Item.c	\
+	./RANParameter-ID.c	\
+	./RANParameter-Name.c	\
+	./RANParameter-Definition.c	\
+	./RANParameter-Definition-Choice.c	\
+	./RANParameter-Definition-Choice-LIST.c	\
+	./RANParameter-Definition-Choice-LIST-Item.c	\
+	./RANParameter-Definition-Choice-STRUCTURE.c	\
+	./RANParameter-Definition-Choice-STRUCTURE-Item.c	\
+	./RANParameter-Value.c	\
+	./RANParameter-ValueType.c	\
+	./RANParameter-ValueType-Choice-ElementTrue.c	\
+	./RANParameter-ValueType-Choice-ElementFalse.c	\
+	./RANParameter-ValueType-Choice-Structure.c	\
+	./RANParameter-ValueType-Choice-List.c	\
+	./RANParameter-STRUCTURE.c	\
+	./RANParameter-STRUCTURE-Item.c	\
+	./RANParameter-LIST.c	\
+	./RANParameter-Testing.c	\
+	./RANParameter-TestingCondition.c	\
+	./RANParameter-Testing-Item.c	\
+	./RANParameter-Testing-Item-Choice-List.c	\
+	./RANParameter-Testing-Item-Choice-Structure.c	\
+	./RANParameter-Testing-Item-Choice-ElementTrue.c	\
+	./RANParameter-Testing-Item-Choice-ElementFalse.c	\
+	./RANParameter-Testing-LIST.c	\
+	./RANParameter-Testing-STRUCTURE.c	\
+	./RAN-CallProcess-ID.c	\
+	./RIC-CallProcessType-ID.c	\
+	./RIC-CallProcessType-Name.c	\
+	./RIC-CallProcessBreakpoint-ID.c	\
+	./RIC-CallProcessBreakpoint-Name.c	\
+	./RIC-ControlAction-ID.c	\
+	./RIC-ControlAction-Name.c	\
+	./RIC-EventTriggerCondition-ID.c	\
+	./RIC-EventTrigger-UE-ID.c	\
+	./RIC-EventTrigger-UEevent-ID.c	\
+	./RIC-EventTrigger-Cell-ID.c	\
+	./RIC-InsertIndication-ID.c	\
+	./RIC-InsertIndication-Name.c	\
+	./RIC-PolicyAction.c	\
+	./RIC-PolicyAction-RANParameter-Item.c	\
+	./E2SM-RC-EventTrigger.c	\
+	./E2SM-RC-EventTrigger-Format1.c	\
+	./E2SM-RC-EventTrigger-Format1-Item.c	\
+	./MessageType-Choice.c	\
+	./MessageType-Choice-NI.c	\
+	./MessageType-Choice-RRC.c	\
+	./E2SM-RC-EventTrigger-Format2.c	\
+	./E2SM-RC-EventTrigger-Format3.c	\
+	./E2SM-RC-EventTrigger-Format3-Item.c	\
+	./E2SM-RC-EventTrigger-Format4.c	\
+	./E2SM-RC-EventTrigger-Format4-Item.c	\
+	./TriggerType-Choice.c	\
+	./TriggerType-Choice-RRCstate.c	\
+	./TriggerType-Choice-RRCstate-Item.c	\
+	./TriggerType-Choice-UEID.c	\
+	./TriggerType-Choice-L2state.c	\
+	./E2SM-RC-EventTrigger-Format5.c	\
+	./E2SM-RC-ActionDefinition.c	\
+	./E2SM-RC-ActionDefinition-Format1.c	\
+	./E2SM-RC-ActionDefinition-Format1-Item.c	\
+	./E2SM-RC-ActionDefinition-Format2.c	\
+	./E2SM-RC-ActionDefinition-Format2-Item.c	\
+	./E2SM-RC-ActionDefinition-Format3.c	\
+	./E2SM-RC-ActionDefinition-Format3-Item.c	\
+	./E2SM-RC-IndicationHeader.c	\
+	./E2SM-RC-IndicationHeader-Format1.c	\
+	./E2SM-RC-IndicationHeader-Format2.c	\
+	./E2SM-RC-IndicationMessage.c	\
+	./E2SM-RC-IndicationMessage-Format1.c	\
+	./E2SM-RC-IndicationMessage-Format1-Item.c	\
+	./E2SM-RC-IndicationMessage-Format2.c	\
+	./E2SM-RC-IndicationMessage-Format2-Item.c	\
+	./E2SM-RC-IndicationMessage-Format2-RANParameter-Item.c	\
+	./E2SM-RC-IndicationMessage-Format3.c	\
+	./E2SM-RC-IndicationMessage-Format3-Item.c	\
+	./E2SM-RC-IndicationMessage-Format4.c	\
+	./E2SM-RC-IndicationMessage-Format4-ItemUE.c	\
+	./E2SM-RC-IndicationMessage-Format4-ItemCell.c	\
+	./E2SM-RC-IndicationMessage-Format5.c	\
+	./E2SM-RC-IndicationMessage-Format5-Item.c	\
+	./E2SM-RC-CallProcessID.c	\
+	./E2SM-RC-CallProcessID-Format1.c	\
+	./E2SM-RC-ControlHeader.c	\
+	./E2SM-RC-ControlHeader-Format1.c	\
+	./E2SM-RC-ControlMessage.c	\
+	./E2SM-RC-ControlMessage-Format1.c	\
+	./E2SM-RC-ControlMessage-Format1-Item.c	\
+	./E2SM-RC-ControlOutcome.c	\
+	./E2SM-RC-ControlOutcome-Format1.c	\
+	./E2SM-RC-ControlOutcome-Format1-Item.c	\
+	./E2SM-RC-RANFunctionDefinition.c	\
+	./RANFunctionDefinition-EventTrigger.c	\
+	./RANFunctionDefinition-EventTrigger-Style-Item.c	\
+	./L2Parameters-RANParameter-Item.c	\
+	./UEIdentification-RANParameter-Item.c	\
+	./CellIdentification-RANParameter-Item.c	\
+	./RANFunctionDefinition-EventTrigger-CallProcess-Item.c	\
+	./RANFunctionDefinition-EventTrigger-Breakpoint-Item.c	\
+	./CallProcessBreakpoint-RANParameter-Item.c	\
+	./RANFunctionDefinition-Report.c	\
+	./RANFunctionDefinition-Report-Item.c	\
+	./Report-RANParameter-Item.c	\
+	./RANFunctionDefinition-Insert.c	\
+	./RANFunctionDefinition-Insert-Item.c	\
+	./RANFunctionDefinition-Insert-Indication-Item.c	\
+	./InsertIndication-RANParameter-Item.c	\
+	./RANFunctionDefinition-Control.c	\
+	./RANFunctionDefinition-Control-Item.c	\
+	./ControlOutcome-RANParameter-Item.c	\
+	./RANFunctionDefinition-Control-Action-Item.c	\
+	./ControlAction-RANParameter-Item.c	\
+	./RANFunctionDefinition-Policy.c	\
+	./RANFunctionDefinition-Policy-Item.c	\
+	./RANFunctionDefinition-Policy-Action-Item.c	\
+	./PolicyAction-RANParameter-Item.c	\
+	./PolicyCondition-RANParameter-Item.c
+
+ASN_MODULE_HDRS=	\
+	./CGI.h	\
+	./CoreCPID.h	\
+	./InterfaceIdentifier.h	\
+	./InterfaceID-NG.h	\
+	./InterfaceID-Xn.h	\
+	./InterfaceID-F1.h	\
+	./InterfaceID-E1.h	\
+	./InterfaceID-S1.h	\
+	./InterfaceID-X2.h	\
+	./InterfaceID-W1.h	\
+	./Interface-MessageID.h	\
+	./InterfaceType.h	\
+	./GroupID.h	\
+	./QoSID.h	\
+	./RANfunction-Name.h	\
+	./RIC-Format-Type.h	\
+	./RIC-Style-Type.h	\
+	./RIC-Style-Name.h	\
+	./RRC-MessageID.h	\
+	./RRCclass-LTE.h	\
+	./RRCclass-NR.h	\
+	./ServingCell-ARFCN.h	\
+	./ServingCell-PCI.h	\
+	./UEID.h	\
+	./UEID-GNB.h	\
+	./UEID-GNB-CU-CP-E1AP-ID-List.h	\
+	./UEID-GNB-CU-CP-E1AP-ID-Item.h	\
+	./UEID-GNB-CU-F1AP-ID-List.h	\
+	./UEID-GNB-CU-CP-F1AP-ID-Item.h	\
+	./UEID-GNB-DU.h	\
+	./UEID-GNB-CU-UP.h	\
+	./UEID-NG-ENB.h	\
+	./UEID-NG-ENB-DU.h	\
+	./UEID-EN-GNB.h	\
+	./UEID-ENB.h	\
+	./ENB-ID.h	\
+	./GlobalENB-ID.h	\
+	./GUMMEI.h	\
+	./MME-Group-ID.h	\
+	./MME-Code.h	\
+	./MME-UE-S1AP-ID.h	\
+	./QCI.h	\
+	./SubscriberProfileIDforRFP.h	\
+	./EN-GNB-ID.h	\
+	./ENB-UE-X2AP-ID.h	\
+	./ENB-UE-X2AP-ID-Extension.h	\
+	./E-UTRA-ARFCN.h	\
+	./E-UTRA-PCI.h	\
+	./E-UTRA-TAC.h	\
+	./GlobalenGNB-ID.h	\
+	./NGENB-CU-UE-W1AP-ID.h	\
+	./NGENB-DU-ID.h	\
+	./AMFPointer.h	\
+	./AMFRegionID.h	\
+	./AMFSetID.h	\
+	./AMF-UE-NGAP-ID.h	\
+	./EUTRACellIdentity.h	\
+	./EUTRA-CGI.h	\
+	./FiveQI.h	\
+	./GlobalGNB-ID.h	\
+	./GlobalNgENB-ID.h	\
+	./GNB-ID.h	\
+	./GUAMI.h	\
+	./IndexToRFSP.h	\
+	./NgENB-ID.h	\
+	./NRCellIdentity.h	\
+	./NR-CGI.h	\
+	./PLMNIdentity.h	\
+	./QosFlowIdentifier.h	\
+	./SD.h	\
+	./S-NSSAI.h	\
+	./SST.h	\
+	./NG-RANnodeUEXnAPID.h	\
+	./GlobalNGRANNodeID.h	\
+	./GNB-CU-CP-UE-E1AP-ID.h	\
+	./GNB-CU-UP-ID.h	\
+	./FiveGS-TAC.h	\
+	./FreqBandNrItem.h	\
+	./GNB-CU-UE-F1AP-ID.h	\
+	./GNB-DU-ID.h	\
+	./NR-PCI.h	\
+	./NR-ARFCN.h	\
+	./NRFrequencyBand-List.h	\
+	./NRFrequencyBandItem.h	\
+	./NRFrequencyInfo.h	\
+	./NRFrequencyShift7p5khz.h	\
+	./RANUEID.h	\
+	./SupportedSULBandList.h	\
+	./SupportedSULFreqBandItem.h	\
+	./LogicalOR.h	\
+	./NeighborCell-List.h	\
+	./NeighborCell-Item.h	\
+	./NeighborCell-Item-Choice-NR.h	\
+	./NeighborCell-Item-Choice-E-UTRA.h	\
+	./NeighborRelation-Info.h	\
+	./RRC-State.h	\
+	./EventTrigger-Cell-Info.h	\
+	./EventTrigger-Cell-Info-Item.h	\
+	./EventTrigger-Cell-Info-Item-Choice-Individual.h	\
+	./EventTrigger-Cell-Info-Item-Choice-Group.h	\
+	./EventTrigger-UE-Info.h	\
+	./EventTrigger-UE-Info-Item.h	\
+	./EventTrigger-UE-Info-Item-Choice-Individual.h	\
+	./EventTrigger-UE-Info-Item-Choice-Group.h	\
+	./EventTrigger-UEevent-Info.h	\
+	./EventTrigger-UEevent-Info-Item.h	\
+	./RANParameter-ID.h	\
+	./RANParameter-Name.h	\
+	./RANParameter-Definition.h	\
+	./RANParameter-Definition-Choice.h	\
+	./RANParameter-Definition-Choice-LIST.h	\
+	./RANParameter-Definition-Choice-LIST-Item.h	\
+	./RANParameter-Definition-Choice-STRUCTURE.h	\
+	./RANParameter-Definition-Choice-STRUCTURE-Item.h	\
+	./RANParameter-Value.h	\
+	./RANParameter-ValueType.h	\
+	./RANParameter-ValueType-Choice-ElementTrue.h	\
+	./RANParameter-ValueType-Choice-ElementFalse.h	\
+	./RANParameter-ValueType-Choice-Structure.h	\
+	./RANParameter-ValueType-Choice-List.h	\
+	./RANParameter-STRUCTURE.h	\
+	./RANParameter-STRUCTURE-Item.h	\
+	./RANParameter-LIST.h	\
+	./RANParameter-Testing.h	\
+	./RANParameter-TestingCondition.h	\
+	./RANParameter-Testing-Item.h	\
+	./RANParameter-Testing-Item-Choice-List.h	\
+	./RANParameter-Testing-Item-Choice-Structure.h	\
+	./RANParameter-Testing-Item-Choice-ElementTrue.h	\
+	./RANParameter-Testing-Item-Choice-ElementFalse.h	\
+	./RANParameter-Testing-LIST.h	\
+	./RANParameter-Testing-STRUCTURE.h	\
+	./RAN-CallProcess-ID.h	\
+	./RIC-CallProcessType-ID.h	\
+	./RIC-CallProcessType-Name.h	\
+	./RIC-CallProcessBreakpoint-ID.h	\
+	./RIC-CallProcessBreakpoint-Name.h	\
+	./RIC-ControlAction-ID.h	\
+	./RIC-ControlAction-Name.h	\
+	./RIC-EventTriggerCondition-ID.h	\
+	./RIC-EventTrigger-UE-ID.h	\
+	./RIC-EventTrigger-UEevent-ID.h	\
+	./RIC-EventTrigger-Cell-ID.h	\
+	./RIC-InsertIndication-ID.h	\
+	./RIC-InsertIndication-Name.h	\
+	./RIC-PolicyAction.h	\
+	./RIC-PolicyAction-RANParameter-Item.h	\
+	./E2SM-RC-EventTrigger.h	\
+	./E2SM-RC-EventTrigger-Format1.h	\
+	./E2SM-RC-EventTrigger-Format1-Item.h	\
+	./MessageType-Choice.h	\
+	./MessageType-Choice-NI.h	\
+	./MessageType-Choice-RRC.h	\
+	./E2SM-RC-EventTrigger-Format2.h	\
+	./E2SM-RC-EventTrigger-Format3.h	\
+	./E2SM-RC-EventTrigger-Format3-Item.h	\
+	./E2SM-RC-EventTrigger-Format4.h	\
+	./E2SM-RC-EventTrigger-Format4-Item.h	\
+	./TriggerType-Choice.h	\
+	./TriggerType-Choice-RRCstate.h	\
+	./TriggerType-Choice-RRCstate-Item.h	\
+	./TriggerType-Choice-UEID.h	\
+	./TriggerType-Choice-L2state.h	\
+	./E2SM-RC-EventTrigger-Format5.h	\
+	./E2SM-RC-ActionDefinition.h	\
+	./E2SM-RC-ActionDefinition-Format1.h	\
+	./E2SM-RC-ActionDefinition-Format1-Item.h	\
+	./E2SM-RC-ActionDefinition-Format2.h	\
+	./E2SM-RC-ActionDefinition-Format2-Item.h	\
+	./E2SM-RC-ActionDefinition-Format3.h	\
+	./E2SM-RC-ActionDefinition-Format3-Item.h	\
+	./E2SM-RC-IndicationHeader.h	\
+	./E2SM-RC-IndicationHeader-Format1.h	\
+	./E2SM-RC-IndicationHeader-Format2.h	\
+	./E2SM-RC-IndicationMessage.h	\
+	./E2SM-RC-IndicationMessage-Format1.h	\
+	./E2SM-RC-IndicationMessage-Format1-Item.h	\
+	./E2SM-RC-IndicationMessage-Format2.h	\
+	./E2SM-RC-IndicationMessage-Format2-Item.h	\
+	./E2SM-RC-IndicationMessage-Format2-RANParameter-Item.h	\
+	./E2SM-RC-IndicationMessage-Format3.h	\
+	./E2SM-RC-IndicationMessage-Format3-Item.h	\
+	./E2SM-RC-IndicationMessage-Format4.h	\
+	./E2SM-RC-IndicationMessage-Format4-ItemUE.h	\
+	./E2SM-RC-IndicationMessage-Format4-ItemCell.h	\
+	./E2SM-RC-IndicationMessage-Format5.h	\
+	./E2SM-RC-IndicationMessage-Format5-Item.h	\
+	./E2SM-RC-CallProcessID.h	\
+	./E2SM-RC-CallProcessID-Format1.h	\
+	./E2SM-RC-ControlHeader.h	\
+	./E2SM-RC-ControlHeader-Format1.h	\
+	./E2SM-RC-ControlMessage.h	\
+	./E2SM-RC-ControlMessage-Format1.h	\
+	./E2SM-RC-ControlMessage-Format1-Item.h	\
+	./E2SM-RC-ControlOutcome.h	\
+	./E2SM-RC-ControlOutcome-Format1.h	\
+	./E2SM-RC-ControlOutcome-Format1-Item.h	\
+	./E2SM-RC-RANFunctionDefinition.h	\
+	./RANFunctionDefinition-EventTrigger.h	\
+	./RANFunctionDefinition-EventTrigger-Style-Item.h	\
+	./L2Parameters-RANParameter-Item.h	\
+	./UEIdentification-RANParameter-Item.h	\
+	./CellIdentification-RANParameter-Item.h	\
+	./RANFunctionDefinition-EventTrigger-CallProcess-Item.h	\
+	./RANFunctionDefinition-EventTrigger-Breakpoint-Item.h	\
+	./CallProcessBreakpoint-RANParameter-Item.h	\
+	./RANFunctionDefinition-Report.h	\
+	./RANFunctionDefinition-Report-Item.h	\
+	./Report-RANParameter-Item.h	\
+	./RANFunctionDefinition-Insert.h	\
+	./RANFunctionDefinition-Insert-Item.h	\
+	./RANFunctionDefinition-Insert-Indication-Item.h	\
+	./InsertIndication-RANParameter-Item.h	\
+	./RANFunctionDefinition-Control.h	\
+	./RANFunctionDefinition-Control-Item.h	\
+	./ControlOutcome-RANParameter-Item.h	\
+	./RANFunctionDefinition-Control-Action-Item.h	\
+	./ControlAction-RANParameter-Item.h	\
+	./RANFunctionDefinition-Policy.h	\
+	./RANFunctionDefinition-Policy-Item.h	\
+	./RANFunctionDefinition-Policy-Action-Item.h	\
+	./PolicyAction-RANParameter-Item.h	\
+	./PolicyCondition-RANParameter-Item.h
+
+ASN_MODULE_HDRS+=./OPEN_TYPE.h
+ASN_MODULE_SRCS+=./OPEN_TYPE.c
+ASN_MODULE_HDRS+=./constr_CHOICE.h
+ASN_MODULE_HDRS+=./BOOLEAN.h
+ASN_MODULE_SRCS+=./BOOLEAN.c
+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+=./NativeReal.h
+ASN_MODULE_SRCS+=./NativeReal.c
+ASN_MODULE_HDRS+=./REAL.h
+ASN_MODULE_HDRS+=./PrintableString.h
+ASN_MODULE_SRCS+=./PrintableString.c
+ASN_MODULE_HDRS+=./OCTET_STRING.h
+ASN_MODULE_SRCS+=./REAL.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_CFLAGS=
+
+lib_LTLIBRARIES+=libasncodec.la
+libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS)
+libasncodec_la_CPPFLAGS=-I$(top_srcdir)/./
+libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS)
+libasncodec_la_LDFLAGS=-lm
diff --git a/e2sm/lib/MeasQuantityResults.c b/e2sm/lib/MeasQuantityResults.c
deleted file mode 100644
index 71a2de9..0000000
--- a/e2sm/lib/MeasQuantityResults.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasQuantityResults.h"
-
-asn_TYPE_member_t asn_MBR_MeasQuantityResults_1[] = {
-	{ ATF_POINTER, 3, offsetof(struct MeasQuantityResults, rsrp),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRP_Range,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrp"
-		},
-	{ ATF_POINTER, 2, offsetof(struct MeasQuantityResults, rsrq),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRQ_Range,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrq"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasQuantityResults, sinr),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_SINR_Range,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"sinr"
-		},
-};
-static const int asn_MAP_MeasQuantityResults_oms_1[] = { 0, 1, 2 };
-static const ber_tlv_tag_t asn_DEF_MeasQuantityResults_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasQuantityResults_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrp */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rsrq */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* sinr */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasQuantityResults_specs_1 = {
-	sizeof(struct MeasQuantityResults),
-	offsetof(struct MeasQuantityResults, _asn_ctx),
-	asn_MAP_MeasQuantityResults_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_MeasQuantityResults_oms_1,	/* Optional members */
-	3, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasQuantityResults = {
-	"MeasQuantityResults",
-	"MeasQuantityResults",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasQuantityResults_tags_1,
-	sizeof(asn_DEF_MeasQuantityResults_tags_1)
-		/sizeof(asn_DEF_MeasQuantityResults_tags_1[0]), /* 1 */
-	asn_DEF_MeasQuantityResults_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasQuantityResults_tags_1)
-		/sizeof(asn_DEF_MeasQuantityResults_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasQuantityResults_1,
-	3,	/* Elements count */
-	&asn_SPC_MeasQuantityResults_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasQuantityResultsEUTRA.c b/e2sm/lib/MeasQuantityResultsEUTRA.c
deleted file mode 100644
index 8dfe36d..0000000
--- a/e2sm/lib/MeasQuantityResultsEUTRA.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasQuantityResultsEUTRA.h"
-
-asn_TYPE_member_t asn_MBR_MeasQuantityResultsEUTRA_1[] = {
-	{ ATF_POINTER, 3, offsetof(struct MeasQuantityResultsEUTRA, rsrp),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRP_RangeEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrp"
-		},
-	{ ATF_POINTER, 2, offsetof(struct MeasQuantityResultsEUTRA, rsrq),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRQ_RangeEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrq"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasQuantityResultsEUTRA, sinr),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_SINR_RangeEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"sinr"
-		},
-};
-static const int asn_MAP_MeasQuantityResultsEUTRA_oms_1[] = { 0, 1, 2 };
-static const ber_tlv_tag_t asn_DEF_MeasQuantityResultsEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasQuantityResultsEUTRA_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrp */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rsrq */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* sinr */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasQuantityResultsEUTRA_specs_1 = {
-	sizeof(struct MeasQuantityResultsEUTRA),
-	offsetof(struct MeasQuantityResultsEUTRA, _asn_ctx),
-	asn_MAP_MeasQuantityResultsEUTRA_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_MeasQuantityResultsEUTRA_oms_1,	/* Optional members */
-	3, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasQuantityResultsEUTRA = {
-	"MeasQuantityResultsEUTRA",
-	"MeasQuantityResultsEUTRA",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasQuantityResultsEUTRA_tags_1,
-	sizeof(asn_DEF_MeasQuantityResultsEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasQuantityResultsEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_MeasQuantityResultsEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasQuantityResultsEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasQuantityResultsEUTRA_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasQuantityResultsEUTRA_1,
-	3,	/* Elements count */
-	&asn_SPC_MeasQuantityResultsEUTRA_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultEUTRA.c b/e2sm/lib/MeasResultEUTRA.c
deleted file mode 100644
index b3713d9..0000000
--- a/e2sm/lib/MeasResultEUTRA.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultEUTRA.h"
-
-asn_TYPE_member_t asn_MBR_MeasResultEUTRA_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA, eutra_PhysCellId),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PhysCellId,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eutra-PhysCellId"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA, measResult),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasQuantityResultsEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResult"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasResultEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasResultEUTRA_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eutra-PhysCellId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResult */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasResultEUTRA_specs_1 = {
-	sizeof(struct MeasResultEUTRA),
-	offsetof(struct MeasResultEUTRA, _asn_ctx),
-	asn_MAP_MeasResultEUTRA_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_MeasResultEUTRA = {
-	"MeasResultEUTRA",
-	"MeasResultEUTRA",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasResultEUTRA_tags_1,
-	sizeof(asn_DEF_MeasResultEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasResultEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasResultEUTRA_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasResultEUTRA_1,
-	2,	/* Elements count */
-	&asn_SPC_MeasResultEUTRA_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultListEUTRA.c b/e2sm/lib/MeasResultListEUTRA.c
deleted file mode 100644
index b7a963e..0000000
--- a/e2sm/lib/MeasResultListEUTRA.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultListEUTRA.h"
-
-#include "MeasResultEUTRA.h"
-static asn_oer_constraints_t asn_OER_type_MeasResultListEUTRA_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..8)) */};
-asn_per_constraints_t asn_PER_type_MeasResultListEUTRA_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_MeasResultListEUTRA_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_MeasResultEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasResultListEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_MeasResultListEUTRA_specs_1 = {
-	sizeof(struct MeasResultListEUTRA),
-	offsetof(struct MeasResultListEUTRA, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultListEUTRA = {
-	"MeasResultListEUTRA",
-	"MeasResultListEUTRA",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_MeasResultListEUTRA_tags_1,
-	sizeof(asn_DEF_MeasResultListEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasResultListEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultListEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultListEUTRA_tags_1)
-		/sizeof(asn_DEF_MeasResultListEUTRA_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasResultListEUTRA_constr_1, &asn_PER_type_MeasResultListEUTRA_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_MeasResultListEUTRA_1,
-	1,	/* Single element */
-	&asn_SPC_MeasResultListEUTRA_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultListNR.c b/e2sm/lib/MeasResultListNR.c
deleted file mode 100644
index d5edda9..0000000
--- a/e2sm/lib/MeasResultListNR.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultListNR.h"
-
-#include "MeasResultNR.h"
-static asn_oer_constraints_t asn_OER_type_MeasResultListNR_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..8)) */};
-asn_per_constraints_t asn_PER_type_MeasResultListNR_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_MeasResultListNR_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_MeasResultNR,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasResultListNR_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_MeasResultListNR_specs_1 = {
-	sizeof(struct MeasResultListNR),
-	offsetof(struct MeasResultListNR, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultListNR = {
-	"MeasResultListNR",
-	"MeasResultListNR",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_MeasResultListNR_tags_1,
-	sizeof(asn_DEF_MeasResultListNR_tags_1)
-		/sizeof(asn_DEF_MeasResultListNR_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultListNR_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultListNR_tags_1)
-		/sizeof(asn_DEF_MeasResultListNR_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasResultListNR_constr_1, &asn_PER_type_MeasResultListNR_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_MeasResultListNR_1,
-	1,	/* Single element */
-	&asn_SPC_MeasResultListNR_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultNR.c b/e2sm/lib/MeasResultNR.c
deleted file mode 100644
index fa4dae8..0000000
--- a/e2sm/lib/MeasResultNR.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultNR.h"
-
-#include "MeasQuantityResults.h"
-#include "ResultsPerSSB-IndexList.h"
-#include "ResultsPerCSI-RS-IndexList.h"
-static asn_TYPE_member_t asn_MBR_cellResults_4[] = {
-	{ ATF_POINTER, 2, offsetof(struct MeasResultNR__measResult__cellResults, resultsSSB_Cell),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasQuantityResults,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"resultsSSB-Cell"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasResultNR__measResult__cellResults, resultsCSI_RS_Cell),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasQuantityResults,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"resultsCSI-RS-Cell"
-		},
-};
-static const int asn_MAP_cellResults_oms_4[] = { 0, 1 };
-static const ber_tlv_tag_t asn_DEF_cellResults_tags_4[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_cellResults_tag2el_4[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resultsSSB-Cell */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* resultsCSI-RS-Cell */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_cellResults_specs_4 = {
-	sizeof(struct MeasResultNR__measResult__cellResults),
-	offsetof(struct MeasResultNR__measResult__cellResults, _asn_ctx),
-	asn_MAP_cellResults_tag2el_4,
-	2,	/* Count of tags in the map */
-	asn_MAP_cellResults_oms_4,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	-1,	/* First extension addition */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_cellResults_4 = {
-	"cellResults",
-	"cellResults",
-	&asn_OP_SEQUENCE,
-	asn_DEF_cellResults_tags_4,
-	sizeof(asn_DEF_cellResults_tags_4)
-		/sizeof(asn_DEF_cellResults_tags_4[0]) - 1, /* 1 */
-	asn_DEF_cellResults_tags_4,	/* Same as above */
-	sizeof(asn_DEF_cellResults_tags_4)
-		/sizeof(asn_DEF_cellResults_tags_4[0]), /* 2 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_cellResults_4,
-	2,	/* Elements count */
-	&asn_SPC_cellResults_specs_4	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_rsIndexResults_7[] = {
-	{ ATF_POINTER, 2, offsetof(struct MeasResultNR__measResult__rsIndexResults, resultsSSB_Indexes),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ResultsPerSSB_IndexList,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"resultsSSB-Indexes"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasResultNR__measResult__rsIndexResults, resultsCSI_RS_Indexes),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ResultsPerCSI_RS_IndexList,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"resultsCSI-RS-Indexes"
-		},
-};
-static const int asn_MAP_rsIndexResults_oms_7[] = { 0, 1 };
-static const ber_tlv_tag_t asn_DEF_rsIndexResults_tags_7[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_rsIndexResults_tag2el_7[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resultsSSB-Indexes */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* resultsCSI-RS-Indexes */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_rsIndexResults_specs_7 = {
-	sizeof(struct MeasResultNR__measResult__rsIndexResults),
-	offsetof(struct MeasResultNR__measResult__rsIndexResults, _asn_ctx),
-	asn_MAP_rsIndexResults_tag2el_7,
-	2,	/* Count of tags in the map */
-	asn_MAP_rsIndexResults_oms_7,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	-1,	/* First extension addition */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rsIndexResults_7 = {
-	"rsIndexResults",
-	"rsIndexResults",
-	&asn_OP_SEQUENCE,
-	asn_DEF_rsIndexResults_tags_7,
-	sizeof(asn_DEF_rsIndexResults_tags_7)
-		/sizeof(asn_DEF_rsIndexResults_tags_7[0]) - 1, /* 1 */
-	asn_DEF_rsIndexResults_tags_7,	/* Same as above */
-	sizeof(asn_DEF_rsIndexResults_tags_7)
-		/sizeof(asn_DEF_rsIndexResults_tags_7[0]), /* 2 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_rsIndexResults_7,
-	2,	/* Elements count */
-	&asn_SPC_rsIndexResults_specs_7	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_measResult_3[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultNR__measResult, cellResults),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_cellResults_4,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cellResults"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasResultNR__measResult, rsIndexResults),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_rsIndexResults_7,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsIndexResults"
-		},
-};
-static const int asn_MAP_measResult_oms_3[] = { 1 };
-static const ber_tlv_tag_t asn_DEF_measResult_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_measResult_tag2el_3[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellResults */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rsIndexResults */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_measResult_specs_3 = {
-	sizeof(struct MeasResultNR__measResult),
-	offsetof(struct MeasResultNR__measResult, _asn_ctx),
-	asn_MAP_measResult_tag2el_3,
-	2,	/* Count of tags in the map */
-	asn_MAP_measResult_oms_3,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	-1,	/* First extension addition */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_measResult_3 = {
-	"measResult",
-	"measResult",
-	&asn_OP_SEQUENCE,
-	asn_DEF_measResult_tags_3,
-	sizeof(asn_DEF_measResult_tags_3)
-		/sizeof(asn_DEF_measResult_tags_3[0]) - 1, /* 1 */
-	asn_DEF_measResult_tags_3,	/* Same as above */
-	sizeof(asn_DEF_measResult_tags_3)
-		/sizeof(asn_DEF_measResult_tags_3[0]), /* 2 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_measResult_3,
-	2,	/* Elements count */
-	&asn_SPC_measResult_specs_3	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_MeasResultNR_1[] = {
-	{ ATF_POINTER, 1, offsetof(struct MeasResultNR, physCellId),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PhysCellId,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"physCellId"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultNR, measResult),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_measResult_3,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResult"
-		},
-};
-static const int asn_MAP_MeasResultNR_oms_1[] = { 0 };
-static const ber_tlv_tag_t asn_DEF_MeasResultNR_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasResultNR_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResult */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasResultNR_specs_1 = {
-	sizeof(struct MeasResultNR),
-	offsetof(struct MeasResultNR, _asn_ctx),
-	asn_MAP_MeasResultNR_tag2el_1,
-	2,	/* Count of tags in the map */
-	asn_MAP_MeasResultNR_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	2,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultNR = {
-	"MeasResultNR",
-	"MeasResultNR",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasResultNR_tags_1,
-	sizeof(asn_DEF_MeasResultNR_tags_1)
-		/sizeof(asn_DEF_MeasResultNR_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultNR_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultNR_tags_1)
-		/sizeof(asn_DEF_MeasResultNR_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasResultNR_1,
-	2,	/* Elements count */
-	&asn_SPC_MeasResultNR_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultNeighCells.c b/e2sm/lib/MeasResultNeighCells.c
deleted file mode 100644
index 3f87d70..0000000
--- a/e2sm/lib/MeasResultNeighCells.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultNeighCells.h"
-
-#include "MeasResultListNR.h"
-#include "MeasResultListEUTRA.h"
-static asn_oer_constraints_t asn_OER_type_MeasResultNeighCells_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_MeasResultNeighCells_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_MeasResultNeighCells_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct MeasResultNeighCells, choice.measResultListNR),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultListNR,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResultListNR"
-		},
-	{ ATF_POINTER, 0, offsetof(struct MeasResultNeighCells, choice.measResultListEUTRA),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultListEUTRA,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResultListEUTRA"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasResultNeighCells_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResultListNR */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResultListEUTRA */
-};
-asn_CHOICE_specifics_t asn_SPC_MeasResultNeighCells_specs_1 = {
-	sizeof(struct MeasResultNeighCells),
-	offsetof(struct MeasResultNeighCells, _asn_ctx),
-	offsetof(struct MeasResultNeighCells, present),
-	sizeof(((struct MeasResultNeighCells *)0)->present),
-	asn_MAP_MeasResultNeighCells_tag2el_1,
-	2,	/* Count of tags in the map */
-	0, 0,
-	2	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultNeighCells = {
-	"MeasResultNeighCells",
-	"MeasResultNeighCells",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_MeasResultNeighCells_constr_1, &asn_PER_type_MeasResultNeighCells_constr_1, CHOICE_constraint },
-	asn_MBR_MeasResultNeighCells_1,
-	2,	/* Elements count */
-	&asn_SPC_MeasResultNeighCells_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultPCell.c b/e2sm/lib/MeasResultPCell.c
deleted file mode 100644
index cbd74f8..0000000
--- a/e2sm/lib/MeasResultPCell.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultPCell.h"
-
-asn_TYPE_member_t asn_MBR_MeasResultPCell_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultPCell, eutra_PhysCellId),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PhysCellId,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eutra-PhysCellId"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultPCell, rsrpResult),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRP_Range,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrpResult"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultPCell, rsrqResult),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RSRQ_Range,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"rsrqResult"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasResultPCell_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasResultPCell_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eutra-PhysCellId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rsrpResult */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rsrqResult */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasResultPCell_specs_1 = {
-	sizeof(struct MeasResultPCell),
-	offsetof(struct MeasResultPCell, _asn_ctx),
-	asn_MAP_MeasResultPCell_tag2el_1,
-	3,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultPCell = {
-	"MeasResultPCell",
-	"MeasResultPCell",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasResultPCell_tags_1,
-	sizeof(asn_DEF_MeasResultPCell_tags_1)
-		/sizeof(asn_DEF_MeasResultPCell_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultPCell_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultPCell_tags_1)
-		/sizeof(asn_DEF_MeasResultPCell_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasResultPCell_1,
-	3,	/* Elements count */
-	&asn_SPC_MeasResultPCell_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultServMO.c b/e2sm/lib/MeasResultServMO.c
deleted file mode 100644
index 346f5fe..0000000
--- a/e2sm/lib/MeasResultServMO.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultServMO.h"
-
-#include "MeasResultNR.h"
-asn_TYPE_member_t asn_MBR_MeasResultServMO_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultServMO, servCellId),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ServCellIndex,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"servCellId"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasResultServMO, measResultServingCell),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultNR,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResultServingCell"
-		},
-	{ ATF_POINTER, 1, offsetof(struct MeasResultServMO, measResultBestNeighCell),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultNR,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measResultBestNeighCell"
-		},
-};
-static const int asn_MAP_MeasResultServMO_oms_1[] = { 2 };
-static const ber_tlv_tag_t asn_DEF_MeasResultServMO_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasResultServMO_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servCellId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultServingCell */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResultBestNeighCell */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasResultServMO_specs_1 = {
-	sizeof(struct MeasResultServMO),
-	offsetof(struct MeasResultServMO, _asn_ctx),
-	asn_MAP_MeasResultServMO_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_MeasResultServMO_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultServMO = {
-	"MeasResultServMO",
-	"MeasResultServMO",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasResultServMO_tags_1,
-	sizeof(asn_DEF_MeasResultServMO_tags_1)
-		/sizeof(asn_DEF_MeasResultServMO_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultServMO_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultServMO_tags_1)
-		/sizeof(asn_DEF_MeasResultServMO_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasResultServMO_1,
-	3,	/* Elements count */
-	&asn_SPC_MeasResultServMO_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasResultServMOList.c b/e2sm/lib/MeasResultServMOList.c
deleted file mode 100644
index 2798a7e..0000000
--- a/e2sm/lib/MeasResultServMOList.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasResultServMOList.h"
-
-#include "MeasResultServMO.h"
-static asn_oer_constraints_t asn_OER_type_MeasResultServMOList_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..32)) */};
-asn_per_constraints_t asn_PER_type_MeasResultServMOList_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_MeasResultServMOList_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_MeasResultServMO,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasResultServMOList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_MeasResultServMOList_specs_1 = {
-	sizeof(struct MeasResultServMOList),
-	offsetof(struct MeasResultServMOList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasResultServMOList = {
-	"MeasResultServMOList",
-	"MeasResultServMOList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_MeasResultServMOList_tags_1,
-	sizeof(asn_DEF_MeasResultServMOList_tags_1)
-		/sizeof(asn_DEF_MeasResultServMOList_tags_1[0]), /* 1 */
-	asn_DEF_MeasResultServMOList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasResultServMOList_tags_1)
-		/sizeof(asn_DEF_MeasResultServMOList_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasResultServMOList_constr_1, &asn_PER_type_MeasResultServMOList_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_MeasResultServMOList_1,
-	1,	/* Single element */
-	&asn_SPC_MeasResultServMOList_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasurementInfoItem.c b/e2sm/lib/MeasurementInfoItem.c
deleted file mode 100644
index 5edae52..0000000
--- a/e2sm/lib/MeasurementInfoItem.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementInfoItem.h"
-
-asn_TYPE_member_t asn_MBR_MeasurementInfoItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementInfoItem, measType),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_MeasurementType,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measType"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasurementInfoItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasurementInfoItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* measType */
-};
-asn_SEQUENCE_specifics_t asn_SPC_MeasurementInfoItem_specs_1 = {
-	sizeof(struct MeasurementInfoItem),
-	offsetof(struct MeasurementInfoItem, _asn_ctx),
-	asn_MAP_MeasurementInfoItem_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_MeasurementInfoItem = {
-	"MeasurementInfoItem",
-	"MeasurementInfoItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_MeasurementInfoItem_tags_1,
-	sizeof(asn_DEF_MeasurementInfoItem_tags_1)
-		/sizeof(asn_DEF_MeasurementInfoItem_tags_1[0]), /* 1 */
-	asn_DEF_MeasurementInfoItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasurementInfoItem_tags_1)
-		/sizeof(asn_DEF_MeasurementInfoItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_MeasurementInfoItem_1,
-	1,	/* Elements count */
-	&asn_SPC_MeasurementInfoItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasurementInfoList.c b/e2sm/lib/MeasurementInfoList.c
deleted file mode 100644
index 9e7aed9..0000000
--- a/e2sm/lib/MeasurementInfoList.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementInfoList.h"
-
-#include "MeasurementInfoItem.h"
-static asn_oer_constraints_t asn_OER_type_MeasurementInfoList_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..65535)) */};
-asn_per_constraints_t asn_PER_type_MeasurementInfoList_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_MeasurementInfoList_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_MeasurementInfoItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_MeasurementInfoList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_MeasurementInfoList_specs_1 = {
-	sizeof(struct MeasurementInfoList),
-	offsetof(struct MeasurementInfoList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasurementInfoList = {
-	"MeasurementInfoList",
-	"MeasurementInfoList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_MeasurementInfoList_tags_1,
-	sizeof(asn_DEF_MeasurementInfoList_tags_1)
-		/sizeof(asn_DEF_MeasurementInfoList_tags_1[0]), /* 1 */
-	asn_DEF_MeasurementInfoList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasurementInfoList_tags_1)
-		/sizeof(asn_DEF_MeasurementInfoList_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasurementInfoList_constr_1, &asn_PER_type_MeasurementInfoList_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_MeasurementInfoList_1,
-	1,	/* Single element */
-	&asn_SPC_MeasurementInfoList_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasurementType.c b/e2sm/lib/MeasurementType.c
deleted file mode 100644
index 2d3e1f7..0000000
--- a/e2sm/lib/MeasurementType.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementType.h"
-
-static asn_oer_constraints_t asn_OER_type_MeasurementType_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_MeasurementType_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_MeasurementType_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementType, choice.measName),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasurementTypeName,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measName"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementType, choice.measID),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasurementTypeID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"measID"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasurementType_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measName */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measID */
-};
-asn_CHOICE_specifics_t asn_SPC_MeasurementType_specs_1 = {
-	sizeof(struct MeasurementType),
-	offsetof(struct MeasurementType, _asn_ctx),
-	offsetof(struct MeasurementType, present),
-	sizeof(((struct MeasurementType *)0)->present),
-	asn_MAP_MeasurementType_tag2el_1,
-	2,	/* Count of tags in the map */
-	0, 0,
-	2	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasurementType = {
-	"MeasurementType",
-	"MeasurementType",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_MeasurementType_constr_1, &asn_PER_type_MeasurementType_constr_1, CHOICE_constraint },
-	asn_MBR_MeasurementType_1,
-	2,	/* Elements count */
-	&asn_SPC_MeasurementType_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MeasurementTypeID.c b/e2sm/lib/MeasurementTypeID.c
deleted file mode 100644
index 62a8a79..0000000
--- a/e2sm/lib/MeasurementTypeID.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementTypeID.h"
-
-int
-MeasurementTypeID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 1 && 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;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_MeasurementTypeID_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_MeasurementTypeID_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_MeasurementTypeID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_MeasurementTypeID = {
-	"MeasurementTypeID",
-	"MeasurementTypeID",
-	&asn_OP_NativeInteger,
-	asn_DEF_MeasurementTypeID_tags_1,
-	sizeof(asn_DEF_MeasurementTypeID_tags_1)
-		/sizeof(asn_DEF_MeasurementTypeID_tags_1[0]), /* 1 */
-	asn_DEF_MeasurementTypeID_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasurementTypeID_tags_1)
-		/sizeof(asn_DEF_MeasurementTypeID_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasurementTypeID_constr_1, &asn_PER_type_MeasurementTypeID_constr_1, MeasurementTypeID_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/MeasurementTypeName.c b/e2sm/lib/MeasurementTypeName.c
deleted file mode 100644
index 1b5fd5a..0000000
--- a/e2sm/lib/MeasurementTypeName.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementTypeName.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
-MeasurementTypeName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const PrintableString_t *st = (const PrintableString_t *)sptr;
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	size = st->size;
-	
-	if((size >= 1 && size <= 150)
-		 && !check_permitted_alphabet_1(st)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static int asn_PER_MAP_MeasurementTypeName_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_MeasurementTypeName_1_c2v(unsigned int code) {
-	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
-		return -1;
-	return permitted_alphabet_code2value_1[code];
-}
-/*
- * This type is implemented using PrintableString,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_MeasurementTypeName_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(0..MAX)) */};
-asn_per_constraints_t asn_PER_type_MeasurementTypeName_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
-	asn_PER_MAP_MeasurementTypeName_1_v2c,	/* Value to PER code map */
-	asn_PER_MAP_MeasurementTypeName_1_c2v	/* PER code to value map */
-};
-static const ber_tlv_tag_t asn_DEF_MeasurementTypeName_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_MeasurementTypeName = {
-	"MeasurementTypeName",
-	"MeasurementTypeName",
-	&asn_OP_PrintableString,
-	asn_DEF_MeasurementTypeName_tags_1,
-	sizeof(asn_DEF_MeasurementTypeName_tags_1)
-		/sizeof(asn_DEF_MeasurementTypeName_tags_1[0]), /* 1 */
-	asn_DEF_MeasurementTypeName_tags_1,	/* Same as above */
-	sizeof(asn_DEF_MeasurementTypeName_tags_1)
-		/sizeof(asn_DEF_MeasurementTypeName_tags_1[0]), /* 1 */
-	{ &asn_OER_type_MeasurementTypeName_constr_1, &asn_PER_type_MeasurementTypeName_constr_1, MeasurementTypeName_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/MeasurementValue.c b/e2sm/lib/MeasurementValue.c
deleted file mode 100644
index ed03a0b..0000000
--- a/e2sm/lib/MeasurementValue.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "MeasurementValue.h"
-
-#include "L3-RRC-Measurements.h"
-static asn_oer_constraints_t asn_OER_type_MeasurementValue_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_MeasurementValue_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_MeasurementValue_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementValue, choice.valueInt),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"valueInt"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementValue, choice.valueReal),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeReal,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"valueReal"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MeasurementValue, choice.noValue),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NULL,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"noValue"
-		},
-	{ ATF_POINTER, 0, offsetof(struct MeasurementValue, choice.valueRRC),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_L3_RRC_Measurements,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"valueRRC"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_MeasurementValue_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueReal */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* noValue */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* valueRRC */
-};
-asn_CHOICE_specifics_t asn_SPC_MeasurementValue_specs_1 = {
-	sizeof(struct MeasurementValue),
-	offsetof(struct MeasurementValue, _asn_ctx),
-	offsetof(struct MeasurementValue, present),
-	sizeof(((struct MeasurementValue *)0)->present),
-	asn_MAP_MeasurementValue_tag2el_1,
-	4,	/* Count of tags in the map */
-	0, 0,
-	4	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_MeasurementValue = {
-	"MeasurementValue",
-	"MeasurementValue",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_MeasurementValue_constr_1, &asn_PER_type_MeasurementValue_constr_1, CHOICE_constraint },
-	asn_MBR_MeasurementValue_1,
-	4,	/* Elements count */
-	&asn_SPC_MeasurementValue_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/MessageType-Choice-NI.c b/e2sm/lib/MessageType-Choice-NI.c
new file mode 100644
index 0000000..7c6ded8
--- /dev/null
+++ b/e2sm/lib/MessageType-Choice-NI.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MessageType-Choice-NI.h"
+
+#include "InterfaceIdentifier.h"
+#include "Interface-MessageID.h"
+asn_TYPE_member_t asn_MBR_MessageType_Choice_NI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MessageType_Choice_NI, nI_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_InterfaceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nI-Type"
+		},
+	{ ATF_POINTER, 2, offsetof(struct MessageType_Choice_NI, nI_Identifier),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_InterfaceIdentifier,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nI-Identifier"
+		},
+	{ ATF_POINTER, 1, offsetof(struct MessageType_Choice_NI, nI_Message),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_Interface_MessageID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nI-Message"
+		},
+};
+static const int asn_MAP_MessageType_Choice_NI_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MessageType_Choice_NI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_MessageType_Choice_NI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nI-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nI-Identifier */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nI-Message */
+};
+asn_SEQUENCE_specifics_t asn_SPC_MessageType_Choice_NI_specs_1 = {
+	sizeof(struct MessageType_Choice_NI),
+	offsetof(struct MessageType_Choice_NI, _asn_ctx),
+	asn_MAP_MessageType_Choice_NI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_MessageType_Choice_NI_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_MessageType_Choice_NI = {
+	"MessageType-Choice-NI",
+	"MessageType-Choice-NI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_MessageType_Choice_NI_tags_1,
+	sizeof(asn_DEF_MessageType_Choice_NI_tags_1)
+		/sizeof(asn_DEF_MessageType_Choice_NI_tags_1[0]), /* 1 */
+	asn_DEF_MessageType_Choice_NI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MessageType_Choice_NI_tags_1)
+		/sizeof(asn_DEF_MessageType_Choice_NI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_MessageType_Choice_NI_1,
+	3,	/* Elements count */
+	&asn_SPC_MessageType_Choice_NI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/MessageType-Choice-RRC.c b/e2sm/lib/MessageType-Choice-RRC.c
new file mode 100644
index 0000000..8de8dfc
--- /dev/null
+++ b/e2sm/lib/MessageType-Choice-RRC.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MessageType-Choice-RRC.h"
+
+asn_TYPE_member_t asn_MBR_MessageType_Choice_RRC_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MessageType_Choice_RRC, rRC_Message),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RRC_MessageID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rRC-Message"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_MessageType_Choice_RRC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_MessageType_Choice_RRC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rRC-Message */
+};
+asn_SEQUENCE_specifics_t asn_SPC_MessageType_Choice_RRC_specs_1 = {
+	sizeof(struct MessageType_Choice_RRC),
+	offsetof(struct MessageType_Choice_RRC, _asn_ctx),
+	asn_MAP_MessageType_Choice_RRC_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_MessageType_Choice_RRC = {
+	"MessageType-Choice-RRC",
+	"MessageType-Choice-RRC",
+	&asn_OP_SEQUENCE,
+	asn_DEF_MessageType_Choice_RRC_tags_1,
+	sizeof(asn_DEF_MessageType_Choice_RRC_tags_1)
+		/sizeof(asn_DEF_MessageType_Choice_RRC_tags_1[0]), /* 1 */
+	asn_DEF_MessageType_Choice_RRC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MessageType_Choice_RRC_tags_1)
+		/sizeof(asn_DEF_MessageType_Choice_RRC_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_MessageType_Choice_RRC_1,
+	1,	/* Elements count */
+	&asn_SPC_MessageType_Choice_RRC_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/MessageType-Choice.c b/e2sm/lib/MessageType-Choice.c
new file mode 100644
index 0000000..3be3635
--- /dev/null
+++ b/e2sm/lib/MessageType-Choice.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "MessageType-Choice.h"
+
+#include "MessageType-Choice-NI.h"
+#include "MessageType-Choice-RRC.h"
+static asn_oer_constraints_t asn_OER_type_MessageType_Choice_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_MessageType_Choice_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_MessageType_Choice_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct MessageType_Choice, choice.messageType_Choice_NI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MessageType_Choice_NI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageType-Choice-NI"
+		},
+	{ ATF_POINTER, 0, offsetof(struct MessageType_Choice, choice.messageType_Choice_RRC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MessageType_Choice_RRC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageType-Choice-RRC"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_MessageType_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* messageType-Choice-NI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageType-Choice-RRC */
+};
+asn_CHOICE_specifics_t asn_SPC_MessageType_Choice_specs_1 = {
+	sizeof(struct MessageType_Choice),
+	offsetof(struct MessageType_Choice, _asn_ctx),
+	offsetof(struct MessageType_Choice, present),
+	sizeof(((struct MessageType_Choice *)0)->present),
+	asn_MAP_MessageType_Choice_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_MessageType_Choice = {
+	"MessageType-Choice",
+	"MessageType-Choice",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_MessageType_Choice_constr_1, &asn_PER_type_MessageType_Choice_constr_1, CHOICE_constraint },
+	asn_MBR_MessageType_Choice_1,
+	2,	/* Elements count */
+	&asn_SPC_MessageType_Choice_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NG-RANnodeUEXnAPID.c b/e2sm/lib/NG-RANnodeUEXnAPID.c
new file mode 100644
index 0000000..6a7a9b6
--- /dev/null
+++ b/e2sm/lib/NG-RANnodeUEXnAPID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NG-RANnodeUEXnAPID.h"
+
+int
+NG_RANnodeUEXnAPID_constraint(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;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NG_RANnodeUEXnAPID_constr_1 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..4294967295) */,
+	-1};
+asn_per_constraints_t asn_PER_type_NG_RANnodeUEXnAPID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_NG_RANnodeUEXnAPID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NG_RANnodeUEXnAPID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NG_RANnodeUEXnAPID = {
+	"NG-RANnodeUEXnAPID",
+	"NG-RANnodeUEXnAPID",
+	&asn_OP_NativeInteger,
+	asn_DEF_NG_RANnodeUEXnAPID_tags_1,
+	sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1)
+		/sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1[0]), /* 1 */
+	asn_DEF_NG_RANnodeUEXnAPID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1)
+		/sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NG_RANnodeUEXnAPID_constr_1, &asn_PER_type_NG_RANnodeUEXnAPID_constr_1, NG_RANnodeUEXnAPID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_NG_RANnodeUEXnAPID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NGENB-CU-UE-W1AP-ID.c b/e2sm/lib/NGENB-CU-UE-W1AP-ID.c
new file mode 100644
index 0000000..fa15e70
--- /dev/null
+++ b/e2sm/lib/NGENB-CU-UE-W1AP-ID.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NGENB-CU-UE-W1AP-ID.h"
+
+int
+NGENB_CU_UE_W1AP_ID_constraint(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;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NGENB_CU_UE_W1AP_ID_constr_1 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..4294967295) */,
+	-1};
+asn_per_constraints_t asn_PER_type_NGENB_CU_UE_W1AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_NGENB_CU_UE_W1AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NGENB_CU_UE_W1AP_ID = {
+	"NGENB-CU-UE-W1AP-ID",
+	"NGENB-CU-UE-W1AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1,
+	sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NGENB_CU_UE_W1AP_ID_constr_1, &asn_PER_type_NGENB_CU_UE_W1AP_ID_constr_1, NGENB_CU_UE_W1AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_NGENB_CU_UE_W1AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NGENB-DU-ID.c b/e2sm/lib/NGENB-DU-ID.c
new file mode 100644
index 0000000..2effacf
--- /dev/null
+++ b/e2sm/lib/NGENB-DU-ID.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NGENB-DU-ID.h"
+
+int
+NGENB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 68719476735)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NGENB_DU_ID_constr_1 CC_NOTUSED = {
+	{ 8, 1 }	/* (0..68719476735) */,
+	-1};
+asn_per_constraints_t asn_PER_type_NGENB_DU_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 36, -1,  0,  68719476735 }	/* (0..68719476735) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_NGENB_DU_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NGENB_DU_ID = {
+	"NGENB-DU-ID",
+	"NGENB-DU-ID",
+	&asn_OP_INTEGER,
+	asn_DEF_NGENB_DU_ID_tags_1,
+	sizeof(asn_DEF_NGENB_DU_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */
+	asn_DEF_NGENB_DU_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NGENB_DU_ID_tags_1)
+		/sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NGENB_DU_ID_constr_1, &asn_PER_type_NGENB_DU_ID_constr_1, NGENB_DU_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/NI-Type.c b/e2sm/lib/NI-Type.c
deleted file mode 100644
index 06ba425..0000000
--- a/e2sm/lib/NI-Type.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "NI-Type.h"
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_NI_Type_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_NI_Type_value2enum_1[] = {
-	{ 0,	4,	"x2-u" },
-	{ 1,	4,	"xn-u" },
-	{ 2,	4,	"f1-u" }
-	/* This list is extensible */
-};
-static const unsigned int asn_MAP_NI_Type_enum2value_1[] = {
-	2,	/* f1-u(2) */
-	0,	/* x2-u(0) */
-	1	/* xn-u(1) */
-	/* This list is extensible */
-};
-const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = {
-	asn_MAP_NI_Type_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_NI_Type_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_NI_Type_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_NI_Type = {
-	"NI-Type",
-	"NI-Type",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_NI_Type_tags_1,
-	sizeof(asn_DEF_NI_Type_tags_1)
-		/sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */
-	asn_DEF_NI_Type_tags_1,	/* Same as above */
-	sizeof(asn_DEF_NI_Type_tags_1)
-		/sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */
-	{ &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint },
-	0, 0,	/* Defined elsewhere */
-	&asn_SPC_NI_Type_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/NR-ARFCN.c b/e2sm/lib/NR-ARFCN.c
new file mode 100644
index 0000000..eaaffa4
--- /dev/null
+++ b/e2sm/lib/NR-ARFCN.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NR-ARFCN.h"
+
+static int
+memb_nRARFCN_constraint_1(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 <= 3279165)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_nRARFCN_constr_2 CC_NOTUSED = {
+	{ 4, 1 }	/* (0..3279165) */,
+	-1};
+static asn_per_constraints_t asn_PER_memb_nRARFCN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 22, -1,  0,  3279165 }	/* (0..3279165) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_NR_ARFCN_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NR_ARFCN, nRARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_nRARFCN_constr_2, &asn_PER_memb_nRARFCN_constr_2,  memb_nRARFCN_constraint_1 },
+		0, 0, /* No default value */
+		"nRARFCN"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NR_ARFCN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NR_ARFCN_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nRARFCN */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NR_ARFCN_specs_1 = {
+	sizeof(struct NR_ARFCN),
+	offsetof(struct NR_ARFCN, _asn_ctx),
+	asn_MAP_NR_ARFCN_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_NR_ARFCN = {
+	"NR-ARFCN",
+	"NR-ARFCN",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NR_ARFCN_tags_1,
+	sizeof(asn_DEF_NR_ARFCN_tags_1)
+		/sizeof(asn_DEF_NR_ARFCN_tags_1[0]), /* 1 */
+	asn_DEF_NR_ARFCN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NR_ARFCN_tags_1)
+		/sizeof(asn_DEF_NR_ARFCN_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NR_ARFCN_1,
+	1,	/* Elements count */
+	&asn_SPC_NR_ARFCN_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NR-CGI.c b/e2sm/lib/NR-CGI.c
new file mode 100644
index 0000000..e2a5d69
--- /dev/null
+++ b/e2sm/lib/NR-CGI.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NR-CGI.h"
+
+asn_TYPE_member_t asn_MBR_NR_CGI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NR_CGI, pLMNIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PLMNIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNIdentity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NR_CGI, nRCellIdentity),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NRCellIdentity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRCellIdentity"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NR_CGI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NR_CGI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NR_CGI_specs_1 = {
+	sizeof(struct NR_CGI),
+	offsetof(struct NR_CGI, _asn_ctx),
+	asn_MAP_NR_CGI_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_NR_CGI = {
+	"NR-CGI",
+	"NR-CGI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NR_CGI_tags_1,
+	sizeof(asn_DEF_NR_CGI_tags_1)
+		/sizeof(asn_DEF_NR_CGI_tags_1[0]), /* 1 */
+	asn_DEF_NR_CGI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NR_CGI_tags_1)
+		/sizeof(asn_DEF_NR_CGI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NR_CGI_1,
+	2,	/* Elements count */
+	&asn_SPC_NR_CGI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NR-PCI.c b/e2sm/lib/NR-PCI.c
new file mode 100644
index 0000000..ddd0e7c
--- /dev/null
+++ b/e2sm/lib/NR-PCI.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NR-PCI.h"
+
+int
+NR_PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1007)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NR_PCI_constr_1 CC_NOTUSED = {
+	{ 2, 1 }	/* (0..1007) */,
+	-1};
+asn_per_constraints_t asn_PER_type_NR_PCI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  1007 }	/* (0..1007) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_NR_PCI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NR_PCI = {
+	"NR-PCI",
+	"NR-PCI",
+	&asn_OP_NativeInteger,
+	asn_DEF_NR_PCI_tags_1,
+	sizeof(asn_DEF_NR_PCI_tags_1)
+		/sizeof(asn_DEF_NR_PCI_tags_1[0]), /* 1 */
+	asn_DEF_NR_PCI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NR_PCI_tags_1)
+		/sizeof(asn_DEF_NR_PCI_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NR_PCI_constr_1, &asn_PER_type_NR_PCI_constr_1, NR_PCI_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/NRCGI.c b/e2sm/lib/NRCGI.c
deleted file mode 100644
index 2eaae12..0000000
--- a/e2sm/lib/NRCGI.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "NRCGI.h"
-
-asn_TYPE_member_t asn_MBR_NRCGI_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"pLMN-Identity"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NRCellIdentity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"nRCellIdentity"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */
-};
-asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = {
-	sizeof(struct NRCGI),
-	offsetof(struct NRCGI, _asn_ctx),
-	asn_MAP_NRCGI_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_NRCGI = {
-	"NRCGI",
-	"NRCGI",
-	&asn_OP_SEQUENCE,
-	asn_DEF_NRCGI_tags_1,
-	sizeof(asn_DEF_NRCGI_tags_1)
-		/sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */
-	asn_DEF_NRCGI_tags_1,	/* Same as above */
-	sizeof(asn_DEF_NRCGI_tags_1)
-		/sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_NRCGI_1,
-	2,	/* Elements count */
-	&asn_SPC_NRCGI_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/NRCellIdentity.c b/e2sm/lib/NRCellIdentity.c
index 511d128..1b99861 100644
--- a/e2sm/lib/NRCellIdentity.c
+++ b/e2sm/lib/NRCellIdentity.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/NRFrequencyBand-List.c b/e2sm/lib/NRFrequencyBand-List.c
new file mode 100644
index 0000000..3b385c0
--- /dev/null
+++ b/e2sm/lib/NRFrequencyBand-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NRFrequencyBand-List.h"
+
+#include "NRFrequencyBandItem.h"
+static asn_oer_constraints_t asn_OER_type_NRFrequencyBand_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..32)) */};
+asn_per_constraints_t asn_PER_type_NRFrequencyBand_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_NRFrequencyBand_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_NRFrequencyBandItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NRFrequencyBand_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NRFrequencyBand_List_specs_1 = {
+	sizeof(struct NRFrequencyBand_List),
+	offsetof(struct NRFrequencyBand_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_NRFrequencyBand_List = {
+	"NRFrequencyBand-List",
+	"NRFrequencyBand-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_NRFrequencyBand_List_tags_1,
+	sizeof(asn_DEF_NRFrequencyBand_List_tags_1)
+		/sizeof(asn_DEF_NRFrequencyBand_List_tags_1[0]), /* 1 */
+	asn_DEF_NRFrequencyBand_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NRFrequencyBand_List_tags_1)
+		/sizeof(asn_DEF_NRFrequencyBand_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NRFrequencyBand_List_constr_1, &asn_PER_type_NRFrequencyBand_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_NRFrequencyBand_List_1,
+	1,	/* Single element */
+	&asn_SPC_NRFrequencyBand_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NRFrequencyBandItem.c b/e2sm/lib/NRFrequencyBandItem.c
new file mode 100644
index 0000000..1179aa1
--- /dev/null
+++ b/e2sm/lib/NRFrequencyBandItem.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NRFrequencyBandItem.h"
+
+static int
+memb_freqBandIndicatorNr_constraint_1(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 >= 1 && value <= 1024)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1024 }	/* (1..1024,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_NRFrequencyBandItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NRFrequencyBandItem, freqBandIndicatorNr),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_freqBandIndicatorNr_constr_2, &asn_PER_memb_freqBandIndicatorNr_constr_2,  memb_freqBandIndicatorNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandIndicatorNr"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NRFrequencyBandItem, supportedSULBandList),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_SupportedSULBandList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"supportedSULBandList"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NRFrequencyBandItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NRFrequencyBandItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* supportedSULBandList */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NRFrequencyBandItem_specs_1 = {
+	sizeof(struct NRFrequencyBandItem),
+	offsetof(struct NRFrequencyBandItem, _asn_ctx),
+	asn_MAP_NRFrequencyBandItem_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_NRFrequencyBandItem = {
+	"NRFrequencyBandItem",
+	"NRFrequencyBandItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NRFrequencyBandItem_tags_1,
+	sizeof(asn_DEF_NRFrequencyBandItem_tags_1)
+		/sizeof(asn_DEF_NRFrequencyBandItem_tags_1[0]), /* 1 */
+	asn_DEF_NRFrequencyBandItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NRFrequencyBandItem_tags_1)
+		/sizeof(asn_DEF_NRFrequencyBandItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NRFrequencyBandItem_1,
+	2,	/* Elements count */
+	&asn_SPC_NRFrequencyBandItem_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NRFrequencyInfo.c b/e2sm/lib/NRFrequencyInfo.c
new file mode 100644
index 0000000..d74281a
--- /dev/null
+++ b/e2sm/lib/NRFrequencyInfo.c
@@ -0,0 +1,72 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NRFrequencyInfo.h"
+
+static asn_TYPE_member_t asn_MBR_NRFrequencyInfo_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NRFrequencyInfo, nrARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NRFrequencyInfo, frequencyBand_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NRFrequencyBand_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"frequencyBand-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct NRFrequencyInfo, frequencyShift7p5khz),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NRFrequencyShift7p5khz,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"frequencyShift7p5khz"
+		},
+};
+static const int asn_MAP_NRFrequencyInfo_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_NRFrequencyInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NRFrequencyInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* frequencyBand-List */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* frequencyShift7p5khz */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_NRFrequencyInfo_specs_1 = {
+	sizeof(struct NRFrequencyInfo),
+	offsetof(struct NRFrequencyInfo, _asn_ctx),
+	asn_MAP_NRFrequencyInfo_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_NRFrequencyInfo_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_NRFrequencyInfo = {
+	"NRFrequencyInfo",
+	"NRFrequencyInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NRFrequencyInfo_tags_1,
+	sizeof(asn_DEF_NRFrequencyInfo_tags_1)
+		/sizeof(asn_DEF_NRFrequencyInfo_tags_1[0]), /* 1 */
+	asn_DEF_NRFrequencyInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NRFrequencyInfo_tags_1)
+		/sizeof(asn_DEF_NRFrequencyInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NRFrequencyInfo_1,
+	3,	/* Elements count */
+	&asn_SPC_NRFrequencyInfo_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NRFrequencyShift7p5khz.c b/e2sm/lib/NRFrequencyShift7p5khz.c
new file mode 100644
index 0000000..2d66419
--- /dev/null
+++ b/e2sm/lib/NRFrequencyShift7p5khz.c
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NRFrequencyShift7p5khz.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_NRFrequencyShift7p5khz_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_NRFrequencyShift7p5khz_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 */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_NRFrequencyShift7p5khz_value2enum_1[] = {
+	{ 0,	5,	"false" },
+	{ 1,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_NRFrequencyShift7p5khz_enum2value_1[] = {
+	0,	/* false(0) */
+	1	/* true(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_NRFrequencyShift7p5khz_specs_1 = {
+	asn_MAP_NRFrequencyShift7p5khz_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_NRFrequencyShift7p5khz_enum2value_1,	/* 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_NRFrequencyShift7p5khz_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NRFrequencyShift7p5khz = {
+	"NRFrequencyShift7p5khz",
+	"NRFrequencyShift7p5khz",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_NRFrequencyShift7p5khz_tags_1,
+	sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1)
+		/sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1[0]), /* 1 */
+	asn_DEF_NRFrequencyShift7p5khz_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1)
+		/sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NRFrequencyShift7p5khz_constr_1, &asn_PER_type_NRFrequencyShift7p5khz_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_NRFrequencyShift7p5khz_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NULL.c b/e2sm/lib/NULL.c
deleted file mode 100644
index 4a2914f..0000000
--- a/e2sm/lib/NULL.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*-
- * Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include <asn_internal.h>
-#include <asn_codecs_prim.h>
-#include <NULL.h>
-#include <BOOLEAN.h>	/* Implemented in terms of BOOLEAN type */
-
-/*
- * NULL basic type description.
- */
-static const ber_tlv_tag_t asn_DEF_NULL_tags[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (5 << 2))
-};
-asn_TYPE_operation_t asn_OP_NULL = {
-	BOOLEAN_free,
-	NULL_print,
-	NULL_compare,
-	BOOLEAN_decode_ber,	/* Implemented in terms of BOOLEAN */
-	NULL_encode_der,	/* Special handling of DER encoding */
-	NULL_decode_xer,
-	NULL_encode_xer,
-#ifdef	ASN_DISABLE_OER_SUPPORT
-	0,
-	0,
-#else
-	NULL_decode_oer,
-	NULL_encode_oer,
-#endif  /* ASN_DISABLE_OER_SUPPORT */
-#ifdef	ASN_DISABLE_PER_SUPPORT
-	0,
-	0,
-	0,
-	0,
-#else
-	NULL_decode_uper,	/* Unaligned PER decoder */
-	NULL_encode_uper,	/* Unaligned PER encoder */
-	NULL_decode_aper,	/* Aligned PER decoder */
-	NULL_encode_aper,	/* Aligned PER encoder */
-#endif	/* ASN_DISABLE_PER_SUPPORT */
-	NULL_random_fill,
-	0	/* Use generic outmost tag fetcher */
-};
-asn_TYPE_descriptor_t asn_DEF_NULL = {
-	"NULL",
-	"NULL",
-	&asn_OP_NULL,
-	asn_DEF_NULL_tags,
-	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
-	asn_DEF_NULL_tags,	/* Same as above */
-	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
-	{ 0, 0, asn_generic_no_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
-asn_enc_rval_t
-NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode,
-                ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
-	asn_enc_rval_t erval = {0,0,0};
-
-	erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key);
-	if(erval.encoded == -1) {
-		erval.failed_type = td;
-		erval.structure_ptr = ptr;
-	}
-
-	ASN__ENCODED_OK(erval);
-}
-
-asn_enc_rval_t
-NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
-                enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
-                void *app_key) {
-	asn_enc_rval_t er = {0,0,0};
-
-	(void)td;
-	(void)sptr;
-	(void)ilevel;
-	(void)flags;
-	(void)cb;
-	(void)app_key;
-
-	/* XMLNullValue is empty */
-	er.encoded = 0;
-	ASN__ENCODED_OK(er);
-}
-
-
-static enum xer_pbd_rval
-NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
-                      const void *chunk_buf, size_t chunk_size) {
-    (void)td;
-	(void)sptr;
-	(void)chunk_buf;    /* Going to be empty according to the rules below. */
-
-	/*
-	 * There must be no content in self-terminating <NULL/> tag.
-	 */
-	if(chunk_size)
-		return XPBD_BROKEN_ENCODING;
-	else
-		return XPBD_BODY_CONSUMED;
-}
-
-asn_dec_rval_t
-NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
-                const asn_TYPE_descriptor_t *td, void **sptr,
-                const char *opt_mname, const void *buf_ptr, size_t size) {
-    return xer_decode_primitive(opt_codec_ctx, td,
-		sptr, sizeof(NULL_t), opt_mname, buf_ptr, size,
-		NULL__xer_body_decode);
-}
-
-int
-NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) {
-    (void)td;
-    (void)a;
-    (void)b;
-    return 0;
-}
-
-int
-NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
-           asn_app_consume_bytes_f *cb, void *app_key) {
-    (void)td;	/* Unused argument */
-	(void)ilevel;	/* Unused argument */
-
-	if(sptr) {
-		return (cb("<present>", 9, app_key) < 0) ? -1 : 0;
-	} else {
-		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
-	}
-}
-
-#ifndef ASN_DISABLE_OER_SUPPORT
-
-asn_dec_rval_t
-NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
-                const asn_TYPE_descriptor_t *td,
-                const asn_oer_constraints_t *constraints, void **sptr,
-                const void *ptr, size_t size) {
-    asn_dec_rval_t rv = {RC_OK, 0};
-    (void)opt_codec_ctx;
-    (void)td;
-    (void)constraints;
-    (void)ptr;
-    (void)size;
-
-    if(!*sptr) {
-        *sptr = MALLOC(sizeof(NULL_t));
-        if(*sptr) {
-            *(NULL_t *)*sptr = 0;
-        } else {
-            ASN__DECODE_FAILED;
-        }
-    }
-
-    return rv;
-}
-
-asn_enc_rval_t
-NULL_encode_oer(const asn_TYPE_descriptor_t *td,
-                const asn_oer_constraints_t *constraints, const void *sptr,
-                asn_app_consume_bytes_f *cb, void *app_key) {
-    asn_enc_rval_t er = {0,0,0};
-
-    (void)td;
-    (void)sptr;
-    (void)constraints;
-    (void)cb;
-    (void)app_key;
-
-    er.encoded = 0; /* Encoding in 0 bytes. */
-
-    ASN__ENCODED_OK(er);
-}
-
-#endif /* ASN_DISABLE_OER_SUPPORT */
-
-#ifndef ASN_DISABLE_PER_SUPPORT
-
-asn_dec_rval_t
-NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
-                 const asn_TYPE_descriptor_t *td,
-                 const asn_per_constraints_t *constraints, void **sptr,
-                 asn_per_data_t *pd) {
-    asn_dec_rval_t rv;
-
-	(void)opt_codec_ctx;
-	(void)td;
-	(void)constraints;
-	(void)pd;
-
-	if(!*sptr) {
-		*sptr = MALLOC(sizeof(NULL_t));
-		if(*sptr) {
-			*(NULL_t *)*sptr = 0;
-		} else {
-			ASN__DECODE_FAILED;
-		}
-	}
-
-	/*
-	 * NULL type does not have content octets.
-	 */
-
-	rv.code = RC_OK;
-	rv.consumed = 0;
-	return rv;
-}
-
-asn_enc_rval_t
-NULL_encode_uper(const asn_TYPE_descriptor_t *td,
-                 const asn_per_constraints_t *constraints, const void *sptr,
-                 asn_per_outp_t *po) {
-	asn_enc_rval_t er = {0,0,0};
-
-	(void)td;
-	(void)constraints;
-	(void)sptr;
-	(void)po;
-
-	er.encoded = 0;
-	ASN__ENCODED_OK(er);
-}
-
-asn_dec_rval_t
-NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
-                 const asn_TYPE_descriptor_t *td,
-                 const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_dec_rval_t rv = {RC_OK, 0};
-
-	(void)opt_codec_ctx;
-	(void)td;
-	(void)constraints;
-	(void)pd;
-
-	if(!*sptr) {
-		*sptr = MALLOC(sizeof(NULL_t));
-		if(*sptr) {
-			*(NULL_t *)*sptr = 0;
-		} else {
-			ASN__DECODE_FAILED;
-		}
-	}
-
-	/*
-	 * NULL type does not have content octets.
-	 */
-
-	rv.code = RC_OK;
-	rv.consumed = 0;
-	return rv;
-}
-
-
-asn_enc_rval_t
-NULL_encode_aper(const asn_TYPE_descriptor_t *td,
-                 const asn_per_constraints_t *constraints,
-                 const void *sptr, asn_per_outp_t *po) {
-	asn_enc_rval_t er = {0,0,0};
-
-	(void)td;
-	(void)constraints;
-	(void)sptr;
-	(void)po;
-
-	er.encoded = 0;
-	ASN__ENCODED_OK(er);
-}
-
-#endif  /* ASN_DISABLE_PER_SUPPORT */
-
-asn_random_fill_result_t
-NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
-                    const asn_encoding_constraints_t *constr,
-                    size_t max_length) {
-    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
-    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
-    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
-    NULL_t *st = *sptr;
-
-    (void)td;
-    (void)constr;
-
-    if(max_length == 0) return result_skipped;
-
-    if(st == NULL) {
-        st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st)));
-        if(st == NULL) {
-            return result_failed;
-        }
-    }
-
-    return result_ok;
-}
-
diff --git a/e2sm/lib/NeighborCell-Item-Choice-E-UTRA.c b/e2sm/lib/NeighborCell-Item-Choice-E-UTRA.c
new file mode 100644
index 0000000..f0f2f1e
--- /dev/null
+++ b/e2sm/lib/NeighborCell-Item-Choice-E-UTRA.c
@@ -0,0 +1,245 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NeighborCell-Item-Choice-E-UTRA.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_version_constraint_1(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 >= 1 && 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_oer_constraints_t asn_OER_type_x2_Xn_established_constr_6 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_x2_Xn_established_constr_6 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 asn_oer_constraints_t asn_OER_type_hO_validated_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_hO_validated_constr_10 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 asn_oer_constraints_t asn_OER_memb_version_constr_14 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_version_constr_14 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_x2_Xn_established_value2enum_6[] = {
+	{ 0,	4,	"true" },
+	{ 1,	5,	"false" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_x2_Xn_established_enum2value_6[] = {
+	1,	/* false(1) */
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_x2_Xn_established_specs_6 = {
+	asn_MAP_x2_Xn_established_value2enum_6,	/* "tag" => N; sorted by tag */
+	asn_MAP_x2_Xn_established_enum2value_6,	/* 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_x2_Xn_established_tags_6[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_x2_Xn_established_6 = {
+	"x2-Xn-established",
+	"x2-Xn-established",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_x2_Xn_established_tags_6,
+	sizeof(asn_DEF_x2_Xn_established_tags_6)
+		/sizeof(asn_DEF_x2_Xn_established_tags_6[0]) - 1, /* 1 */
+	asn_DEF_x2_Xn_established_tags_6,	/* Same as above */
+	sizeof(asn_DEF_x2_Xn_established_tags_6)
+		/sizeof(asn_DEF_x2_Xn_established_tags_6[0]), /* 2 */
+	{ &asn_OER_type_x2_Xn_established_constr_6, &asn_PER_type_x2_Xn_established_constr_6, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_x2_Xn_established_specs_6	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_hO_validated_value2enum_10[] = {
+	{ 0,	4,	"true" },
+	{ 1,	5,	"false" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_hO_validated_enum2value_10[] = {
+	1,	/* false(1) */
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_hO_validated_specs_10 = {
+	asn_MAP_hO_validated_value2enum_10,	/* "tag" => N; sorted by tag */
+	asn_MAP_hO_validated_enum2value_10,	/* 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_hO_validated_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_hO_validated_10 = {
+	"hO-validated",
+	"hO-validated",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_hO_validated_tags_10,
+	sizeof(asn_DEF_hO_validated_tags_10)
+		/sizeof(asn_DEF_hO_validated_tags_10[0]) - 1, /* 1 */
+	asn_DEF_hO_validated_tags_10,	/* Same as above */
+	sizeof(asn_DEF_hO_validated_tags_10)
+		/sizeof(asn_DEF_hO_validated_tags_10[0]), /* 2 */
+	{ &asn_OER_type_hO_validated_constr_10, &asn_PER_type_hO_validated_constr_10, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_hO_validated_specs_10	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_NeighborCell_Item_Choice_E_UTRA_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, eUTRA_CGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_EUTRA_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-CGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, eUTRA_PCI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E_UTRA_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-PCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, eUTRA_ARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E_UTRA_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-ARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, eUTRA_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E_UTRA_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-TAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, x2_Xn_established),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_x2_Xn_established_6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"x2-Xn-established"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, hO_validated),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_hO_validated_10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hO-validated"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_E_UTRA, version),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_version_constr_14, &asn_PER_memb_version_constr_14,  memb_version_constraint_1 },
+		0, 0, /* No default value */
+		"version"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NeighborCell_Item_Choice_E_UTRA_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eUTRA-CGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eUTRA-PCI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eUTRA-ARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* eUTRA-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* x2-Xn-established */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* hO-validated */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* version */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NeighborCell_Item_Choice_E_UTRA_specs_1 = {
+	sizeof(struct NeighborCell_Item_Choice_E_UTRA),
+	offsetof(struct NeighborCell_Item_Choice_E_UTRA, _asn_ctx),
+	asn_MAP_NeighborCell_Item_Choice_E_UTRA_tag2el_1,
+	7,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_NeighborCell_Item_Choice_E_UTRA = {
+	"NeighborCell-Item-Choice-E-UTRA",
+	"NeighborCell-Item-Choice-E-UTRA",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1,
+	sizeof(asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1)
+		/sizeof(asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1[0]), /* 1 */
+	asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1)
+		/sizeof(asn_DEF_NeighborCell_Item_Choice_E_UTRA_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NeighborCell_Item_Choice_E_UTRA_1,
+	7,	/* Elements count */
+	&asn_SPC_NeighborCell_Item_Choice_E_UTRA_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NeighborCell-Item-Choice-NR.c b/e2sm/lib/NeighborCell-Item-Choice-NR.c
new file mode 100644
index 0000000..3ed4da7
--- /dev/null
+++ b/e2sm/lib/NeighborCell-Item-Choice-NR.c
@@ -0,0 +1,306 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NeighborCell-Item-Choice-NR.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_version_constraint_1(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 >= 1 && 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_oer_constraints_t asn_OER_type_nR_mode_info_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_nR_mode_info_constr_5 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 asn_oer_constraints_t asn_OER_type_x2_Xn_established_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_x2_Xn_established_constr_10 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 asn_oer_constraints_t asn_OER_type_hO_validated_constr_14 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_hO_validated_constr_14 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 asn_oer_constraints_t asn_OER_memb_version_constr_18 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_version_constr_18 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_nR_mode_info_value2enum_5[] = {
+	{ 0,	3,	"fdd" },
+	{ 1,	3,	"tdd" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_nR_mode_info_enum2value_5[] = {
+	0,	/* fdd(0) */
+	1	/* tdd(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_nR_mode_info_specs_5 = {
+	asn_MAP_nR_mode_info_value2enum_5,	/* "tag" => N; sorted by tag */
+	asn_MAP_nR_mode_info_enum2value_5,	/* 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_nR_mode_info_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_nR_mode_info_5 = {
+	"nR-mode-info",
+	"nR-mode-info",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_nR_mode_info_tags_5,
+	sizeof(asn_DEF_nR_mode_info_tags_5)
+		/sizeof(asn_DEF_nR_mode_info_tags_5[0]) - 1, /* 1 */
+	asn_DEF_nR_mode_info_tags_5,	/* Same as above */
+	sizeof(asn_DEF_nR_mode_info_tags_5)
+		/sizeof(asn_DEF_nR_mode_info_tags_5[0]), /* 2 */
+	{ &asn_OER_type_nR_mode_info_constr_5, &asn_PER_type_nR_mode_info_constr_5, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_nR_mode_info_specs_5	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_x2_Xn_established_value2enum_10[] = {
+	{ 0,	4,	"true" },
+	{ 1,	5,	"false" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_x2_Xn_established_enum2value_10[] = {
+	1,	/* false(1) */
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_x2_Xn_established_specs_10 = {
+	asn_MAP_x2_Xn_established_value2enum_10,	/* "tag" => N; sorted by tag */
+	asn_MAP_x2_Xn_established_enum2value_10,	/* 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_x2_Xn_established_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_x2_Xn_established_10 = {
+	"x2-Xn-established",
+	"x2-Xn-established",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_x2_Xn_established_tags_10,
+	sizeof(asn_DEF_x2_Xn_established_tags_10)
+		/sizeof(asn_DEF_x2_Xn_established_tags_10[0]) - 1, /* 1 */
+	asn_DEF_x2_Xn_established_tags_10,	/* Same as above */
+	sizeof(asn_DEF_x2_Xn_established_tags_10)
+		/sizeof(asn_DEF_x2_Xn_established_tags_10[0]), /* 2 */
+	{ &asn_OER_type_x2_Xn_established_constr_10, &asn_PER_type_x2_Xn_established_constr_10, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_x2_Xn_established_specs_10	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_hO_validated_value2enum_14[] = {
+	{ 0,	4,	"true" },
+	{ 1,	5,	"false" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_hO_validated_enum2value_14[] = {
+	1,	/* false(1) */
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_hO_validated_specs_14 = {
+	asn_MAP_hO_validated_value2enum_14,	/* "tag" => N; sorted by tag */
+	asn_MAP_hO_validated_enum2value_14,	/* 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_hO_validated_tags_14[] = {
+	(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_hO_validated_14 = {
+	"hO-validated",
+	"hO-validated",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_hO_validated_tags_14,
+	sizeof(asn_DEF_hO_validated_tags_14)
+		/sizeof(asn_DEF_hO_validated_tags_14[0]) - 1, /* 1 */
+	asn_DEF_hO_validated_tags_14,	/* Same as above */
+	sizeof(asn_DEF_hO_validated_tags_14)
+		/sizeof(asn_DEF_hO_validated_tags_14[0]), /* 2 */
+	{ &asn_OER_type_hO_validated_constr_14, &asn_PER_type_hO_validated_constr_14, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_hO_validated_specs_14	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_NeighborCell_Item_Choice_NR_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, nR_CGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_CGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-CGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, nR_PCI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-PCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, fiveGS_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_FiveGS_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGS-TAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, nR_mode_info),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_nR_mode_info_5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-mode-info"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, nR_ARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-ARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, x2_Xn_established),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_x2_Xn_established_10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"x2-Xn-established"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, hO_validated),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_hO_validated_14,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hO-validated"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborCell_Item_Choice_NR, version),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_version_constr_18, &asn_PER_memb_version_constr_18,  memb_version_constraint_1 },
+		0, 0, /* No default value */
+		"version"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NeighborCell_Item_Choice_NR_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NeighborCell_Item_Choice_NR_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR-CGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nR-PCI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fiveGS-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* nR-mode-info */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* nR-ARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* x2-Xn-established */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* hO-validated */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* version */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NeighborCell_Item_Choice_NR_specs_1 = {
+	sizeof(struct NeighborCell_Item_Choice_NR),
+	offsetof(struct NeighborCell_Item_Choice_NR, _asn_ctx),
+	asn_MAP_NeighborCell_Item_Choice_NR_tag2el_1,
+	8,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_NeighborCell_Item_Choice_NR = {
+	"NeighborCell-Item-Choice-NR",
+	"NeighborCell-Item-Choice-NR",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NeighborCell_Item_Choice_NR_tags_1,
+	sizeof(asn_DEF_NeighborCell_Item_Choice_NR_tags_1)
+		/sizeof(asn_DEF_NeighborCell_Item_Choice_NR_tags_1[0]), /* 1 */
+	asn_DEF_NeighborCell_Item_Choice_NR_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NeighborCell_Item_Choice_NR_tags_1)
+		/sizeof(asn_DEF_NeighborCell_Item_Choice_NR_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NeighborCell_Item_Choice_NR_1,
+	8,	/* Elements count */
+	&asn_SPC_NeighborCell_Item_Choice_NR_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NeighborCell-Item.c b/e2sm/lib/NeighborCell-Item.c
new file mode 100644
index 0000000..b68fcd5
--- /dev/null
+++ b/e2sm/lib/NeighborCell-Item.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NeighborCell-Item.h"
+
+#include "NeighborCell-Item-Choice-NR.h"
+#include "NeighborCell-Item-Choice-E-UTRA.h"
+static asn_oer_constraints_t asn_OER_type_NeighborCell_Item_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_NeighborCell_Item_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_NeighborCell_Item_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct NeighborCell_Item, choice.ranType_Choice_NR),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NeighborCell_Item_Choice_NR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranType-Choice-NR"
+		},
+	{ ATF_POINTER, 0, offsetof(struct NeighborCell_Item, choice.ranType_Choice_EUTRA),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NeighborCell_Item_Choice_E_UTRA,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranType-Choice-EUTRA"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_NeighborCell_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranType-Choice-NR */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranType-Choice-EUTRA */
+};
+asn_CHOICE_specifics_t asn_SPC_NeighborCell_Item_specs_1 = {
+	sizeof(struct NeighborCell_Item),
+	offsetof(struct NeighborCell_Item, _asn_ctx),
+	offsetof(struct NeighborCell_Item, present),
+	sizeof(((struct NeighborCell_Item *)0)->present),
+	asn_MAP_NeighborCell_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_NeighborCell_Item = {
+	"NeighborCell-Item",
+	"NeighborCell-Item",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_NeighborCell_Item_constr_1, &asn_PER_type_NeighborCell_Item_constr_1, CHOICE_constraint },
+	asn_MBR_NeighborCell_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_NeighborCell_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NeighborCell-List.c b/e2sm/lib/NeighborCell-List.c
new file mode 100644
index 0000000..5acf37c
--- /dev/null
+++ b/e2sm/lib/NeighborCell-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NeighborCell-List.h"
+
+#include "NeighborCell-Item.h"
+static asn_oer_constraints_t asn_OER_type_NeighborCell_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+asn_per_constraints_t asn_PER_type_NeighborCell_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_NeighborCell_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_NeighborCell_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NeighborCell_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NeighborCell_List_specs_1 = {
+	sizeof(struct NeighborCell_List),
+	offsetof(struct NeighborCell_List, _asn_ctx),
+	2,	/* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_NeighborCell_List = {
+	"NeighborCell-List",
+	"NeighborCell-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_NeighborCell_List_tags_1,
+	sizeof(asn_DEF_NeighborCell_List_tags_1)
+		/sizeof(asn_DEF_NeighborCell_List_tags_1[0]), /* 1 */
+	asn_DEF_NeighborCell_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NeighborCell_List_tags_1)
+		/sizeof(asn_DEF_NeighborCell_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_NeighborCell_List_constr_1, &asn_PER_type_NeighborCell_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_NeighborCell_List_1,
+	1,	/* Single element */
+	&asn_SPC_NeighborCell_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NeighborRelation-Info.c b/e2sm/lib/NeighborRelation-Info.c
new file mode 100644
index 0000000..4de6ca1
--- /dev/null
+++ b/e2sm/lib/NeighborRelation-Info.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NeighborRelation-Info.h"
+
+asn_TYPE_member_t asn_MBR_NeighborRelation_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborRelation_Info, servingCellPCI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ServingCell_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servingCellPCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborRelation_Info, servingCellARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ServingCell_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servingCellARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NeighborRelation_Info, neighborCell_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NeighborCell_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"neighborCell-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_NeighborRelation_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_NeighborRelation_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servingCellPCI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servingCellARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighborCell-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_NeighborRelation_Info_specs_1 = {
+	sizeof(struct NeighborRelation_Info),
+	offsetof(struct NeighborRelation_Info, _asn_ctx),
+	asn_MAP_NeighborRelation_Info_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_NeighborRelation_Info = {
+	"NeighborRelation-Info",
+	"NeighborRelation-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_NeighborRelation_Info_tags_1,
+	sizeof(asn_DEF_NeighborRelation_Info_tags_1)
+		/sizeof(asn_DEF_NeighborRelation_Info_tags_1[0]), /* 1 */
+	asn_DEF_NeighborRelation_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_NeighborRelation_Info_tags_1)
+		/sizeof(asn_DEF_NeighborRelation_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_NeighborRelation_Info_1,
+	3,	/* Elements count */
+	&asn_SPC_NeighborRelation_Info_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/NgENB-ID.c b/e2sm/lib/NgENB-ID.c
new file mode 100644
index 0000000..31ee4ac
--- /dev/null
+++ b/e2sm/lib/NgENB-ID.c
@@ -0,0 +1,192 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "NgENB-ID.h"
+
+static int
+memb_macroNgENB_ID_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 == 20)) {
+		/* 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_shortMacroNgENB_ID_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 == 18)) {
+		/* 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_longMacroNgENB_ID_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 == 21)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_macroNgENB_ID_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	20	/* (SIZE(20..20)) */};
+static asn_per_constraints_t asn_PER_memb_macroNgENB_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_shortMacroNgENB_ID_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	18	/* (SIZE(18..18)) */};
+static asn_per_constraints_t asn_PER_memb_shortMacroNgENB_ID_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_longMacroNgENB_ID_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	21	/* (SIZE(21..21)) */};
+static asn_per_constraints_t asn_PER_memb_longMacroNgENB_ID_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_NgENB_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_NgENB_ID_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 */
+};
+asn_TYPE_member_t asn_MBR_NgENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.macroNgENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_macroNgENB_ID_constr_2, &asn_PER_memb_macroNgENB_ID_constr_2,  memb_macroNgENB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"macroNgENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.shortMacroNgENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_shortMacroNgENB_ID_constr_3, &asn_PER_memb_shortMacroNgENB_ID_constr_3,  memb_shortMacroNgENB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"shortMacroNgENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.longMacroNgENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ &asn_OER_memb_longMacroNgENB_ID_constr_4, &asn_PER_memb_longMacroNgENB_ID_constr_4,  memb_longMacroNgENB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"longMacroNgENB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_NgENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macroNgENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* shortMacroNgENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* longMacroNgENB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_NgENB_ID_specs_1 = {
+	sizeof(struct NgENB_ID),
+	offsetof(struct NgENB_ID, _asn_ctx),
+	offsetof(struct NgENB_ID, present),
+	sizeof(((struct NgENB_ID *)0)->present),
+	asn_MAP_NgENB_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_NgENB_ID = {
+	"NgENB-ID",
+	"NgENB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_NgENB_ID_constr_1, &asn_PER_type_NgENB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_NgENB_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_NgENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/OCUCP-PF-Container.c b/e2sm/lib/OCUCP-PF-Container.c
deleted file mode 100644
index 8788478..0000000
--- a/e2sm/lib/OCUCP-PF-Container.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "OCUCP-PF-Container.h"
-
-static int
-memb_numberOfActive_UEs_constraint_2(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 >= 1 && 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_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_2[] = {
-	{ ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_numberOfActive_UEs_constr_3, &asn_PER_memb_numberOfActive_UEs_constr_3,  memb_numberOfActive_UEs_constraint_2 },
-		0, 0, /* No default value */
-		"numberOfActive-UEs"
-		},
-};
-static const int asn_MAP_cu_CP_Resource_Status_oms_2[] = { 0 };
-static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_2[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_2 = {
-	sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status),
-	offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx),
-	asn_MAP_cu_CP_Resource_Status_tag2el_2,
-	1,	/* Count of tags in the map */
-	asn_MAP_cu_CP_Resource_Status_oms_2,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	-1,	/* First extension addition */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_2 = {
-	"cu-CP-Resource-Status",
-	"cu-CP-Resource-Status",
-	&asn_OP_SEQUENCE,
-	asn_DEF_cu_CP_Resource_Status_tags_2,
-	sizeof(asn_DEF_cu_CP_Resource_Status_tags_2)
-		/sizeof(asn_DEF_cu_CP_Resource_Status_tags_2[0]) - 1, /* 1 */
-	asn_DEF_cu_CP_Resource_Status_tags_2,	/* Same as above */
-	sizeof(asn_DEF_cu_CP_Resource_Status_tags_2)
-		/sizeof(asn_DEF_cu_CP_Resource_Status_tags_2[0]), /* 2 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_cu_CP_Resource_Status_2,
-	1,	/* Elements count */
-	&asn_SPC_cu_CP_Resource_Status_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_cu_CP_Resource_Status_2,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cu-CP-Resource-Status"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cu-CP-Resource-Status */
-};
-asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = {
-	sizeof(struct OCUCP_PF_Container),
-	offsetof(struct OCUCP_PF_Container, _asn_ctx),
-	asn_MAP_OCUCP_PF_Container_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_OCUCP_PF_Container = {
-	"OCUCP-PF-Container",
-	"OCUCP-PF-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_OCUCP_PF_Container_tags_1,
-	sizeof(asn_DEF_OCUCP_PF_Container_tags_1)
-		/sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */
-	asn_DEF_OCUCP_PF_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_OCUCP_PF_Container_tags_1)
-		/sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_OCUCP_PF_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_OCUCP_PF_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/OCUUP-PF-Container.c b/e2sm/lib/OCUUP-PF-Container.c
deleted file mode 100644
index 8ccc575..0000000
--- a/e2sm/lib/OCUUP-PF-Container.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "OCUUP-PF-Container.h"
-
-#include "PF-ContainerListItem.h"
-static int
-memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 3)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..3)) */};
-static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 2,  2,  1,  3 }	/* (SIZE(1..3)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..3)) */};
-static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 2,  2,  1,  3 }	/* (SIZE(1..3)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_pf_ContainerList_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PF_ContainerListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_2 = {
-	sizeof(struct OCUUP_PF_Container__pf_ContainerList),
-	offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_2 = {
-	"pf-ContainerList",
-	"pf-ContainerList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_pf_ContainerList_tags_2,
-	sizeof(asn_DEF_pf_ContainerList_tags_2)
-		/sizeof(asn_DEF_pf_ContainerList_tags_2[0]) - 1, /* 1 */
-	asn_DEF_pf_ContainerList_tags_2,	/* Same as above */
-	sizeof(asn_DEF_pf_ContainerList_tags_2)
-		/sizeof(asn_DEF_pf_ContainerList_tags_2[0]), /* 2 */
-	{ &asn_OER_type_pf_ContainerList_constr_2, &asn_PER_type_pf_ContainerList_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_pf_ContainerList_2,
-	1,	/* Single element */
-	&asn_SPC_pf_ContainerList_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_pf_ContainerList_2,
-		0,
-		{ &asn_OER_memb_pf_ContainerList_constr_2, &asn_PER_memb_pf_ContainerList_constr_2,  memb_pf_ContainerList_constraint_1 },
-		0, 0, /* No default value */
-		"pf-ContainerList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pf-ContainerList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = {
-	sizeof(struct OCUUP_PF_Container),
-	offsetof(struct OCUUP_PF_Container, _asn_ctx),
-	asn_MAP_OCUUP_PF_Container_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_OCUUP_PF_Container = {
-	"OCUUP-PF-Container",
-	"OCUUP-PF-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_OCUUP_PF_Container_tags_1,
-	sizeof(asn_DEF_OCUUP_PF_Container_tags_1)
-		/sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */
-	asn_DEF_OCUUP_PF_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_OCUUP_PF_Container_tags_1)
-		/sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_OCUUP_PF_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_OCUUP_PF_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ODU-PF-Container.c b/e2sm/lib/ODU-PF-Container.c
deleted file mode 100644
index 4aeaa6c..0000000
--- a/e2sm/lib/ODU-PF-Container.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ODU-PF-Container.h"
-
-#include "CellResourceReportListItem.h"
-static int
-memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 512)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..512)) */};
-static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 9,  9,  1,  512 }	/* (SIZE(1..512)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..512)) */};
-static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 9,  9,  1,  512 }	/* (SIZE(1..512)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_CellResourceReportListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = {
-	sizeof(struct ODU_PF_Container__cellResourceReportList),
-	offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = {
-	"cellResourceReportList",
-	"cellResourceReportList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_cellResourceReportList_tags_2,
-	sizeof(asn_DEF_cellResourceReportList_tags_2)
-		/sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */
-	asn_DEF_cellResourceReportList_tags_2,	/* Same as above */
-	sizeof(asn_DEF_cellResourceReportList_tags_2)
-		/sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */
-	{ &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_cellResourceReportList_2,
-	1,	/* Single element */
-	&asn_SPC_cellResourceReportList_specs_2	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_cellResourceReportList_2,
-		0,
-		{ &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2,  memb_cellResourceReportList_constraint_1 },
-		0, 0, /* No default value */
-		"cellResourceReportList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = {
-	sizeof(struct ODU_PF_Container),
-	offsetof(struct ODU_PF_Container, _asn_ctx),
-	asn_MAP_ODU_PF_Container_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_ODU_PF_Container = {
-	"ODU-PF-Container",
-	"ODU-PF-Container",
-	&asn_OP_SEQUENCE,
-	asn_DEF_ODU_PF_Container_tags_1,
-	sizeof(asn_DEF_ODU_PF_Container_tags_1)
-		/sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */
-	asn_DEF_ODU_PF_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ODU_PF_Container_tags_1)
-		/sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ODU_PF_Container_1,
-	1,	/* Elements count */
-	&asn_SPC_ODU_PF_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PF-Container.c b/e2sm/lib/PF-Container.c
deleted file mode 100644
index c4034f8..0000000
--- a/e2sm/lib/PF-Container.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PF-Container.h"
-
-#include "ODU-PF-Container.h"
-#include "OCUCP-PF-Container.h"
-#include "OCUUP-PF-Container.h"
-static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_PF_Container_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct PF_Container, choice.oDU),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_ODU_PF_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"oDU"
-		},
-	{ ATF_POINTER, 0, offsetof(struct PF_Container, choice.oCU_CP),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_OCUCP_PF_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"oCU-CP"
-		},
-	{ ATF_POINTER, 0, offsetof(struct PF_Container, choice.oCU_UP),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_OCUUP_PF_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"oCU-UP"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */
-};
-asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = {
-	sizeof(struct PF_Container),
-	offsetof(struct PF_Container, _asn_ctx),
-	offsetof(struct PF_Container, present),
-	sizeof(((struct PF_Container *)0)->present),
-	asn_MAP_PF_Container_tag2el_1,
-	3,	/* Count of tags in the map */
-	0, 0,
-	-1	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_PF_Container = {
-	"PF-Container",
-	"PF-Container",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint },
-	asn_MBR_PF_Container_1,
-	3,	/* Elements count */
-	&asn_SPC_PF_Container_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PF-ContainerListItem.c b/e2sm/lib/PF-ContainerListItem.c
deleted file mode 100644
index 112175c..0000000
--- a/e2sm/lib/PF-ContainerListItem.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PF-ContainerListItem.h"
-
-asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NI_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"interface-type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_CUUPMeasurement_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"o-CU-UP-PM-Container"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = {
-	sizeof(struct PF_ContainerListItem),
-	offsetof(struct PF_ContainerListItem, _asn_ctx),
-	asn_MAP_PF_ContainerListItem_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_PF_ContainerListItem = {
-	"PF-ContainerListItem",
-	"PF-ContainerListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PF_ContainerListItem_tags_1,
-	sizeof(asn_DEF_PF_ContainerListItem_tags_1)
-		/sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */
-	asn_DEF_PF_ContainerListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PF_ContainerListItem_tags_1)
-		/sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PF_ContainerListItem_1,
-	2,	/* Elements count */
-	&asn_SPC_PF_ContainerListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PLMN-Identity.c b/e2sm/lib/PLMN-Identity.c
deleted file mode 100644
index 023b1f7..0000000
--- a/e2sm/lib/PLMN-Identity.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PLMN-Identity.h"
-
-int
-PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const OCTET_STRING_t *st = (const OCTET_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;
-	}
-	
-	size = st->size;
-	
-	if((size == 3)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using 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)) */,
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = {
-	"PLMN-Identity",
-	"PLMN-Identity",
-	&asn_OP_OCTET_STRING,
-	asn_DEF_PLMN_Identity_tags_1,
-	sizeof(asn_DEF_PLMN_Identity_tags_1)
-		/sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */
-	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, 0,	/* No members */
-	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PLMNIdentity.c b/e2sm/lib/PLMNIdentity.c
new file mode 100644
index 0000000..d713421
--- /dev/null
+++ b/e2sm/lib/PLMNIdentity.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "PLMNIdentity.h"
+
+int
+PLMNIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_PLMNIdentity_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	3	/* (SIZE(3..3)) */};
+asn_per_constraints_t asn_PER_type_PLMNIdentity_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_PLMNIdentity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PLMNIdentity = {
+	"PLMNIdentity",
+	"PLMNIdentity",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_PLMNIdentity_tags_1,
+	sizeof(asn_DEF_PLMNIdentity_tags_1)
+		/sizeof(asn_DEF_PLMNIdentity_tags_1[0]), /* 1 */
+	asn_DEF_PLMNIdentity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_PLMNIdentity_tags_1)
+		/sizeof(asn_DEF_PLMNIdentity_tags_1[0]), /* 1 */
+	{ &asn_OER_type_PLMNIdentity_constr_1, &asn_PER_type_PLMNIdentity_constr_1, PLMNIdentity_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/PM-Containers-Item.c b/e2sm/lib/PM-Containers-Item.c
deleted file mode 100644
index 2116f5a..0000000
--- a/e2sm/lib/PM-Containers-Item.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PM-Containers-Item.h"
-
-#include "PF-Container.h"
-asn_TYPE_member_t asn_MBR_PM_Containers_Item_1[] = {
-	{ ATF_POINTER, 2, offsetof(struct PM_Containers_Item, performanceContainer),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_PF_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"performanceContainer"
-		},
-	{ ATF_POINTER, 1, offsetof(struct PM_Containers_Item, theRANContainer),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RAN_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"theRANContainer"
-		},
-};
-static const int asn_MAP_PM_Containers_Item_oms_1[] = { 0, 1 };
-static const ber_tlv_tag_t asn_DEF_PM_Containers_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_Item_specs_1 = {
-	sizeof(struct PM_Containers_Item),
-	offsetof(struct PM_Containers_Item, _asn_ctx),
-	asn_MAP_PM_Containers_Item_tag2el_1,
-	2,	/* Count of tags in the map */
-	asn_MAP_PM_Containers_Item_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	2,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_PM_Containers_Item = {
-	"PM-Containers-Item",
-	"PM-Containers-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PM_Containers_Item_tags_1,
-	sizeof(asn_DEF_PM_Containers_Item_tags_1)
-		/sizeof(asn_DEF_PM_Containers_Item_tags_1[0]), /* 1 */
-	asn_DEF_PM_Containers_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PM_Containers_Item_tags_1)
-		/sizeof(asn_DEF_PM_Containers_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PM_Containers_Item_1,
-	2,	/* Elements count */
-	&asn_SPC_PM_Containers_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PM-Info-Item.c b/e2sm/lib/PM-Info-Item.c
deleted file mode 100644
index e469eb6..0000000
--- a/e2sm/lib/PM-Info-Item.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PM-Info-Item.h"
-
-asn_TYPE_member_t asn_MBR_PM_Info_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PM_Info_Item, pmType),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_MeasurementType,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"pmType"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct PM_Info_Item, pmVal),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_MeasurementValue,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"pmVal"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_PM_Info_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PM_Info_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pmType */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pmVal */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PM_Info_Item_specs_1 = {
-	sizeof(struct PM_Info_Item),
-	offsetof(struct PM_Info_Item, _asn_ctx),
-	asn_MAP_PM_Info_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_PM_Info_Item = {
-	"PM-Info-Item",
-	"PM-Info-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PM_Info_Item_tags_1,
-	sizeof(asn_DEF_PM_Info_Item_tags_1)
-		/sizeof(asn_DEF_PM_Info_Item_tags_1[0]), /* 1 */
-	asn_DEF_PM_Info_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PM_Info_Item_tags_1)
-		/sizeof(asn_DEF_PM_Info_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PM_Info_Item_1,
-	2,	/* Elements count */
-	&asn_SPC_PM_Info_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PerQCIReportListItem.c b/e2sm/lib/PerQCIReportListItem.c
deleted file mode 100644
index 45935bd..0000000
--- a/e2sm/lib/PerQCIReportListItem.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PerQCIReportListItem.h"
-
-static int
-memb_dl_PRBUsage_constraint_1(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 <= 100)) {
-		/* 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_ul_PRBUsage_constraint_1(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 <= 100)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..100) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..100) */,
-	-1};
-static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_QCI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"qci"
-		},
-	{ ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3,  memb_dl_PRBUsage_constraint_1 },
-		0, 0, /* No default value */
-		"dl-PRBUsage"
-		},
-	{ ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_NativeInteger,
-		0,
-		{ &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4,  memb_ul_PRBUsage_constraint_1 },
-		0, 0, /* No default value */
-		"ul-PRBUsage"
-		},
-};
-static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = {
-	sizeof(struct PerQCIReportListItem),
-	offsetof(struct PerQCIReportListItem, _asn_ctx),
-	asn_MAP_PerQCIReportListItem_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_PerQCIReportListItem_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = {
-	"PerQCIReportListItem",
-	"PerQCIReportListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PerQCIReportListItem_tags_1,
-	sizeof(asn_DEF_PerQCIReportListItem_tags_1)
-		/sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */
-	asn_DEF_PerQCIReportListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PerQCIReportListItem_tags_1)
-		/sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PerQCIReportListItem_1,
-	3,	/* Elements count */
-	&asn_SPC_PerQCIReportListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PerQCIReportListItemFormat.c b/e2sm/lib/PerQCIReportListItemFormat.c
deleted file mode 100644
index 86f8bb4..0000000
--- a/e2sm/lib/PerQCIReportListItemFormat.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PerQCIReportListItemFormat.h"
-
-static int
-memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const INTEGER_t *st = (const INTEGER_t *)sptr;
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if(asn_INTEGER2long(st, &value)) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value too large (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if((value >= 0 && value <= 10000000000)) {
-		/* 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_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const INTEGER_t *st = (const INTEGER_t *)sptr;
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if(asn_INTEGER2long(st, &value)) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value too large (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	if((value >= 0 && value <= 10000000000)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  34, -1,  0,  10000000000 }	/* (0..10000000000,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  34, -1,  0,  10000000000 }	/* (0..10000000000,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, drbqci),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_QCI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"drbqci"
-		},
-	{ ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_INTEGER,
-		0,
-		{ &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3,  memb_pDCPBytesDL_constraint_1 },
-		0, 0, /* No default value */
-		"pDCPBytesDL"
-		},
-	{ ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_INTEGER,
-		0,
-		{ &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4,  memb_pDCPBytesUL_constraint_1 },
-		0, 0, /* No default value */
-		"pDCPBytesUL"
-		},
-};
-static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* drbqci */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = {
-	sizeof(struct PerQCIReportListItemFormat),
-	offsetof(struct PerQCIReportListItemFormat, _asn_ctx),
-	asn_MAP_PerQCIReportListItemFormat_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_PerQCIReportListItemFormat_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = {
-	"PerQCIReportListItemFormat",
-	"PerQCIReportListItemFormat",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PerQCIReportListItemFormat_tags_1,
-	sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1)
-		/sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */
-	asn_DEF_PerQCIReportListItemFormat_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1)
-		/sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PerQCIReportListItemFormat_1,
-	3,	/* Elements count */
-	&asn_SPC_PerQCIReportListItemFormat_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PerUE-PM-Item.c b/e2sm/lib/PerUE-PM-Item.c
deleted file mode 100644
index 9ecc2df..0000000
--- a/e2sm/lib/PerUE-PM-Item.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PerUE-PM-Item.h"
-
-#include "PM-Info-Item.h"
-static int
-memb_list_of_PM_Information_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 2147483647)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_list_of_PM_Information_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..2147483647)) */};
-static asn_per_constraints_t asn_PER_type_list_of_PM_Information_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 31, -1,  1,  2147483647 }	/* (SIZE(1..2147483647)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_list_of_PM_Information_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..2147483647)) */};
-static asn_per_constraints_t asn_PER_memb_list_of_PM_Information_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 31, -1,  1,  2147483647 }	/* (SIZE(1..2147483647)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_list_of_PM_Information_3[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_PM_Info_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_list_of_PM_Information_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_list_of_PM_Information_specs_3 = {
-	sizeof(struct PerUE_PM_Item__list_of_PM_Information),
-	offsetof(struct PerUE_PM_Item__list_of_PM_Information, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_list_of_PM_Information_3 = {
-	"list-of-PM-Information",
-	"list-of-PM-Information",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_list_of_PM_Information_tags_3,
-	sizeof(asn_DEF_list_of_PM_Information_tags_3)
-		/sizeof(asn_DEF_list_of_PM_Information_tags_3[0]) - 1, /* 1 */
-	asn_DEF_list_of_PM_Information_tags_3,	/* Same as above */
-	sizeof(asn_DEF_list_of_PM_Information_tags_3)
-		/sizeof(asn_DEF_list_of_PM_Information_tags_3[0]), /* 2 */
-	{ &asn_OER_type_list_of_PM_Information_constr_3, &asn_PER_type_list_of_PM_Information_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_list_of_PM_Information_3,
-	1,	/* Single element */
-	&asn_SPC_list_of_PM_Information_specs_3	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_PerUE_PM_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PerUE_PM_Item, ueId),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_UE_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ueId"
-		},
-	{ ATF_POINTER, 1, offsetof(struct PerUE_PM_Item, list_of_PM_Information),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_list_of_PM_Information_3,
-		0,
-		{ &asn_OER_memb_list_of_PM_Information_constr_3, &asn_PER_memb_list_of_PM_Information_constr_3,  memb_list_of_PM_Information_constraint_1 },
-		0, 0, /* No default value */
-		"list-of-PM-Information"
-		},
-};
-static const int asn_MAP_PerUE_PM_Item_oms_1[] = { 1 };
-static const ber_tlv_tag_t asn_DEF_PerUE_PM_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PerUE_PM_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueId */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* list-of-PM-Information */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PerUE_PM_Item_specs_1 = {
-	sizeof(struct PerUE_PM_Item),
-	offsetof(struct PerUE_PM_Item, _asn_ctx),
-	asn_MAP_PerUE_PM_Item_tag2el_1,
-	2,	/* Count of tags in the map */
-	asn_MAP_PerUE_PM_Item_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	2,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_PerUE_PM_Item = {
-	"PerUE-PM-Item",
-	"PerUE-PM-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PerUE_PM_Item_tags_1,
-	sizeof(asn_DEF_PerUE_PM_Item_tags_1)
-		/sizeof(asn_DEF_PerUE_PM_Item_tags_1[0]), /* 1 */
-	asn_DEF_PerUE_PM_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PerUE_PM_Item_tags_1)
-		/sizeof(asn_DEF_PerUE_PM_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PerUE_PM_Item_1,
-	2,	/* Elements count */
-	&asn_SPC_PerUE_PM_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PhysCellId.c b/e2sm/lib/PhysCellId.c
deleted file mode 100644
index bb61e1d..0000000
--- a/e2sm/lib/PhysCellId.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PhysCellId.h"
-
-int
-PhysCellId_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 1007)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_PhysCellId_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..1007) */,
-	-1};
-asn_per_constraints_t asn_PER_type_PhysCellId_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 10,  10,  0,  1007 }	/* (0..1007) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_PhysCellId_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_PhysCellId = {
-	"PhysCellId",
-	"PhysCellId",
-	&asn_OP_NativeInteger,
-	asn_DEF_PhysCellId_tags_1,
-	sizeof(asn_DEF_PhysCellId_tags_1)
-		/sizeof(asn_DEF_PhysCellId_tags_1[0]), /* 1 */
-	asn_DEF_PhysCellId_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PhysCellId_tags_1)
-		/sizeof(asn_DEF_PhysCellId_tags_1[0]), /* 1 */
-	{ &asn_OER_type_PhysCellId_constr_1, &asn_PER_type_PhysCellId_constr_1, PhysCellId_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/PlmnID-Item.c b/e2sm/lib/PlmnID-Item.c
deleted file mode 100644
index 5aad6cb..0000000
--- a/e2sm/lib/PlmnID-Item.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "PlmnID-Item.h"
-
-#include "FGC-CUUP-PM-Format.h"
-#include "EPC-CUUP-PM-Format.h"
-asn_TYPE_member_t asn_MBR_PlmnID_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct PlmnID_Item, pLMN_Identity),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"pLMN-Identity"
-		},
-	{ ATF_POINTER, 2, offsetof(struct PlmnID_Item, cu_UP_PM_5GC),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_FGC_CUUP_PM_Format,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cu-UP-PM-5GC"
-		},
-	{ ATF_POINTER, 1, offsetof(struct PlmnID_Item, cu_UP_PM_EPC),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_EPC_CUUP_PM_Format,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"cu-UP-PM-EPC"
-		},
-};
-static const int asn_MAP_PlmnID_Item_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_PlmnID_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_PlmnID_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */
-};
-asn_SEQUENCE_specifics_t asn_SPC_PlmnID_Item_specs_1 = {
-	sizeof(struct PlmnID_Item),
-	offsetof(struct PlmnID_Item, _asn_ctx),
-	asn_MAP_PlmnID_Item_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_PlmnID_Item_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_PlmnID_Item = {
-	"PlmnID-Item",
-	"PlmnID-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_PlmnID_Item_tags_1,
-	sizeof(asn_DEF_PlmnID_Item_tags_1)
-		/sizeof(asn_DEF_PlmnID_Item_tags_1[0]), /* 1 */
-	asn_DEF_PlmnID_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_PlmnID_Item_tags_1)
-		/sizeof(asn_DEF_PlmnID_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_PlmnID_Item_1,
-	3,	/* Elements count */
-	&asn_SPC_PlmnID_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/PolicyAction-RANParameter-Item.c b/e2sm/lib/PolicyAction-RANParameter-Item.c
new file mode 100644
index 0000000..85b1dfc
--- /dev/null
+++ b/e2sm/lib/PolicyAction-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "PolicyAction-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_PolicyAction_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct PolicyAction_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct PolicyAction_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct PolicyAction_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_PolicyAction_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_PolicyAction_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_PolicyAction_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_PolicyAction_RANParameter_Item_specs_1 = {
+	sizeof(struct PolicyAction_RANParameter_Item),
+	offsetof(struct PolicyAction_RANParameter_Item, _asn_ctx),
+	asn_MAP_PolicyAction_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_PolicyAction_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PolicyAction_RANParameter_Item = {
+	"PolicyAction-RANParameter-Item",
+	"PolicyAction-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_PolicyAction_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_PolicyAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_PolicyAction_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_PolicyAction_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_PolicyAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_PolicyAction_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_PolicyAction_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_PolicyAction_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/PolicyCondition-RANParameter-Item.c b/e2sm/lib/PolicyCondition-RANParameter-Item.c
new file mode 100644
index 0000000..33f64df
--- /dev/null
+++ b/e2sm/lib/PolicyCondition-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "PolicyCondition-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_PolicyCondition_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct PolicyCondition_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct PolicyCondition_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct PolicyCondition_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_PolicyCondition_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_PolicyCondition_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_PolicyCondition_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_PolicyCondition_RANParameter_Item_specs_1 = {
+	sizeof(struct PolicyCondition_RANParameter_Item),
+	offsetof(struct PolicyCondition_RANParameter_Item, _asn_ctx),
+	asn_MAP_PolicyCondition_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_PolicyCondition_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PolicyCondition_RANParameter_Item = {
+	"PolicyCondition-RANParameter-Item",
+	"PolicyCondition-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_PolicyCondition_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_PolicyCondition_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_PolicyCondition_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_PolicyCondition_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_PolicyCondition_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_PolicyCondition_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_PolicyCondition_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_PolicyCondition_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/Presence.c b/e2sm/lib/Presence.c
deleted file mode 100644
index b2e8cda..0000000
--- a/e2sm/lib/Presence.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "Presence.h"
-
-/*
- * 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};
-static 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 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = {
-	{ 0,	8,	"optional" },
-	{ 1,	11,	"conditional" },
-	{ 2,	9,	"mandatory" }
-};
-static const unsigned int asn_MAP_Presence_enum2value_1[] = {
-	1,	/* conditional(1) */
-	2,	/* mandatory(2) */
-	0	/* optional(0) */
-};
-static const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = {
-	asn_MAP_Presence_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_Presence_enum2value_1,	/* N => "tag"; sorted by N */
-	3,	/* Number of elements in the maps */
-	0,	/* Enumeration is not extensible */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_Presence = {
-	"Presence",
-	"Presence",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_Presence_tags_1,
-	sizeof(asn_DEF_Presence_tags_1)
-		/sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */
-	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, 0,	/* Defined elsewhere */
-	&asn_SPC_Presence_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ProcedureCode.c b/e2sm/lib/ProcedureCode.c
deleted file mode 100644
index a3ef61a..0000000
--- a/e2sm/lib/ProcedureCode.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ProcedureCode.h"
-
-int
-ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 255)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_ProcedureCode_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..255) */,
-	-1};
-static 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 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_ProcedureCode = {
-	"ProcedureCode",
-	"ProcedureCode",
-	&asn_OP_NativeInteger,
-	asn_DEF_ProcedureCode_tags_1,
-	sizeof(asn_DEF_ProcedureCode_tags_1)
-		/sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */
-	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, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/ProtocolIE-ID.c b/e2sm/lib/ProtocolIE-ID.c
deleted file mode 100644
index fd10d9c..0000000
--- a/e2sm/lib/ProtocolIE-ID.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ProtocolIE-ID.h"
-
-int
-ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 65535)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_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 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = {
-	"ProtocolIE-ID",
-	"ProtocolIE-ID",
-	&asn_OP_NativeInteger,
-	asn_DEF_ProtocolIE_ID_tags_1,
-	sizeof(asn_DEF_ProtocolIE_ID_tags_1)
-		/sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */
-	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, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/QCI.c b/e2sm/lib/QCI.c
index 61627ee..0261082 100644
--- a/e2sm/lib/QCI.c
+++ b/e2sm/lib/QCI.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -37,10 +37,10 @@
  * so here we adjust the DEF accordingly.
  */
 static asn_oer_constraints_t asn_OER_type_QCI_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
+	{ 1, 1 }	/* (0..255) */,
 	-1};
 asn_per_constraints_t asn_PER_type_QCI_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  0,  255 }	/* (0..255,...) */,
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
diff --git a/e2sm/lib/QoSID.c b/e2sm/lib/QoSID.c
new file mode 100644
index 0000000..ea37ef5
--- /dev/null
+++ b/e2sm/lib/QoSID.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "QoSID.h"
+
+static asn_oer_constraints_t asn_OER_type_QoSID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_QoSID_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 */
+};
+static asn_TYPE_member_t asn_MBR_QoSID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct QoSID, choice.fiveGC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_FiveQI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct QoSID, choice.ePC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_QCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ePC"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_QoSID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */
+};
+static asn_CHOICE_specifics_t asn_SPC_QoSID_specs_1 = {
+	sizeof(struct QoSID),
+	offsetof(struct QoSID, _asn_ctx),
+	offsetof(struct QoSID, present),
+	sizeof(((struct QoSID *)0)->present),
+	asn_MAP_QoSID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_QoSID = {
+	"QoSID",
+	"QoSID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_QoSID_constr_1, &asn_PER_type_QoSID_constr_1, CHOICE_constraint },
+	asn_MBR_QoSID_1,
+	2,	/* Elements count */
+	&asn_SPC_QoSID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/QosFlowIdentifier.c b/e2sm/lib/QosFlowIdentifier.c
new file mode 100644
index 0000000..f2bf382
--- /dev/null
+++ b/e2sm/lib/QosFlowIdentifier.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "QosFlowIdentifier.h"
+
+int
+QosFlowIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 63)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_QosFlowIdentifier_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_QosFlowIdentifier_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  6,  6,  0,  63 }	/* (0..63,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_QosFlowIdentifier_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_QosFlowIdentifier = {
+	"QosFlowIdentifier",
+	"QosFlowIdentifier",
+	&asn_OP_NativeInteger,
+	asn_DEF_QosFlowIdentifier_tags_1,
+	sizeof(asn_DEF_QosFlowIdentifier_tags_1)
+		/sizeof(asn_DEF_QosFlowIdentifier_tags_1[0]), /* 1 */
+	asn_DEF_QosFlowIdentifier_tags_1,	/* Same as above */
+	sizeof(asn_DEF_QosFlowIdentifier_tags_1)
+		/sizeof(asn_DEF_QosFlowIdentifier_tags_1[0]), /* 1 */
+	{ &asn_OER_type_QosFlowIdentifier_constr_1, &asn_PER_type_QosFlowIdentifier_constr_1, QosFlowIdentifier_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RAN-CallProcess-ID.c b/e2sm/lib/RAN-CallProcess-ID.c
new file mode 100644
index 0000000..20284f3
--- /dev/null
+++ b/e2sm/lib/RAN-CallProcess-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RAN-CallProcess-ID.h"
+
+int
+RAN_CallProcess_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 232)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RAN_CallProcess_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RAN_CallProcess_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  232 }	/* (1..232,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RAN_CallProcess_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RAN_CallProcess_ID = {
+	"RAN-CallProcess-ID",
+	"RAN-CallProcess-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RAN_CallProcess_ID_tags_1,
+	sizeof(asn_DEF_RAN_CallProcess_ID_tags_1)
+		/sizeof(asn_DEF_RAN_CallProcess_ID_tags_1[0]), /* 1 */
+	asn_DEF_RAN_CallProcess_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RAN_CallProcess_ID_tags_1)
+		/sizeof(asn_DEF_RAN_CallProcess_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RAN_CallProcess_ID_constr_1, &asn_PER_type_RAN_CallProcess_ID_constr_1, RAN_CallProcess_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RAN-Container.c b/e2sm/lib/RAN-Container.c
deleted file mode 100644
index 00ae3b9..0000000
--- a/e2sm/lib/RAN-Container.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RAN-Container.h"
-
-/*
- * This type is implemented using OCTET_STRING,
- * so here we adjust the DEF accordingly.
- */
-static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RAN_Container = {
-	"RAN-Container",
-	"RAN-Container",
-	&asn_OP_OCTET_STRING,
-	asn_DEF_RAN_Container_tags_1,
-	sizeof(asn_DEF_RAN_Container_tags_1)
-		/sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */
-	asn_DEF_RAN_Container_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RAN_Container_tags_1)
-		/sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */
-	{ 0, 0, OCTET_STRING_constraint },
-	0, 0,	/* No members */
-	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RAN-ControlParameter-Item.c b/e2sm/lib/RAN-ControlParameter-Item.c
deleted file mode 100644
index 4ae973e..0000000
--- a/e2sm/lib/RAN-ControlParameter-Item.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RAN-ControlParameter-Item.h"
-
-asn_TYPE_member_t asn_MBR_RAN_ControlParameter_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RAN_ControlParameter_Item, ranParameter_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranParameter-ID"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RAN_ControlParameter_Item, ranParameter_Name),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranParameter-Name"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RAN_ControlParameter_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RAN_ControlParameter_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-Name */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RAN_ControlParameter_Item_specs_1 = {
-	sizeof(struct RAN_ControlParameter_Item),
-	offsetof(struct RAN_ControlParameter_Item, _asn_ctx),
-	asn_MAP_RAN_ControlParameter_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_RAN_ControlParameter_Item = {
-	"RAN-ControlParameter-Item",
-	"RAN-ControlParameter-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RAN_ControlParameter_Item_tags_1,
-	sizeof(asn_DEF_RAN_ControlParameter_Item_tags_1)
-		/sizeof(asn_DEF_RAN_ControlParameter_Item_tags_1[0]), /* 1 */
-	asn_DEF_RAN_ControlParameter_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RAN_ControlParameter_Item_tags_1)
-		/sizeof(asn_DEF_RAN_ControlParameter_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RAN_ControlParameter_Item_1,
-	2,	/* Elements count */
-	&asn_SPC_RAN_ControlParameter_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RANFunctionDefinition-Control-Action-Item.c b/e2sm/lib/RANFunctionDefinition-Control-Action-Item.c
new file mode 100644
index 0000000..8cfa771
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Control-Action-Item.c
@@ -0,0 +1,152 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Control-Action-Item.h"
+
+#include "ControlAction-RANParameter-Item.h"
+static int
+memb_ran_ControlActionParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ran_ControlActionParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_ControlActionParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_ControlActionParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_ControlActionParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ran_ControlActionParameters_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ControlAction_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_ControlActionParameters_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_ControlActionParameters_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_Control_Action_Item__ran_ControlActionParameters_List),
+	offsetof(struct RANFunctionDefinition_Control_Action_Item__ran_ControlActionParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_ControlActionParameters_List_4 = {
+	"ran-ControlActionParameters-List",
+	"ran-ControlActionParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_ControlActionParameters_List_tags_4,
+	sizeof(asn_DEF_ran_ControlActionParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_ControlActionParameters_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_ran_ControlActionParameters_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ran_ControlActionParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_ControlActionParameters_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_ran_ControlActionParameters_List_constr_4, &asn_PER_type_ran_ControlActionParameters_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_ran_ControlActionParameters_List_4,
+	1,	/* Single element */
+	&asn_SPC_ran_ControlActionParameters_List_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Control_Action_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Action_Item, ric_ControlAction_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_ControlAction_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlAction-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Action_Item, ric_ControlAction_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_ControlAction_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlAction-Name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Control_Action_Item, ran_ControlActionParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_ran_ControlActionParameters_List_4,
+		0,
+		{ &asn_OER_memb_ran_ControlActionParameters_List_constr_4, &asn_PER_memb_ran_ControlActionParameters_List_constr_4,  memb_ran_ControlActionParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-ControlActionParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Control_Action_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Control_Action_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ControlAction-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ControlAction-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ran-ControlActionParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Control_Action_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Control_Action_Item),
+	offsetof(struct RANFunctionDefinition_Control_Action_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Control_Action_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Control_Action_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Control_Action_Item = {
+	"RANFunctionDefinition-Control-Action-Item",
+	"RANFunctionDefinition-Control-Action-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_Action_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Control_Action_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Control_Action_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Control-Item.c b/e2sm/lib/RANFunctionDefinition-Control-Item.c
new file mode 100644
index 0000000..4497d29
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Control-Item.c
@@ -0,0 +1,282 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Control-Item.h"
+
+#include "RANFunctionDefinition-Control-Action-Item.h"
+#include "ControlOutcome-RANParameter-Item.h"
+static int
+memb_ric_ControlAction_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_ControlOutcomeParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 255)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_ControlAction_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ric_ControlAction_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_ControlOutcomeParameters_List_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..255)) */};
+static asn_per_constraints_t asn_PER_type_ran_ControlOutcomeParameters_List_constr_10 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  255 }	/* (SIZE(1..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_ControlAction_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ric_ControlAction_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_ControlOutcomeParameters_List_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..255)) */};
+static asn_per_constraints_t asn_PER_memb_ran_ControlOutcomeParameters_List_constr_10 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  255 }	/* (SIZE(1..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_ControlAction_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Control_Action_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_ControlAction_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_ControlAction_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_Control_Item__ric_ControlAction_List),
+	offsetof(struct RANFunctionDefinition_Control_Item__ric_ControlAction_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_ControlAction_List_4 = {
+	"ric-ControlAction-List",
+	"ric-ControlAction-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_ControlAction_List_tags_4,
+	sizeof(asn_DEF_ric_ControlAction_List_tags_4)
+		/sizeof(asn_DEF_ric_ControlAction_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_ric_ControlAction_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ric_ControlAction_List_tags_4)
+		/sizeof(asn_DEF_ric_ControlAction_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_ric_ControlAction_List_constr_4, &asn_PER_type_ric_ControlAction_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_ric_ControlAction_List_4,
+	1,	/* Single element */
+	&asn_SPC_ric_ControlAction_List_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_ControlOutcomeParameters_List_10[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_ControlOutcome_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_ControlOutcomeParameters_List_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_ControlOutcomeParameters_List_specs_10 = {
+	sizeof(struct RANFunctionDefinition_Control_Item__ran_ControlOutcomeParameters_List),
+	offsetof(struct RANFunctionDefinition_Control_Item__ran_ControlOutcomeParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_ControlOutcomeParameters_List_10 = {
+	"ran-ControlOutcomeParameters-List",
+	"ran-ControlOutcomeParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_ControlOutcomeParameters_List_tags_10,
+	sizeof(asn_DEF_ran_ControlOutcomeParameters_List_tags_10)
+		/sizeof(asn_DEF_ran_ControlOutcomeParameters_List_tags_10[0]) - 1, /* 1 */
+	asn_DEF_ran_ControlOutcomeParameters_List_tags_10,	/* Same as above */
+	sizeof(asn_DEF_ran_ControlOutcomeParameters_List_tags_10)
+		/sizeof(asn_DEF_ran_ControlOutcomeParameters_List_tags_10[0]), /* 2 */
+	{ &asn_OER_type_ran_ControlOutcomeParameters_List_constr_10, &asn_PER_type_ran_ControlOutcomeParameters_List_constr_10, SEQUENCE_OF_constraint },
+	asn_MBR_ran_ControlOutcomeParameters_List_10,
+	1,	/* Single element */
+	&asn_SPC_ran_ControlOutcomeParameters_List_specs_10	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Control_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlStyle_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlStyle-Name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlAction_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_ric_ControlAction_List_4,
+		0,
+		{ &asn_OER_memb_ric_ControlAction_List_constr_4, &asn_PER_memb_ric_ControlAction_List_constr_4,  memb_ric_ControlAction_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-ControlAction-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlHeaderFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlHeaderFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlMessageFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlMessageFormat-Type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Control_Item, ric_CallProcessIDFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-CallProcessIDFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control_Item, ric_ControlOutcomeFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ControlOutcomeFormat-Type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Control_Item, ran_ControlOutcomeParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		0,
+		&asn_DEF_ran_ControlOutcomeParameters_List_10,
+		0,
+		{ &asn_OER_memb_ran_ControlOutcomeParameters_List_constr_10, &asn_PER_memb_ran_ControlOutcomeParameters_List_constr_10,  memb_ran_ControlOutcomeParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-ControlOutcomeParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Control_Item_oms_1[] = { 2, 5, 7 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Control_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Control_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ControlStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ControlStyle-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ControlAction-List */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ric-ControlHeaderFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ric-ControlMessageFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ric-CallProcessIDFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ric-ControlOutcomeFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* ran-ControlOutcomeParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Control_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Control_Item),
+	offsetof(struct RANFunctionDefinition_Control_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Control_Item_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Control_Item_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Control_Item = {
+	"RANFunctionDefinition-Control-Item",
+	"RANFunctionDefinition-Control-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Control_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Control_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Control_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Control_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Control_Item_1,
+	8,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Control_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Control.c b/e2sm/lib/RANFunctionDefinition-Control.c
new file mode 100644
index 0000000..ca30d07
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Control.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Control.h"
+
+#include "RANFunctionDefinition-Control-Item.h"
+static int
+memb_ric_ControlStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 63)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_ControlStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_type_ric_ControlStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_ControlStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_memb_ric_ControlStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_ControlStyle_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Control_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_ControlStyle_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_ControlStyle_List_specs_2 = {
+	sizeof(struct RANFunctionDefinition_Control__ric_ControlStyle_List),
+	offsetof(struct RANFunctionDefinition_Control__ric_ControlStyle_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_ControlStyle_List_2 = {
+	"ric-ControlStyle-List",
+	"ric-ControlStyle-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_ControlStyle_List_tags_2,
+	sizeof(asn_DEF_ric_ControlStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_ControlStyle_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_ControlStyle_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_ControlStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_ControlStyle_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_ControlStyle_List_constr_2, &asn_PER_type_ric_ControlStyle_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_ControlStyle_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_ControlStyle_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Control_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Control, ric_ControlStyle_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_ControlStyle_List_2,
+		0,
+		{ &asn_OER_memb_ric_ControlStyle_List_constr_2, &asn_PER_memb_ric_ControlStyle_List_constr_2,  memb_ric_ControlStyle_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-ControlStyle-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Control_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Control_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-ControlStyle-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Control_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Control),
+	offsetof(struct RANFunctionDefinition_Control, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Control_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_RANFunctionDefinition_Control = {
+	"RANFunctionDefinition-Control",
+	"RANFunctionDefinition-Control",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Control_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Control_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Control_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Control_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Control_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Control_1,
+	1,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Control_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-EventTrigger-Breakpoint-Item.c b/e2sm/lib/RANFunctionDefinition-EventTrigger-Breakpoint-Item.c
new file mode 100644
index 0000000..e70a4f4
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-EventTrigger-Breakpoint-Item.c
@@ -0,0 +1,152 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-EventTrigger-Breakpoint-Item.h"
+
+#include "CallProcessBreakpoint-RANParameter-Item.h"
+static int
+memb_ran_CallProcessBreakpointParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ran_CallProcessBreakpointParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_CallProcessBreakpointParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_CallProcessBreakpointParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_CallProcessBreakpointParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ran_CallProcessBreakpointParameters_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_CallProcessBreakpoint_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_CallProcessBreakpointParameters_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item__ran_CallProcessBreakpointParameters_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item__ran_CallProcessBreakpointParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_CallProcessBreakpointParameters_List_4 = {
+	"ran-CallProcessBreakpointParameters-List",
+	"ran-CallProcessBreakpointParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4,
+	sizeof(asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_CallProcessBreakpointParameters_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_ran_CallProcessBreakpointParameters_List_constr_4, &asn_PER_type_ran_CallProcessBreakpointParameters_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_ran_CallProcessBreakpointParameters_List_4,
+	1,	/* Single element */
+	&asn_SPC_ran_CallProcessBreakpointParameters_List_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_EventTrigger_Breakpoint_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item, callProcessBreakpoint_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessBreakpoint_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcessBreakpoint-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item, callProcessBreakpoint_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessBreakpoint_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcessBreakpoint-Name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item, ran_CallProcessBreakpointParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_ran_CallProcessBreakpointParameters_List_4,
+		0,
+		{ &asn_OER_memb_ran_CallProcessBreakpointParameters_List_constr_4, &asn_PER_memb_ran_CallProcessBreakpointParameters_List_constr_4,  memb_ran_CallProcessBreakpointParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-CallProcessBreakpointParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_EventTrigger_Breakpoint_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* callProcessBreakpoint-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* callProcessBreakpoint-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ran-CallProcessBreakpointParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_EventTrigger_Breakpoint_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item),
+	offsetof(struct RANFunctionDefinition_EventTrigger_Breakpoint_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_EventTrigger_Breakpoint_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item = {
+	"RANFunctionDefinition-EventTrigger-Breakpoint-Item",
+	"RANFunctionDefinition-EventTrigger-Breakpoint-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_EventTrigger_Breakpoint_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_EventTrigger_Breakpoint_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-EventTrigger-CallProcess-Item.c b/e2sm/lib/RANFunctionDefinition-EventTrigger-CallProcess-Item.c
new file mode 100644
index 0000000..58e1815
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-EventTrigger-CallProcess-Item.c
@@ -0,0 +1,150 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-EventTrigger-CallProcess-Item.h"
+
+#include "RANFunctionDefinition-EventTrigger-Breakpoint-Item.h"
+static int
+memb_callProcessBreakpoints_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_callProcessBreakpoints_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_callProcessBreakpoints_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_callProcessBreakpoints_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_callProcessBreakpoints_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_callProcessBreakpoints_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_EventTrigger_Breakpoint_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_callProcessBreakpoints_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_callProcessBreakpoints_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item__callProcessBreakpoints_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item__callProcessBreakpoints_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_callProcessBreakpoints_List_4 = {
+	"callProcessBreakpoints-List",
+	"callProcessBreakpoints-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_callProcessBreakpoints_List_tags_4,
+	sizeof(asn_DEF_callProcessBreakpoints_List_tags_4)
+		/sizeof(asn_DEF_callProcessBreakpoints_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_callProcessBreakpoints_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_callProcessBreakpoints_List_tags_4)
+		/sizeof(asn_DEF_callProcessBreakpoints_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_callProcessBreakpoints_List_constr_4, &asn_PER_type_callProcessBreakpoints_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_callProcessBreakpoints_List_4,
+	1,	/* Single element */
+	&asn_SPC_callProcessBreakpoints_List_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_EventTrigger_CallProcess_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item, callProcessType_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessType_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcessType-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item, callProcessType_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_CallProcessType_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcessType-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item, callProcessBreakpoints_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_callProcessBreakpoints_List_4,
+		0,
+		{ &asn_OER_memb_callProcessBreakpoints_List_constr_4, &asn_PER_memb_callProcessBreakpoints_List_constr_4,  memb_callProcessBreakpoints_List_constraint_1 },
+		0, 0, /* No default value */
+		"callProcessBreakpoints-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_EventTrigger_CallProcess_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* callProcessType-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* callProcessType-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* callProcessBreakpoints-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_EventTrigger_CallProcess_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item),
+	offsetof(struct RANFunctionDefinition_EventTrigger_CallProcess_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_EventTrigger_CallProcess_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item = {
+	"RANFunctionDefinition-EventTrigger-CallProcess-Item",
+	"RANFunctionDefinition-EventTrigger-CallProcess-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_EventTrigger_CallProcess_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_EventTrigger_CallProcess_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-EventTrigger-Style-Item.c b/e2sm/lib/RANFunctionDefinition-EventTrigger-Style-Item.c
new file mode 100644
index 0000000..2181f74
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-EventTrigger-Style-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-EventTrigger-Style-Item.h"
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_EventTrigger_Style_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_Style_Item, ric_EventTriggerStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-EventTriggerStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_Style_Item, ric_EventTriggerStyle_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-EventTriggerStyle-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger_Style_Item, ric_EventTriggerFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-EventTriggerFormat-Type"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_EventTrigger_Style_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_EventTrigger_Style_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger_Style_Item),
+	offsetof(struct RANFunctionDefinition_EventTrigger_Style_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_EventTrigger_Style_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item = {
+	"RANFunctionDefinition-EventTrigger-Style-Item",
+	"RANFunctionDefinition-EventTrigger-Style-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_EventTrigger_Style_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_EventTrigger_Style_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-EventTrigger.c b/e2sm/lib/RANFunctionDefinition-EventTrigger.c
new file mode 100644
index 0000000..fab4046
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-EventTrigger.c
@@ -0,0 +1,492 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-EventTrigger.h"
+
+#include "RANFunctionDefinition-EventTrigger-Style-Item.h"
+#include "L2Parameters-RANParameter-Item.h"
+#include "RANFunctionDefinition-EventTrigger-CallProcess-Item.h"
+#include "UEIdentification-RANParameter-Item.h"
+#include "CellIdentification-RANParameter-Item.h"
+static int
+memb_ric_EventTriggerStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 63)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_L2Parameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_CallProcessTypes_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_UEIdentificationParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_CellIdentificationParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_L2Parameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_L2Parameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_CallProcessTypes_List_constr_6 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_CallProcessTypes_List_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_UEIdentificationParameters_List_constr_8 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_UEIdentificationParameters_List_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_CellIdentificationParameters_List_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_CellIdentificationParameters_List_constr_10 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_L2Parameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_L2Parameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_CallProcessTypes_List_constr_6 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_CallProcessTypes_List_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_UEIdentificationParameters_List_constr_8 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_UEIdentificationParameters_List_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_CellIdentificationParameters_List_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_CellIdentificationParameters_List_constr_10 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_EventTrigger_Style_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_2 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger__ric_EventTriggerStyle_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger__ric_EventTriggerStyle_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_2 = {
+	"ric-EventTriggerStyle-List",
+	"ric-EventTriggerStyle-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_EventTriggerStyle_List_tags_2,
+	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_EventTriggerStyle_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_EventTriggerStyle_List_constr_2, &asn_PER_type_ric_EventTriggerStyle_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_EventTriggerStyle_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_EventTriggerStyle_List_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_L2Parameters_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_L2Parameters_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_L2Parameters_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_L2Parameters_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger__ran_L2Parameters_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger__ran_L2Parameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_L2Parameters_List_4 = {
+	"ran-L2Parameters-List",
+	"ran-L2Parameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_L2Parameters_List_tags_4,
+	sizeof(asn_DEF_ran_L2Parameters_List_tags_4)
+		/sizeof(asn_DEF_ran_L2Parameters_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_ran_L2Parameters_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ran_L2Parameters_List_tags_4)
+		/sizeof(asn_DEF_ran_L2Parameters_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_ran_L2Parameters_List_constr_4, &asn_PER_type_ran_L2Parameters_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_ran_L2Parameters_List_4,
+	1,	/* Single element */
+	&asn_SPC_ran_L2Parameters_List_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_CallProcessTypes_List_6[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_EventTrigger_CallProcess_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_CallProcessTypes_List_tags_6[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_CallProcessTypes_List_specs_6 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger__ran_CallProcessTypes_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger__ran_CallProcessTypes_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_CallProcessTypes_List_6 = {
+	"ran-CallProcessTypes-List",
+	"ran-CallProcessTypes-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_CallProcessTypes_List_tags_6,
+	sizeof(asn_DEF_ran_CallProcessTypes_List_tags_6)
+		/sizeof(asn_DEF_ran_CallProcessTypes_List_tags_6[0]) - 1, /* 1 */
+	asn_DEF_ran_CallProcessTypes_List_tags_6,	/* Same as above */
+	sizeof(asn_DEF_ran_CallProcessTypes_List_tags_6)
+		/sizeof(asn_DEF_ran_CallProcessTypes_List_tags_6[0]), /* 2 */
+	{ &asn_OER_type_ran_CallProcessTypes_List_constr_6, &asn_PER_type_ran_CallProcessTypes_List_constr_6, SEQUENCE_OF_constraint },
+	asn_MBR_ran_CallProcessTypes_List_6,
+	1,	/* Single element */
+	&asn_SPC_ran_CallProcessTypes_List_specs_6	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_UEIdentificationParameters_List_8[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_UEIdentification_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_UEIdentificationParameters_List_tags_8[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_UEIdentificationParameters_List_specs_8 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger__ran_UEIdentificationParameters_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger__ran_UEIdentificationParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_UEIdentificationParameters_List_8 = {
+	"ran-UEIdentificationParameters-List",
+	"ran-UEIdentificationParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_UEIdentificationParameters_List_tags_8,
+	sizeof(asn_DEF_ran_UEIdentificationParameters_List_tags_8)
+		/sizeof(asn_DEF_ran_UEIdentificationParameters_List_tags_8[0]) - 1, /* 1 */
+	asn_DEF_ran_UEIdentificationParameters_List_tags_8,	/* Same as above */
+	sizeof(asn_DEF_ran_UEIdentificationParameters_List_tags_8)
+		/sizeof(asn_DEF_ran_UEIdentificationParameters_List_tags_8[0]), /* 2 */
+	{ &asn_OER_type_ran_UEIdentificationParameters_List_constr_8, &asn_PER_type_ran_UEIdentificationParameters_List_constr_8, SEQUENCE_OF_constraint },
+	asn_MBR_ran_UEIdentificationParameters_List_8,
+	1,	/* Single element */
+	&asn_SPC_ran_UEIdentificationParameters_List_specs_8	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_CellIdentificationParameters_List_10[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_CellIdentification_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_CellIdentificationParameters_List_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_CellIdentificationParameters_List_specs_10 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger__ran_CellIdentificationParameters_List),
+	offsetof(struct RANFunctionDefinition_EventTrigger__ran_CellIdentificationParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_CellIdentificationParameters_List_10 = {
+	"ran-CellIdentificationParameters-List",
+	"ran-CellIdentificationParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_CellIdentificationParameters_List_tags_10,
+	sizeof(asn_DEF_ran_CellIdentificationParameters_List_tags_10)
+		/sizeof(asn_DEF_ran_CellIdentificationParameters_List_tags_10[0]) - 1, /* 1 */
+	asn_DEF_ran_CellIdentificationParameters_List_tags_10,	/* Same as above */
+	sizeof(asn_DEF_ran_CellIdentificationParameters_List_tags_10)
+		/sizeof(asn_DEF_ran_CellIdentificationParameters_List_tags_10[0]), /* 2 */
+	{ &asn_OER_type_ran_CellIdentificationParameters_List_constr_10, &asn_PER_type_ran_CellIdentificationParameters_List_constr_10, SEQUENCE_OF_constraint },
+	asn_MBR_ran_CellIdentificationParameters_List_10,
+	1,	/* Single element */
+	&asn_SPC_ran_CellIdentificationParameters_List_specs_10	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_EventTrigger_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_EventTrigger, ric_EventTriggerStyle_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_EventTriggerStyle_List_2,
+		0,
+		{ &asn_OER_memb_ric_EventTriggerStyle_List_constr_2, &asn_PER_memb_ric_EventTriggerStyle_List_constr_2,  memb_ric_EventTriggerStyle_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-EventTriggerStyle-List"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANFunctionDefinition_EventTrigger, ran_L2Parameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_ran_L2Parameters_List_4,
+		0,
+		{ &asn_OER_memb_ran_L2Parameters_List_constr_4, &asn_PER_memb_ran_L2Parameters_List_constr_4,  memb_ran_L2Parameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-L2Parameters-List"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANFunctionDefinition_EventTrigger, ran_CallProcessTypes_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_ran_CallProcessTypes_List_6,
+		0,
+		{ &asn_OER_memb_ran_CallProcessTypes_List_constr_6, &asn_PER_memb_ran_CallProcessTypes_List_constr_6,  memb_ran_CallProcessTypes_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-CallProcessTypes-List"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANFunctionDefinition_EventTrigger, ran_UEIdentificationParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		0,
+		&asn_DEF_ran_UEIdentificationParameters_List_8,
+		0,
+		{ &asn_OER_memb_ran_UEIdentificationParameters_List_constr_8, &asn_PER_memb_ran_UEIdentificationParameters_List_constr_8,  memb_ran_UEIdentificationParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-UEIdentificationParameters-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_EventTrigger, ran_CellIdentificationParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		0,
+		&asn_DEF_ran_CellIdentificationParameters_List_10,
+		0,
+		{ &asn_OER_memb_ran_CellIdentificationParameters_List_constr_10, &asn_PER_memb_ran_CellIdentificationParameters_List_constr_10,  memb_ran_CellIdentificationParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-CellIdentificationParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_EventTrigger_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_EventTrigger_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_EventTrigger_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ran-L2Parameters-List */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ran-CallProcessTypes-List */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ran-UEIdentificationParameters-List */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ran-CellIdentificationParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_EventTrigger_specs_1 = {
+	sizeof(struct RANFunctionDefinition_EventTrigger),
+	offsetof(struct RANFunctionDefinition_EventTrigger, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_EventTrigger_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_EventTrigger_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_EventTrigger = {
+	"RANFunctionDefinition-EventTrigger",
+	"RANFunctionDefinition-EventTrigger",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_EventTrigger_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_EventTrigger_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_EventTrigger_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_EventTrigger_1,
+	5,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_EventTrigger_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Insert-Indication-Item.c b/e2sm/lib/RANFunctionDefinition-Insert-Indication-Item.c
new file mode 100644
index 0000000..b26f955
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Insert-Indication-Item.c
@@ -0,0 +1,152 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Insert-Indication-Item.h"
+
+#include "InsertIndication-RANParameter-Item.h"
+static int
+memb_ran_InsertIndicationParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ran_InsertIndicationParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_InsertIndicationParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_InsertIndicationParameters_List_constr_4 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_InsertIndicationParameters_List_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ran_InsertIndicationParameters_List_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_InsertIndication_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_InsertIndicationParameters_List_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_InsertIndicationParameters_List_specs_4 = {
+	sizeof(struct RANFunctionDefinition_Insert_Indication_Item__ran_InsertIndicationParameters_List),
+	offsetof(struct RANFunctionDefinition_Insert_Indication_Item__ran_InsertIndicationParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_InsertIndicationParameters_List_4 = {
+	"ran-InsertIndicationParameters-List",
+	"ran-InsertIndicationParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_InsertIndicationParameters_List_tags_4,
+	sizeof(asn_DEF_ran_InsertIndicationParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_InsertIndicationParameters_List_tags_4[0]) - 1, /* 1 */
+	asn_DEF_ran_InsertIndicationParameters_List_tags_4,	/* Same as above */
+	sizeof(asn_DEF_ran_InsertIndicationParameters_List_tags_4)
+		/sizeof(asn_DEF_ran_InsertIndicationParameters_List_tags_4[0]), /* 2 */
+	{ &asn_OER_type_ran_InsertIndicationParameters_List_constr_4, &asn_PER_type_ran_InsertIndicationParameters_List_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_ran_InsertIndicationParameters_List_4,
+	1,	/* Single element */
+	&asn_SPC_ran_InsertIndicationParameters_List_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Insert_Indication_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Indication_Item, ric_InsertIndication_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_InsertIndication_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertIndication-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Indication_Item, ric_InsertIndication_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_InsertIndication_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertIndication-Name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Insert_Indication_Item, ran_InsertIndicationParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_ran_InsertIndicationParameters_List_4,
+		0,
+		{ &asn_OER_memb_ran_InsertIndicationParameters_List_constr_4, &asn_PER_memb_ran_InsertIndicationParameters_List_constr_4,  memb_ran_InsertIndicationParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-InsertIndicationParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Insert_Indication_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Insert_Indication_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-InsertIndication-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-InsertIndication-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ran-InsertIndicationParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Insert_Indication_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Insert_Indication_Item),
+	offsetof(struct RANFunctionDefinition_Insert_Indication_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Insert_Indication_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Insert_Indication_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Insert_Indication_Item = {
+	"RANFunctionDefinition-Insert-Indication-Item",
+	"RANFunctionDefinition-Insert-Indication-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_Indication_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Insert_Indication_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Insert_Indication_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Insert-Item.c b/e2sm/lib/RANFunctionDefinition-Insert-Item.c
new file mode 100644
index 0000000..009195a
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Insert-Item.c
@@ -0,0 +1,202 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Insert-Item.h"
+
+#include "RANFunctionDefinition-Insert-Indication-Item.h"
+static int
+memb_ric_InsertIndication_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_InsertIndication_List_constr_6 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ric_InsertIndication_List_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_InsertIndication_List_constr_6 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ric_InsertIndication_List_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_InsertIndication_List_6[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Insert_Indication_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_InsertIndication_List_tags_6[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_InsertIndication_List_specs_6 = {
+	sizeof(struct RANFunctionDefinition_Insert_Item__ric_InsertIndication_List),
+	offsetof(struct RANFunctionDefinition_Insert_Item__ric_InsertIndication_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_InsertIndication_List_6 = {
+	"ric-InsertIndication-List",
+	"ric-InsertIndication-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_InsertIndication_List_tags_6,
+	sizeof(asn_DEF_ric_InsertIndication_List_tags_6)
+		/sizeof(asn_DEF_ric_InsertIndication_List_tags_6[0]) - 1, /* 1 */
+	asn_DEF_ric_InsertIndication_List_tags_6,	/* Same as above */
+	sizeof(asn_DEF_ric_InsertIndication_List_tags_6)
+		/sizeof(asn_DEF_ric_InsertIndication_List_tags_6[0]), /* 2 */
+	{ &asn_OER_type_ric_InsertIndication_List_constr_6, &asn_PER_type_ric_InsertIndication_List_constr_6, SEQUENCE_OF_constraint },
+	asn_MBR_ric_InsertIndication_List_6,
+	1,	/* Single element */
+	&asn_SPC_ric_InsertIndication_List_specs_6	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Insert_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_InsertStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_InsertStyle_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-InsertStyle-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_SupportedEventTriggerStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-SupportedEventTriggerStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_ActionDefinitionFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ActionDefinitionFormat-Type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Insert_Item, ric_InsertIndication_List),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		0,
+		&asn_DEF_ric_InsertIndication_List_6,
+		0,
+		{ &asn_OER_memb_ric_InsertIndication_List_constr_6, &asn_PER_memb_ric_InsertIndication_List_constr_6,  memb_ric_InsertIndication_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-InsertIndication-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_IndicationHeaderFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-IndicationHeaderFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_IndicationMessageFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-IndicationMessageFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert_Item, ric_CallProcessIDFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-CallProcessIDFormat-Type"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Insert_Item_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Insert_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Insert_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-InsertStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-InsertStyle-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-SupportedEventTriggerStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ric-ActionDefinitionFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ric-InsertIndication-List */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ric-IndicationHeaderFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ric-IndicationMessageFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* ric-CallProcessIDFormat-Type */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Insert_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Insert_Item),
+	offsetof(struct RANFunctionDefinition_Insert_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Insert_Item_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Insert_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Insert_Item = {
+	"RANFunctionDefinition-Insert-Item",
+	"RANFunctionDefinition-Insert-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Insert_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Insert_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Insert_Item_1,
+	8,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Insert_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Insert.c b/e2sm/lib/RANFunctionDefinition-Insert.c
new file mode 100644
index 0000000..462454f
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Insert.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Insert.h"
+
+#include "RANFunctionDefinition-Insert-Item.h"
+static int
+memb_ric_InsertStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 63)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_InsertStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_type_ric_InsertStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_InsertStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_memb_ric_InsertStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_InsertStyle_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Insert_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_InsertStyle_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_InsertStyle_List_specs_2 = {
+	sizeof(struct RANFunctionDefinition_Insert__ric_InsertStyle_List),
+	offsetof(struct RANFunctionDefinition_Insert__ric_InsertStyle_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_InsertStyle_List_2 = {
+	"ric-InsertStyle-List",
+	"ric-InsertStyle-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_InsertStyle_List_tags_2,
+	sizeof(asn_DEF_ric_InsertStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_InsertStyle_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_InsertStyle_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_InsertStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_InsertStyle_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_InsertStyle_List_constr_2, &asn_PER_type_ric_InsertStyle_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_InsertStyle_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_InsertStyle_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Insert_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Insert, ric_InsertStyle_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_InsertStyle_List_2,
+		0,
+		{ &asn_OER_memb_ric_InsertStyle_List_constr_2, &asn_PER_memb_ric_InsertStyle_List_constr_2,  memb_ric_InsertStyle_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-InsertStyle-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Insert_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Insert_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-InsertStyle-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Insert_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Insert),
+	offsetof(struct RANFunctionDefinition_Insert, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Insert_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_RANFunctionDefinition_Insert = {
+	"RANFunctionDefinition-Insert",
+	"RANFunctionDefinition-Insert",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Insert_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Insert_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Insert_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Insert_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Insert_1,
+	1,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Insert_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Policy-Action-Item.c b/e2sm/lib/RANFunctionDefinition-Policy-Action-Item.c
new file mode 100644
index 0000000..81fd3a8
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Policy-Action-Item.c
@@ -0,0 +1,252 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Policy-Action-Item.h"
+
+#include "PolicyAction-RANParameter-Item.h"
+#include "PolicyCondition-RANParameter-Item.h"
+static int
+memb_ran_PolicyActionParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_ran_PolicyConditionParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ran_PolicyActionParameters_List_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_PolicyActionParameters_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_type_ran_PolicyConditionParameters_List_constr_7 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_PolicyConditionParameters_List_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_PolicyActionParameters_List_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_PolicyActionParameters_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_PolicyConditionParameters_List_constr_7 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_PolicyConditionParameters_List_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ran_PolicyActionParameters_List_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_PolicyAction_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_PolicyActionParameters_List_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_PolicyActionParameters_List_specs_5 = {
+	sizeof(struct RANFunctionDefinition_Policy_Action_Item__ran_PolicyActionParameters_List),
+	offsetof(struct RANFunctionDefinition_Policy_Action_Item__ran_PolicyActionParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_PolicyActionParameters_List_5 = {
+	"ran-PolicyActionParameters-List",
+	"ran-PolicyActionParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_PolicyActionParameters_List_tags_5,
+	sizeof(asn_DEF_ran_PolicyActionParameters_List_tags_5)
+		/sizeof(asn_DEF_ran_PolicyActionParameters_List_tags_5[0]) - 1, /* 1 */
+	asn_DEF_ran_PolicyActionParameters_List_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ran_PolicyActionParameters_List_tags_5)
+		/sizeof(asn_DEF_ran_PolicyActionParameters_List_tags_5[0]), /* 2 */
+	{ &asn_OER_type_ran_PolicyActionParameters_List_constr_5, &asn_PER_type_ran_PolicyActionParameters_List_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_ran_PolicyActionParameters_List_5,
+	1,	/* Single element */
+	&asn_SPC_ran_PolicyActionParameters_List_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_ran_PolicyConditionParameters_List_7[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_PolicyCondition_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_PolicyConditionParameters_List_tags_7[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_PolicyConditionParameters_List_specs_7 = {
+	sizeof(struct RANFunctionDefinition_Policy_Action_Item__ran_PolicyConditionParameters_List),
+	offsetof(struct RANFunctionDefinition_Policy_Action_Item__ran_PolicyConditionParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_PolicyConditionParameters_List_7 = {
+	"ran-PolicyConditionParameters-List",
+	"ran-PolicyConditionParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_PolicyConditionParameters_List_tags_7,
+	sizeof(asn_DEF_ran_PolicyConditionParameters_List_tags_7)
+		/sizeof(asn_DEF_ran_PolicyConditionParameters_List_tags_7[0]) - 1, /* 1 */
+	asn_DEF_ran_PolicyConditionParameters_List_tags_7,	/* Same as above */
+	sizeof(asn_DEF_ran_PolicyConditionParameters_List_tags_7)
+		/sizeof(asn_DEF_ran_PolicyConditionParameters_List_tags_7[0]), /* 2 */
+	{ &asn_OER_type_ran_PolicyConditionParameters_List_constr_7, &asn_PER_type_ran_PolicyConditionParameters_List_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_ran_PolicyConditionParameters_List_7,
+	1,	/* Single element */
+	&asn_SPC_ran_PolicyConditionParameters_List_specs_7	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Policy_Action_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Action_Item, ric_PolicyAction_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_ControlAction_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyAction-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Action_Item, ric_PolicyAction_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_ControlAction_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyAction-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Action_Item, ric_ActionDefinitionFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ActionDefinitionFormat-Type"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANFunctionDefinition_Policy_Action_Item, ran_PolicyActionParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		0,
+		&asn_DEF_ran_PolicyActionParameters_List_5,
+		0,
+		{ &asn_OER_memb_ran_PolicyActionParameters_List_constr_5, &asn_PER_memb_ran_PolicyActionParameters_List_constr_5,  memb_ran_PolicyActionParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-PolicyActionParameters-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Policy_Action_Item, ran_PolicyConditionParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		0,
+		&asn_DEF_ran_PolicyConditionParameters_List_7,
+		0,
+		{ &asn_OER_memb_ran_PolicyConditionParameters_List_constr_7, &asn_PER_memb_ran_PolicyConditionParameters_List_constr_7,  memb_ran_PolicyConditionParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-PolicyConditionParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Policy_Action_Item_oms_1[] = { 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Policy_Action_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-PolicyAction-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-PolicyAction-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ActionDefinitionFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ran-PolicyActionParameters-List */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ran-PolicyConditionParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Policy_Action_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Policy_Action_Item),
+	offsetof(struct RANFunctionDefinition_Policy_Action_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Policy_Action_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Policy_Action_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Policy_Action_Item = {
+	"RANFunctionDefinition-Policy-Action-Item",
+	"RANFunctionDefinition-Policy-Action-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_Action_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Policy_Action_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Policy_Action_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Policy-Item.c b/e2sm/lib/RANFunctionDefinition-Policy-Item.c
new file mode 100644
index 0000000..77b82ec
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Policy-Item.c
@@ -0,0 +1,162 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Policy-Item.h"
+
+#include "RANFunctionDefinition-Policy-Action-Item.h"
+static int
+memb_ric_PolicyAction_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_PolicyAction_List_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ric_PolicyAction_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_PolicyAction_List_constr_5 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ric_PolicyAction_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_PolicyAction_List_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Policy_Action_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_PolicyAction_List_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_PolicyAction_List_specs_5 = {
+	sizeof(struct RANFunctionDefinition_Policy_Item__ric_PolicyAction_List),
+	offsetof(struct RANFunctionDefinition_Policy_Item__ric_PolicyAction_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_PolicyAction_List_5 = {
+	"ric-PolicyAction-List",
+	"ric-PolicyAction-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_PolicyAction_List_tags_5,
+	sizeof(asn_DEF_ric_PolicyAction_List_tags_5)
+		/sizeof(asn_DEF_ric_PolicyAction_List_tags_5[0]) - 1, /* 1 */
+	asn_DEF_ric_PolicyAction_List_tags_5,	/* Same as above */
+	sizeof(asn_DEF_ric_PolicyAction_List_tags_5)
+		/sizeof(asn_DEF_ric_PolicyAction_List_tags_5[0]), /* 2 */
+	{ &asn_OER_type_ric_PolicyAction_List_constr_5, &asn_PER_type_ric_PolicyAction_List_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_ric_PolicyAction_List_5,
+	1,	/* Single element */
+	&asn_SPC_ric_PolicyAction_List_specs_5	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Policy_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Item, ric_PolicyStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Item, ric_PolicyStyle_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyStyle-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy_Item, ric_SupportedEventTriggerStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-SupportedEventTriggerStyle-Type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Policy_Item, ric_PolicyAction_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		0,
+		&asn_DEF_ric_PolicyAction_List_5,
+		0,
+		{ &asn_OER_memb_ric_PolicyAction_List_constr_5, &asn_PER_memb_ric_PolicyAction_List_constr_5,  memb_ric_PolicyAction_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-PolicyAction-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Policy_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Policy_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Policy_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-PolicyStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-PolicyStyle-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-SupportedEventTriggerStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-PolicyAction-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Policy_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Policy_Item),
+	offsetof(struct RANFunctionDefinition_Policy_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Policy_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Policy_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Policy_Item = {
+	"RANFunctionDefinition-Policy-Item",
+	"RANFunctionDefinition-Policy-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Policy_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Policy_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Policy_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Policy_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Policy.c b/e2sm/lib/RANFunctionDefinition-Policy.c
new file mode 100644
index 0000000..f809dec
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Policy.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Policy.h"
+
+#include "RANFunctionDefinition-Policy-Item.h"
+static int
+memb_ric_PolicyStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 63)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_PolicyStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_type_ric_PolicyStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_PolicyStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_memb_ric_PolicyStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_PolicyStyle_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Policy_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_PolicyStyle_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_PolicyStyle_List_specs_2 = {
+	sizeof(struct RANFunctionDefinition_Policy__ric_PolicyStyle_List),
+	offsetof(struct RANFunctionDefinition_Policy__ric_PolicyStyle_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_PolicyStyle_List_2 = {
+	"ric-PolicyStyle-List",
+	"ric-PolicyStyle-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_PolicyStyle_List_tags_2,
+	sizeof(asn_DEF_ric_PolicyStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_PolicyStyle_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_PolicyStyle_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_PolicyStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_PolicyStyle_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_PolicyStyle_List_constr_2, &asn_PER_type_ric_PolicyStyle_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_PolicyStyle_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_PolicyStyle_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Policy_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Policy, ric_PolicyStyle_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_PolicyStyle_List_2,
+		0,
+		{ &asn_OER_memb_ric_PolicyStyle_List_constr_2, &asn_PER_memb_ric_PolicyStyle_List_constr_2,  memb_ric_PolicyStyle_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-PolicyStyle-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Policy_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Policy_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-PolicyStyle-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Policy_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Policy),
+	offsetof(struct RANFunctionDefinition_Policy, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Policy_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_RANFunctionDefinition_Policy = {
+	"RANFunctionDefinition-Policy",
+	"RANFunctionDefinition-Policy",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Policy_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Policy_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Policy_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Policy_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Policy_1,
+	1,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Policy_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Report-Item.c b/e2sm/lib/RANFunctionDefinition-Report-Item.c
new file mode 100644
index 0000000..131b739
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Report-Item.c
@@ -0,0 +1,192 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Report-Item.h"
+
+#include "Report-RANParameter-Item.h"
+static int
+memb_ran_ReportParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ran_ReportParameters_List_constr_8 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ran_ReportParameters_List_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ran_ReportParameters_List_constr_8 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ran_ReportParameters_List_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ran_ReportParameters_List_8[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_Report_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ran_ReportParameters_List_tags_8[] = {
+	(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ran_ReportParameters_List_specs_8 = {
+	sizeof(struct RANFunctionDefinition_Report_Item__ran_ReportParameters_List),
+	offsetof(struct RANFunctionDefinition_Report_Item__ran_ReportParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ran_ReportParameters_List_8 = {
+	"ran-ReportParameters-List",
+	"ran-ReportParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ran_ReportParameters_List_tags_8,
+	sizeof(asn_DEF_ran_ReportParameters_List_tags_8)
+		/sizeof(asn_DEF_ran_ReportParameters_List_tags_8[0]) - 1, /* 1 */
+	asn_DEF_ran_ReportParameters_List_tags_8,	/* Same as above */
+	sizeof(asn_DEF_ran_ReportParameters_List_tags_8)
+		/sizeof(asn_DEF_ran_ReportParameters_List_tags_8[0]), /* 2 */
+	{ &asn_OER_type_ran_ReportParameters_List_constr_8, &asn_PER_type_ran_ReportParameters_List_constr_8, SEQUENCE_OF_constraint },
+	asn_MBR_ran_ReportParameters_List_8,
+	1,	/* Single element */
+	&asn_SPC_ran_ReportParameters_List_specs_8	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Report_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_ReportStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ReportStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_ReportStyle_Name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ReportStyle-Name"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_SupportedEventTriggerStyle_Type),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Style_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-SupportedEventTriggerStyle-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_ReportActionFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-ReportActionFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_IndicationHeaderFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-IndicationHeaderFormat-Type"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report_Item, ric_IndicationMessageFormat_Type),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_Format_Type,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-IndicationMessageFormat-Type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANFunctionDefinition_Report_Item, ran_ReportParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		0,
+		&asn_DEF_ran_ReportParameters_List_8,
+		0,
+		{ &asn_OER_memb_ran_ReportParameters_List_constr_8, &asn_PER_memb_ran_ReportParameters_List_constr_8,  memb_ran_ReportParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ran-ReportParameters-List"
+		},
+};
+static const int asn_MAP_RANFunctionDefinition_Report_Item_oms_1[] = { 6 };
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Report_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Report_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-SupportedEventTriggerStyle-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ric-ReportActionFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ric-IndicationHeaderFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ric-IndicationMessageFormat-Type */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* ran-ReportParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Report_Item_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Report_Item),
+	offsetof(struct RANFunctionDefinition_Report_Item, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Report_Item_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_RANFunctionDefinition_Report_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANFunctionDefinition_Report_Item = {
+	"RANFunctionDefinition-Report-Item",
+	"RANFunctionDefinition-Report-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Report_Item_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Report_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Report_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Report_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Report_Item_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Report_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Report_Item_1,
+	7,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Report_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANFunctionDefinition-Report.c b/e2sm/lib/RANFunctionDefinition-Report.c
new file mode 100644
index 0000000..15ec43d
--- /dev/null
+++ b/e2sm/lib/RANFunctionDefinition-Report.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANFunctionDefinition-Report.h"
+
+#include "RANFunctionDefinition-Report-Item.h"
+static int
+memb_ric_ReportStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 63)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..63)) */};
+static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  1,  63 }	/* (SIZE(1..63)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANFunctionDefinition_Report_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_2 = {
+	sizeof(struct RANFunctionDefinition_Report__ric_ReportStyle_List),
+	offsetof(struct RANFunctionDefinition_Report__ric_ReportStyle_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_2 = {
+	"ric-ReportStyle-List",
+	"ric-ReportStyle-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ric_ReportStyle_List_tags_2,
+	sizeof(asn_DEF_ric_ReportStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_ReportStyle_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ric_ReportStyle_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ric_ReportStyle_List_tags_2)
+		/sizeof(asn_DEF_ric_ReportStyle_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ric_ReportStyle_List_constr_2, &asn_PER_type_ric_ReportStyle_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ric_ReportStyle_List_2,
+	1,	/* Single element */
+	&asn_SPC_ric_ReportStyle_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANFunctionDefinition_Report_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANFunctionDefinition_Report, ric_ReportStyle_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ric_ReportStyle_List_2,
+		0,
+		{ &asn_OER_memb_ric_ReportStyle_List_constr_2, &asn_PER_memb_ric_ReportStyle_List_constr_2,  memb_ric_ReportStyle_List_constraint_1 },
+		0, 0, /* No default value */
+		"ric-ReportStyle-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANFunctionDefinition_Report_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANFunctionDefinition_Report_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-ReportStyle-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANFunctionDefinition_Report_specs_1 = {
+	sizeof(struct RANFunctionDefinition_Report),
+	offsetof(struct RANFunctionDefinition_Report, _asn_ctx),
+	asn_MAP_RANFunctionDefinition_Report_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_RANFunctionDefinition_Report = {
+	"RANFunctionDefinition-Report",
+	"RANFunctionDefinition-Report",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANFunctionDefinition_Report_tags_1,
+	sizeof(asn_DEF_RANFunctionDefinition_Report_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Report_tags_1[0]), /* 1 */
+	asn_DEF_RANFunctionDefinition_Report_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANFunctionDefinition_Report_tags_1)
+		/sizeof(asn_DEF_RANFunctionDefinition_Report_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANFunctionDefinition_Report_1,
+	1,	/* Elements count */
+	&asn_SPC_RANFunctionDefinition_Report_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition-Choice-LIST-Item.c b/e2sm/lib/RANParameter-Definition-Choice-LIST-Item.c
new file mode 100644
index 0000000..e009483
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition-Choice-LIST-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition-Choice-LIST-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Definition_Choice_LIST_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_LIST_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_LIST_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANParameter_Definition_Choice_LIST_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_RANParameter_Definition_Choice_LIST_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_Choice_LIST_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Definition_Choice_LIST_Item_specs_1 = {
+	sizeof(struct RANParameter_Definition_Choice_LIST_Item),
+	offsetof(struct RANParameter_Definition_Choice_LIST_Item, _asn_ctx),
+	asn_MAP_RANParameter_Definition_Choice_LIST_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANParameter_Definition_Choice_LIST_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Definition_Choice_LIST_Item = {
+	"RANParameter-Definition-Choice-LIST-Item",
+	"RANParameter-Definition-Choice-LIST-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1,
+	sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Definition_Choice_LIST_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_Choice_LIST_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition-Choice-LIST.c b/e2sm/lib/RANParameter-Definition-Choice-LIST.c
new file mode 100644
index 0000000..7852c16
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition-Choice-LIST.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition-Choice-LIST.h"
+
+#include "RANParameter-Definition-Choice-LIST-Item.h"
+static int
+memb_ranParameter_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranParameter_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranParameter_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranParameter_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranParameter_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranParameter_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANParameter_Definition_Choice_LIST_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranParameter_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranParameter_List_specs_2 = {
+	sizeof(struct RANParameter_Definition_Choice_LIST__ranParameter_List),
+	offsetof(struct RANParameter_Definition_Choice_LIST__ranParameter_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranParameter_List_2 = {
+	"ranParameter-List",
+	"ranParameter-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranParameter_List_tags_2,
+	sizeof(asn_DEF_ranParameter_List_tags_2)
+		/sizeof(asn_DEF_ranParameter_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranParameter_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranParameter_List_tags_2)
+		/sizeof(asn_DEF_ranParameter_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranParameter_List_constr_2, &asn_PER_type_ranParameter_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranParameter_List_2,
+	1,	/* Single element */
+	&asn_SPC_ranParameter_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANParameter_Definition_Choice_LIST_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_LIST, ranParameter_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranParameter_List_2,
+		0,
+		{ &asn_OER_memb_ranParameter_List_constr_2, &asn_PER_memb_ranParameter_List_constr_2,  memb_ranParameter_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranParameter-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Definition_Choice_LIST_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_Choice_LIST_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Definition_Choice_LIST_specs_1 = {
+	sizeof(struct RANParameter_Definition_Choice_LIST),
+	offsetof(struct RANParameter_Definition_Choice_LIST, _asn_ctx),
+	asn_MAP_RANParameter_Definition_Choice_LIST_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_RANParameter_Definition_Choice_LIST = {
+	"RANParameter-Definition-Choice-LIST",
+	"RANParameter-Definition-Choice-LIST",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Definition_Choice_LIST_tags_1,
+	sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Definition_Choice_LIST_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_LIST_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Definition_Choice_LIST_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_Choice_LIST_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE-Item.c b/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE-Item.c
new file mode 100644
index 0000000..5af88e5
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition-Choice-STRUCTURE-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Definition_Choice_STRUCTURE_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_STRUCTURE_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_STRUCTURE_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANParameter_Definition_Choice_STRUCTURE_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_RANParameter_Definition_Choice_STRUCTURE_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_Choice_STRUCTURE_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Definition_Choice_STRUCTURE_Item_specs_1 = {
+	sizeof(struct RANParameter_Definition_Choice_STRUCTURE_Item),
+	offsetof(struct RANParameter_Definition_Choice_STRUCTURE_Item, _asn_ctx),
+	asn_MAP_RANParameter_Definition_Choice_STRUCTURE_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANParameter_Definition_Choice_STRUCTURE_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item = {
+	"RANParameter-Definition-Choice-STRUCTURE-Item",
+	"RANParameter-Definition-Choice-STRUCTURE-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1,
+	sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Definition_Choice_STRUCTURE_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_Choice_STRUCTURE_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE.c b/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE.c
new file mode 100644
index 0000000..c6c0679
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition-Choice-STRUCTURE.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition-Choice-STRUCTURE.h"
+
+#include "RANParameter-Definition-Choice-STRUCTURE-Item.h"
+static int
+memb_ranParameter_STRUCTURE_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranParameter_STRUCTURE_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranParameter_STRUCTURE_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranParameter_STRUCTURE_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranParameter_STRUCTURE_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranParameter_STRUCTURE_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANParameter_Definition_Choice_STRUCTURE_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranParameter_STRUCTURE_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranParameter_STRUCTURE_specs_2 = {
+	sizeof(struct RANParameter_Definition_Choice_STRUCTURE__ranParameter_STRUCTURE),
+	offsetof(struct RANParameter_Definition_Choice_STRUCTURE__ranParameter_STRUCTURE, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranParameter_STRUCTURE_2 = {
+	"ranParameter-STRUCTURE",
+	"ranParameter-STRUCTURE",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranParameter_STRUCTURE_tags_2,
+	sizeof(asn_DEF_ranParameter_STRUCTURE_tags_2)
+		/sizeof(asn_DEF_ranParameter_STRUCTURE_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranParameter_STRUCTURE_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranParameter_STRUCTURE_tags_2)
+		/sizeof(asn_DEF_ranParameter_STRUCTURE_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranParameter_STRUCTURE_constr_2, &asn_PER_type_ranParameter_STRUCTURE_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_ranParameter_STRUCTURE_2,
+	1,	/* Single element */
+	&asn_SPC_ranParameter_STRUCTURE_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANParameter_Definition_Choice_STRUCTURE_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Definition_Choice_STRUCTURE, ranParameter_STRUCTURE),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_ranParameter_STRUCTURE_2,
+		0,
+		{ &asn_OER_memb_ranParameter_STRUCTURE_constr_2, &asn_PER_memb_ranParameter_STRUCTURE_constr_2,  memb_ranParameter_STRUCTURE_constraint_1 },
+		0, 0, /* No default value */
+		"ranParameter-STRUCTURE"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_Choice_STRUCTURE_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-STRUCTURE */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Definition_Choice_STRUCTURE_specs_1 = {
+	sizeof(struct RANParameter_Definition_Choice_STRUCTURE),
+	offsetof(struct RANParameter_Definition_Choice_STRUCTURE, _asn_ctx),
+	asn_MAP_RANParameter_Definition_Choice_STRUCTURE_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_RANParameter_Definition_Choice_STRUCTURE = {
+	"RANParameter-Definition-Choice-STRUCTURE",
+	"RANParameter-Definition-Choice-STRUCTURE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1,
+	sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_Choice_STRUCTURE_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Definition_Choice_STRUCTURE_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_Choice_STRUCTURE_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition-Choice.c b/e2sm/lib/RANParameter-Definition-Choice.c
new file mode 100644
index 0000000..4dd0a8c
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition-Choice.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition-Choice.h"
+
+#include "RANParameter-Definition-Choice-LIST.h"
+#include "RANParameter-Definition-Choice-STRUCTURE.h"
+static asn_oer_constraints_t asn_OER_type_RANParameter_Definition_Choice_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RANParameter_Definition_Choice_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_RANParameter_Definition_Choice_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Definition_Choice, choice.choiceLIST),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition_Choice_LIST,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"choiceLIST"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Definition_Choice, choice.choiceSTRUCTURE),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition_Choice_STRUCTURE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"choiceSTRUCTURE"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* choiceLIST */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* choiceSTRUCTURE */
+};
+asn_CHOICE_specifics_t asn_SPC_RANParameter_Definition_Choice_specs_1 = {
+	sizeof(struct RANParameter_Definition_Choice),
+	offsetof(struct RANParameter_Definition_Choice, _asn_ctx),
+	offsetof(struct RANParameter_Definition_Choice, present),
+	sizeof(((struct RANParameter_Definition_Choice *)0)->present),
+	asn_MAP_RANParameter_Definition_Choice_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Definition_Choice = {
+	"RANParameter-Definition-Choice",
+	"RANParameter-Definition-Choice",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_RANParameter_Definition_Choice_constr_1, &asn_PER_type_RANParameter_Definition_Choice_constr_1, CHOICE_constraint },
+	asn_MBR_RANParameter_Definition_Choice_1,
+	2,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_Choice_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Definition.c b/e2sm/lib/RANParameter-Definition.c
new file mode 100644
index 0000000..7298790
--- /dev/null
+++ b/e2sm/lib/RANParameter-Definition.c
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Definition.h"
+
+#include "RANParameter-Definition-Choice.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Definition_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Definition, ranParameter_Definition_Choice),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition_Choice,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition-Choice"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Definition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Definition_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-Definition-Choice */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Definition_specs_1 = {
+	sizeof(struct RANParameter_Definition),
+	offsetof(struct RANParameter_Definition, _asn_ctx),
+	asn_MAP_RANParameter_Definition_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_RANParameter_Definition = {
+	"RANParameter-Definition",
+	"RANParameter-Definition",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Definition_tags_1,
+	sizeof(asn_DEF_RANParameter_Definition_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Definition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Definition_tags_1)
+		/sizeof(asn_DEF_RANParameter_Definition_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Definition_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Definition_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-ELEMENT.c b/e2sm/lib/RANParameter-ELEMENT.c
deleted file mode 100644
index 63edc16..0000000
--- a/e2sm/lib/RANParameter-ELEMENT.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RANParameter-ELEMENT.h"
-
-asn_TYPE_member_t asn_MBR_RANParameter_ELEMENT_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_ELEMENT, keyFlag),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_BOOLEAN,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"keyFlag"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_ELEMENT, ranParameter_Value),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_RANParameter_Value,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranParameter-Value"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RANParameter_ELEMENT_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ELEMENT_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* keyFlag */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-Value */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RANParameter_ELEMENT_specs_1 = {
-	sizeof(struct RANParameter_ELEMENT),
-	offsetof(struct RANParameter_ELEMENT, _asn_ctx),
-	asn_MAP_RANParameter_ELEMENT_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_RANParameter_ELEMENT = {
-	"RANParameter-ELEMENT",
-	"RANParameter-ELEMENT",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RANParameter_ELEMENT_tags_1,
-	sizeof(asn_DEF_RANParameter_ELEMENT_tags_1)
-		/sizeof(asn_DEF_RANParameter_ELEMENT_tags_1[0]), /* 1 */
-	asn_DEF_RANParameter_ELEMENT_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANParameter_ELEMENT_tags_1)
-		/sizeof(asn_DEF_RANParameter_ELEMENT_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANParameter_ELEMENT_1,
-	2,	/* Elements count */
-	&asn_SPC_RANParameter_ELEMENT_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RANParameter-ID.c b/e2sm/lib/RANParameter-ID.c
index 4965d59..684cc0e 100644
--- a/e2sm/lib/RANParameter-ID.c
+++ b/e2sm/lib/RANParameter-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -19,8 +19,11 @@
 	}
 	
 	
-	/* Constraint check succeeded */
-	return 0;
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -28,18 +31,13 @@
  * so here we adjust the DEF accordingly.
  */
 static asn_oer_constraints_t asn_OER_type_RANParameter_ID_constr_1 CC_NOTUSED = {
-	{ 4, 1 }	/* (0..4294967295) */,
+	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RANParameter_ID_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
-const asn_INTEGER_specifics_t asn_SPC_RANParameter_ID_specs_1 = {
-	0,	0,	0,	0,	0,
-	0,	/* Native long size */
-	1	/* Unsigned representation */
-};
 static const ber_tlv_tag_t asn_DEF_RANParameter_ID_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
 };
@@ -55,6 +53,6 @@
 		/sizeof(asn_DEF_RANParameter_ID_tags_1[0]), /* 1 */
 	{ &asn_OER_type_RANParameter_ID_constr_1, &asn_PER_type_RANParameter_ID_constr_1, RANParameter_ID_constraint },
 	0, 0,	/* No members */
-	&asn_SPC_RANParameter_ID_specs_1	/* Additional specs */
+	0	/* No specifics */
 };
 
diff --git a/e2sm/lib/RANParameter-Item.c b/e2sm/lib/RANParameter-Item.c
deleted file mode 100644
index 0da6978..0000000
--- a/e2sm/lib/RANParameter-Item.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RANParameter-Item.h"
-
-#include "RANParameter-ValueType.h"
-asn_TYPE_member_t asn_MBR_RANParameter_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Item, ranParameterItem_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranParameterItem-ID"
-		},
-	{ ATF_POINTER, 0, offsetof(struct RANParameter_Item, ranParameterItem_valueType),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		+1,	/* EXPLICIT tag at current level */
-		&asn_DEF_RANParameter_ValueType,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ranParameterItem-valueType"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RANParameter_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameterItem-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameterItem-valueType */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Item_specs_1 = {
-	sizeof(struct RANParameter_Item),
-	offsetof(struct RANParameter_Item, _asn_ctx),
-	asn_MAP_RANParameter_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_RANParameter_Item = {
-	"RANParameter-Item",
-	"RANParameter-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RANParameter_Item_tags_1,
-	sizeof(asn_DEF_RANParameter_Item_tags_1)
-		/sizeof(asn_DEF_RANParameter_Item_tags_1[0]), /* 1 */
-	asn_DEF_RANParameter_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANParameter_Item_tags_1)
-		/sizeof(asn_DEF_RANParameter_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RANParameter_Item_1,
-	2,	/* Elements count */
-	&asn_SPC_RANParameter_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RANParameter-LIST.c b/e2sm/lib/RANParameter-LIST.c
index 501db25..22fa28f 100644
--- a/e2sm/lib/RANParameter-LIST.c
+++ b/e2sm/lib/RANParameter-LIST.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -9,7 +9,7 @@
 
 #include "RANParameter-STRUCTURE.h"
 static int
-memb_list_of_ranParameter_Structures_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+memb_list_of_ranParameter_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -23,7 +23,7 @@
 	/* Determine the number of elements */
 	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
 	
-	if((size >= 1 && size <= 4294967295)) {
+	if((size >= 1 && size <= 65535)) {
 		/* Perform validation of the inner elements */
 		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 	} else {
@@ -34,23 +34,23 @@
 	}
 }
 
-static asn_oer_constraints_t asn_OER_type_list_of_ranParameter_Structures_constr_2 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_list_of_ranParameter_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_type_list_of_ranParameter_Structures_constr_2 CC_NOTUSED = {
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_list_of_ranParameter_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_oer_constraints_t asn_OER_memb_list_of_ranParameter_Structures_constr_2 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_memb_list_of_ranParameter_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_memb_list_of_ranParameter_Structures_constr_2 CC_NOTUSED = {
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_list_of_ranParameter_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_list_of_ranParameter_Structures_2[] = {
+static asn_TYPE_member_t asn_MBR_list_of_ranParameter_2[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
@@ -61,48 +61,48 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_list_of_ranParameter_Structures_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_list_of_ranParameter_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_list_of_ranParameter_Structures_specs_2 = {
-	sizeof(struct RANParameter_LIST__list_of_ranParameter_Structures),
-	offsetof(struct RANParameter_LIST__list_of_ranParameter_Structures, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_list_of_ranParameter_specs_2 = {
+	sizeof(struct RANParameter_LIST__list_of_ranParameter),
+	offsetof(struct RANParameter_LIST__list_of_ranParameter, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_list_of_ranParameter_Structures_2 = {
-	"list-of-ranParameter-Structures",
-	"list-of-ranParameter-Structures",
+asn_TYPE_descriptor_t asn_DEF_list_of_ranParameter_2 = {
+	"list-of-ranParameter",
+	"list-of-ranParameter",
 	&asn_OP_SEQUENCE_OF,
-	asn_DEF_list_of_ranParameter_Structures_tags_2,
-	sizeof(asn_DEF_list_of_ranParameter_Structures_tags_2)
-		/sizeof(asn_DEF_list_of_ranParameter_Structures_tags_2[0]) - 1, /* 1 */
-	asn_DEF_list_of_ranParameter_Structures_tags_2,	/* Same as above */
-	sizeof(asn_DEF_list_of_ranParameter_Structures_tags_2)
-		/sizeof(asn_DEF_list_of_ranParameter_Structures_tags_2[0]), /* 2 */
-	{ &asn_OER_type_list_of_ranParameter_Structures_constr_2, &asn_PER_type_list_of_ranParameter_Structures_constr_2, SEQUENCE_OF_constraint },
-	asn_MBR_list_of_ranParameter_Structures_2,
+	asn_DEF_list_of_ranParameter_tags_2,
+	sizeof(asn_DEF_list_of_ranParameter_tags_2)
+		/sizeof(asn_DEF_list_of_ranParameter_tags_2[0]) - 1, /* 1 */
+	asn_DEF_list_of_ranParameter_tags_2,	/* Same as above */
+	sizeof(asn_DEF_list_of_ranParameter_tags_2)
+		/sizeof(asn_DEF_list_of_ranParameter_tags_2[0]), /* 2 */
+	{ &asn_OER_type_list_of_ranParameter_constr_2, &asn_PER_type_list_of_ranParameter_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_list_of_ranParameter_2,
 	1,	/* Single element */
-	&asn_SPC_list_of_ranParameter_Structures_specs_2	/* Additional specs */
+	&asn_SPC_list_of_ranParameter_specs_2	/* Additional specs */
 };
 
 asn_TYPE_member_t asn_MBR_RANParameter_LIST_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_LIST, list_of_ranParameter_Structures),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_LIST, list_of_ranParameter),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_list_of_ranParameter_Structures_2,
+		&asn_DEF_list_of_ranParameter_2,
 		0,
-		{ &asn_OER_memb_list_of_ranParameter_Structures_constr_2, &asn_PER_memb_list_of_ranParameter_Structures_constr_2,  memb_list_of_ranParameter_Structures_constraint_1 },
+		{ &asn_OER_memb_list_of_ranParameter_constr_2, &asn_PER_memb_list_of_ranParameter_constr_2,  memb_list_of_ranParameter_constraint_1 },
 		0, 0, /* No default value */
-		"list-of-ranParameter-Structures"
+		"list-of-ranParameter"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANParameter_LIST_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANParameter_LIST_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* list-of-ranParameter-Structures */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* list-of-ranParameter */
 };
 asn_SEQUENCE_specifics_t asn_SPC_RANParameter_LIST_specs_1 = {
 	sizeof(struct RANParameter_LIST),
diff --git a/e2sm/lib/RANParameter-Name.c b/e2sm/lib/RANParameter-Name.c
index fdd2f4c..30b6e4f 100644
--- a/e2sm/lib/RANParameter-Name.c
+++ b/e2sm/lib/RANParameter-Name.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/RANParameter-STRUCTURE-Item.c b/e2sm/lib/RANParameter-STRUCTURE-Item.c
new file mode 100644
index 0000000..e630ad4
--- /dev/null
+++ b/e2sm/lib/RANParameter-STRUCTURE-Item.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-STRUCTURE-Item.h"
+
+#include "RANParameter-ValueType.h"
+asn_TYPE_member_t asn_MBR_RANParameter_STRUCTURE_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_STRUCTURE_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_STRUCTURE_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_STRUCTURE_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_STRUCTURE_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_STRUCTURE_Item_specs_1 = {
+	sizeof(struct RANParameter_STRUCTURE_Item),
+	offsetof(struct RANParameter_STRUCTURE_Item, _asn_ctx),
+	asn_MAP_RANParameter_STRUCTURE_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_RANParameter_STRUCTURE_Item = {
+	"RANParameter-STRUCTURE-Item",
+	"RANParameter-STRUCTURE-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_STRUCTURE_Item_tags_1,
+	sizeof(asn_DEF_RANParameter_STRUCTURE_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_STRUCTURE_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_STRUCTURE_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_STRUCTURE_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_STRUCTURE_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_STRUCTURE_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_RANParameter_STRUCTURE_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-STRUCTURE.c b/e2sm/lib/RANParameter-STRUCTURE.c
index 89aa285..03a0695 100644
--- a/e2sm/lib/RANParameter-STRUCTURE.c
+++ b/e2sm/lib/RANParameter-STRUCTURE.c
@@ -1,13 +1,13 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANParameter-STRUCTURE.h"
 
-#include "RANParameter-Item.h"
+#include "RANParameter-STRUCTURE-Item.h"
 static int
 memb_sequence_of_ranParameters_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
@@ -23,7 +23,7 @@
 	/* Determine the number of elements */
 	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
 	
-	if((size >= 1 && size <= 4294967295)) {
+	if((size >= 1 && size <= 65535)) {
 		/* Perform validation of the inner elements */
 		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 	} else {
@@ -36,25 +36,25 @@
 
 static asn_oer_constraints_t asn_OER_type_sequence_of_ranParameters_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
+	-1	/* (SIZE(1..65535)) */};
 static asn_per_constraints_t asn_PER_type_sequence_of_ranParameters_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
 	0, 0	/* No PER value map */
 };
 static asn_oer_constraints_t asn_OER_memb_sequence_of_ranParameters_constr_2 CC_NOTUSED = {
 	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
+	-1	/* (SIZE(1..65535)) */};
 static asn_per_constraints_t asn_PER_memb_sequence_of_ranParameters_constr_2 CC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
 	0, 0	/* No PER value map */
 };
 static asn_TYPE_member_t asn_MBR_sequence_of_ranParameters_2[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_RANParameter_Item,
+		&asn_DEF_RANParameter_STRUCTURE_Item,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
@@ -88,7 +88,7 @@
 };
 
 asn_TYPE_member_t asn_MBR_RANParameter_STRUCTURE_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_STRUCTURE, sequence_of_ranParameters),
+	{ ATF_POINTER, 1, offsetof(struct RANParameter_STRUCTURE, sequence_of_ranParameters),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
 		&asn_DEF_sequence_of_ranParameters_2,
@@ -98,6 +98,7 @@
 		"sequence-of-ranParameters"
 		},
 };
+static const int asn_MAP_RANParameter_STRUCTURE_oms_1[] = { 0 };
 static const ber_tlv_tag_t asn_DEF_RANParameter_STRUCTURE_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
@@ -109,7 +110,8 @@
 	offsetof(struct RANParameter_STRUCTURE, _asn_ctx),
 	asn_MAP_RANParameter_STRUCTURE_tag2el_1,
 	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
+	asn_MAP_RANParameter_STRUCTURE_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
 	1,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_RANParameter_STRUCTURE = {
diff --git a/e2sm/lib/RANParameter-Testing-Item-Choice-ElementFalse.c b/e2sm/lib/RANParameter-Testing-Item-Choice-ElementFalse.c
new file mode 100644
index 0000000..e50e5db
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-Item-Choice-ElementFalse.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-Item-Choice-ElementFalse.h"
+
+#include "RANParameter-Value.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_Choice_ElementFalse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Testing_Item_Choice_ElementFalse, ranParameter_TestCondition),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_TestingCondition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-TestCondition"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANParameter_Testing_Item_Choice_ElementFalse, ranParameter_Value),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Value"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANParameter_Testing_Item_Choice_ElementFalse, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_RANParameter_Testing_Item_Choice_ElementFalse_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Testing_Item_Choice_ElementFalse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-TestCondition */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-Value */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_Choice_ElementFalse_specs_1 = {
+	sizeof(struct RANParameter_Testing_Item_Choice_ElementFalse),
+	offsetof(struct RANParameter_Testing_Item_Choice_ElementFalse, _asn_ctx),
+	asn_MAP_RANParameter_Testing_Item_Choice_ElementFalse_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANParameter_Testing_Item_Choice_ElementFalse_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse = {
+	"RANParameter-Testing-Item-Choice-ElementFalse",
+	"RANParameter-Testing-Item-Choice-ElementFalse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Testing_Item_Choice_ElementFalse_1,
+	3,	/* Elements count */
+	&asn_SPC_RANParameter_Testing_Item_Choice_ElementFalse_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-Item-Choice-ElementTrue.c b/e2sm/lib/RANParameter-Testing-Item-Choice-ElementTrue.c
new file mode 100644
index 0000000..03b10ff
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-Item-Choice-ElementTrue.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-Item-Choice-ElementTrue.h"
+
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_Choice_ElementTrue_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Testing_Item_Choice_ElementTrue, ranParameter_value),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Testing_Item_Choice_ElementTrue_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_Choice_ElementTrue_specs_1 = {
+	sizeof(struct RANParameter_Testing_Item_Choice_ElementTrue),
+	offsetof(struct RANParameter_Testing_Item_Choice_ElementTrue, _asn_ctx),
+	asn_MAP_RANParameter_Testing_Item_Choice_ElementTrue_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_RANParameter_Testing_Item_Choice_ElementTrue = {
+	"RANParameter-Testing-Item-Choice-ElementTrue",
+	"RANParameter-Testing-Item-Choice-ElementTrue",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Testing_Item_Choice_ElementTrue_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Testing_Item_Choice_ElementTrue_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-Item-Choice-List.c b/e2sm/lib/RANParameter-Testing-Item-Choice-List.c
new file mode 100644
index 0000000..ea685da
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-Item-Choice-List.c
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-Item-Choice-List.h"
+
+#include "RANParameter-Testing-LIST.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_Choice_List_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item_Choice_List, ranParameter_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_LIST,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Testing_Item_Choice_List_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_Choice_List_specs_1 = {
+	sizeof(struct RANParameter_Testing_Item_Choice_List),
+	offsetof(struct RANParameter_Testing_Item_Choice_List, _asn_ctx),
+	asn_MAP_RANParameter_Testing_Item_Choice_List_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_RANParameter_Testing_Item_Choice_List = {
+	"RANParameter-Testing-Item-Choice-List",
+	"RANParameter-Testing-Item-Choice-List",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_List_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Testing_Item_Choice_List_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Testing_Item_Choice_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-Item-Choice-Structure.c b/e2sm/lib/RANParameter-Testing-Item-Choice-Structure.c
new file mode 100644
index 0000000..ae75fd4
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-Item-Choice-Structure.c
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-Item-Choice-Structure.h"
+
+#include "RANParameter-Testing-STRUCTURE.h"
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_Choice_Structure_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item_Choice_Structure, ranParameter_Structure),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_STRUCTURE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Structure"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Testing_Item_Choice_Structure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-Structure */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_Choice_Structure_specs_1 = {
+	sizeof(struct RANParameter_Testing_Item_Choice_Structure),
+	offsetof(struct RANParameter_Testing_Item_Choice_Structure, _asn_ctx),
+	asn_MAP_RANParameter_Testing_Item_Choice_Structure_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_RANParameter_Testing_Item_Choice_Structure = {
+	"RANParameter-Testing-Item-Choice-Structure",
+	"RANParameter-Testing-Item-Choice-Structure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_Choice_Structure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Testing_Item_Choice_Structure_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_Testing_Item_Choice_Structure_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-Item.c b/e2sm/lib/RANParameter-Testing-Item.c
new file mode 100644
index 0000000..d81b410
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-Item.c
@@ -0,0 +1,141 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-Item.h"
+
+#include "RANParameter-Testing-Item-Choice-List.h"
+#include "RANParameter-Testing-Item-Choice-Structure.h"
+#include "RANParameter-Testing-Item-Choice-ElementTrue.h"
+#include "RANParameter-Testing-Item-Choice-ElementFalse.h"
+static asn_oer_constraints_t asn_OER_type_ranParameter_Type_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ranParameter_Type_constr_3 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_ranParameter_Type_3[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item__ranParameter_Type, choice.ranP_Choice_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_Item_Choice_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-List"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item__ranParameter_Type, choice.ranP_Choice_Structure),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_Item_Choice_Structure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-Structure"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item__ranParameter_Type, choice.ranP_Choice_ElementTrue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_Item_Choice_ElementTrue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-ElementTrue"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_Testing_Item__ranParameter_Type, choice.ranP_Choice_ElementFalse),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing_Item_Choice_ElementFalse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-ElementFalse"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ranParameter_Type_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranP-Choice-List */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranP-Choice-Structure */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranP-Choice-ElementTrue */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranP-Choice-ElementFalse */
+};
+static asn_CHOICE_specifics_t asn_SPC_ranParameter_Type_specs_3 = {
+	sizeof(struct RANParameter_Testing_Item__ranParameter_Type),
+	offsetof(struct RANParameter_Testing_Item__ranParameter_Type, _asn_ctx),
+	offsetof(struct RANParameter_Testing_Item__ranParameter_Type, present),
+	sizeof(((struct RANParameter_Testing_Item__ranParameter_Type *)0)->present),
+	asn_MAP_ranParameter_Type_tag2el_3,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranParameter_Type_3 = {
+	"ranParameter-Type",
+	"ranParameter-Type",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ranParameter_Type_constr_3, &asn_PER_type_ranParameter_Type_constr_3, CHOICE_constraint },
+	asn_MBR_ranParameter_Type_3,
+	4,	/* Elements count */
+	&asn_SPC_ranParameter_Type_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Testing_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Testing_Item, ranParameter_Type),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ranParameter_Type_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Type"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Testing_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-Type */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_specs_1 = {
+	sizeof(struct RANParameter_Testing_Item),
+	offsetof(struct RANParameter_Testing_Item, _asn_ctx),
+	asn_MAP_RANParameter_Testing_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_RANParameter_Testing_Item = {
+	"RANParameter-Testing-Item",
+	"RANParameter-Testing-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_Testing_Item_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_Item_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_Testing_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_RANParameter_Testing_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-LIST.c b/e2sm/lib/RANParameter-Testing-LIST.c
new file mode 100644
index 0000000..c4e4abc
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-LIST.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-LIST.h"
+
+#include "RANParameter-Testing-Item.h"
+static asn_oer_constraints_t asn_OER_type_RANParameter_Testing_LIST_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+asn_per_constraints_t asn_PER_type_RANParameter_Testing_LIST_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_LIST_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANParameter_Testing_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_LIST_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_RANParameter_Testing_LIST_specs_1 = {
+	sizeof(struct RANParameter_Testing_LIST),
+	offsetof(struct RANParameter_Testing_LIST, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Testing_LIST = {
+	"RANParameter-Testing-LIST",
+	"RANParameter-Testing-LIST",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_RANParameter_Testing_LIST_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_LIST_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_LIST_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_LIST_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_LIST_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_LIST_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RANParameter_Testing_LIST_constr_1, &asn_PER_type_RANParameter_Testing_LIST_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_RANParameter_Testing_LIST_1,
+	1,	/* Single element */
+	&asn_SPC_RANParameter_Testing_LIST_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing-STRUCTURE.c b/e2sm/lib/RANParameter-Testing-STRUCTURE.c
new file mode 100644
index 0000000..2080910
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing-STRUCTURE.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing-STRUCTURE.h"
+
+#include "RANParameter-Testing-Item.h"
+static asn_oer_constraints_t asn_OER_type_RANParameter_Testing_STRUCTURE_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+asn_per_constraints_t asn_PER_type_RANParameter_Testing_STRUCTURE_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_STRUCTURE_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANParameter_Testing_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_STRUCTURE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_RANParameter_Testing_STRUCTURE_specs_1 = {
+	sizeof(struct RANParameter_Testing_STRUCTURE),
+	offsetof(struct RANParameter_Testing_STRUCTURE, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Testing_STRUCTURE = {
+	"RANParameter-Testing-STRUCTURE",
+	"RANParameter-Testing-STRUCTURE",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_RANParameter_Testing_STRUCTURE_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_STRUCTURE_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_STRUCTURE_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_STRUCTURE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_STRUCTURE_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_STRUCTURE_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RANParameter_Testing_STRUCTURE_constr_1, &asn_PER_type_RANParameter_Testing_STRUCTURE_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_RANParameter_Testing_STRUCTURE_1,
+	1,	/* Single element */
+	&asn_SPC_RANParameter_Testing_STRUCTURE_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Testing.c b/e2sm/lib/RANParameter-Testing.c
new file mode 100644
index 0000000..6aa8873
--- /dev/null
+++ b/e2sm/lib/RANParameter-Testing.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-Testing.h"
+
+#include "RANParameter-Testing-Item.h"
+static asn_oer_constraints_t asn_OER_type_RANParameter_Testing_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..255)) */};
+asn_per_constraints_t asn_PER_type_RANParameter_Testing_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  255 }	/* (SIZE(1..255)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_RANParameter_Testing_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RANParameter_Testing_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_Testing_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_RANParameter_Testing_specs_1 = {
+	sizeof(struct RANParameter_Testing),
+	offsetof(struct RANParameter_Testing, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_Testing = {
+	"RANParameter-Testing",
+	"RANParameter-Testing",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_RANParameter_Testing_tags_1,
+	sizeof(asn_DEF_RANParameter_Testing_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_Testing_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_Testing_tags_1)
+		/sizeof(asn_DEF_RANParameter_Testing_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RANParameter_Testing_constr_1, &asn_PER_type_RANParameter_Testing_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_RANParameter_Testing_1,
+	1,	/* Single element */
+	&asn_SPC_RANParameter_Testing_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-TestingCondition.c b/e2sm/lib/RANParameter-TestingCondition.c
new file mode 100644
index 0000000..35db21f
--- /dev/null
+++ b/e2sm/lib/RANParameter-TestingCondition.c
@@ -0,0 +1,179 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-TestingCondition.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_ranP_Choice_comparison_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ranP_Choice_comparison_constr_2 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 asn_oer_constraints_t asn_OER_type_ranP_Choice_presence_constr_10 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_ranP_Choice_presence_constr_10 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_oer_constraints_t asn_OER_type_RANParameter_TestingCondition_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RANParameter_TestingCondition_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 */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_ranP_Choice_comparison_value2enum_2[] = {
+	{ 0,	5,	"equal" },
+	{ 1,	10,	"difference" },
+	{ 2,	11,	"greaterthan" },
+	{ 3,	8,	"lessthan" },
+	{ 4,	8,	"contains" },
+	{ 5,	11,	"starts-with" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_ranP_Choice_comparison_enum2value_2[] = {
+	4,	/* contains(4) */
+	1,	/* difference(1) */
+	0,	/* equal(0) */
+	2,	/* greaterthan(2) */
+	3,	/* lessthan(3) */
+	5	/* starts-with(5) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_ranP_Choice_comparison_specs_2 = {
+	asn_MAP_ranP_Choice_comparison_value2enum_2,	/* "tag" => N; sorted by tag */
+	asn_MAP_ranP_Choice_comparison_enum2value_2,	/* 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_ranP_Choice_comparison_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_ranP_Choice_comparison_2 = {
+	"ranP-Choice-comparison",
+	"ranP-Choice-comparison",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_ranP_Choice_comparison_tags_2,
+	sizeof(asn_DEF_ranP_Choice_comparison_tags_2)
+		/sizeof(asn_DEF_ranP_Choice_comparison_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranP_Choice_comparison_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranP_Choice_comparison_tags_2)
+		/sizeof(asn_DEF_ranP_Choice_comparison_tags_2[0]), /* 2 */
+	{ &asn_OER_type_ranP_Choice_comparison_constr_2, &asn_PER_type_ranP_Choice_comparison_constr_2, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_ranP_Choice_comparison_specs_2	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_ranP_Choice_presence_value2enum_10[] = {
+	{ 0,	7,	"present" },
+	{ 1,	10,	"configured" },
+	{ 2,	8,	"rollover" },
+	{ 3,	8,	"non-zero" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_ranP_Choice_presence_enum2value_10[] = {
+	1,	/* configured(1) */
+	3,	/* non-zero(3) */
+	0,	/* present(0) */
+	2	/* rollover(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_ranP_Choice_presence_specs_10 = {
+	asn_MAP_ranP_Choice_presence_value2enum_10,	/* "tag" => N; sorted by tag */
+	asn_MAP_ranP_Choice_presence_enum2value_10,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_ranP_Choice_presence_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranP_Choice_presence_10 = {
+	"ranP-Choice-presence",
+	"ranP-Choice-presence",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_ranP_Choice_presence_tags_10,
+	sizeof(asn_DEF_ranP_Choice_presence_tags_10)
+		/sizeof(asn_DEF_ranP_Choice_presence_tags_10[0]) - 1, /* 1 */
+	asn_DEF_ranP_Choice_presence_tags_10,	/* Same as above */
+	sizeof(asn_DEF_ranP_Choice_presence_tags_10)
+		/sizeof(asn_DEF_ranP_Choice_presence_tags_10[0]), /* 2 */
+	{ &asn_OER_type_ranP_Choice_presence_constr_10, &asn_PER_type_ranP_Choice_presence_constr_10, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_ranP_Choice_presence_specs_10	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RANParameter_TestingCondition_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_TestingCondition, choice.ranP_Choice_comparison),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ranP_Choice_comparison_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-comparison"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_TestingCondition, choice.ranP_Choice_presence),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ranP_Choice_presence_10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-presence"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_TestingCondition_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranP-Choice-comparison */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranP-Choice-presence */
+};
+asn_CHOICE_specifics_t asn_SPC_RANParameter_TestingCondition_specs_1 = {
+	sizeof(struct RANParameter_TestingCondition),
+	offsetof(struct RANParameter_TestingCondition, _asn_ctx),
+	offsetof(struct RANParameter_TestingCondition, present),
+	sizeof(((struct RANParameter_TestingCondition *)0)->present),
+	asn_MAP_RANParameter_TestingCondition_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_TestingCondition = {
+	"RANParameter-TestingCondition",
+	"RANParameter-TestingCondition",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_RANParameter_TestingCondition_constr_1, &asn_PER_type_RANParameter_TestingCondition_constr_1, CHOICE_constraint },
+	asn_MBR_RANParameter_TestingCondition_1,
+	2,	/* Elements count */
+	&asn_SPC_RANParameter_TestingCondition_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-Value.c b/e2sm/lib/RANParameter-Value.c
index 91f2bc9..f3cc00c 100644
--- a/e2sm/lib/RANParameter-Value.c
+++ b/e2sm/lib/RANParameter-Value.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -11,22 +11,49 @@
 	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RANParameter_Value_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
 asn_TYPE_member_t asn_MBR_RANParameter_Value_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueInt),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueBoolean),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBoolean"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueInt),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_NativeInteger,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
 		"valueInt"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueReal),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeReal,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueReal"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueBitS),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBitS"
+		},
 	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valueOctS),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_OCTET_STRING,
 		0,
@@ -34,10 +61,23 @@
 		0, 0, /* No default value */
 		"valueOctS"
 		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_Value, choice.valuePrintableString),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PrintableString,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valuePrintableString"
+		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANParameter_Value_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* valueOctS */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueBoolean */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueInt */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueReal */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* valueOctS */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* valuePrintableString */
 };
 asn_CHOICE_specifics_t asn_SPC_RANParameter_Value_specs_1 = {
 	sizeof(struct RANParameter_Value),
@@ -45,9 +85,9 @@
 	offsetof(struct RANParameter_Value, present),
 	sizeof(((struct RANParameter_Value *)0)->present),
 	asn_MAP_RANParameter_Value_tag2el_1,
-	2,	/* Count of tags in the map */
+	6,	/* Count of tags in the map */
 	0, 0,
-	2	/* Extensions start */
+	6	/* Extensions start */
 };
 asn_TYPE_descriptor_t asn_DEF_RANParameter_Value = {
 	"RANParameter-Value",
@@ -59,7 +99,7 @@
 	0,	/* No tags (count) */
 	{ &asn_OER_type_RANParameter_Value_constr_1, &asn_PER_type_RANParameter_Value_constr_1, CHOICE_constraint },
 	asn_MBR_RANParameter_Value_1,
-	2,	/* Elements count */
+	6,	/* Elements count */
 	&asn_SPC_RANParameter_Value_specs_1	/* Additional specs */
 };
 
diff --git a/e2sm/lib/RANParameter-ValueType-Choice-ElementFalse.c b/e2sm/lib/RANParameter-ValueType-Choice-ElementFalse.c
new file mode 100644
index 0000000..943ee92
--- /dev/null
+++ b/e2sm/lib/RANParameter-ValueType-Choice-ElementFalse.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-ValueType-Choice-ElementFalse.h"
+
+#include "RANParameter-Value.h"
+asn_TYPE_member_t asn_MBR_RANParameter_ValueType_Choice_ElementFalse_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct RANParameter_ValueType_Choice_ElementFalse, ranParameter_value),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-value"
+		},
+};
+static const int asn_MAP_RANParameter_ValueType_Choice_ElementFalse_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ValueType_Choice_ElementFalse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_ValueType_Choice_ElementFalse_specs_1 = {
+	sizeof(struct RANParameter_ValueType_Choice_ElementFalse),
+	offsetof(struct RANParameter_ValueType_Choice_ElementFalse, _asn_ctx),
+	asn_MAP_RANParameter_ValueType_Choice_ElementFalse_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_RANParameter_ValueType_Choice_ElementFalse_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RANParameter_ValueType_Choice_ElementFalse = {
+	"RANParameter-ValueType-Choice-ElementFalse",
+	"RANParameter-ValueType-Choice-ElementFalse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1,
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementFalse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_ValueType_Choice_ElementFalse_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_ValueType_Choice_ElementFalse_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-ValueType-Choice-ElementTrue.c b/e2sm/lib/RANParameter-ValueType-Choice-ElementTrue.c
new file mode 100644
index 0000000..2cb2bcd
--- /dev/null
+++ b/e2sm/lib/RANParameter-ValueType-Choice-ElementTrue.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-ValueType-Choice-ElementTrue.h"
+
+asn_TYPE_member_t asn_MBR_RANParameter_ValueType_Choice_ElementTrue_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANParameter_ValueType_Choice_ElementTrue, ranParameter_value),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ValueType_Choice_ElementTrue_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_ValueType_Choice_ElementTrue_specs_1 = {
+	sizeof(struct RANParameter_ValueType_Choice_ElementTrue),
+	offsetof(struct RANParameter_ValueType_Choice_ElementTrue, _asn_ctx),
+	asn_MAP_RANParameter_ValueType_Choice_ElementTrue_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_RANParameter_ValueType_Choice_ElementTrue = {
+	"RANParameter-ValueType-Choice-ElementTrue",
+	"RANParameter-ValueType-Choice-ElementTrue",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1,
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_ElementTrue_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_ValueType_Choice_ElementTrue_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_ValueType_Choice_ElementTrue_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-ValueType-Choice-List.c b/e2sm/lib/RANParameter-ValueType-Choice-List.c
new file mode 100644
index 0000000..f4572e2
--- /dev/null
+++ b/e2sm/lib/RANParameter-ValueType-Choice-List.c
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-ValueType-Choice-List.h"
+
+#include "RANParameter-LIST.h"
+asn_TYPE_member_t asn_MBR_RANParameter_ValueType_Choice_List_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType_Choice_List, ranParameter_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_LIST,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_ValueType_Choice_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ValueType_Choice_List_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_ValueType_Choice_List_specs_1 = {
+	sizeof(struct RANParameter_ValueType_Choice_List),
+	offsetof(struct RANParameter_ValueType_Choice_List, _asn_ctx),
+	asn_MAP_RANParameter_ValueType_Choice_List_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_RANParameter_ValueType_Choice_List = {
+	"RANParameter-ValueType-Choice-List",
+	"RANParameter-ValueType-Choice-List",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_ValueType_Choice_List_tags_1,
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_List_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_List_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_ValueType_Choice_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_List_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_List_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_ValueType_Choice_List_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_ValueType_Choice_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-ValueType-Choice-Structure.c b/e2sm/lib/RANParameter-ValueType-Choice-Structure.c
new file mode 100644
index 0000000..bea8294
--- /dev/null
+++ b/e2sm/lib/RANParameter-ValueType-Choice-Structure.c
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANParameter-ValueType-Choice-Structure.h"
+
+#include "RANParameter-STRUCTURE.h"
+asn_TYPE_member_t asn_MBR_RANParameter_ValueType_Choice_Structure_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType_Choice_Structure, ranParameter_Structure),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_STRUCTURE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Structure"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ValueType_Choice_Structure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-Structure */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RANParameter_ValueType_Choice_Structure_specs_1 = {
+	sizeof(struct RANParameter_ValueType_Choice_Structure),
+	offsetof(struct RANParameter_ValueType_Choice_Structure, _asn_ctx),
+	asn_MAP_RANParameter_ValueType_Choice_Structure_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_RANParameter_ValueType_Choice_Structure = {
+	"RANParameter-ValueType-Choice-Structure",
+	"RANParameter-ValueType-Choice-Structure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1,
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1[0]), /* 1 */
+	asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1)
+		/sizeof(asn_DEF_RANParameter_ValueType_Choice_Structure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RANParameter_ValueType_Choice_Structure_1,
+	1,	/* Elements count */
+	&asn_SPC_RANParameter_ValueType_Choice_Structure_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANParameter-ValueType.c b/e2sm/lib/RANParameter-ValueType.c
index ebbf953..8852e86 100644
--- a/e2sm/lib/RANParameter-ValueType.c
+++ b/e2sm/lib/RANParameter-ValueType.c
@@ -1,56 +1,67 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "RANParameter-ValueType.h"
 
-#include "RANParameter-ELEMENT.h"
-#include "RANParameter-STRUCTURE.h"
-#include "RANParameter-LIST.h"
+#include "RANParameter-ValueType-Choice-ElementTrue.h"
+#include "RANParameter-ValueType-Choice-ElementFalse.h"
+#include "RANParameter-ValueType-Choice-Structure.h"
+#include "RANParameter-ValueType-Choice-List.h"
 static asn_oer_constraints_t asn_OER_type_RANParameter_ValueType_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RANParameter_ValueType_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ 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_RANParameter_ValueType_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranParameter_Element),
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranP_Choice_ElementTrue),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_ELEMENT,
+		&asn_DEF_RANParameter_ValueType_Choice_ElementTrue,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ranParameter-Element"
+		"ranP-Choice-ElementTrue"
 		},
-	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranParameter_Structure),
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranP_Choice_ElementFalse),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_STRUCTURE,
+		&asn_DEF_RANParameter_ValueType_Choice_ElementFalse,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ranParameter-Structure"
+		"ranP-Choice-ElementFalse"
 		},
-	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranParameter_List),
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranP_Choice_Structure),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RANParameter_LIST,
+		&asn_DEF_RANParameter_ValueType_Choice_Structure,
 		0,
 		{ 0, 0, 0 },
 		0, 0, /* No default value */
-		"ranParameter-List"
+		"ranP-Choice-Structure"
+		},
+	{ ATF_POINTER, 0, offsetof(struct RANParameter_ValueType, choice.ranP_Choice_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType_Choice_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranP-Choice-List"
 		},
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANParameter_ValueType_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-Element */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-Structure */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-List */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranP-Choice-ElementTrue */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranP-Choice-ElementFalse */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranP-Choice-Structure */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranP-Choice-List */
 };
 asn_CHOICE_specifics_t asn_SPC_RANParameter_ValueType_specs_1 = {
 	sizeof(struct RANParameter_ValueType),
@@ -58,9 +69,9 @@
 	offsetof(struct RANParameter_ValueType, present),
 	sizeof(((struct RANParameter_ValueType *)0)->present),
 	asn_MAP_RANParameter_ValueType_tag2el_1,
-	3,	/* Count of tags in the map */
+	4,	/* Count of tags in the map */
 	0, 0,
-	3	/* Extensions start */
+	4	/* Extensions start */
 };
 asn_TYPE_descriptor_t asn_DEF_RANParameter_ValueType = {
 	"RANParameter-ValueType",
@@ -72,7 +83,7 @@
 	0,	/* No tags (count) */
 	{ &asn_OER_type_RANParameter_ValueType_constr_1, &asn_PER_type_RANParameter_ValueType_constr_1, CHOICE_constraint },
 	asn_MBR_RANParameter_ValueType_1,
-	3,	/* Elements count */
+	4,	/* Elements count */
 	&asn_SPC_RANParameter_ValueType_specs_1	/* Additional specs */
 };
 
diff --git a/e2sm/lib/RANUEID.c b/e2sm/lib/RANUEID.c
new file mode 100644
index 0000000..f1fe907
--- /dev/null
+++ b/e2sm/lib/RANUEID.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RANUEID.h"
+
+int
+RANUEID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RANUEID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	8	/* (SIZE(8..8)) */};
+asn_per_constraints_t asn_PER_type_RANUEID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RANUEID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RANUEID = {
+	"RANUEID",
+	"RANUEID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_RANUEID_tags_1,
+	sizeof(asn_DEF_RANUEID_tags_1)
+		/sizeof(asn_DEF_RANUEID_tags_1[0]), /* 1 */
+	asn_DEF_RANUEID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANUEID_tags_1)
+		/sizeof(asn_DEF_RANUEID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RANUEID_constr_1, &asn_PER_type_RANUEID_constr_1, RANUEID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RANfunction-Name.c b/e2sm/lib/RANfunction-Name.c
index a56189d..d467e01 100644
--- a/e2sm/lib/RANfunction-Name.c
+++ b/e2sm/lib/RANfunction-Name.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -155,7 +155,7 @@
 	
 	size = st->size;
 	
-	if((size >= 1 && size <= 150)
+	if((size >= 1 && size <= 1000)
 		 && !check_permitted_alphabet_3(st)) {
 		/* Constraint check succeeded */
 		return 0;
@@ -228,7 +228,7 @@
 	-1	/* (SIZE(0..MAX)) */};
 static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1000 }	/* (SIZE(1..1000,...)) */,
 	asn_PER_MAP_ranFunction_E2SM_OID_3_v2c,	/* Value to PER code map */
 	asn_PER_MAP_ranFunction_E2SM_OID_3_c2v	/* PER code to value map */
 };
diff --git a/e2sm/lib/RIC-CallProcessBreakpoint-ID.c b/e2sm/lib/RIC-CallProcessBreakpoint-ID.c
new file mode 100644
index 0000000..bd9f37b
--- /dev/null
+++ b/e2sm/lib/RIC-CallProcessBreakpoint-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-CallProcessBreakpoint-ID.h"
+
+int
+RIC_CallProcessBreakpoint_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_CallProcessBreakpoint_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_CallProcessBreakpoint_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_CallProcessBreakpoint_ID = {
+	"RIC-CallProcessBreakpoint-ID",
+	"RIC-CallProcessBreakpoint-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1,
+	sizeof(asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessBreakpoint_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_CallProcessBreakpoint_ID_constr_1, &asn_PER_type_RIC_CallProcessBreakpoint_ID_constr_1, RIC_CallProcessBreakpoint_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RANcallProcess-ID-string.c b/e2sm/lib/RIC-CallProcessBreakpoint-Name.c
similarity index 65%
copy from e2sm/lib/RANcallProcess-ID-string.c
copy to e2sm/lib/RIC-CallProcessBreakpoint-Name.c
index 69092be..85d59b2 100644
--- a/e2sm/lib/RANcallProcess-ID-string.c
+++ b/e2sm/lib/RIC-CallProcessBreakpoint-Name.c
@@ -1,11 +1,11 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
-#include "RANcallProcess-ID-string.h"
+#include "RIC-CallProcessBreakpoint-Name.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,	/*                  */
@@ -40,7 +40,7 @@
 }
 
 int
-RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+RIC_CallProcessBreakpoint_Name_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;
@@ -66,12 +66,12 @@
 	}
 }
 
-static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) {
+static int asn_PER_MAP_RIC_CallProcessBreakpoint_Name_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_RANcallProcess_ID_string_1_c2v(unsigned int code) {
+static int asn_PER_MAP_RIC_CallProcessBreakpoint_Name_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];
@@ -80,29 +80,29 @@
  * This type is implemented using PrintableString,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_RIC_CallProcessBreakpoint_Name_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..MAX)) */};
-static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RIC_CallProcessBreakpoint_Name_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
-	asn_PER_MAP_RANcallProcess_ID_string_1_v2c,	/* Value to PER code map */
-	asn_PER_MAP_RANcallProcess_ID_string_1_c2v	/* PER code to value map */
+	asn_PER_MAP_RIC_CallProcessBreakpoint_Name_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_RIC_CallProcessBreakpoint_Name_1_c2v	/* PER code to value map */
 };
-static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = {
-	"RANcallProcess-ID-string",
-	"RANcallProcess-ID-string",
+asn_TYPE_descriptor_t asn_DEF_RIC_CallProcessBreakpoint_Name = {
+	"RIC-CallProcessBreakpoint-Name",
+	"RIC-CallProcessBreakpoint-Name",
 	&asn_OP_PrintableString,
-	asn_DEF_RANcallProcess_ID_string_tags_1,
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	asn_DEF_RANcallProcess_ID_string_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint },
+	asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1,
+	sizeof(asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1[0]), /* 1 */
+	asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessBreakpoint_Name_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_CallProcessBreakpoint_Name_constr_1, &asn_PER_type_RIC_CallProcessBreakpoint_Name_constr_1, RIC_CallProcessBreakpoint_Name_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sm/lib/RIC-CallProcessType-ID.c b/e2sm/lib/RIC-CallProcessType-ID.c
new file mode 100644
index 0000000..8cdeed4
--- /dev/null
+++ b/e2sm/lib/RIC-CallProcessType-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-CallProcessType-ID.h"
+
+int
+RIC_CallProcessType_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_CallProcessType_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_CallProcessType_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_CallProcessType_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_CallProcessType_ID = {
+	"RIC-CallProcessType-ID",
+	"RIC-CallProcessType-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_CallProcessType_ID_tags_1,
+	sizeof(asn_DEF_RIC_CallProcessType_ID_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessType_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_CallProcessType_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_CallProcessType_ID_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessType_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_CallProcessType_ID_constr_1, &asn_PER_type_RIC_CallProcessType_ID_constr_1, RIC_CallProcessType_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RANcallProcess-ID-string.c b/e2sm/lib/RIC-CallProcessType-Name.c
similarity index 69%
rename from e2sm/lib/RANcallProcess-ID-string.c
rename to e2sm/lib/RIC-CallProcessType-Name.c
index 69092be..419f264 100644
--- a/e2sm/lib/RANcallProcess-ID-string.c
+++ b/e2sm/lib/RIC-CallProcessType-Name.c
@@ -1,11 +1,11 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
-#include "RANcallProcess-ID-string.h"
+#include "RIC-CallProcessType-Name.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,	/*                  */
@@ -40,7 +40,7 @@
 }
 
 int
-RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+RIC_CallProcessType_Name_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;
@@ -66,12 +66,12 @@
 	}
 }
 
-static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) {
+static int asn_PER_MAP_RIC_CallProcessType_Name_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_RANcallProcess_ID_string_1_c2v(unsigned int code) {
+static int asn_PER_MAP_RIC_CallProcessType_Name_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];
@@ -80,29 +80,29 @@
  * This type is implemented using PrintableString,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_RIC_CallProcessType_Name_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..MAX)) */};
-static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RIC_CallProcessType_Name_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
-	asn_PER_MAP_RANcallProcess_ID_string_1_v2c,	/* Value to PER code map */
-	asn_PER_MAP_RANcallProcess_ID_string_1_c2v	/* PER code to value map */
+	asn_PER_MAP_RIC_CallProcessType_Name_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_RIC_CallProcessType_Name_1_c2v	/* PER code to value map */
 };
-static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_RIC_CallProcessType_Name_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = {
-	"RANcallProcess-ID-string",
-	"RANcallProcess-ID-string",
+asn_TYPE_descriptor_t asn_DEF_RIC_CallProcessType_Name = {
+	"RIC-CallProcessType-Name",
+	"RIC-CallProcessType-Name",
 	&asn_OP_PrintableString,
-	asn_DEF_RANcallProcess_ID_string_tags_1,
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	asn_DEF_RANcallProcess_ID_string_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint },
+	asn_DEF_RIC_CallProcessType_Name_tags_1,
+	sizeof(asn_DEF_RIC_CallProcessType_Name_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessType_Name_tags_1[0]), /* 1 */
+	asn_DEF_RIC_CallProcessType_Name_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_CallProcessType_Name_tags_1)
+		/sizeof(asn_DEF_RIC_CallProcessType_Name_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_CallProcessType_Name_constr_1, &asn_PER_type_RIC_CallProcessType_Name_constr_1, RIC_CallProcessType_Name_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sm/lib/RIC-ControlAction-ID.c b/e2sm/lib/RIC-ControlAction-ID.c
index b0a0178..839a7b2 100644
--- a/e2sm/lib/RIC-ControlAction-ID.c
+++ b/e2sm/lib/RIC-ControlAction-ID.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
@@ -21,7 +21,7 @@
 	
 	value = *(const long *)sptr;
 	
-	if((value >= 0 && value <= 65535)) {
+	if((value >= 1 && value <= 65535)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
@@ -37,10 +37,10 @@
  * so here we adjust the DEF accordingly.
  */
 static asn_oer_constraints_t asn_OER_type_RIC_ControlAction_ID_constr_1 CC_NOTUSED = {
-	{ 2, 1 }	/* (0..65535) */,
+	{ 0, 0 },
 	-1};
 asn_per_constraints_t asn_PER_type_RIC_ControlAction_ID_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };
diff --git a/e2sm/lib/RIC-ControlAction-Item.c b/e2sm/lib/RIC-ControlAction-Item.c
deleted file mode 100644
index cc89d2d..0000000
--- a/e2sm/lib/RIC-ControlAction-Item.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RIC-ControlAction-Item.h"
-
-#include "RAN-ControlParameter-Item.h"
-static int
-memb_ran_ControlParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 4294967295)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_ran_ControlParameters_List_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_type_ran_ControlParameters_List_constr_4 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ran_ControlParameters_List_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..4294967295)) */};
-static asn_per_constraints_t asn_PER_memb_ran_ControlParameters_List_constr_4 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 32, -1,  1,  4294967295 }	/* (SIZE(1..4294967295)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_ran_ControlParameters_List_4[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RAN_ControlParameter_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ran_ControlParameters_List_tags_4[] = {
-	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ran_ControlParameters_List_specs_4 = {
-	sizeof(struct RIC_ControlAction_Item__ran_ControlParameters_List),
-	offsetof(struct RIC_ControlAction_Item__ran_ControlParameters_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ran_ControlParameters_List_4 = {
-	"ran-ControlParameters-List",
-	"ran-ControlParameters-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ran_ControlParameters_List_tags_4,
-	sizeof(asn_DEF_ran_ControlParameters_List_tags_4)
-		/sizeof(asn_DEF_ran_ControlParameters_List_tags_4[0]) - 1, /* 1 */
-	asn_DEF_ran_ControlParameters_List_tags_4,	/* Same as above */
-	sizeof(asn_DEF_ran_ControlParameters_List_tags_4)
-		/sizeof(asn_DEF_ran_ControlParameters_List_tags_4[0]), /* 2 */
-	{ &asn_OER_type_ran_ControlParameters_List_constr_4, &asn_PER_type_ran_ControlParameters_List_constr_4, SEQUENCE_OF_constraint },
-	asn_MBR_ran_ControlParameters_List_4,
-	1,	/* Single element */
-	&asn_SPC_ran_ControlParameters_List_specs_4	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_RIC_ControlAction_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlAction_Item, ric_ControlAction_ID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_ControlAction_ID,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlAction-ID"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlAction_Item, ric_ControlAction_Name),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_ControlAction_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlAction-Name"
-		},
-	{ ATF_POINTER, 1, offsetof(struct RIC_ControlAction_Item, ran_ControlParameters_List),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		0,
-		&asn_DEF_ran_ControlParameters_List_4,
-		0,
-		{ &asn_OER_memb_ran_ControlParameters_List_constr_4, &asn_PER_memb_ran_ControlParameters_List_constr_4,  memb_ran_ControlParameters_List_constraint_1 },
-		0, 0, /* No default value */
-		"ran-ControlParameters-List"
-		},
-};
-static const int asn_MAP_RIC_ControlAction_Item_oms_1[] = { 2 };
-static const ber_tlv_tag_t asn_DEF_RIC_ControlAction_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RIC_ControlAction_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ControlAction-ID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ControlAction-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ran-ControlParameters-List */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RIC_ControlAction_Item_specs_1 = {
-	sizeof(struct RIC_ControlAction_Item),
-	offsetof(struct RIC_ControlAction_Item, _asn_ctx),
-	asn_MAP_RIC_ControlAction_Item_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_RIC_ControlAction_Item_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RIC_ControlAction_Item = {
-	"RIC-ControlAction-Item",
-	"RIC-ControlAction-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RIC_ControlAction_Item_tags_1,
-	sizeof(asn_DEF_RIC_ControlAction_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ControlAction_Item_tags_1[0]), /* 1 */
-	asn_DEF_RIC_ControlAction_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RIC_ControlAction_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ControlAction_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RIC_ControlAction_Item_1,
-	3,	/* Elements count */
-	&asn_SPC_RIC_ControlAction_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RIC-ControlAction-Name.c b/e2sm/lib/RIC-ControlAction-Name.c
index 346ea42..8a6bd62 100644
--- a/e2sm/lib/RIC-ControlAction-Name.c
+++ b/e2sm/lib/RIC-ControlAction-Name.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/RIC-ControlStyle-Item.c b/e2sm/lib/RIC-ControlStyle-Item.c
deleted file mode 100644
index 9aae0c9..0000000
--- a/e2sm/lib/RIC-ControlStyle-Item.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RIC-ControlStyle-Item.h"
-
-#include "RIC-ControlAction-Item.h"
-static int
-memb_ric_ControlAction_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 65535)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_ric_ControlAction_List_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..65535)) */};
-static asn_per_constraints_t asn_PER_type_ric_ControlAction_List_constr_4 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_ric_ControlAction_List_constr_4 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..65535)) */};
-static asn_per_constraints_t asn_PER_memb_ric_ControlAction_List_constr_4 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_ric_ControlAction_List_4[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_RIC_ControlAction_Item,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ric_ControlAction_List_tags_4[] = {
-	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_ric_ControlAction_List_specs_4 = {
-	sizeof(struct RIC_ControlStyle_Item__ric_ControlAction_List),
-	offsetof(struct RIC_ControlStyle_Item__ric_ControlAction_List, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_ric_ControlAction_List_4 = {
-	"ric-ControlAction-List",
-	"ric-ControlAction-List",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ric_ControlAction_List_tags_4,
-	sizeof(asn_DEF_ric_ControlAction_List_tags_4)
-		/sizeof(asn_DEF_ric_ControlAction_List_tags_4[0]) - 1, /* 1 */
-	asn_DEF_ric_ControlAction_List_tags_4,	/* Same as above */
-	sizeof(asn_DEF_ric_ControlAction_List_tags_4)
-		/sizeof(asn_DEF_ric_ControlAction_List_tags_4[0]), /* 2 */
-	{ &asn_OER_type_ric_ControlAction_List_constr_4, &asn_PER_type_ric_ControlAction_List_constr_4, SEQUENCE_OF_constraint },
-	asn_MBR_ric_ControlAction_List_4,
-	1,	/* Single element */
-	&asn_SPC_ric_ControlAction_List_specs_4	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_RIC_ControlStyle_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlStyle_Item, ric_ControlStyle_Type),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlStyle-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlStyle_Item, ric_ControlStyle_Name),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlStyle-Name"
-		},
-	{ ATF_POINTER, 1, offsetof(struct RIC_ControlStyle_Item, ric_ControlAction_List),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		0,
-		&asn_DEF_ric_ControlAction_List_4,
-		0,
-		{ &asn_OER_memb_ric_ControlAction_List_constr_4, &asn_PER_memb_ric_ControlAction_List_constr_4,  memb_ric_ControlAction_List_constraint_1 },
-		0, 0, /* No default value */
-		"ric-ControlAction-List"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlStyle_Item, ric_ControlHeaderFormat_Type),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Format_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlHeaderFormat-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ControlStyle_Item, ric_ControlMessageFormat_Type),
-		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Format_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ControlMessageFormat-Type"
-		},
-};
-static const int asn_MAP_RIC_ControlStyle_Item_oms_1[] = { 2 };
-static const ber_tlv_tag_t asn_DEF_RIC_ControlStyle_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RIC_ControlStyle_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ControlStyle-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ControlStyle-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ControlAction-List */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ric-ControlHeaderFormat-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ric-ControlMessageFormat-Type */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RIC_ControlStyle_Item_specs_1 = {
-	sizeof(struct RIC_ControlStyle_Item),
-	offsetof(struct RIC_ControlStyle_Item, _asn_ctx),
-	asn_MAP_RIC_ControlStyle_Item_tag2el_1,
-	5,	/* Count of tags in the map */
-	asn_MAP_RIC_ControlStyle_Item_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	5,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RIC_ControlStyle_Item = {
-	"RIC-ControlStyle-Item",
-	"RIC-ControlStyle-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RIC_ControlStyle_Item_tags_1,
-	sizeof(asn_DEF_RIC_ControlStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ControlStyle_Item_tags_1[0]), /* 1 */
-	asn_DEF_RIC_ControlStyle_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RIC_ControlStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ControlStyle_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RIC_ControlStyle_Item_1,
-	5,	/* Elements count */
-	&asn_SPC_RIC_ControlStyle_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RIC-EventTrigger-Cell-ID.c b/e2sm/lib/RIC-EventTrigger-Cell-ID.c
new file mode 100644
index 0000000..1a3e811
--- /dev/null
+++ b/e2sm/lib/RIC-EventTrigger-Cell-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-EventTrigger-Cell-ID.h"
+
+int
+RIC_EventTrigger_Cell_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_EventTrigger_Cell_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_EventTrigger_Cell_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_EventTrigger_Cell_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_EventTrigger_Cell_ID = {
+	"RIC-EventTrigger-Cell-ID",
+	"RIC-EventTrigger-Cell-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_EventTrigger_Cell_ID_tags_1,
+	sizeof(asn_DEF_RIC_EventTrigger_Cell_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_Cell_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_EventTrigger_Cell_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_EventTrigger_Cell_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_Cell_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_EventTrigger_Cell_ID_constr_1, &asn_PER_type_RIC_EventTrigger_Cell_ID_constr_1, RIC_EventTrigger_Cell_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RIC-EventTrigger-UE-ID.c b/e2sm/lib/RIC-EventTrigger-UE-ID.c
new file mode 100644
index 0000000..ff95b0f
--- /dev/null
+++ b/e2sm/lib/RIC-EventTrigger-UE-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-EventTrigger-UE-ID.h"
+
+int
+RIC_EventTrigger_UE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_EventTrigger_UE_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_EventTrigger_UE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_EventTrigger_UE_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_EventTrigger_UE_ID = {
+	"RIC-EventTrigger-UE-ID",
+	"RIC-EventTrigger-UE-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_EventTrigger_UE_ID_tags_1,
+	sizeof(asn_DEF_RIC_EventTrigger_UE_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_UE_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_EventTrigger_UE_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_EventTrigger_UE_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_UE_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_EventTrigger_UE_ID_constr_1, &asn_PER_type_RIC_EventTrigger_UE_ID_constr_1, RIC_EventTrigger_UE_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RIC-EventTrigger-UEevent-ID.c b/e2sm/lib/RIC-EventTrigger-UEevent-ID.c
new file mode 100644
index 0000000..18a1dfc
--- /dev/null
+++ b/e2sm/lib/RIC-EventTrigger-UEevent-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-EventTrigger-UEevent-ID.h"
+
+int
+RIC_EventTrigger_UEevent_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_EventTrigger_UEevent_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_EventTrigger_UEevent_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_EventTrigger_UEevent_ID = {
+	"RIC-EventTrigger-UEevent-ID",
+	"RIC-EventTrigger-UEevent-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1,
+	sizeof(asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTrigger_UEevent_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_EventTrigger_UEevent_ID_constr_1, &asn_PER_type_RIC_EventTrigger_UEevent_ID_constr_1, RIC_EventTrigger_UEevent_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RIC-EventTriggerCondition-ID.c b/e2sm/lib/RIC-EventTriggerCondition-ID.c
new file mode 100644
index 0000000..de6d3e6
--- /dev/null
+++ b/e2sm/lib/RIC-EventTriggerCondition-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-EventTriggerCondition-ID.h"
+
+int
+RIC_EventTriggerCondition_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_EventTriggerCondition_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_EventTriggerCondition_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerCondition_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerCondition_ID = {
+	"RIC-EventTriggerCondition-ID",
+	"RIC-EventTriggerCondition-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_EventTriggerCondition_ID_tags_1,
+	sizeof(asn_DEF_RIC_EventTriggerCondition_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTriggerCondition_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_EventTriggerCondition_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_EventTriggerCondition_ID_tags_1)
+		/sizeof(asn_DEF_RIC_EventTriggerCondition_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_EventTriggerCondition_ID_constr_1, &asn_PER_type_RIC_EventTriggerCondition_ID_constr_1, RIC_EventTriggerCondition_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RIC-EventTriggerStyle-Item.c b/e2sm/lib/RIC-EventTriggerStyle-Item.c
deleted file mode 100644
index 029f300..0000000
--- a/e2sm/lib/RIC-EventTriggerStyle-Item.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RIC-EventTriggerStyle-Item.h"
-
-asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerStyle_Type),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-EventTriggerStyle-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerStyle_Name),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-EventTriggerStyle-Name"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerFormat_Type),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Format_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-EventTriggerFormat-Type"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_Item_specs_1 = {
-	sizeof(struct RIC_EventTriggerStyle_Item),
-	offsetof(struct RIC_EventTriggerStyle_Item, _asn_ctx),
-	asn_MAP_RIC_EventTriggerStyle_Item_tag2el_1,
-	3,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_Item = {
-	"RIC-EventTriggerStyle-Item",
-	"RIC-EventTriggerStyle-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RIC_EventTriggerStyle_Item_tags_1,
-	sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1[0]), /* 1 */
-	asn_DEF_RIC_EventTriggerStyle_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RIC_EventTriggerStyle_Item_1,
-	3,	/* Elements count */
-	&asn_SPC_RIC_EventTriggerStyle_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RIC-Format-Type.c b/e2sm/lib/RIC-Format-Type.c
index 8242722..e2f2a7a 100644
--- a/e2sm/lib/RIC-Format-Type.c
+++ b/e2sm/lib/RIC-Format-Type.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/RIC-InsertIndication-ID.c b/e2sm/lib/RIC-InsertIndication-ID.c
new file mode 100644
index 0000000..6cf61e3
--- /dev/null
+++ b/e2sm/lib/RIC-InsertIndication-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-InsertIndication-ID.h"
+
+int
+RIC_InsertIndication_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && 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;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RIC_InsertIndication_ID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RIC_InsertIndication_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  16,  16,  1,  65535 }	/* (1..65535,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_RIC_InsertIndication_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_InsertIndication_ID = {
+	"RIC-InsertIndication-ID",
+	"RIC-InsertIndication-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_RIC_InsertIndication_ID_tags_1,
+	sizeof(asn_DEF_RIC_InsertIndication_ID_tags_1)
+		/sizeof(asn_DEF_RIC_InsertIndication_ID_tags_1[0]), /* 1 */
+	asn_DEF_RIC_InsertIndication_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_InsertIndication_ID_tags_1)
+		/sizeof(asn_DEF_RIC_InsertIndication_ID_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_InsertIndication_ID_constr_1, &asn_PER_type_RIC_InsertIndication_ID_constr_1, RIC_InsertIndication_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/RANcallProcess-ID-string.c b/e2sm/lib/RIC-InsertIndication-Name.c
similarity index 67%
copy from e2sm/lib/RANcallProcess-ID-string.c
copy to e2sm/lib/RIC-InsertIndication-Name.c
index 69092be..ddc9c47 100644
--- a/e2sm/lib/RANcallProcess-ID-string.c
+++ b/e2sm/lib/RIC-InsertIndication-Name.c
@@ -1,11 +1,11 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
-#include "RANcallProcess-ID-string.h"
+#include "RIC-InsertIndication-Name.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,	/*                  */
@@ -40,7 +40,7 @@
 }
 
 int
-RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+RIC_InsertIndication_Name_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;
@@ -66,12 +66,12 @@
 	}
 }
 
-static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) {
+static int asn_PER_MAP_RIC_InsertIndication_Name_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_RANcallProcess_ID_string_1_c2v(unsigned int code) {
+static int asn_PER_MAP_RIC_InsertIndication_Name_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];
@@ -80,29 +80,29 @@
  * This type is implemented using PrintableString,
  * so here we adjust the DEF accordingly.
  */
-static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+static asn_oer_constraints_t asn_OER_type_RIC_InsertIndication_Name_constr_1 CC_NOTUSED = {
 	{ 0, 0 },
 	-1	/* (SIZE(0..MAX)) */};
-static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = {
+asn_per_constraints_t asn_PER_type_RIC_InsertIndication_Name_constr_1 CC_NOTUSED = {
 	{ APC_CONSTRAINED,	 7,  7,  32,  122 }	/* (32..122) */,
 	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  150 }	/* (SIZE(1..150,...)) */,
-	asn_PER_MAP_RANcallProcess_ID_string_1_v2c,	/* Value to PER code map */
-	asn_PER_MAP_RANcallProcess_ID_string_1_c2v	/* PER code to value map */
+	asn_PER_MAP_RIC_InsertIndication_Name_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_RIC_InsertIndication_Name_1_c2v	/* PER code to value map */
 };
-static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_RIC_InsertIndication_Name_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = {
-	"RANcallProcess-ID-string",
-	"RANcallProcess-ID-string",
+asn_TYPE_descriptor_t asn_DEF_RIC_InsertIndication_Name = {
+	"RIC-InsertIndication-Name",
+	"RIC-InsertIndication-Name",
 	&asn_OP_PrintableString,
-	asn_DEF_RANcallProcess_ID_string_tags_1,
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	asn_DEF_RANcallProcess_ID_string_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANcallProcess_ID_string_tags_1)
-		/sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint },
+	asn_DEF_RIC_InsertIndication_Name_tags_1,
+	sizeof(asn_DEF_RIC_InsertIndication_Name_tags_1)
+		/sizeof(asn_DEF_RIC_InsertIndication_Name_tags_1[0]), /* 1 */
+	asn_DEF_RIC_InsertIndication_Name_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_InsertIndication_Name_tags_1)
+		/sizeof(asn_DEF_RIC_InsertIndication_Name_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RIC_InsertIndication_Name_constr_1, &asn_PER_type_RIC_InsertIndication_Name_constr_1, RIC_InsertIndication_Name_constraint },
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/e2sm/lib/RIC-PolicyAction-RANParameter-Item.c b/e2sm/lib/RIC-PolicyAction-RANParameter-Item.c
new file mode 100644
index 0000000..d146925
--- /dev/null
+++ b/e2sm/lib/RIC-PolicyAction-RANParameter-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-PolicyAction-RANParameter-Item.h"
+
+asn_TYPE_member_t asn_MBR_RIC_PolicyAction_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RIC_PolicyAction_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RIC_PolicyAction_RANParameter_Item, ranParameter_valueType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANParameter_ValueType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-valueType"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RIC_PolicyAction_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameter-valueType */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RIC_PolicyAction_RANParameter_Item_specs_1 = {
+	sizeof(struct RIC_PolicyAction_RANParameter_Item),
+	offsetof(struct RIC_PolicyAction_RANParameter_Item, _asn_ctx),
+	asn_MAP_RIC_PolicyAction_RANParameter_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_RIC_PolicyAction_RANParameter_Item = {
+	"RIC-PolicyAction-RANParameter-Item",
+	"RIC-PolicyAction-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_RIC_PolicyAction_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RIC_PolicyAction_RANParameter_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_RIC_PolicyAction_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RIC-PolicyAction.c b/e2sm/lib/RIC-PolicyAction.c
new file mode 100644
index 0000000..8b93916
--- /dev/null
+++ b/e2sm/lib/RIC-PolicyAction.c
@@ -0,0 +1,142 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RIC-PolicyAction.h"
+
+#include "RIC-PolicyAction-RANParameter-Item.h"
+static int
+memb_ranParameters_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 65535)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_ranParameters_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_type_ranParameters_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_ranParameters_List_constr_3 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+static asn_per_constraints_t asn_PER_memb_ranParameters_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_ranParameters_List_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_RIC_PolicyAction_RANParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_ranParameters_List_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_ranParameters_List_specs_3 = {
+	sizeof(struct RIC_PolicyAction__ranParameters_List),
+	offsetof(struct RIC_PolicyAction__ranParameters_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ranParameters_List_3 = {
+	"ranParameters-List",
+	"ranParameters-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_ranParameters_List_tags_3,
+	sizeof(asn_DEF_ranParameters_List_tags_3)
+		/sizeof(asn_DEF_ranParameters_List_tags_3[0]) - 1, /* 1 */
+	asn_DEF_ranParameters_List_tags_3,	/* Same as above */
+	sizeof(asn_DEF_ranParameters_List_tags_3)
+		/sizeof(asn_DEF_ranParameters_List_tags_3[0]), /* 2 */
+	{ &asn_OER_type_ranParameters_List_constr_3, &asn_PER_type_ranParameters_List_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_ranParameters_List_3,
+	1,	/* Single element */
+	&asn_SPC_ranParameters_List_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RIC_PolicyAction_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RIC_PolicyAction, ric_PolicyAction_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RIC_ControlAction_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric-PolicyAction-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RIC_PolicyAction, ranParameters_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_ranParameters_List_3,
+		0,
+		{ &asn_OER_memb_ranParameters_List_constr_3, &asn_PER_memb_ranParameters_List_constr_3,  memb_ranParameters_List_constraint_1 },
+		0, 0, /* No default value */
+		"ranParameters-List"
+		},
+};
+static const int asn_MAP_RIC_PolicyAction_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RIC_PolicyAction_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RIC_PolicyAction_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-PolicyAction-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranParameters-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RIC_PolicyAction_specs_1 = {
+	sizeof(struct RIC_PolicyAction),
+	offsetof(struct RIC_PolicyAction, _asn_ctx),
+	asn_MAP_RIC_PolicyAction_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RIC_PolicyAction_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RIC_PolicyAction = {
+	"RIC-PolicyAction",
+	"RIC-PolicyAction",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RIC_PolicyAction_tags_1,
+	sizeof(asn_DEF_RIC_PolicyAction_tags_1)
+		/sizeof(asn_DEF_RIC_PolicyAction_tags_1[0]), /* 1 */
+	asn_DEF_RIC_PolicyAction_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RIC_PolicyAction_tags_1)
+		/sizeof(asn_DEF_RIC_PolicyAction_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RIC_PolicyAction_1,
+	2,	/* Elements count */
+	&asn_SPC_RIC_PolicyAction_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RIC-ReportStyle-Item.c b/e2sm/lib/RIC-ReportStyle-Item.c
deleted file mode 100644
index 9efe8c3..0000000
--- a/e2sm/lib/RIC-ReportStyle-Item.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RIC-ReportStyle-Item.h"
-
-asn_TYPE_member_t asn_MBR_RIC_ReportStyle_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportStyle_Type),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ReportStyle-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportStyle_Name),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Style_Name,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ReportStyle-Name"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportIndicationHeaderFormat_Type),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Format_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ReportIndicationHeaderFormat-Type"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportIndicationMessageFormat_Type),
-		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RIC_Format_Type,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ric-ReportIndicationMessageFormat-Type"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ReportIndicationHeaderFormat-Type */
-    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-ReportIndicationMessageFormat-Type */
-};
-asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_Item_specs_1 = {
-	sizeof(struct RIC_ReportStyle_Item),
-	offsetof(struct RIC_ReportStyle_Item, _asn_ctx),
-	asn_MAP_RIC_ReportStyle_Item_tag2el_1,
-	4,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	4,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_Item = {
-	"RIC-ReportStyle-Item",
-	"RIC-ReportStyle-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_RIC_ReportStyle_Item_tags_1,
-	sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1[0]), /* 1 */
-	asn_DEF_RIC_ReportStyle_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1)
-		/sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_RIC_ReportStyle_Item_1,
-	4,	/* Elements count */
-	&asn_SPC_RIC_ReportStyle_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RIC-Style-Name.c b/e2sm/lib/RIC-Style-Name.c
index 7cc5fcc..f8c4660 100644
--- a/e2sm/lib/RIC-Style-Name.c
+++ b/e2sm/lib/RIC-Style-Name.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/RIC-Style-Type.c b/e2sm/lib/RIC-Style-Type.c
index 14475b8..467c568 100644
--- a/e2sm/lib/RIC-Style-Type.c
+++ b/e2sm/lib/RIC-Style-Type.c
@@ -1,7 +1,7 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
diff --git a/e2sm/lib/RRC-MessageID.c b/e2sm/lib/RRC-MessageID.c
new file mode 100644
index 0000000..075db39
--- /dev/null
+++ b/e2sm/lib/RRC-MessageID.c
@@ -0,0 +1,117 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RRC-MessageID.h"
+
+static asn_oer_constraints_t asn_OER_type_rrcType_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_type_rrcType_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 asn_TYPE_member_t asn_MBR_rrcType_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID__rrcType, choice.lTE),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RRCclass_LTE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"lTE"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID__rrcType, choice.nR),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RRCclass_NR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_rrcType_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lTE */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nR */
+};
+static asn_CHOICE_specifics_t asn_SPC_rrcType_specs_2 = {
+	sizeof(struct RRC_MessageID__rrcType),
+	offsetof(struct RRC_MessageID__rrcType, _asn_ctx),
+	offsetof(struct RRC_MessageID__rrcType, present),
+	sizeof(((struct RRC_MessageID__rrcType *)0)->present),
+	asn_MAP_rrcType_tag2el_2,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_rrcType_2 = {
+	"rrcType",
+	"rrcType",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_rrcType_constr_2, &asn_PER_type_rrcType_constr_2, CHOICE_constraint },
+	asn_MBR_rrcType_2,
+	2,	/* Elements count */
+	&asn_SPC_rrcType_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RRC_MessageID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID, rrcType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_rrcType_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rrcType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID, messageID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"messageID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RRC_MessageID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RRC_MessageID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RRC_MessageID_specs_1 = {
+	sizeof(struct RRC_MessageID),
+	offsetof(struct RRC_MessageID, _asn_ctx),
+	asn_MAP_RRC_MessageID_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_RRC_MessageID = {
+	"RRC-MessageID",
+	"RRC-MessageID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_RRC_MessageID_tags_1,
+	sizeof(asn_DEF_RRC_MessageID_tags_1)
+		/sizeof(asn_DEF_RRC_MessageID_tags_1[0]), /* 1 */
+	asn_DEF_RRC_MessageID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RRC_MessageID_tags_1)
+		/sizeof(asn_DEF_RRC_MessageID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_RRC_MessageID_1,
+	2,	/* Elements count */
+	&asn_SPC_RRC_MessageID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RRC-State.c b/e2sm/lib/RRC-State.c
new file mode 100644
index 0000000..391c70d
--- /dev/null
+++ b/e2sm/lib/RRC-State.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RRC-State.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RRC_State_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RRC_State_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 const asn_INTEGER_enum_map_t asn_MAP_RRC_State_value2enum_1[] = {
+	{ 0,	13,	"rrc-connected" },
+	{ 1,	12,	"rrc-inactive" },
+	{ 2,	8,	"rrc-idle" },
+	{ 3,	3,	"any" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_RRC_State_enum2value_1[] = {
+	3,	/* any(3) */
+	0,	/* rrc-connected(0) */
+	2,	/* rrc-idle(2) */
+	1	/* rrc-inactive(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_RRC_State_specs_1 = {
+	asn_MAP_RRC_State_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_RRC_State_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_RRC_State_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RRC_State = {
+	"RRC-State",
+	"RRC-State",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_RRC_State_tags_1,
+	sizeof(asn_DEF_RRC_State_tags_1)
+		/sizeof(asn_DEF_RRC_State_tags_1[0]), /* 1 */
+	asn_DEF_RRC_State_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RRC_State_tags_1)
+		/sizeof(asn_DEF_RRC_State_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RRC_State_constr_1, &asn_PER_type_RRC_State_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_RRC_State_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RRCEvent.c b/e2sm/lib/RRCEvent.c
deleted file mode 100644
index 8113c36..0000000
--- a/e2sm/lib/RRCEvent.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RRCEvent.h"
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RRCEvent_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_RRCEvent_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 const asn_INTEGER_enum_map_t asn_MAP_RRCEvent_value2enum_1[] = {
-	{ 0,	2,	"b1" },
-	{ 1,	2,	"a3" },
-	{ 2,	2,	"a5" },
-	{ 3,	8,	"periodic" }
-	/* This list is extensible */
-};
-static const unsigned int asn_MAP_RRCEvent_enum2value_1[] = {
-	1,	/* a3(1) */
-	2,	/* a5(2) */
-	0,	/* b1(0) */
-	3	/* periodic(3) */
-	/* This list is extensible */
-};
-const asn_INTEGER_specifics_t asn_SPC_RRCEvent_specs_1 = {
-	asn_MAP_RRCEvent_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_RRCEvent_enum2value_1,	/* N => "tag"; sorted by N */
-	4,	/* Number of elements in the maps */
-	5,	/* Extensions before this member */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_RRCEvent_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RRCEvent = {
-	"RRCEvent",
-	"RRCEvent",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_RRCEvent_tags_1,
-	sizeof(asn_DEF_RRCEvent_tags_1)
-		/sizeof(asn_DEF_RRCEvent_tags_1[0]), /* 1 */
-	asn_DEF_RRCEvent_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RRCEvent_tags_1)
-		/sizeof(asn_DEF_RRCEvent_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RRCEvent_constr_1, &asn_PER_type_RRCEvent_constr_1, NativeEnumerated_constraint },
-	0, 0,	/* Defined elsewhere */
-	&asn_SPC_RRCEvent_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/RRCclass-LTE.c b/e2sm/lib/RRCclass-LTE.c
new file mode 100644
index 0000000..39c575f
--- /dev/null
+++ b/e2sm/lib/RRCclass-LTE.c
@@ -0,0 +1,78 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RRCclass-LTE.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RRCclass_LTE_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RRCclass_LTE_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  11 }	/* (0..11,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_RRCclass_LTE_value2enum_1[] = {
+	{ 0,	8,	"bCCH-BCH" },
+	{ 1,	13,	"bCCH-BCH-MBMS" },
+	{ 2,	11,	"bCCH-DL-SCH" },
+	{ 3,	14,	"bCCH-DL-SCH-BR" },
+	{ 4,	16,	"bCCH-DL-SCH-MBMS" },
+	{ 5,	4,	"mCCH" },
+	{ 6,	4,	"pCCH" },
+	{ 7,	7,	"dL-CCCH" },
+	{ 8,	7,	"dL-DCCH" },
+	{ 9,	7,	"uL-CCCH" },
+	{ 10,	7,	"uL-DCCH" },
+	{ 11,	7,	"sC-MCCH" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_RRCclass_LTE_enum2value_1[] = {
+	0,	/* bCCH-BCH(0) */
+	1,	/* bCCH-BCH-MBMS(1) */
+	2,	/* bCCH-DL-SCH(2) */
+	3,	/* bCCH-DL-SCH-BR(3) */
+	4,	/* bCCH-DL-SCH-MBMS(4) */
+	7,	/* dL-CCCH(7) */
+	8,	/* dL-DCCH(8) */
+	5,	/* mCCH(5) */
+	6,	/* pCCH(6) */
+	11,	/* sC-MCCH(11) */
+	9,	/* uL-CCCH(9) */
+	10	/* uL-DCCH(10) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_RRCclass_LTE_specs_1 = {
+	asn_MAP_RRCclass_LTE_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_RRCclass_LTE_enum2value_1,	/* N => "tag"; sorted by N */
+	12,	/* Number of elements in the maps */
+	13,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_RRCclass_LTE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RRCclass_LTE = {
+	"RRCclass-LTE",
+	"RRCclass-LTE",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_RRCclass_LTE_tags_1,
+	sizeof(asn_DEF_RRCclass_LTE_tags_1)
+		/sizeof(asn_DEF_RRCclass_LTE_tags_1[0]), /* 1 */
+	asn_DEF_RRCclass_LTE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RRCclass_LTE_tags_1)
+		/sizeof(asn_DEF_RRCclass_LTE_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RRCclass_LTE_constr_1, &asn_PER_type_RRCclass_LTE_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_RRCclass_LTE_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RRCclass-NR.c b/e2sm/lib/RRCclass-NR.c
new file mode 100644
index 0000000..b4bf12c
--- /dev/null
+++ b/e2sm/lib/RRCclass-NR.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "RRCclass-NR.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_RRCclass_NR_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_RRCclass_NR_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  7 }	/* (0..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_RRCclass_NR_value2enum_1[] = {
+	{ 0,	8,	"bCCH-BCH" },
+	{ 1,	11,	"bCCH-DL-SCH" },
+	{ 2,	7,	"dL-CCCH" },
+	{ 3,	7,	"dL-DCCH" },
+	{ 4,	4,	"pCCH" },
+	{ 5,	7,	"uL-CCCH" },
+	{ 6,	8,	"uL-CCCH1" },
+	{ 7,	7,	"uL-DCCH" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_RRCclass_NR_enum2value_1[] = {
+	0,	/* bCCH-BCH(0) */
+	1,	/* bCCH-DL-SCH(1) */
+	2,	/* dL-CCCH(2) */
+	3,	/* dL-DCCH(3) */
+	4,	/* pCCH(4) */
+	5,	/* uL-CCCH(5) */
+	6,	/* uL-CCCH1(6) */
+	7	/* uL-DCCH(7) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_RRCclass_NR_specs_1 = {
+	asn_MAP_RRCclass_NR_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_RRCclass_NR_enum2value_1,	/* N => "tag"; sorted by N */
+	8,	/* Number of elements in the maps */
+	9,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_RRCclass_NR_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_RRCclass_NR = {
+	"RRCclass-NR",
+	"RRCclass-NR",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_RRCclass_NR_tags_1,
+	sizeof(asn_DEF_RRCclass_NR_tags_1)
+		/sizeof(asn_DEF_RRCclass_NR_tags_1[0]), /* 1 */
+	asn_DEF_RRCclass_NR_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RRCclass_NR_tags_1)
+		/sizeof(asn_DEF_RRCclass_NR_tags_1[0]), /* 1 */
+	{ &asn_OER_type_RRCclass_NR_constr_1, &asn_PER_type_RRCclass_NR_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_RRCclass_NR_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/RSRP-Range.c b/e2sm/lib/RSRP-Range.c
deleted file mode 100644
index 31f13c4..0000000
--- a/e2sm/lib/RSRP-Range.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RSRP-Range.h"
-
-int
-RSRP_Range_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 127)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RSRP_Range_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..127) */,
-	-1};
-asn_per_constraints_t asn_PER_type_RSRP_Range_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  127 }	/* (0..127) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_RSRP_Range_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RSRP_Range = {
-	"RSRP-Range",
-	"RSRP-Range",
-	&asn_OP_NativeInteger,
-	asn_DEF_RSRP_Range_tags_1,
-	sizeof(asn_DEF_RSRP_Range_tags_1)
-		/sizeof(asn_DEF_RSRP_Range_tags_1[0]), /* 1 */
-	asn_DEF_RSRP_Range_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RSRP_Range_tags_1)
-		/sizeof(asn_DEF_RSRP_Range_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RSRP_Range_constr_1, &asn_PER_type_RSRP_Range_constr_1, RSRP_Range_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/RSRP-RangeEUTRA.c b/e2sm/lib/RSRP-RangeEUTRA.c
deleted file mode 100644
index 5c646f7..0000000
--- a/e2sm/lib/RSRP-RangeEUTRA.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RSRP-RangeEUTRA.h"
-
-int
-RSRP_RangeEUTRA_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 97)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RSRP_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..97) */,
-	-1};
-asn_per_constraints_t asn_PER_type_RSRP_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  97 }	/* (0..97) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_RSRP_RangeEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RSRP_RangeEUTRA = {
-	"RSRP-RangeEUTRA",
-	"RSRP-RangeEUTRA",
-	&asn_OP_NativeInteger,
-	asn_DEF_RSRP_RangeEUTRA_tags_1,
-	sizeof(asn_DEF_RSRP_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_RSRP_RangeEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_RSRP_RangeEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RSRP_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_RSRP_RangeEUTRA_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RSRP_RangeEUTRA_constr_1, &asn_PER_type_RSRP_RangeEUTRA_constr_1, RSRP_RangeEUTRA_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/RSRQ-Range.c b/e2sm/lib/RSRQ-Range.c
deleted file mode 100644
index 0782d80..0000000
--- a/e2sm/lib/RSRQ-Range.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RSRQ-Range.h"
-
-int
-RSRQ_Range_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 127)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RSRQ_Range_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..127) */,
-	-1};
-asn_per_constraints_t asn_PER_type_RSRQ_Range_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  127 }	/* (0..127) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_RSRQ_Range_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RSRQ_Range = {
-	"RSRQ-Range",
-	"RSRQ-Range",
-	&asn_OP_NativeInteger,
-	asn_DEF_RSRQ_Range_tags_1,
-	sizeof(asn_DEF_RSRQ_Range_tags_1)
-		/sizeof(asn_DEF_RSRQ_Range_tags_1[0]), /* 1 */
-	asn_DEF_RSRQ_Range_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RSRQ_Range_tags_1)
-		/sizeof(asn_DEF_RSRQ_Range_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RSRQ_Range_constr_1, &asn_PER_type_RSRQ_Range_constr_1, RSRQ_Range_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/RSRQ-RangeEUTRA.c b/e2sm/lib/RSRQ-RangeEUTRA.c
deleted file mode 100644
index 1de3c4e..0000000
--- a/e2sm/lib/RSRQ-RangeEUTRA.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RSRQ-RangeEUTRA.h"
-
-int
-RSRQ_RangeEUTRA_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 34)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RSRQ_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..34) */,
-	-1};
-asn_per_constraints_t asn_PER_type_RSRQ_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 6,  6,  0,  34 }	/* (0..34) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_RSRQ_RangeEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RSRQ_RangeEUTRA = {
-	"RSRQ-RangeEUTRA",
-	"RSRQ-RangeEUTRA",
-	&asn_OP_NativeInteger,
-	asn_DEF_RSRQ_RangeEUTRA_tags_1,
-	sizeof(asn_DEF_RSRQ_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_RSRQ_RangeEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_RSRQ_RangeEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RSRQ_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_RSRQ_RangeEUTRA_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RSRQ_RangeEUTRA_constr_1, &asn_PER_type_RSRQ_RangeEUTRA_constr_1, RSRQ_RangeEUTRA_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/RT-Period-IE.c b/e2sm/lib/RT-Period-IE.c
deleted file mode 100644
index 7edf20d..0000000
--- a/e2sm/lib/RT-Period-IE.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "RT-Period-IE.h"
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  19 }	/* (0..19,...) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = {
-	{ 0,	4,	"ms10" },
-	{ 1,	4,	"ms20" },
-	{ 2,	4,	"ms32" },
-	{ 3,	4,	"ms40" },
-	{ 4,	4,	"ms60" },
-	{ 5,	4,	"ms64" },
-	{ 6,	4,	"ms70" },
-	{ 7,	4,	"ms80" },
-	{ 8,	5,	"ms128" },
-	{ 9,	5,	"ms160" },
-	{ 10,	5,	"ms256" },
-	{ 11,	5,	"ms320" },
-	{ 12,	5,	"ms512" },
-	{ 13,	5,	"ms640" },
-	{ 14,	6,	"ms1024" },
-	{ 15,	6,	"ms1280" },
-	{ 16,	6,	"ms2048" },
-	{ 17,	6,	"ms2560" },
-	{ 18,	6,	"ms5120" },
-	{ 19,	7,	"ms10240" }
-	/* This list is extensible */
-};
-static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = {
-	0,	/* ms10(0) */
-	14,	/* ms1024(14) */
-	19,	/* ms10240(19) */
-	8,	/* ms128(8) */
-	15,	/* ms1280(15) */
-	9,	/* ms160(9) */
-	1,	/* ms20(1) */
-	16,	/* ms2048(16) */
-	10,	/* ms256(10) */
-	17,	/* ms2560(17) */
-	2,	/* ms32(2) */
-	11,	/* ms320(11) */
-	3,	/* ms40(3) */
-	12,	/* ms512(12) */
-	18,	/* ms5120(18) */
-	4,	/* ms60(4) */
-	5,	/* ms64(5) */
-	13,	/* ms640(13) */
-	6,	/* ms70(6) */
-	7	/* ms80(7) */
-	/* This list is extensible */
-};
-const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = {
-	asn_MAP_RT_Period_IE_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_RT_Period_IE_enum2value_1,	/* N => "tag"; sorted by N */
-	20,	/* Number of elements in the maps */
-	21,	/* Extensions before this member */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = {
-	"RT-Period-IE",
-	"RT-Period-IE",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_RT_Period_IE_tags_1,
-	sizeof(asn_DEF_RT_Period_IE_tags_1)
-		/sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */
-	asn_DEF_RT_Period_IE_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RT_Period_IE_tags_1)
-		/sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */
-	{ &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint },
-	0, 0,	/* Defined elsewhere */
-	&asn_SPC_RT_Period_IE_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/Report-RANParameter-Item.c b/e2sm/lib/Report-RANParameter-Item.c
new file mode 100644
index 0000000..772e65e
--- /dev/null
+++ b/e2sm/lib/Report-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "Report-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_Report_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Report_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Report_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct Report_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_Report_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_Report_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Report_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Report_RANParameter_Item_specs_1 = {
+	sizeof(struct Report_RANParameter_Item),
+	offsetof(struct Report_RANParameter_Item, _asn_ctx),
+	asn_MAP_Report_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_Report_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Report_RANParameter_Item = {
+	"Report-RANParameter-Item",
+	"Report-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_Report_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_Report_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_Report_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_Report_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_Report_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_Report_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_Report_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_Report_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ResultsPerCSI-RS-Index.c b/e2sm/lib/ResultsPerCSI-RS-Index.c
deleted file mode 100644
index 36abbd9..0000000
--- a/e2sm/lib/ResultsPerCSI-RS-Index.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ResultsPerCSI-RS-Index.h"
-
-#include "MeasQuantityResults.h"
-asn_TYPE_member_t asn_MBR_ResultsPerCSI_RS_Index_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ResultsPerCSI_RS_Index, csi_RS_Index),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_CSI_RS_Index,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"csi-RS-Index"
-		},
-	{ ATF_POINTER, 1, offsetof(struct ResultsPerCSI_RS_Index, csi_RS_Results),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasQuantityResults,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"csi-RS-Results"
-		},
-};
-static const int asn_MAP_ResultsPerCSI_RS_Index_oms_1[] = { 1 };
-static const ber_tlv_tag_t asn_DEF_ResultsPerCSI_RS_Index_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_ResultsPerCSI_RS_Index_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csi-RS-Index */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* csi-RS-Results */
-};
-asn_SEQUENCE_specifics_t asn_SPC_ResultsPerCSI_RS_Index_specs_1 = {
-	sizeof(struct ResultsPerCSI_RS_Index),
-	offsetof(struct ResultsPerCSI_RS_Index, _asn_ctx),
-	asn_MAP_ResultsPerCSI_RS_Index_tag2el_1,
-	2,	/* Count of tags in the map */
-	asn_MAP_ResultsPerCSI_RS_Index_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	2,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_ResultsPerCSI_RS_Index = {
-	"ResultsPerCSI-RS-Index",
-	"ResultsPerCSI-RS-Index",
-	&asn_OP_SEQUENCE,
-	asn_DEF_ResultsPerCSI_RS_Index_tags_1,
-	sizeof(asn_DEF_ResultsPerCSI_RS_Index_tags_1)
-		/sizeof(asn_DEF_ResultsPerCSI_RS_Index_tags_1[0]), /* 1 */
-	asn_DEF_ResultsPerCSI_RS_Index_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ResultsPerCSI_RS_Index_tags_1)
-		/sizeof(asn_DEF_ResultsPerCSI_RS_Index_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResultsPerCSI_RS_Index_1,
-	2,	/* Elements count */
-	&asn_SPC_ResultsPerCSI_RS_Index_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ResultsPerCSI-RS-IndexList.c b/e2sm/lib/ResultsPerCSI-RS-IndexList.c
deleted file mode 100644
index d98d4d1..0000000
--- a/e2sm/lib/ResultsPerCSI-RS-IndexList.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ResultsPerCSI-RS-IndexList.h"
-
-#include "ResultsPerCSI-RS-Index.h"
-static asn_oer_constraints_t asn_OER_type_ResultsPerCSI_RS_IndexList_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-asn_per_constraints_t asn_PER_type_ResultsPerCSI_RS_IndexList_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_ResultsPerCSI_RS_IndexList_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_ResultsPerCSI_RS_Index,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ResultsPerCSI_RS_IndexList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_ResultsPerCSI_RS_IndexList_specs_1 = {
-	sizeof(struct ResultsPerCSI_RS_IndexList),
-	offsetof(struct ResultsPerCSI_RS_IndexList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_ResultsPerCSI_RS_IndexList = {
-	"ResultsPerCSI-RS-IndexList",
-	"ResultsPerCSI-RS-IndexList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ResultsPerCSI_RS_IndexList_tags_1,
-	sizeof(asn_DEF_ResultsPerCSI_RS_IndexList_tags_1)
-		/sizeof(asn_DEF_ResultsPerCSI_RS_IndexList_tags_1[0]), /* 1 */
-	asn_DEF_ResultsPerCSI_RS_IndexList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ResultsPerCSI_RS_IndexList_tags_1)
-		/sizeof(asn_DEF_ResultsPerCSI_RS_IndexList_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ResultsPerCSI_RS_IndexList_constr_1, &asn_PER_type_ResultsPerCSI_RS_IndexList_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_ResultsPerCSI_RS_IndexList_1,
-	1,	/* Single element */
-	&asn_SPC_ResultsPerCSI_RS_IndexList_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ResultsPerSSB-Index.c b/e2sm/lib/ResultsPerSSB-Index.c
deleted file mode 100644
index 5aca175..0000000
--- a/e2sm/lib/ResultsPerSSB-Index.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ResultsPerSSB-Index.h"
-
-#include "MeasQuantityResults.h"
-asn_TYPE_member_t asn_MBR_ResultsPerSSB_Index_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ResultsPerSSB_Index, ssb_Index),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_SSB_Index,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ssb-Index"
-		},
-	{ ATF_POINTER, 1, offsetof(struct ResultsPerSSB_Index, ssb_Results),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasQuantityResults,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"ssb-Results"
-		},
-};
-static const int asn_MAP_ResultsPerSSB_Index_oms_1[] = { 1 };
-static const ber_tlv_tag_t asn_DEF_ResultsPerSSB_Index_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_ResultsPerSSB_Index_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ssb-Index */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ssb-Results */
-};
-asn_SEQUENCE_specifics_t asn_SPC_ResultsPerSSB_Index_specs_1 = {
-	sizeof(struct ResultsPerSSB_Index),
-	offsetof(struct ResultsPerSSB_Index, _asn_ctx),
-	asn_MAP_ResultsPerSSB_Index_tag2el_1,
-	2,	/* Count of tags in the map */
-	asn_MAP_ResultsPerSSB_Index_oms_1,	/* Optional members */
-	1, 0,	/* Root/Additions */
-	2,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_ResultsPerSSB_Index = {
-	"ResultsPerSSB-Index",
-	"ResultsPerSSB-Index",
-	&asn_OP_SEQUENCE,
-	asn_DEF_ResultsPerSSB_Index_tags_1,
-	sizeof(asn_DEF_ResultsPerSSB_Index_tags_1)
-		/sizeof(asn_DEF_ResultsPerSSB_Index_tags_1[0]), /* 1 */
-	asn_DEF_ResultsPerSSB_Index_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ResultsPerSSB_Index_tags_1)
-		/sizeof(asn_DEF_ResultsPerSSB_Index_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ResultsPerSSB_Index_1,
-	2,	/* Elements count */
-	&asn_SPC_ResultsPerSSB_Index_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ResultsPerSSB-IndexList.c b/e2sm/lib/ResultsPerSSB-IndexList.c
deleted file mode 100644
index 2d7e1ab..0000000
--- a/e2sm/lib/ResultsPerSSB-IndexList.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ResultsPerSSB-IndexList.h"
-
-#include "ResultsPerSSB-Index.h"
-static asn_oer_constraints_t asn_OER_type_ResultsPerSSB_IndexList_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-asn_per_constraints_t asn_PER_type_ResultsPerSSB_IndexList_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_ResultsPerSSB_IndexList_1[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_ResultsPerSSB_Index,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_ResultsPerSSB_IndexList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-asn_SET_OF_specifics_t asn_SPC_ResultsPerSSB_IndexList_specs_1 = {
-	sizeof(struct ResultsPerSSB_IndexList),
-	offsetof(struct ResultsPerSSB_IndexList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-asn_TYPE_descriptor_t asn_DEF_ResultsPerSSB_IndexList = {
-	"ResultsPerSSB-IndexList",
-	"ResultsPerSSB-IndexList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_ResultsPerSSB_IndexList_tags_1,
-	sizeof(asn_DEF_ResultsPerSSB_IndexList_tags_1)
-		/sizeof(asn_DEF_ResultsPerSSB_IndexList_tags_1[0]), /* 1 */
-	asn_DEF_ResultsPerSSB_IndexList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ResultsPerSSB_IndexList_tags_1)
-		/sizeof(asn_DEF_ResultsPerSSB_IndexList_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ResultsPerSSB_IndexList_constr_1, &asn_PER_type_ResultsPerSSB_IndexList_constr_1, SEQUENCE_OF_constraint },
-	asn_MBR_ResultsPerSSB_IndexList_1,
-	1,	/* Single element */
-	&asn_SPC_ResultsPerSSB_IndexList_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/S-NSSAI.c b/e2sm/lib/S-NSSAI.c
index 29b31b2..8f0588e 100644
--- a/e2sm/lib/S-NSSAI.c
+++ b/e2sm/lib/S-NSSAI.c
@@ -1,96 +1,28 @@
 /*
  * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
  * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
  */
 
 #include "S-NSSAI.h"
 
-static int
-memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const OCTET_STRING_t *st = (const OCTET_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;
-	}
-	
-	size = st->size;
-	
-	if((size == 1)) {
-		/* 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_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const OCTET_STRING_t *st = (const OCTET_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;
-	}
-	
-	size = st->size;
-	
-	if((size == 3)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = {
-	{ 0, 0 },
-	1	/* (SIZE(1..1)) */};
-static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 0,  0,  1,  1 }	/* (SIZE(1..1)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	3	/* (SIZE(3..3)) */};
-static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
-	0, 0	/* No PER value map */
-};
-asn_TYPE_member_t asn_MBR_S_NSSAI_1[] = {
+static asn_TYPE_member_t asn_MBR_S_NSSAI_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct S_NSSAI, sST),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_OCTET_STRING,
+		&asn_DEF_SST,
 		0,
-		{ &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2,  memb_sST_constraint_1 },
+		{ 0, 0, 0 },
 		0, 0, /* No default value */
 		"sST"
 		},
 	{ ATF_POINTER, 1, offsetof(struct S_NSSAI, sD),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_OCTET_STRING,
+		&asn_DEF_SD,
 		0,
-		{ &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3,  memb_sD_constraint_1 },
+		{ 0, 0, 0 },
 		0, 0, /* No default value */
 		"sD"
 		},
@@ -103,14 +35,14 @@
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */
 };
-asn_SEQUENCE_specifics_t asn_SPC_S_NSSAI_specs_1 = {
+static asn_SEQUENCE_specifics_t asn_SPC_S_NSSAI_specs_1 = {
 	sizeof(struct S_NSSAI),
 	offsetof(struct S_NSSAI, _asn_ctx),
 	asn_MAP_S_NSSAI_tag2el_1,
 	2,	/* Count of tags in the map */
 	asn_MAP_S_NSSAI_oms_1,	/* Optional members */
 	1, 0,	/* Root/Additions */
-	-1,	/* First extension addition */
+	2,	/* First extension addition */
 };
 asn_TYPE_descriptor_t asn_DEF_S_NSSAI = {
 	"S-NSSAI",
diff --git a/e2sm/lib/SD.c b/e2sm/lib/SD.c
new file mode 100644
index 0000000..aa3655d
--- /dev/null
+++ b/e2sm/lib/SD.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "SD.h"
+
+int
+SD_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_SD_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	3	/* (SIZE(3..3)) */};
+asn_per_constraints_t asn_PER_type_SD_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_SD_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SD = {
+	"SD",
+	"SD",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_SD_tags_1,
+	sizeof(asn_DEF_SD_tags_1)
+		/sizeof(asn_DEF_SD_tags_1[0]), /* 1 */
+	asn_DEF_SD_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SD_tags_1)
+		/sizeof(asn_DEF_SD_tags_1[0]), /* 1 */
+	{ &asn_OER_type_SD_constr_1, &asn_PER_type_SD_constr_1, SD_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/SINR-Range.c b/e2sm/lib/SINR-Range.c
deleted file mode 100644
index 5c1f4ba..0000000
--- a/e2sm/lib/SINR-Range.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "SINR-Range.h"
-
-int
-SINR_Range_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 127)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_SINR_Range_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..127) */,
-	-1};
-asn_per_constraints_t asn_PER_type_SINR_Range_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  127 }	/* (0..127) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_SINR_Range_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_SINR_Range = {
-	"SINR-Range",
-	"SINR-Range",
-	&asn_OP_NativeInteger,
-	asn_DEF_SINR_Range_tags_1,
-	sizeof(asn_DEF_SINR_Range_tags_1)
-		/sizeof(asn_DEF_SINR_Range_tags_1[0]), /* 1 */
-	asn_DEF_SINR_Range_tags_1,	/* Same as above */
-	sizeof(asn_DEF_SINR_Range_tags_1)
-		/sizeof(asn_DEF_SINR_Range_tags_1[0]), /* 1 */
-	{ &asn_OER_type_SINR_Range_constr_1, &asn_PER_type_SINR_Range_constr_1, SINR_Range_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/SINR-RangeEUTRA.c b/e2sm/lib/SINR-RangeEUTRA.c
deleted file mode 100644
index fdee3e7..0000000
--- a/e2sm/lib/SINR-RangeEUTRA.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "SINR-RangeEUTRA.h"
-
-int
-SINR_RangeEUTRA_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 127)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_SINR_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..127) */,
-	-1};
-asn_per_constraints_t asn_PER_type_SINR_RangeEUTRA_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 7,  7,  0,  127 }	/* (0..127) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_SINR_RangeEUTRA_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_SINR_RangeEUTRA = {
-	"SINR-RangeEUTRA",
-	"SINR-RangeEUTRA",
-	&asn_OP_NativeInteger,
-	asn_DEF_SINR_RangeEUTRA_tags_1,
-	sizeof(asn_DEF_SINR_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_SINR_RangeEUTRA_tags_1[0]), /* 1 */
-	asn_DEF_SINR_RangeEUTRA_tags_1,	/* Same as above */
-	sizeof(asn_DEF_SINR_RangeEUTRA_tags_1)
-		/sizeof(asn_DEF_SINR_RangeEUTRA_tags_1[0]), /* 1 */
-	{ &asn_OER_type_SINR_RangeEUTRA_constr_1, &asn_PER_type_SINR_RangeEUTRA_constr_1, SINR_RangeEUTRA_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/SSB-Index.c b/e2sm/lib/SSB-Index.c
deleted file mode 100644
index 3f9975e..0000000
--- a/e2sm/lib/SSB-Index.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "SSB-Index.h"
-
-int
-SSB_Index_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 63)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_SSB_Index_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..63) */,
-	-1};
-asn_per_constraints_t asn_PER_type_SSB_Index_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 6,  6,  0,  63 }	/* (0..63) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_SSB_Index_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_SSB_Index = {
-	"SSB-Index",
-	"SSB-Index",
-	&asn_OP_NativeInteger,
-	asn_DEF_SSB_Index_tags_1,
-	sizeof(asn_DEF_SSB_Index_tags_1)
-		/sizeof(asn_DEF_SSB_Index_tags_1[0]), /* 1 */
-	asn_DEF_SSB_Index_tags_1,	/* Same as above */
-	sizeof(asn_DEF_SSB_Index_tags_1)
-		/sizeof(asn_DEF_SSB_Index_tags_1[0]), /* 1 */
-	{ &asn_OER_type_SSB_Index_constr_1, &asn_PER_type_SSB_Index_constr_1, SSB_Index_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/SST.c b/e2sm/lib/SST.c
new file mode 100644
index 0000000..2712cd1
--- /dev/null
+++ b/e2sm/lib/SST.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "SST.h"
+
+int
+SST_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_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;
+	}
+	
+	size = st->size;
+	
+	if((size == 1)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_SST_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	1	/* (SIZE(1..1)) */};
+asn_per_constraints_t asn_PER_type_SST_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  1,  1 }	/* (SIZE(1..1)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_SST_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SST = {
+	"SST",
+	"SST",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_SST_tags_1,
+	sizeof(asn_DEF_SST_tags_1)
+		/sizeof(asn_DEF_SST_tags_1[0]), /* 1 */
+	asn_DEF_SST_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SST_tags_1)
+		/sizeof(asn_DEF_SST_tags_1[0]), /* 1 */
+	{ &asn_OER_type_SST_constr_1, &asn_PER_type_SST_constr_1, SST_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ServCellIndex.c b/e2sm/lib/ServCellIndex.c
deleted file mode 100644
index a7dec96..0000000
--- a/e2sm/lib/ServCellIndex.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ServCellIndex.h"
-
-int
-ServCellIndex_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	long value;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	value = *(const long *)sptr;
-	
-	if((value >= 0 && value <= 31)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_ServCellIndex_constr_1 CC_NOTUSED = {
-	{ 1, 1 }	/* (0..31) */,
-	-1};
-asn_per_constraints_t asn_PER_type_ServCellIndex_constr_1 CC_NOTUSED = {
-	{ APC_CONSTRAINED,	 5,  5,  0,  31 }	/* (0..31) */,
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_ServCellIndex_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_ServCellIndex = {
-	"ServCellIndex",
-	"ServCellIndex",
-	&asn_OP_NativeInteger,
-	asn_DEF_ServCellIndex_tags_1,
-	sizeof(asn_DEF_ServCellIndex_tags_1)
-		/sizeof(asn_DEF_ServCellIndex_tags_1[0]), /* 1 */
-	asn_DEF_ServCellIndex_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ServCellIndex_tags_1)
-		/sizeof(asn_DEF_ServCellIndex_tags_1[0]), /* 1 */
-	{ &asn_OER_type_ServCellIndex_constr_1, &asn_PER_type_ServCellIndex_constr_1, ServCellIndex_constraint },
-	0, 0,	/* No members */
-	0	/* No specifics */
-};
-
diff --git a/e2sm/lib/ServedPlmnPerCellListItem.c b/e2sm/lib/ServedPlmnPerCellListItem.c
deleted file mode 100644
index 4f10db7..0000000
--- a/e2sm/lib/ServedPlmnPerCellListItem.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ServedPlmnPerCellListItem.h"
-
-#include "FGC-DU-PM-Container.h"
-#include "EPC-DU-PM-Container.h"
-asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_PLMN_Identity,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"pLMN-Identity"
-		},
-	{ ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_FGC_DU_PM_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"du-PM-5GC"
-		},
-	{ ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC),
-		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_EPC_DU_PM_Container,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"du-PM-EPC"
-		},
-};
-static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */
-    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */
-};
-asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = {
-	sizeof(struct ServedPlmnPerCellListItem),
-	offsetof(struct ServedPlmnPerCellListItem, _asn_ctx),
-	asn_MAP_ServedPlmnPerCellListItem_tag2el_1,
-	3,	/* Count of tags in the map */
-	asn_MAP_ServedPlmnPerCellListItem_oms_1,	/* Optional members */
-	2, 0,	/* Root/Additions */
-	3,	/* First extension addition */
-};
-asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = {
-	"ServedPlmnPerCellListItem",
-	"ServedPlmnPerCellListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_ServedPlmnPerCellListItem_tags_1,
-	sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */
-	asn_DEF_ServedPlmnPerCellListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_ServedPlmnPerCellListItem_1,
-	3,	/* Elements count */
-	&asn_SPC_ServedPlmnPerCellListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/ServingCell-ARFCN.c b/e2sm/lib/ServingCell-ARFCN.c
new file mode 100644
index 0000000..1e6bf06
--- /dev/null
+++ b/e2sm/lib/ServingCell-ARFCN.c
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ServingCell-ARFCN.h"
+
+#include "NR-ARFCN.h"
+static asn_oer_constraints_t asn_OER_type_ServingCell_ARFCN_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_ServingCell_ARFCN_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_ServingCell_ARFCN_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct ServingCell_ARFCN, choice.nR),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct ServingCell_ARFCN, choice.eUTRA),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E_UTRA_ARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ServingCell_ARFCN_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA */
+};
+asn_CHOICE_specifics_t asn_SPC_ServingCell_ARFCN_specs_1 = {
+	sizeof(struct ServingCell_ARFCN),
+	offsetof(struct ServingCell_ARFCN, _asn_ctx),
+	offsetof(struct ServingCell_ARFCN, present),
+	sizeof(((struct ServingCell_ARFCN *)0)->present),
+	asn_MAP_ServingCell_ARFCN_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_ServingCell_ARFCN = {
+	"ServingCell-ARFCN",
+	"ServingCell-ARFCN",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ServingCell_ARFCN_constr_1, &asn_PER_type_ServingCell_ARFCN_constr_1, CHOICE_constraint },
+	asn_MBR_ServingCell_ARFCN_1,
+	2,	/* Elements count */
+	&asn_SPC_ServingCell_ARFCN_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ServingCell-PCI.c b/e2sm/lib/ServingCell-PCI.c
new file mode 100644
index 0000000..191d27f
--- /dev/null
+++ b/e2sm/lib/ServingCell-PCI.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "ServingCell-PCI.h"
+
+static asn_oer_constraints_t asn_OER_type_ServingCell_PCI_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_ServingCell_PCI_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_ServingCell_PCI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct ServingCell_PCI, choice.nR),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NR_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct ServingCell_PCI, choice.eUTRA),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E_UTRA_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_ServingCell_PCI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA */
+};
+asn_CHOICE_specifics_t asn_SPC_ServingCell_PCI_specs_1 = {
+	sizeof(struct ServingCell_PCI),
+	offsetof(struct ServingCell_PCI, _asn_ctx),
+	offsetof(struct ServingCell_PCI, present),
+	sizeof(((struct ServingCell_PCI *)0)->present),
+	asn_MAP_ServingCell_PCI_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_ServingCell_PCI = {
+	"ServingCell-PCI",
+	"ServingCell-PCI",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_ServingCell_PCI_constr_1, &asn_PER_type_ServingCell_PCI_constr_1, CHOICE_constraint },
+	asn_MBR_ServingCell_PCI_1,
+	2,	/* Elements count */
+	&asn_SPC_ServingCell_PCI_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/ServingCellMeasurements.c b/e2sm/lib/ServingCellMeasurements.c
deleted file mode 100644
index 8ff6d3b..0000000
--- a/e2sm/lib/ServingCellMeasurements.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "ServingCellMeasurements.h"
-
-#include "MeasResultServMOList.h"
-#include "MeasResultPCell.h"
-static asn_oer_constraints_t asn_OER_type_ServingCellMeasurements_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	-1};
-asn_per_constraints_t asn_PER_type_ServingCellMeasurements_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_ServingCellMeasurements_1[] = {
-	{ ATF_POINTER, 0, offsetof(struct ServingCellMeasurements, choice.nr_measResultServingMOList),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultServMOList,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"nr-measResultServingMOList"
-		},
-	{ ATF_POINTER, 0, offsetof(struct ServingCellMeasurements, choice.eutra_measResultPCell),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_MeasResultPCell,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"eutra-measResultPCell"
-		},
-};
-static const asn_TYPE_tag2member_t asn_MAP_ServingCellMeasurements_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nr-measResultServingMOList */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eutra-measResultPCell */
-};
-asn_CHOICE_specifics_t asn_SPC_ServingCellMeasurements_specs_1 = {
-	sizeof(struct ServingCellMeasurements),
-	offsetof(struct ServingCellMeasurements, _asn_ctx),
-	offsetof(struct ServingCellMeasurements, present),
-	sizeof(((struct ServingCellMeasurements *)0)->present),
-	asn_MAP_ServingCellMeasurements_tag2el_1,
-	2,	/* Count of tags in the map */
-	0, 0,
-	2	/* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_ServingCellMeasurements = {
-	"ServingCellMeasurements",
-	"ServingCellMeasurements",
-	&asn_OP_CHOICE,
-	0,	/* No effective tags (pointer) */
-	0,	/* No effective tags (count) */
-	0,	/* No tags (pointer) */
-	0,	/* No tags (count) */
-	{ &asn_OER_type_ServingCellMeasurements_constr_1, &asn_PER_type_ServingCellMeasurements_constr_1, CHOICE_constraint },
-	asn_MBR_ServingCellMeasurements_1,
-	2,	/* Elements count */
-	&asn_SPC_ServingCellMeasurements_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/SlicePerPlmnPerCellListItem.c b/e2sm/lib/SlicePerPlmnPerCellListItem.c
deleted file mode 100644
index 021489f..0000000
--- a/e2sm/lib/SlicePerPlmnPerCellListItem.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "SlicePerPlmnPerCellListItem.h"
-
-#include "FQIPERSlicesPerPlmnPerCellListItem.h"
-static int
-memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 64)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_FQIPERSlicesPerPlmnPerCellListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = {
-	sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList),
-	offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = {
-	"fQIPERSlicesPerPlmnPerCellList",
-	"fQIPERSlicesPerPlmnPerCellList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3,
-	sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3)
-		/sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */
-	asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3,	/* Same as above */
-	sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3)
-		/sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */
-	{ &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_fQIPERSlicesPerPlmnPerCellList_3,
-	1,	/* Single element */
-	&asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_S_NSSAI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"sliceID"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_fQIPERSlicesPerPlmnPerCellList_3,
-		0,
-		{ &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3,  memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 },
-		0, 0, /* No default value */
-		"fQIPERSlicesPerPlmnPerCellList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = {
-	sizeof(struct SlicePerPlmnPerCellListItem),
-	offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx),
-	asn_MAP_SlicePerPlmnPerCellListItem_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_SlicePerPlmnPerCellListItem = {
-	"SlicePerPlmnPerCellListItem",
-	"SlicePerPlmnPerCellListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_SlicePerPlmnPerCellListItem_tags_1,
-	sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */
-	asn_DEF_SlicePerPlmnPerCellListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1)
-		/sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_SlicePerPlmnPerCellListItem_1,
-	2,	/* Elements count */
-	&asn_SPC_SlicePerPlmnPerCellListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/SliceToReportListItem.c b/e2sm/lib/SliceToReportListItem.c
deleted file mode 100644
index b466fc3..0000000
--- a/e2sm/lib/SliceToReportListItem.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "SliceToReportListItem.h"
-
-#include "FQIPERSlicesPerPlmnListItem.h"
-static int
-memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size >= 1 && size <= 64)) {
-		/* Perform validation of the inner elements */
-		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = {
-	{ 0, 0 },
-	-1	/* (SIZE(1..64)) */};
-static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 6,  6,  1,  64 }	/* (SIZE(1..64)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = {
-	{ ATF_POINTER, 0, 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		&asn_DEF_FQIPERSlicesPerPlmnListItem,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = {
-	sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList),
-	offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = {
-	"fQIPERSlicesPerPlmnList",
-	"fQIPERSlicesPerPlmnList",
-	&asn_OP_SEQUENCE_OF,
-	asn_DEF_fQIPERSlicesPerPlmnList_tags_3,
-	sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3)
-		/sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */
-	asn_DEF_fQIPERSlicesPerPlmnList_tags_3,	/* Same as above */
-	sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3)
-		/sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */
-	{ &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint },
-	asn_MBR_fQIPERSlicesPerPlmnList_3,
-	1,	/* Single element */
-	&asn_SPC_fQIPERSlicesPerPlmnList_specs_3	/* Additional specs */
-};
-
-asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_S_NSSAI,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"sliceID"
-		},
-	{ ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList),
-		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
-		0,
-		&asn_DEF_fQIPERSlicesPerPlmnList_3,
-		0,
-		{ &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3,  memb_fQIPERSlicesPerPlmnList_constraint_1 },
-		0, 0, /* No default value */
-		"fQIPERSlicesPerPlmnList"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */
-};
-asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = {
-	sizeof(struct SliceToReportListItem),
-	offsetof(struct SliceToReportListItem, _asn_ctx),
-	asn_MAP_SliceToReportListItem_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_SliceToReportListItem = {
-	"SliceToReportListItem",
-	"SliceToReportListItem",
-	&asn_OP_SEQUENCE,
-	asn_DEF_SliceToReportListItem_tags_1,
-	sizeof(asn_DEF_SliceToReportListItem_tags_1)
-		/sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */
-	asn_DEF_SliceToReportListItem_tags_1,	/* Same as above */
-	sizeof(asn_DEF_SliceToReportListItem_tags_1)
-		/sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_SliceToReportListItem_1,
-	2,	/* Elements count */
-	&asn_SPC_SliceToReportListItem_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/SubscriberProfileIDforRFP.c b/e2sm/lib/SubscriberProfileIDforRFP.c
new file mode 100644
index 0000000..ab0182d
--- /dev/null
+++ b/e2sm/lib/SubscriberProfileIDforRFP.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "SubscriberProfileIDforRFP.h"
+
+int
+SubscriberProfileIDforRFP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_oer_constraints_t asn_OER_type_SubscriberProfileIDforRFP_constr_1 CC_NOTUSED = {
+	{ 2, 1 }	/* (1..256) */,
+	-1};
+static asn_per_constraints_t asn_PER_type_SubscriberProfileIDforRFP_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (1..256) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_SubscriberProfileIDforRFP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SubscriberProfileIDforRFP = {
+	"SubscriberProfileIDforRFP",
+	"SubscriberProfileIDforRFP",
+	&asn_OP_NativeInteger,
+	asn_DEF_SubscriberProfileIDforRFP_tags_1,
+	sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1)
+		/sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */
+	asn_DEF_SubscriberProfileIDforRFP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1)
+		/sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */
+	{ &asn_OER_type_SubscriberProfileIDforRFP_constr_1, &asn_PER_type_SubscriberProfileIDforRFP_constr_1, SubscriberProfileIDforRFP_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/e2sm/lib/SupportedSULBandList.c b/e2sm/lib/SupportedSULBandList.c
new file mode 100644
index 0000000..7e74326
--- /dev/null
+++ b/e2sm/lib/SupportedSULBandList.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "SupportedSULBandList.h"
+
+#include "SupportedSULFreqBandItem.h"
+static asn_oer_constraints_t asn_OER_type_SupportedSULBandList_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(0..32)) */};
+asn_per_constraints_t asn_PER_type_SupportedSULBandList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  0,  32 }	/* (SIZE(0..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_SupportedSULBandList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_SupportedSULFreqBandItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_SupportedSULBandList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SupportedSULBandList_specs_1 = {
+	sizeof(struct SupportedSULBandList),
+	offsetof(struct SupportedSULBandList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_SupportedSULBandList = {
+	"SupportedSULBandList",
+	"SupportedSULBandList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_SupportedSULBandList_tags_1,
+	sizeof(asn_DEF_SupportedSULBandList_tags_1)
+		/sizeof(asn_DEF_SupportedSULBandList_tags_1[0]), /* 1 */
+	asn_DEF_SupportedSULBandList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SupportedSULBandList_tags_1)
+		/sizeof(asn_DEF_SupportedSULBandList_tags_1[0]), /* 1 */
+	{ &asn_OER_type_SupportedSULBandList_constr_1, &asn_PER_type_SupportedSULBandList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_SupportedSULBandList_1,
+	1,	/* Single element */
+	&asn_SPC_SupportedSULBandList_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/SupportedSULFreqBandItem.c b/e2sm/lib/SupportedSULFreqBandItem.c
new file mode 100644
index 0000000..ea7192f
--- /dev/null
+++ b/e2sm/lib/SupportedSULFreqBandItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "SupportedSULFreqBandItem.h"
+
+static int
+memb_freqBandIndicatorNr_constraint_1(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 >= 1 && value <= 1024)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1024 }	/* (1..1024,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem, freqBandIndicatorNr),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_freqBandIndicatorNr_constr_2, &asn_PER_memb_freqBandIndicatorNr_constr_2,  memb_freqBandIndicatorNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandIndicatorNr"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_SupportedSULFreqBandItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SupportedSULFreqBandItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* freqBandIndicatorNr */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_specs_1 = {
+	sizeof(struct SupportedSULFreqBandItem),
+	offsetof(struct SupportedSULFreqBandItem, _asn_ctx),
+	asn_MAP_SupportedSULFreqBandItem_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_SupportedSULFreqBandItem = {
+	"SupportedSULFreqBandItem",
+	"SupportedSULFreqBandItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_SupportedSULFreqBandItem_tags_1,
+	sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1)
+		/sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */
+	asn_DEF_SupportedSULFreqBandItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1)
+		/sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_SupportedSULFreqBandItem_1,
+	1,	/* Elements count */
+	&asn_SPC_SupportedSULFreqBandItem_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TimeStamp.c b/e2sm/lib/TimeStamp.c
deleted file mode 100644
index 6d6fd9c..0000000
--- a/e2sm/lib/TimeStamp.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "TimeStamp.h"
-
-int
-TimeStamp_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	const OCTET_STRING_t *st = (const OCTET_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;
-	}
-	
-	size = st->size;
-	
-	if((size == 8)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-/*
- * This type is implemented using OCTET_STRING,
- * so here we adjust the DEF accordingly.
- */
-static asn_oer_constraints_t asn_OER_type_TimeStamp_constr_1 CC_NOTUSED = {
-	{ 0, 0 },
-	8	/* (SIZE(8..8)) */};
-asn_per_constraints_t asn_PER_type_TimeStamp_constr_1 CC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
-	0, 0	/* No PER value map */
-};
-static const ber_tlv_tag_t asn_DEF_TimeStamp_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_TimeStamp = {
-	"TimeStamp",
-	"TimeStamp",
-	&asn_OP_OCTET_STRING,
-	asn_DEF_TimeStamp_tags_1,
-	sizeof(asn_DEF_TimeStamp_tags_1)
-		/sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */
-	asn_DEF_TimeStamp_tags_1,	/* Same as above */
-	sizeof(asn_DEF_TimeStamp_tags_1)
-		/sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */
-	{ &asn_OER_type_TimeStamp_constr_1, &asn_PER_type_TimeStamp_constr_1, TimeStamp_constraint },
-	0, 0,	/* No members */
-	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
-};
-
diff --git a/e2sm/lib/Trigger-ConditionIE-Item.c b/e2sm/lib/Trigger-ConditionIE-Item.c
deleted file mode 100644
index dd0e6f4..0000000
--- a/e2sm/lib/Trigger-ConditionIE-Item.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "Trigger-ConditionIE-Item.h"
-
-asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		&asn_DEF_RT_Period_IE,
-		0,
-		{ 0, 0, 0 },
-		0, 0, /* No default value */
-		"report-Period-IE"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */
-};
-asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = {
-	sizeof(struct Trigger_ConditionIE_Item),
-	offsetof(struct Trigger_ConditionIE_Item, _asn_ctx),
-	asn_MAP_Trigger_ConditionIE_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_Trigger_ConditionIE_Item = {
-	"Trigger-ConditionIE-Item",
-	"Trigger-ConditionIE-Item",
-	&asn_OP_SEQUENCE,
-	asn_DEF_Trigger_ConditionIE_Item_tags_1,
-	sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1)
-		/sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */
-	asn_DEF_Trigger_ConditionIE_Item_tags_1,	/* Same as above */
-	sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1)
-		/sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */
-	{ 0, 0, SEQUENCE_constraint },
-	asn_MBR_Trigger_ConditionIE_Item_1,
-	1,	/* Elements count */
-	&asn_SPC_Trigger_ConditionIE_Item_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/TriggerType-Choice-L2state.c b/e2sm/lib/TriggerType-Choice-L2state.c
new file mode 100644
index 0000000..bfb7433
--- /dev/null
+++ b/e2sm/lib/TriggerType-Choice-L2state.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TriggerType-Choice-L2state.h"
+
+asn_TYPE_member_t asn_MBR_TriggerType_Choice_L2state_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct TriggerType_Choice_L2state, associatedL2variables),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Testing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"associatedL2variables"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_TriggerType_Choice_L2state_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TriggerType_Choice_L2state_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* associatedL2variables */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TriggerType_Choice_L2state_specs_1 = {
+	sizeof(struct TriggerType_Choice_L2state),
+	offsetof(struct TriggerType_Choice_L2state, _asn_ctx),
+	asn_MAP_TriggerType_Choice_L2state_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_TriggerType_Choice_L2state = {
+	"TriggerType-Choice-L2state",
+	"TriggerType-Choice-L2state",
+	&asn_OP_SEQUENCE,
+	asn_DEF_TriggerType_Choice_L2state_tags_1,
+	sizeof(asn_DEF_TriggerType_Choice_L2state_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_L2state_tags_1[0]), /* 1 */
+	asn_DEF_TriggerType_Choice_L2state_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TriggerType_Choice_L2state_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_L2state_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_TriggerType_Choice_L2state_1,
+	1,	/* Elements count */
+	&asn_SPC_TriggerType_Choice_L2state_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TriggerType-Choice-RRCstate-Item.c b/e2sm/lib/TriggerType-Choice-RRCstate-Item.c
new file mode 100644
index 0000000..5d95e41
--- /dev/null
+++ b/e2sm/lib/TriggerType-Choice-RRCstate-Item.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TriggerType-Choice-RRCstate-Item.h"
+
+asn_TYPE_member_t asn_MBR_TriggerType_Choice_RRCstate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct TriggerType_Choice_RRCstate_Item, stateChangedTo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RRC_State,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"stateChangedTo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct TriggerType_Choice_RRCstate_Item, logicalOR),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_LogicalOR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"logicalOR"
+		},
+};
+static const int asn_MAP_TriggerType_Choice_RRCstate_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TriggerType_Choice_RRCstate_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* stateChangedTo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* logicalOR */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TriggerType_Choice_RRCstate_Item_specs_1 = {
+	sizeof(struct TriggerType_Choice_RRCstate_Item),
+	offsetof(struct TriggerType_Choice_RRCstate_Item, _asn_ctx),
+	asn_MAP_TriggerType_Choice_RRCstate_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_TriggerType_Choice_RRCstate_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_TriggerType_Choice_RRCstate_Item = {
+	"TriggerType-Choice-RRCstate-Item",
+	"TriggerType-Choice-RRCstate-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1,
+	sizeof(asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1[0]), /* 1 */
+	asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_RRCstate_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_TriggerType_Choice_RRCstate_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_TriggerType_Choice_RRCstate_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TriggerType-Choice-RRCstate.c b/e2sm/lib/TriggerType-Choice-RRCstate.c
new file mode 100644
index 0000000..b62aef3
--- /dev/null
+++ b/e2sm/lib/TriggerType-Choice-RRCstate.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TriggerType-Choice-RRCstate.h"
+
+#include "TriggerType-Choice-RRCstate-Item.h"
+static int
+memb_rrcState_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 8)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_type_rrcState_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..8)) */};
+static asn_per_constraints_t asn_PER_type_rrcState_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+static asn_oer_constraints_t asn_OER_memb_rrcState_List_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..8)) */};
+static asn_per_constraints_t asn_PER_memb_rrcState_List_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_rrcState_List_2[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_TriggerType_Choice_RRCstate_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_rrcState_List_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_rrcState_List_specs_2 = {
+	sizeof(struct TriggerType_Choice_RRCstate__rrcState_List),
+	offsetof(struct TriggerType_Choice_RRCstate__rrcState_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_rrcState_List_2 = {
+	"rrcState-List",
+	"rrcState-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_rrcState_List_tags_2,
+	sizeof(asn_DEF_rrcState_List_tags_2)
+		/sizeof(asn_DEF_rrcState_List_tags_2[0]) - 1, /* 1 */
+	asn_DEF_rrcState_List_tags_2,	/* Same as above */
+	sizeof(asn_DEF_rrcState_List_tags_2)
+		/sizeof(asn_DEF_rrcState_List_tags_2[0]), /* 2 */
+	{ &asn_OER_type_rrcState_List_constr_2, &asn_PER_type_rrcState_List_constr_2, SEQUENCE_OF_constraint },
+	asn_MBR_rrcState_List_2,
+	1,	/* Single element */
+	&asn_SPC_rrcState_List_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_TriggerType_Choice_RRCstate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct TriggerType_Choice_RRCstate, rrcState_List),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_rrcState_List_2,
+		0,
+		{ &asn_OER_memb_rrcState_List_constr_2, &asn_PER_memb_rrcState_List_constr_2,  memb_rrcState_List_constraint_1 },
+		0, 0, /* No default value */
+		"rrcState-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_TriggerType_Choice_RRCstate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TriggerType_Choice_RRCstate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rrcState-List */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TriggerType_Choice_RRCstate_specs_1 = {
+	sizeof(struct TriggerType_Choice_RRCstate),
+	offsetof(struct TriggerType_Choice_RRCstate, _asn_ctx),
+	asn_MAP_TriggerType_Choice_RRCstate_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_TriggerType_Choice_RRCstate = {
+	"TriggerType-Choice-RRCstate",
+	"TriggerType-Choice-RRCstate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_TriggerType_Choice_RRCstate_tags_1,
+	sizeof(asn_DEF_TriggerType_Choice_RRCstate_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_RRCstate_tags_1[0]), /* 1 */
+	asn_DEF_TriggerType_Choice_RRCstate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TriggerType_Choice_RRCstate_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_RRCstate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_TriggerType_Choice_RRCstate_1,
+	1,	/* Elements count */
+	&asn_SPC_TriggerType_Choice_RRCstate_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TriggerType-Choice-UEID.c b/e2sm/lib/TriggerType-Choice-UEID.c
new file mode 100644
index 0000000..26967e1
--- /dev/null
+++ b/e2sm/lib/TriggerType-Choice-UEID.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TriggerType-Choice-UEID.h"
+
+static int
+memb_ueIDchange_ID_constraint_1(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 >= 1 && value <= 512)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_oer_constraints_t asn_OER_memb_ueIDchange_ID_constr_2 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+static asn_per_constraints_t asn_PER_memb_ueIDchange_ID_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  1,  512 }	/* (1..512,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_TriggerType_Choice_UEID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct TriggerType_Choice_UEID, ueIDchange_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ &asn_OER_memb_ueIDchange_ID_constr_2, &asn_PER_memb_ueIDchange_ID_constr_2,  memb_ueIDchange_ID_constraint_1 },
+		0, 0, /* No default value */
+		"ueIDchange-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_TriggerType_Choice_UEID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TriggerType_Choice_UEID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueIDchange-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TriggerType_Choice_UEID_specs_1 = {
+	sizeof(struct TriggerType_Choice_UEID),
+	offsetof(struct TriggerType_Choice_UEID, _asn_ctx),
+	asn_MAP_TriggerType_Choice_UEID_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_TriggerType_Choice_UEID = {
+	"TriggerType-Choice-UEID",
+	"TriggerType-Choice-UEID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_TriggerType_Choice_UEID_tags_1,
+	sizeof(asn_DEF_TriggerType_Choice_UEID_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_UEID_tags_1[0]), /* 1 */
+	asn_DEF_TriggerType_Choice_UEID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_TriggerType_Choice_UEID_tags_1)
+		/sizeof(asn_DEF_TriggerType_Choice_UEID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_TriggerType_Choice_UEID_1,
+	1,	/* Elements count */
+	&asn_SPC_TriggerType_Choice_UEID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TriggerType-Choice.c b/e2sm/lib/TriggerType-Choice.c
new file mode 100644
index 0000000..230194b
--- /dev/null
+++ b/e2sm/lib/TriggerType-Choice.c
@@ -0,0 +1,78 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "TriggerType-Choice.h"
+
+#include "TriggerType-Choice-RRCstate.h"
+#include "TriggerType-Choice-UEID.h"
+#include "TriggerType-Choice-L2state.h"
+static asn_oer_constraints_t asn_OER_type_TriggerType_Choice_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_TriggerType_Choice_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 */
+};
+asn_TYPE_member_t asn_MBR_TriggerType_Choice_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct TriggerType_Choice, choice.triggerType_Choice_RRCstate),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TriggerType_Choice_RRCstate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggerType-Choice-RRCstate"
+		},
+	{ ATF_POINTER, 0, offsetof(struct TriggerType_Choice, choice.triggerType_Choice_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TriggerType_Choice_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggerType-Choice-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct TriggerType_Choice, choice.triggerType_Choice_L2state),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_TriggerType_Choice_L2state,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggerType-Choice-L2state"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_TriggerType_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* triggerType-Choice-RRCstate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggerType-Choice-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* triggerType-Choice-L2state */
+};
+asn_CHOICE_specifics_t asn_SPC_TriggerType_Choice_specs_1 = {
+	sizeof(struct TriggerType_Choice),
+	offsetof(struct TriggerType_Choice, _asn_ctx),
+	offsetof(struct TriggerType_Choice, present),
+	sizeof(((struct TriggerType_Choice *)0)->present),
+	asn_MAP_TriggerType_Choice_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_TriggerType_Choice = {
+	"TriggerType-Choice",
+	"TriggerType-Choice",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_TriggerType_Choice_constr_1, &asn_PER_type_TriggerType_Choice_constr_1, CHOICE_constraint },
+	asn_MBR_TriggerType_Choice_1,
+	3,	/* Elements count */
+	&asn_SPC_TriggerType_Choice_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/TriggeringMessage.c b/e2sm/lib/TriggeringMessage.c
deleted file mode 100644
index 4af15f3..0000000
--- a/e2sm/lib/TriggeringMessage.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "TriggeringMessage.h"
-
-/*
- * 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};
-static 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 },
-	0, 0	/* No PER value map */
-};
-static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = {
-	{ 0,	18,	"initiating-message" },
-	{ 1,	18,	"successful-outcome" },
-	{ 2,	21,	"unsuccessfull-outcome" }
-};
-static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = {
-	0,	/* initiating-message(0) */
-	1,	/* successful-outcome(1) */
-	2	/* unsuccessfull-outcome(2) */
-};
-static const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = {
-	asn_MAP_TriggeringMessage_value2enum_1,	/* "tag" => N; sorted by tag */
-	asn_MAP_TriggeringMessage_enum2value_1,	/* N => "tag"; sorted by N */
-	3,	/* Number of elements in the maps */
-	0,	/* Enumeration is not extensible */
-	1,	/* Strict enumeration */
-	0,	/* Native long size */
-	0
-};
-static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = {
-	"TriggeringMessage",
-	"TriggeringMessage",
-	&asn_OP_NativeEnumerated,
-	asn_DEF_TriggeringMessage_tags_1,
-	sizeof(asn_DEF_TriggeringMessage_tags_1)
-		/sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */
-	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, 0,	/* Defined elsewhere */
-	&asn_SPC_TriggeringMessage_specs_1	/* Additional specs */
-};
-
diff --git a/e2sm/lib/UE-Identity.c b/e2sm/lib/UE-Identity.c
deleted file mode 100644
index f0c1410..0000000
--- a/e2sm/lib/UE-Identity.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- * From ASN.1 module "E2SM-KPM-RC"
- * 	found in "e2sm-kpm-rc.asn"
- * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
- */
-
-#include "UE-Identity.h"
-
-/*
- * This type is implemented using OCTET_STRING,
- * so here we adjust the DEF accordingly.
- */
-static const ber_tlv_tag_t asn_DEF_UE_Identity_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_UE_Identity = {
-	"UE-Identity",
-	"UE-Identity",
-	&asn_OP_OCTET_STRING,
-	asn_DEF_UE_Identity_tags_1,
-	sizeof(asn_DEF_UE_Identity_tags_1)
-		/sizeof(asn_DEF_UE_Identity_tags_1[0]), /* 1 */
-	asn_DEF_UE_Identity_tags_1,	/* Same as above */
-	sizeof(asn_DEF_UE_Identity_tags_1)
-		/sizeof(asn_DEF_UE_Identity_tags_1[0]), /* 1 */
-	{ 0, 0, OCTET_STRING_constraint },
-	0, 0,	/* No members */
-	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
-};
-
diff --git a/e2sm/lib/UEID-EN-GNB.c b/e2sm/lib/UEID-EN-GNB.c
new file mode 100644
index 0000000..e5da432
--- /dev/null
+++ b/e2sm/lib/UEID-EN-GNB.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-EN-GNB.h"
+
+#include "UEID-GNB-CU-CP-E1AP-ID-List.h"
+asn_TYPE_member_t asn_MBR_UEID_EN_GNB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_EN_GNB, m_eNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ENB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-eNB-UE-X2AP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_EN_GNB, m_eNB_UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ENB_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-eNB-UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_EN_GNB, globalENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalENB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct UEID_EN_GNB, gNB_CU_UE_F1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UE_F1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UE-F1AP-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct UEID_EN_GNB, gNB_CU_CP_UE_E1AP_ID_List),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-CP-UE-E1AP-ID-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_EN_GNB, ran_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANUEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ran-UEID"
+		},
+};
+static const int asn_MAP_UEID_EN_GNB_oms_1[] = { 1, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_UEID_EN_GNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_EN_GNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m-eNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m-eNB-UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* globalENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* gNB-CU-UE-F1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID-List */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ran-UEID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_EN_GNB_specs_1 = {
+	sizeof(struct UEID_EN_GNB),
+	offsetof(struct UEID_EN_GNB, _asn_ctx),
+	asn_MAP_UEID_EN_GNB_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_UEID_EN_GNB_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_EN_GNB = {
+	"UEID-EN-GNB",
+	"UEID-EN-GNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_EN_GNB_tags_1,
+	sizeof(asn_DEF_UEID_EN_GNB_tags_1)
+		/sizeof(asn_DEF_UEID_EN_GNB_tags_1[0]), /* 1 */
+	asn_DEF_UEID_EN_GNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_EN_GNB_tags_1)
+		/sizeof(asn_DEF_UEID_EN_GNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_EN_GNB_1,
+	6,	/* Elements count */
+	&asn_SPC_UEID_EN_GNB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-ENB.c b/e2sm/lib/UEID-ENB.c
new file mode 100644
index 0000000..bdf2af8
--- /dev/null
+++ b/e2sm/lib/UEID-ENB.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-ENB.h"
+
+#include "GlobalENB-ID.h"
+asn_TYPE_member_t asn_MBR_UEID_ENB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_ENB, mME_UE_S1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_MME_UE_S1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-UE-S1AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_ENB, gUMMEI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUMMEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gUMMEI"
+		},
+	{ ATF_POINTER, 3, offsetof(struct UEID_ENB, m_eNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ENB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-eNB-UE-X2AP-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct UEID_ENB, m_eNB_UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_ENB_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-eNB-UE-X2AP-ID-Extension"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_ENB, globalENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalENB-ID"
+		},
+};
+static const int asn_MAP_UEID_ENB_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_UEID_ENB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_ENB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gUMMEI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* m-eNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m-eNB-UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* globalENB-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_ENB_specs_1 = {
+	sizeof(struct UEID_ENB),
+	offsetof(struct UEID_ENB, _asn_ctx),
+	asn_MAP_UEID_ENB_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_UEID_ENB_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_ENB = {
+	"UEID-ENB",
+	"UEID-ENB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_ENB_tags_1,
+	sizeof(asn_DEF_UEID_ENB_tags_1)
+		/sizeof(asn_DEF_UEID_ENB_tags_1[0]), /* 1 */
+	asn_DEF_UEID_ENB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_ENB_tags_1)
+		/sizeof(asn_DEF_UEID_ENB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_ENB_1,
+	5,	/* Elements count */
+	&asn_SPC_UEID_ENB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c
new file mode 100644
index 0000000..893be77
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-CU-CP-E1AP-ID-Item.h"
+
+asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_CP_E1AP_ID_Item, gNB_CU_CP_UE_E1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_CP_UE_E1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-CP-UE-E1AP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_CP_E1AP_ID_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-CP-UE-E1AP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_Item_specs_1 = {
+	sizeof(struct UEID_GNB_CU_CP_E1AP_ID_Item),
+	offsetof(struct UEID_GNB_CU_CP_E1AP_ID_Item, _asn_ctx),
+	asn_MAP_UEID_GNB_CU_CP_E1AP_ID_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_UEID_GNB_CU_CP_E1AP_ID_Item = {
+	"UEID-GNB-CU-CP-E1AP-ID-Item",
+	"UEID-GNB-CU-CP-E1AP-ID-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1,
+	sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_GNB_CU_CP_E1AP_ID_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_UEID_GNB_CU_CP_E1AP_ID_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c
new file mode 100644
index 0000000..d6d6bc2
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-CU-CP-E1AP-ID-List.h"
+
+#include "UEID-GNB-CU-CP-E1AP-ID-Item.h"
+static asn_oer_constraints_t asn_OER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..65535)) */};
+asn_per_constraints_t asn_PER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_List_specs_1 = {
+	sizeof(struct UEID_GNB_CU_CP_E1AP_ID_List),
+	offsetof(struct UEID_GNB_CU_CP_E1AP_ID_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List = {
+	"UEID-GNB-CU-CP-E1AP-ID-List",
+	"UEID-GNB-CU-CP-E1AP-ID-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1,
+	sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1, &asn_PER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_UEID_GNB_CU_CP_E1AP_ID_List_1,
+	1,	/* Single element */
+	&asn_SPC_UEID_GNB_CU_CP_E1AP_ID_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c b/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c
new file mode 100644
index 0000000..0a893b4
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-CU-CP-F1AP-ID-Item.h"
+
+asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_F1AP_ID_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_CP_F1AP_ID_Item, gNB_CU_UE_F1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UE_F1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UE-F1AP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_CP_F1AP_ID_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-UE-F1AP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_F1AP_ID_Item_specs_1 = {
+	sizeof(struct UEID_GNB_CU_CP_F1AP_ID_Item),
+	offsetof(struct UEID_GNB_CU_CP_F1AP_ID_Item, _asn_ctx),
+	asn_MAP_UEID_GNB_CU_CP_F1AP_ID_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_UEID_GNB_CU_CP_F1AP_ID_Item = {
+	"UEID-GNB-CU-CP-F1AP-ID-Item",
+	"UEID-GNB-CU-CP-F1AP-ID-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1,
+	sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_GNB_CU_CP_F1AP_ID_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_UEID_GNB_CU_CP_F1AP_ID_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c b/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c
new file mode 100644
index 0000000..98da296
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-CU-F1AP-ID-List.h"
+
+#include "UEID-GNB-CU-CP-F1AP-ID-Item.h"
+static asn_oer_constraints_t asn_OER_type_UEID_GNB_CU_F1AP_ID_List_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1	/* (SIZE(1..4)) */};
+asn_per_constraints_t asn_PER_type_UEID_GNB_CU_F1AP_ID_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  1,  4 }	/* (SIZE(1..4)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_UEID_GNB_CU_F1AP_ID_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_F1AP_ID_List_specs_1 = {
+	sizeof(struct UEID_GNB_CU_F1AP_ID_List),
+	offsetof(struct UEID_GNB_CU_F1AP_ID_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_F1AP_ID_List = {
+	"UEID-GNB-CU-F1AP-ID-List",
+	"UEID-GNB-CU-F1AP-ID-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1,
+	sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[0]), /* 1 */
+	{ &asn_OER_type_UEID_GNB_CU_F1AP_ID_List_constr_1, &asn_PER_type_UEID_GNB_CU_F1AP_ID_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_UEID_GNB_CU_F1AP_ID_List_1,
+	1,	/* Single element */
+	&asn_SPC_UEID_GNB_CU_F1AP_ID_List_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-CU-UP.c b/e2sm/lib/UEID-GNB-CU-UP.c
new file mode 100644
index 0000000..169b1b5
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-CU-UP.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-CU-UP.h"
+
+asn_TYPE_member_t asn_MBR_UEID_GNB_CU_UP_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_UP, gNB_CU_CP_UE_E1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_CP_UE_E1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-CP-UE-E1AP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_GNB_CU_UP, ran_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANUEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ran-UEID"
+		},
+};
+static const int asn_MAP_UEID_GNB_CU_UP_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_UP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_UP_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ran-UEID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_UP_specs_1 = {
+	sizeof(struct UEID_GNB_CU_UP),
+	offsetof(struct UEID_GNB_CU_UP, _asn_ctx),
+	asn_MAP_UEID_GNB_CU_UP_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_UEID_GNB_CU_UP_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_UP = {
+	"UEID-GNB-CU-UP",
+	"UEID-GNB-CU-UP",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_GNB_CU_UP_tags_1,
+	sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_CU_UP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_GNB_CU_UP_1,
+	2,	/* Elements count */
+	&asn_SPC_UEID_GNB_CU_UP_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB-DU.c b/e2sm/lib/UEID-GNB-DU.c
new file mode 100644
index 0000000..4bc5c7f
--- /dev/null
+++ b/e2sm/lib/UEID-GNB-DU.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB-DU.h"
+
+asn_TYPE_member_t asn_MBR_UEID_GNB_DU_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_DU, gNB_CU_UE_F1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GNB_CU_UE_F1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UE-F1AP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_GNB_DU, ran_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANUEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ran-UEID"
+		},
+};
+static const int asn_MAP_UEID_GNB_DU_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_DU_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_DU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UE-F1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ran-UEID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_DU_specs_1 = {
+	sizeof(struct UEID_GNB_DU),
+	offsetof(struct UEID_GNB_DU, _asn_ctx),
+	asn_MAP_UEID_GNB_DU_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_UEID_GNB_DU_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_GNB_DU = {
+	"UEID-GNB-DU",
+	"UEID-GNB-DU",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_GNB_DU_tags_1,
+	sizeof(asn_DEF_UEID_GNB_DU_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_DU_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_DU_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_DU_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_DU_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_GNB_DU_1,
+	2,	/* Elements count */
+	&asn_SPC_UEID_GNB_DU_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-GNB.c b/e2sm/lib/UEID-GNB.c
new file mode 100644
index 0000000..f529b8b
--- /dev/null
+++ b/e2sm/lib/UEID-GNB.c
@@ -0,0 +1,126 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-GNB.h"
+
+#include "UEID-GNB-CU-F1AP-ID-List.h"
+#include "UEID-GNB-CU-CP-E1AP-ID-List.h"
+#include "GlobalGNB-ID.h"
+#include "GlobalNGRANNodeID.h"
+asn_TYPE_member_t asn_MBR_UEID_GNB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB, amf_UE_NGAP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMF_UE_NGAP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"amf-UE-NGAP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_GNB, guami),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUAMI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"guami"
+		},
+	{ ATF_POINTER, 6, offsetof(struct UEID_GNB, gNB_CU_UE_F1AP_ID_List),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB_CU_F1AP_ID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UE-F1AP-ID-List"
+		},
+	{ ATF_POINTER, 5, offsetof(struct UEID_GNB, gNB_CU_CP_UE_E1AP_ID_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-CP-UE-E1AP-ID-List"
+		},
+	{ ATF_POINTER, 4, offsetof(struct UEID_GNB, ran_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANUEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ran-UEID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct UEID_GNB, m_NG_RAN_UE_XnAP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NG_RANnodeUEXnAPID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-NG-RAN-UE-XnAP-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct UEID_GNB, globalGNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalGNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_GNB, globalNG_RANNode_ID),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_GlobalNGRANNodeID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalNG-RANNode-ID"
+		},
+};
+static const int asn_MAP_UEID_GNB_oms_1[] = { 2, 3, 4, 5, 6, 7 };
+static const ber_tlv_tag_t asn_DEF_UEID_GNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* amf-UE-NGAP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* guami */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gNB-CU-UE-F1AP-ID-List */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID-List */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ran-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* m-NG-RAN-UE-XnAP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* globalGNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* globalNG-RANNode-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_specs_1 = {
+	sizeof(struct UEID_GNB),
+	offsetof(struct UEID_GNB, _asn_ctx),
+	asn_MAP_UEID_GNB_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_UEID_GNB_oms_1,	/* Optional members */
+	5, 1,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_GNB = {
+	"UEID-GNB",
+	"UEID-GNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_GNB_tags_1,
+	sizeof(asn_DEF_UEID_GNB_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_tags_1[0]), /* 1 */
+	asn_DEF_UEID_GNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_GNB_tags_1)
+		/sizeof(asn_DEF_UEID_GNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_GNB_1,
+	8,	/* Elements count */
+	&asn_SPC_UEID_GNB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-NG-ENB-DU.c b/e2sm/lib/UEID-NG-ENB-DU.c
new file mode 100644
index 0000000..bba9b70
--- /dev/null
+++ b/e2sm/lib/UEID-NG-ENB-DU.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-NG-ENB-DU.h"
+
+asn_TYPE_member_t asn_MBR_UEID_NG_ENB_DU_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB_DU, ng_eNB_CU_UE_W1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NGENB_CU_UE_W1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-CU-UE-W1AP-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_UEID_NG_ENB_DU_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_NG_ENB_DU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ng-eNB-CU-UE-W1AP-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_DU_specs_1 = {
+	sizeof(struct UEID_NG_ENB_DU),
+	offsetof(struct UEID_NG_ENB_DU, _asn_ctx),
+	asn_MAP_UEID_NG_ENB_DU_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_UEID_NG_ENB_DU = {
+	"UEID-NG-ENB-DU",
+	"UEID-NG-ENB-DU",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_NG_ENB_DU_tags_1,
+	sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1)
+		/sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1[0]), /* 1 */
+	asn_DEF_UEID_NG_ENB_DU_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1)
+		/sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_NG_ENB_DU_1,
+	1,	/* Elements count */
+	&asn_SPC_UEID_NG_ENB_DU_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID-NG-ENB.c b/e2sm/lib/UEID-NG-ENB.c
new file mode 100644
index 0000000..5681365
--- /dev/null
+++ b/e2sm/lib/UEID-NG-ENB.c
@@ -0,0 +1,104 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID-NG-ENB.h"
+
+#include "GlobalNgENB-ID.h"
+#include "GlobalNGRANNodeID.h"
+asn_TYPE_member_t asn_MBR_UEID_NG_ENB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB, amf_UE_NGAP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_AMF_UE_NGAP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"amf-UE-NGAP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB, guami),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GUAMI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"guami"
+		},
+	{ ATF_POINTER, 4, offsetof(struct UEID_NG_ENB, ng_eNB_CU_UE_W1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NGENB_CU_UE_W1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-CU-UE-W1AP-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct UEID_NG_ENB, m_NG_RAN_UE_XnAP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NG_RANnodeUEXnAPID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m-NG-RAN-UE-XnAP-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct UEID_NG_ENB, globalNgENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_GlobalNgENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalNgENB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEID_NG_ENB, globalNG_RANNode_ID),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_GlobalNGRANNodeID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"globalNG-RANNode-ID"
+		},
+};
+static const int asn_MAP_UEID_NG_ENB_oms_1[] = { 2, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_UEID_NG_ENB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_NG_ENB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* amf-UE-NGAP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* guami */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB-CU-UE-W1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m-NG-RAN-UE-XnAP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* globalNgENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* globalNG-RANNode-ID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_specs_1 = {
+	sizeof(struct UEID_NG_ENB),
+	offsetof(struct UEID_NG_ENB, _asn_ctx),
+	asn_MAP_UEID_NG_ENB_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_UEID_NG_ENB_oms_1,	/* Optional members */
+	3, 1,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID_NG_ENB = {
+	"UEID-NG-ENB",
+	"UEID-NG-ENB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEID_NG_ENB_tags_1,
+	sizeof(asn_DEF_UEID_NG_ENB_tags_1)
+		/sizeof(asn_DEF_UEID_NG_ENB_tags_1[0]), /* 1 */
+	asn_DEF_UEID_NG_ENB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEID_NG_ENB_tags_1)
+		/sizeof(asn_DEF_UEID_NG_ENB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEID_NG_ENB_1,
+	6,	/* Elements count */
+	&asn_SPC_UEID_NG_ENB_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEID.c b/e2sm/lib/UEID.c
new file mode 100644
index 0000000..42c27ab
--- /dev/null
+++ b/e2sm/lib/UEID.c
@@ -0,0 +1,122 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEID.h"
+
+#include "UEID-GNB.h"
+#include "UEID-GNB-DU.h"
+#include "UEID-GNB-CU-UP.h"
+#include "UEID-NG-ENB.h"
+#include "UEID-NG-ENB-DU.h"
+#include "UEID-EN-GNB.h"
+#include "UEID-ENB.h"
+static asn_oer_constraints_t asn_OER_type_UEID_constr_1 CC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+asn_per_constraints_t asn_PER_type_UEID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_UEID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_DU_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB_DU,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-DU-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_CU_UP_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_GNB_CU_UP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-CU-UP-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.ng_eNB_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_NG_ENB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.ng_eNB_DU_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_NG_ENB_DU,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ng-eNB-DU-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.en_gNB_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_EN_GNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-gNB-UEID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct UEID, choice.eNB_UEID),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_UEID_ENB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eNB-UEID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-DU-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gNB-CU-UP-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ng-eNB-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ng-eNB-DU-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* en-gNB-UEID */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* eNB-UEID */
+};
+asn_CHOICE_specifics_t asn_SPC_UEID_specs_1 = {
+	sizeof(struct UEID),
+	offsetof(struct UEID, _asn_ctx),
+	offsetof(struct UEID, present),
+	sizeof(((struct UEID *)0)->present),
+	asn_MAP_UEID_tag2el_1,
+	7,	/* Count of tags in the map */
+	0, 0,
+	7	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_UEID = {
+	"UEID",
+	"UEID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ &asn_OER_type_UEID_constr_1, &asn_PER_type_UEID_constr_1, CHOICE_constraint },
+	asn_MBR_UEID_1,
+	7,	/* Elements count */
+	&asn_SPC_UEID_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/UEIdentification-RANParameter-Item.c b/e2sm/lib/UEIdentification-RANParameter-Item.c
new file mode 100644
index 0000000..7349bbd
--- /dev/null
+++ b/e2sm/lib/UEIdentification-RANParameter-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-RC-IEs"
+ * 	found in "e2sm-rc-nov2021.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
+ */
+
+#include "UEIdentification-RANParameter-Item.h"
+
+#include "RANParameter-Definition.h"
+asn_TYPE_member_t asn_MBR_UEIdentification_RANParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct UEIdentification_RANParameter_Item, ranParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct UEIdentification_RANParameter_Item, ranParameter_name),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Name,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-name"
+		},
+	{ ATF_POINTER, 1, offsetof(struct UEIdentification_RANParameter_Item, ranParameter_Definition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANParameter_Definition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranParameter-Definition"
+		},
+};
+static const int asn_MAP_UEIdentification_RANParameter_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_UEIdentification_RANParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_UEIdentification_RANParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-name */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranParameter-Definition */
+};
+asn_SEQUENCE_specifics_t asn_SPC_UEIdentification_RANParameter_Item_specs_1 = {
+	sizeof(struct UEIdentification_RANParameter_Item),
+	offsetof(struct UEIdentification_RANParameter_Item, _asn_ctx),
+	asn_MAP_UEIdentification_RANParameter_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_UEIdentification_RANParameter_Item_oms_1,	/* Optional members */
+	0, 1,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_UEIdentification_RANParameter_Item = {
+	"UEIdentification-RANParameter-Item",
+	"UEIdentification-RANParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_UEIdentification_RANParameter_Item_tags_1,
+	sizeof(asn_DEF_UEIdentification_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_UEIdentification_RANParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_UEIdentification_RANParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_UEIdentification_RANParameter_Item_tags_1)
+		/sizeof(asn_DEF_UEIdentification_RANParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_UEIdentification_RANParameter_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_UEIdentification_RANParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/e2sm/lib/asn_random_fill.c b/e2sm/lib/asn_random_fill.c
index 2e3e892..819cf70 100644
--- a/e2sm/lib/asn_random_fill.c
+++ b/e2sm/lib/asn_random_fill.c
@@ -48,11 +48,7 @@
 
         for(; got_entropy < range;) {
             got_entropy = (got_entropy << 24) | 0xffffff;
-#ifdef WIN32
-            value = (value << 24) | (rand() % 0xffffff); //MCHECK:for building on Windows
-#else
-            value = (value << 24) | (random() % 0xffffff); //MCHECK:for building on Linux
-#endif
+            value = (value << 24) | (random() % 0xffffff);
         }
 
         return lb + (intmax_t)(value % (range + 1));
diff --git a/e2sm/lib/pdu_collection.c b/e2sm/lib/pdu_collection.c
deleted file mode 100644
index deea97d..0000000
--- a/e2sm/lib/pdu_collection.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
- */
-
-struct asn_TYPE_descriptor_s;	/* Forward declaration */
-
-extern struct asn_TYPE_descriptor_s asn_DEF_Criticality;
-extern struct asn_TYPE_descriptor_s asn_DEF_Presence;
-extern struct asn_TYPE_descriptor_s asn_DEF_ProcedureCode;
-extern struct asn_TYPE_descriptor_s asn_DEF_TriggeringMessage;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_RANFunctionDefinition;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_ActionDefinition;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationHeader;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationMessage;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_RC_RANFunctionDefinition;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_RC_ControlHeader;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_RC_ControlMessage;
-extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_EventTriggerDefinition;
-extern struct asn_TYPE_descriptor_s asn_DEF_RANcallProcess_ID_string;
-
-
-struct asn_TYPE_descriptor_s *asn_pdu_collection[] = {
-	/* From module E2SM-KPM-RC in e2sm-kpm-rc.asn */
-	&asn_DEF_Criticality,	
-	&asn_DEF_Presence,	
-	&asn_DEF_ProcedureCode,	
-	&asn_DEF_TriggeringMessage,	
-	&asn_DEF_E2SM_KPM_RANFunctionDefinition,	
-	&asn_DEF_E2SM_KPM_ActionDefinition,	
-	&asn_DEF_E2SM_KPM_IndicationHeader,	
-	&asn_DEF_E2SM_KPM_IndicationMessage,	
-	&asn_DEF_E2SM_RC_RANFunctionDefinition,	
-	&asn_DEF_E2SM_RC_ControlHeader,	
-	&asn_DEF_E2SM_RC_ControlMessage,	
-	&asn_DEF_E2SM_KPM_EventTriggerDefinition,	
-	&asn_DEF_RANcallProcess_ID_string,	
-	0
-};
-
