diff --git a/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c
new file mode 100644
index 0000000..5bdbe6b
--- /dev/null
+++ b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_MBMSCNDe-RegistrationResponse.h"
+
+static int
+memb_mBMSCNDe_RegistrationResponse_ies_constraint_1(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 <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_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_per_constraints_t asn_PER_type_mBMSCNDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_mBMSCNDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_mBMSCNDe_RegistrationResponse_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_mBMSCNDe_RegistrationResponse_ies_specs_2 = {
+	sizeof(struct mBMSCNDe_RegistrationResponse_ies),
+	offsetof(struct mBMSCNDe_RegistrationResponse_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_mBMSCNDe_RegistrationResponse_ies_2 = {
+	"mBMSCNDe-RegistrationResponse-ies",
+	"mBMSCNDe-RegistrationResponse-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2,
+	sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mBMSCNDe_RegistrationResponse_ies_constr_2,
+	asn_MBR_mBMSCNDe_RegistrationResponse_ies_2,
+	1,	/* Single element */
+	&asn_SPC_mBMSCNDe_RegistrationResponse_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_MBMSCNDe_RegistrationResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSCNDe_RegistrationResponse, mBMSCNDe_RegistrationResponse_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_mBMSCNDe_RegistrationResponse_ies_2,
+		memb_mBMSCNDe_RegistrationResponse_ies_constraint_1,
+		&asn_PER_memb_mBMSCNDe_RegistrationResponse_ies_constr_2,
+		0,
+		"mBMSCNDe-RegistrationResponse-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSCNDe_RegistrationResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSCNDe-RegistrationResponse-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSCNDe_RegistrationResponse_specs_1 = {
+	sizeof(struct RANAP_MBMSCNDe_RegistrationResponse),
+	offsetof(struct RANAP_MBMSCNDe_RegistrationResponse, _asn_ctx),
+	asn_MAP_RANAP_MBMSCNDe_RegistrationResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_MBMSCNDe_RegistrationResponse = {
+	"RANAP_MBMSCNDe-RegistrationResponse",
+	"RANAP_MBMSCNDe-RegistrationResponse",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1,
+	sizeof(asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1)
+		/sizeof(asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1)
+		/sizeof(asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_MBMSCNDe_RegistrationResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_MBMSCNDe_RegistrationResponse_specs_1	/* Additional specs */
+};
+
