/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-IEs"
 * 	found in "../../asn1/ranap/RANAP-IEs.asn"
 */

#include "RANAP_RAListwithNoIdleModeUEsAnyMore.h"

static asn_per_constraints_t asn_PER_type_RANAP_RAListwithNoIdleModeUEsAnyMore_constr_1 GCC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16, -1,  1l,  65536l }	/* (SIZE(1..65536)) */,
	0, 0	/* No PER value map */
};
static asn_TYPE_member_t asn_MBR_RANAP_RAListwithNoIdleModeUEsAnyMore_1[] = {
	{ ATF_POINTER, 0, 0,
		-1 /* Ambiguous tag (CHOICE?) */,
		0,
		&asn_DEF_RANAP_RAC,
		0,	/* Defer constraints checking to the member type */
		0,	/* No PER visible constraints */
		0,
		""
		},
};
static const ber_tlv_tag_t asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn_SET_OF_specifics_t asn_SPC_RANAP_RAListwithNoIdleModeUEsAnyMore_specs_1 = {
	sizeof(struct RANAP_RAListwithNoIdleModeUEsAnyMore),
	offsetof(struct RANAP_RAListwithNoIdleModeUEsAnyMore, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore = {
	"RANAP_RAListwithNoIdleModeUEsAnyMore",
	"RANAP_RAListwithNoIdleModeUEsAnyMore",
	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_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1,
	sizeof(asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1)
		/sizeof(asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1[0]), /* 1 */
	asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1,	/* Same as above */
	sizeof(asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1)
		/sizeof(asn_DEF_RANAP_RAListwithNoIdleModeUEsAnyMore_tags_1[0]), /* 1 */
	&asn_PER_type_RANAP_RAListwithNoIdleModeUEsAnyMore_constr_1,
	asn_MBR_RANAP_RAListwithNoIdleModeUEsAnyMore_1,
	1,	/* Single element */
	&asn_SPC_RANAP_RAListwithNoIdleModeUEsAnyMore_specs_1	/* Additional specs */
};

