/*
 * 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	_EDT_Session_H_
#define	_EDT_Session_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum EDT_Session {
	EDT_Session_true	= 0
	/*
	 * Enumeration is extensible
	 */
} e_EDT_Session;

/* EDT-Session */
typedef long	 EDT_Session_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_EDT_Session_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_EDT_Session;
extern const asn_INTEGER_specifics_t asn_SPC_EDT_Session_specs_1;
asn_struct_free_f EDT_Session_free;
asn_struct_print_f EDT_Session_print;
asn_constr_check_f EDT_Session_constraint;
ber_type_decoder_f EDT_Session_decode_ber;
der_type_encoder_f EDT_Session_encode_der;
xer_type_decoder_f EDT_Session_decode_xer;
xer_type_encoder_f EDT_Session_encode_xer;
oer_type_decoder_f EDT_Session_decode_oer;
oer_type_encoder_f EDT_Session_encode_oer;
per_type_decoder_f EDT_Session_decode_uper;
per_type_encoder_f EDT_Session_encode_uper;
per_type_decoder_f EDT_Session_decode_aper;
per_type_encoder_f EDT_Session_encode_aper;

#ifdef __cplusplus
}
#endif

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