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


#include <asn_application.h>

/* Including external dependencies */
#include "NB-IoT-Paging-eDRX-Cycle.h"
#include "NB-IoT-PagingTimeWindow.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct ProtocolExtensionContainer;

/* NB-IoT-Paging-eDRXInformation */
typedef struct NB_IoT_Paging_eDRXInformation {
	NB_IoT_Paging_eDRX_Cycle_t	 nB_IoT_paging_eDRX_Cycle;
	NB_IoT_PagingTimeWindow_t	*nB_IoT_pagingTimeWindow;	/* OPTIONAL */
	struct ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} NB_IoT_Paging_eDRXInformation_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_NB_IoT_Paging_eDRXInformation;
extern asn_SEQUENCE_specifics_t asn_SPC_NB_IoT_Paging_eDRXInformation_specs_1;
extern asn_TYPE_member_t asn_MBR_NB_IoT_Paging_eDRXInformation_1[3];

#ifdef __cplusplus
}
#endif

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