/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "S1AP-IEs"
 * 	found in "./asn1c/S1AP-IEs.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -gen-PER -findirect-choice -pdu=S1AP-PDU`
 */

#ifndef	_MBSFN_ResultToLog_H_
#define	_MBSFN_ResultToLog_H_


#include <asn_application.h>

/* Including external dependencies */
#include <asn_SEQUENCE_OF.h>
#include <constr_SEQUENCE_OF.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct MBSFN_ResultToLogInfo;

/* MBSFN-ResultToLog */
typedef struct MBSFN_ResultToLog {
	A_SEQUENCE_OF(struct MBSFN_ResultToLogInfo) list;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} MBSFN_ResultToLog_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_MBSFN_ResultToLog;
extern asn_SET_OF_specifics_t asn_SPC_MBSFN_ResultToLog_specs_1;
extern asn_TYPE_member_t asn_MBR_MBSFN_ResultToLog_1[1];
extern asn_per_constraints_t asn_PER_type_MBSFN_ResultToLog_constr_1;

#ifdef __cplusplus
}
#endif

#endif	/* _MBSFN_ResultToLog_H_ */
#include <asn_internal.h>
