-- **************************************************************
--
-- Information Element Definitions
--
-- **************************************************************

RANAP-IEs {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
umts-Access (20) modules (3) ranap (0) version1 (1) ranap-IEs (2) }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

IMPORTS
	maxNrOfCSGs,
	maxNrOfErrors,
	maxNrOfPDPDirections,
	maxNrOfPoints,
	maxNrOfRABs,
	maxNrOfSRBs,
	maxNrOfSeparateTrafficDirections,
	maxRAB-Subflows,
	maxRAB-SubflowCombination,
	maxNrOfLevels,
	maxNrOfAltValues,
	maxNrOfSNAs,
	maxNrOfLAs,
	maxNrOfPLMNsSN,
	maxSet,
	maxNrOfHSDSCHMACdFlows-1,
	maxNrOfUEsToBeTraced,
	maxNrOfInterfaces,
	maxnoofMulticastServicesPerRNC,
	maxMBMSSA,
	maxMBMSRA,
	maxnoofMulticastServicesPerUE,
	maxNrOfEDCHMACdFlows-1,
	maxGANSSSet,
	maxNrOfEUTRAFreqs,
	maxNrOfCellIds,
	maxNrOfRAIs,
	maxNrOfLAIs,
	maxNrOfVol,
	maxSizeOfIMSInfo,
	maxnoofMDTPLMNs,
	maxProtocolExtensions,

	id-CN-DomainIndicator,
	id-MessageStructure,
	id-SRB-TrCH-Mapping,
	id-TypeOfError,
	id-hS-DSCH-MAC-d-Flow-ID,
	id-SignallingIndication,
	id-CellLoadInformationGroup,
	id-TraceRecordingSessionInformation,
	id-MBMSLinkingInformation,
	id-AlternativeRABConfiguration,
	id-AlternativeRABConfigurationRequest,
	id-E-DCH-MAC-d-Flow-ID,
	id-RAC,
	id-Alt-RAB-Parameter-ExtendedGuaranteedBitrateInf,
	id-Alt-RAB-Parameter-ExtendedMaxBitrateInf,
	id-Ass-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-Ass-RAB-Parameter-ExtendedMaxBitrateList,
	id-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-RAB-Parameter-ExtendedMaxBitrateList,
	id-Requested-RAB-Parameter-ExtendedMaxBitrateList,
	id-Requested-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-LAofIdleModeUEs,
	id-newLAListofIdleModeUEs,
	id-LAListwithNoIdleModeUEsAnyMore,
	id-ExtendedRNC-ID,
	id-GANSS-PositioningDataSet,
	id-d-RNTI-for-NoIuCSUP,
	id-UE-History-Information,
	id-SubscriberProfileIDforRFP,
	id-Alt-RAB-Parameter-SupportedGuaranteedBitrateInf,
	id-Alt-RAB-Parameter-SupportedMaxBitrateInf,
	id-Ass-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-Ass-RAB-Parameter-SupportedMaxBitrateList,
	id-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-RAB-Parameter-SupportedMaxBitrateList,
	id-Requested-RAB-Parameter-SupportedMaxBitrateList,
	id-Requested-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-PSRABtobeReplaced,
	id-SRVCC-Information,
	id-CSG-Id,
	id-CSFB-Information,
	id-IRAT-Measurement-Configuration,
	id-Management-Based-MDT-Allowed,
	id-Time-UE-StayedInCell-EnhancedGranularity,
	id-HO-Cause,
	id-TraceRecordingSessionReference,
	id-IMSI,
	id-Management-Based-MDT-PLMN-List,
	id-SignallingBasedMDTPLMNList,
	id-M4Report,
	id-M5Report,
	id-M6Report,
	id-M7Report,
	id-TimingDifferenceULDL,
	id-Trace-Collection-Entity-IP-Addess,
	id-Serving-Cell-Identifier,
	id-EARFCN-Extended,
	id-LastE-UTRANPLMNIdentity,
	id-RSRQ-Type,
	id-RSRQ-Extension


FROM RANAP-Constants

	Criticality,
	ProcedureCode,
	ProtocolIE-ID,
	TriggeringMessage
FROM RANAP-CommonDataTypes

	IE
FROM RANAP-PDU;

IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE

-- A

AccuracyFulfilmentIndicator ::= ENUMERATED{
	requested-Accuracy-Fulfilled,
	requested-Accuracy-Not-Fulfilled,
	...
}

AllocationOrRetentionPriority ::= SEQUENCE {
	priorityLevel			PriorityLevel,
	pre-emptionCapability		Pre-emptionCapability,
	pre-emptionVulnerability	Pre-emptionVulnerability,
	queuingAllowed			QueuingAllowed,
	iE-Extensions			IE-Extensions		 OPTIONAL,
	...
}

Alt-RAB-Parameters ::= SEQUENCE {
	altMaxBitrateInf		Alt-RAB-Parameter-MaxBitrateInf 				OPTIONAL,
	altGuaranteedBitRateInf		Alt-RAB-Parameter-GuaranteedBitrateInf 				OPTIONAL,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Alt-RAB-Parameter-ExtendedGuaranteedBitrateInf ::= SEQUENCE {
	altExtendedGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altExtendedGuaranteedBitrates		Alt-RAB-Parameter-ExtendedGuaranteedBitrates	OPTIONAL
	-- This IE shall be present if the Type of Extended Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-ExtendedGuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-ExtendedGuaranteedBitrateList

Alt-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Alt-RAB-Parameter-GuaranteedBitrateInf ::= SEQUENCE {
	altGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altGuaranteedBitrates		Alt-RAB-Parameter-GuaranteedBitrates			OPTIONAL
	-- This IE shall be present if the Type of Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-GuaranteedBitrateType ::= ENUMERATED{
	unspecified,
	value-range,
	discrete-values,
	...
}

Alt-RAB-Parameter-GuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-GuaranteedBitrateList


Alt-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate

Alt-RAB-Parameter-SupportedGuaranteedBitrateInf ::= SEQUENCE {
	altSupportedGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altSupportedGuaranteedBitrates		Alt-RAB-Parameter-SupportedGuaranteedBitrates	OPTIONAL
	-- This IE shall be present if the Type of Supported Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Alt-RAB-Parameter-SupportedGuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	SupportedRAB-ParameterBitrateList


Alt-RAB-Parameter-ExtendedMaxBitrateInf ::= SEQUENCE {
	altExtendedMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altExtendedMaxBitrates		Alt-RAB-Parameter-ExtendedMaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Extended Alternative Maximum Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-ExtendedMaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-ExtendedMaxBitrateList

Alt-RAB-Parameter-ExtendedMaxBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate

Alt-RAB-Parameter-MaxBitrateInf ::= SEQUENCE {
	altMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altMaxBitrates		Alt-RAB-Parameter-MaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Alternative Maximun Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-MaxBitrateType ::= ENUMERATED{
	unspecified,
	value-range,
	discrete-values,
	...
}

Alt-RAB-Parameter-MaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-MaxBitrateList


Alt-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate


Alt-RAB-Parameter-SupportedMaxBitrateInf ::= SEQUENCE {
	altSupportedMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altSupportedMaxBitrates		Alt-RAB-Parameter-SupportedMaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Supported Alternative Maximun Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
...
}


Alt-RAB-Parameter-SupportedMaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	SupportedRAB-ParameterBitrateList

AlternativeRABConfigurationRequest ::= ENUMERATED{
	alternative-RAB-configuration-Requested,
	...
}

APN	::= OCTET STRING (SIZE (1..255))
-- Reference: 23.003

AreaIdentity ::= CHOICE {
	sAI				SAI,
	geographicalArea		GeographicalArea,
	...
}

Ass-RAB-Parameters ::= SEQUENCE {
	assMaxBitrateInf		Ass-RAB-Parameter-MaxBitrateList 				OPTIONAL,
	assGuaranteedBitRateInf		Ass-RAB-Parameter-GuaranteedBitrateList 			OPTIONAL,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Ass-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Ass-RAB-Parameter-ExtendedMaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate


Ass-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate


Ass-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate

AuthorisedPLMNs ::= SEQUENCE (SIZE (1..maxNrOfPLMNsSN)) OF
	SEQUENCE {
		pLMNidentity		PLMNidentity,
		authorisedSNAsList	AuthorisedSNAs		OPTIONAL,
		iE-Extensions		IE-Extensions		OPTIONAL,
		...
	}

AuthorisedSNAs ::= SEQUENCE (SIZE (1..maxNrOfSNAs)) OF SNAC


-- B

BindingID ::= OCTET STRING (SIZE (4))

BroadcastAssistanceDataDecipheringKeys	::= SEQUENCE {
	cipheringKeyFlag	BIT STRING (SIZE (1)),
	currentDecipheringKey	BIT STRING (SIZE (56)),
	nextDecipheringKey	BIT STRING (SIZE (56)),
	...
}

-- C


Cause ::= CHOICE {
	radioNetwork		CauseRadioNetwork,
	transmissionNetwork	CauseTransmissionNetwork,
	nAS			CauseNAS,
	protocol		CauseProtocol,
	misc			CauseMisc,
	non-Standard		CauseNon-Standard,
	...,
	radioNetworkExtension	CauseRadioNetworkExtension
}

CauseMisc ::= INTEGER {
	om-intervention (113),
	no-resource-available (114),
	unspecified-failure (115),
	network-optimisation (116)
} (113..128)

CauseNAS ::= INTEGER {
	user-restriction-start-indication (81),
	user-restriction-end-indication (82),
	normal-release (83),
	csg-subscription-expiry(84)
} (81..96)

CauseProtocol ::= INTEGER {
	transfer-syntax-error (97),
	semantic-error (98),
	message-not-compatible-with-receiver-state (99),
	abstract-syntax-error-reject (100),
	abstract-syntax-error-ignore-and-notify (101),
	abstract-syntax-error-falsely-constructed-message (102)
} (97..112)

CauseRadioNetwork ::= INTEGER {
	rab-pre-empted (1),
	trelocoverall-expiry (2),
	trelocprep-expiry (3),
	treloccomplete-expiry (4),
	tqueing-expiry (5),
	relocation-triggered (6),
	trellocalloc-expiry(7),
	unable-to-establish-during-relocation (8),
	unknown-target-rnc (9),
	relocation-cancelled (10),
	successful-relocation (11),
	requested-ciphering-and-or-integrity-protection-algorithms-not-supported (12),
	conflict-with-already-existing-integrity-protection-and-or-ciphering-information (13),
	failure-in-the-radio-interface-procedure (14),
	release-due-to-utran-generated-reason (15),
	user-inactivity (16),
	time-critical-relocation (17),
	requested-traffic-class-not-available (18),
	invalid-rab-parameters-value (19),
	requested-maximum-bit-rate-not-available (20),
	requested-guaranteed-bit-rate-not-available (21),
	requested-transfer-delay-not-achievable (22),
	invalid-rab-parameters-combination (23),
	condition-violation-for-sdu-parameters (24),
	condition-violation-for-traffic-handling-priority (25),
	condition-violation-for-guaranteed-bit-rate (26),
	user-plane-versions-not-supported (27),
	iu-up-failure (28),
	relocation-failure-in-target-CN-RNC-or-target-system(29),
	invalid-RAB-ID (30),
	no-remaining-rab (31),
	interaction-with-other-procedure (32),
	requested-maximum-bit-rate-for-dl-not-available (33),
	requested-maximum-bit-rate-for-ul-not-available (34),
	requested-guaranteed-bit-rate-for-dl-not-available (35),
	requested-guaranteed-bit-rate-for-ul-not-available (36),
	repeated-integrity-checking-failure (37),
	requested-request-type-not-supported (38),
	request-superseded (39),
	release-due-to-UE-generated-signalling-connection-release (40),
	resource-optimisation-relocation (41),
	requested-information-not-available (42),
	relocation-desirable-for-radio-reasons (43),
	relocation-not-supported-in-target-RNC-or-target-system (44),
	directed-retry (45),
	radio-connection-with-UE-Lost (46),
	rNC-unable-to-establish-all-RFCs (47),
	deciphering-keys-not-available(48),
	dedicated-assistance-data-not-available(49),
	relocation-target-not-allowed (50),
	location-reporting-congestion (51),
	reduce-load-in-serving-cell (52),
	no-radio-resources-available-in-target-cell (53),
	gERAN-Iumode-failure (54),
	access-restricted-due-to-shared-networks (55),
	incoming-relocation-not-supported-due-to-PUESBINE-feature (56),
	traffic-load-in-the-target-cell-higher-than-in-the-source-cell (57),
	mBMS-no-multicast-service-for-this-UE(58),
	mBMS-unknown-UE-ID(59),
	successful-MBMS-session-start-no-data-bearer-necessary(60),
	mBMS-superseded-due-to-NNSF(61),
	mBMS-UE-linking-already-done(62),
	mBMS-UE-de-linking-failure-no-existing-UE-linking(63),
	tMGI-unknown(64)
} (1..64)

CauseRadioNetworkExtension ::= INTEGER {
	iP-multicast-address-and-APN-not-valid(257),
	mBMS-de-registration-rejected-due-to-implicit-registration(258),
	mBMS-request-superseded(259),
	mBMS-de-registration-during-session-not-allowed(260),
	mBMS-no-data-bearer-necessary(261),
	periodicLocationInformationNotAvailable(262),
	gTP-Resources-Unavailable(263),
	tMGI-inUse-overlapping-MBMS-service-area(264),
	mBMS-no-cell-in-MBMS-service-area(265),
	no-Iu-CS-UP-relocation(266),
	successful-MBMS-Session-Start-IP-Multicast-Bearer-established(267),
	cS-fallback-triggered(268),
	invalid-CSG-Id(269)
} (257..512)

CauseNon-Standard ::= INTEGER (129..256)
-- Cause value 256 shall not be used --

CauseTransmissionNetwork ::= INTEGER {
	signalling-transport-resource-failure (65),
	iu-transport-connection-failed-to-establish (66)
} (65..80)

Cell-Access-Mode::= ENUMERATED {
	hybrid,
	... 
}

CellBased::= SEQUENCE {
	cellIdList		CellIdList,
	iE-Extensions		IE-Extensions		OPTIONAL,
	...
}

CellIdList ::= SEQUENCE (SIZE (1..maxNrOfCellIds)) OF
	Cell-Id

Cell-Id		::= INTEGER (0..268435455)

Cell-Capacity-Class-Value ::= INTEGER (1..100,...)

CellLoadInformation ::= SEQUENCE {
	cell-Capacity-Class-Value	Cell-Capacity-Class-Value,
	loadValue			LoadValue,
	rTLoadValue			RTLoadValue				OPTIONAL,
	nRTLoadInformationValue		NRTLoadInformationValue			OPTIONAL,
	iE-Extensions			IE-Extensions				OPTIONAL,
	...
}

CellLoadInformationGroup ::= SEQUENCE {
	sourceCellID					SourceCellID,
	uplinkCellLoadInformation			CellLoadInformation		OPTIONAL,
	downlinkCellLoadInformation			CellLoadInformation		OPTIONAL,
	iE-Extensions					IE-Extensions			OPTIONAL,
	...
}

CellType ::= ENUMERATED{
	macro,
	micro,
	pico,
	femto,
	...
}

ClientType ::= ENUMERATED {
	emergency-Services,
	value-Added-Services,
	pLMN-Operator-Services,
	lawful-Intercept-Services,
	pLMN-Operator-Broadcast-Services,
	pLMN-Operator-O-et-M,
	pLMN-Operator-Anonymous-Statistics,
	pLMN-Operator-Target-MS-Service-Support,
	...
}

CriticalityDiagnostics ::= SEQUENCE {
	procedureCode			ProcedureCode			OPTIONAL,
	triggeringMessage		TriggeringMessage		OPTIONAL,
	procedureCriticality		Criticality			OPTIONAL,
	iEsCriticalityDiagnostics	CriticalityDiagnostics-IE-List 	OPTIONAL,
	iE-Extensions			IE-Extensions			OPTIONAL,
	...
}

CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF
	SEQUENCE {
		iECriticality		Criticality,
		iE-ID			ProtocolIE-ID,
		repetitionNumber	RepetitionNumber0		OPTIONAL,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

MessageStructure ::= SEQUENCE (SIZE (1..maxNrOfLevels)) OF
	SEQUENCE {
		iE-ID			ProtocolIE-ID,
		repetitionNumber	RepetitionNumber1		OPTIONAL,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

CGI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	lAC		LAC,
	cI		CI,
	iE-Extensions		IE-Extensions			OPTIONAL
}

ChosenEncryptionAlgorithm 		::= EncryptionAlgorithm

ChosenIntegrityProtectionAlgorithm 	::= IntegrityProtectionAlgorithm

CI					::= OCTET STRING (SIZE (2))

ClassmarkInformation2			::= OCTET STRING

ClassmarkInformation3			::= OCTET STRING

CN-DomainIndicator ::= ENUMERATED {
	cs-domain,
	ps-domain
}

CN-ID	::= INTEGER (0..4095)

Correlation-ID	::= OCTET STRING (SIZE (4))

CSFB-Information ::= ENUMERATED {
	csfb,
	csfb-high-priority,
	...
}

CSG-Id		::= BIT STRING (SIZE (27))

CSG-Id-List ::= SEQUENCE (SIZE (1..maxNrOfCSGs)) OF
	CSG-Id

CSG-Membership-Status ::= ENUMERATED { 
	member, 
	non-member,
	...
}

-- D

DataPDUType		::=	ENUMERATED {
	pDUtype0,
	pDUtype1,
	...
}

DataVolumeReference	::= INTEGER (0..255)

DataVolumeReportingIndication ::= ENUMERATED {
	do-report,
	do-not-report
}

DCH-ID ::= INTEGER (0..255)

DeliveryOfErroneousSDU ::= ENUMERATED {
	yes,
	no,
	no-error-detection-consideration
}

DeliveryOrder::= ENUMERATED {
	delivery-order-requested,
	delivery-order-not-requested
}

DeltaRAListofIdleModeUEs ::= SEQUENCE {
	newRAListofIdleModeUEs		NewRAListofIdleModeUEs	OPTIONAL,
	rAListwithNoIdleModeUEsAnyMore	RAListwithNoIdleModeUEsAnyMore	OPTIONAL,
	iE-Extensions			IE-Extensions			OPTIONAL
}

NewRAListofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

RAListwithNoIdleModeUEsAnyMore ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

ForwardingIndication::=ENUMERATED{
	forwarding-admitted,
	...
}

DL-GTP-PDU-SequenceNumber		::= INTEGER (0..65535)

DL-N-PDU-SequenceNumber 		::= INTEGER (0..65535)

D-RNTI					::= INTEGER (0..1048575)

DRX-CycleLengthCoefficient		::= INTEGER (6..9)

DSCH-ID ::= INTEGER (0..255)


-- E

EARFCN-Extended		::= INTEGER (65536..262143, ...)

E-DCH-MAC-d-Flow-ID	::= INTEGER (0.. maxNrOfEDCHMACdFlows-1)

ENB-ID ::= CHOICE {
	macroENB-ID	BIT STRING (SIZE(20)),
	homeENB-ID	BIT STRING (SIZE(28)),
	...
}

EncryptionAlgorithm ::= INTEGER { no-encryption (0), standard-UMTS-encryption-algorith-UEA1 (1), standard-UMTS-encryption-algorithm-UEA2 (2) } (0..15)

EncryptionInformation ::= SEQUENCE {
	permittedAlgorithms	PermittedEncryptionAlgorithms,
	key			EncryptionKey,
	iE-Extensions		IE-Extensions			OPTIONAL
}

EncryptionKey ::= BIT STRING (SIZE (128))
-- Reference: 33.102

End-Of-CSFB ::= ENUMERATED{
	end-of-CSFB,
	...
}

EquipmentsToBeTraced ::= CHOICE {
	iMEIlist	IMEIList,
	iMEISVlist	IMEISVList,
	iMEIgroup	IMEIGroup,
	iMEISVgroup	IMEISVGroup,
	...
}

E-UTRAN-Service-Handover ::= ENUMERATED {
	handover-to-E-UTRAN-shall-not-be-performed,
	...
}

Event ::= ENUMERATED {
	stop-change-of-service-area,
	direct,
	change-of-servicearea,
	...,
	stop-direct,
	periodic,
	stop-periodic
}

Event1F-Parameters ::= SEQUENCE {
	measurementQuantity	MeasurementQuantity,
	threshold		INTEGER(-120..165),
	...
}

Event1I-Parameters ::= SEQUENCE {
	threshold	INTEGER(-120..-25),
	...
}

ExtendedGuaranteedBitrate	::= INTEGER (16000001..256000000)
-- Unit is bits per sec

ExtendedMaxBitrate		::= INTEGER (16000001..256000000)
-- Unit is bits per sec

ExtendedRNC-ID			::= INTEGER (4096..65535)

-- F

FrameSequenceNumber		::=	INTEGER(0..15)

FrequenceLayerConvergenceFlag ::= ENUMERATED {
	no-FLC-flag,
	...
}

-- G

GANSS-PositioningDataSet ::= SEQUENCE(SIZE(1..maxGANSSSet)) OF GANSS-PositioningMethodAndUsage

GANSS-PositioningMethodAndUsage ::= OCTET STRING (SIZE(1))

GeographicalArea ::= CHOICE {
	point				GA-Point,
	pointWithUnCertainty		GA-PointWithUnCertainty,
	polygon				GA-Polygon,
	...,
	pointWithUncertaintyEllipse	GA-PointWithUnCertaintyEllipse,
	pointWithAltitude		GA-PointWithAltitude,
	pointWithAltitudeAndUncertaintyEllipsoid		GA-PointWithAltitudeAndUncertaintyEllipsoid,
	ellipsoidArc			GA-EllipsoidArc
}

GeographicalCoordinates ::= SEQUENCE {
	latitudeSign	ENUMERATED { north, south },
	latitude	INTEGER (0..8388607),
	longitude	INTEGER (-8388608..8388607),
	iE-Extensions	IE-Extensions			OPTIONAL,
	...
}

GA-AltitudeAndDirection ::= SEQUENCE {
	directionOfAltitude	ENUMERATED {height, depth},
	altitude		INTEGER (0..32767),
	...
}

GA-EllipsoidArc ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	innerRadius		INTEGER (0..65535),
	uncertaintyRadius	INTEGER (0..127),
	offsetAngle		INTEGER (0..179),
	includedAngle		INTEGER(0..179),
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-Point ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithAltitude ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	altitudeAndDirection	GA-AltitudeAndDirection,
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithAltitudeAndUncertaintyEllipsoid ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	altitudeAndDirection	GA-AltitudeAndDirection,
	uncertaintyEllipse	GA-UncertaintyEllipse,
	uncertaintyAltitude	INTEGER (0..127),
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithUnCertainty ::=SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	iE-Extensions		IE-Extensions			OPTIONAL,
	uncertaintyCode		INTEGER (0..127)
}

GA-PointWithUnCertaintyEllipse ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	uncertaintyEllipse	GA-UncertaintyEllipse,
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-Polygon ::= SEQUENCE (SIZE (1..maxNrOfPoints)) OF
	SEQUENCE {
		geographicalCoordinates	GeographicalCoordinates,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

GA-UncertaintyEllipse ::= SEQUENCE {
	uncertaintySemi-major	INTEGER (0..127),
	uncertaintySemi-minor	INTEGER (0..127),
	orientationOfMajorAxis	INTEGER (0..179), 	-- The values 90..179 shall not be used.
	...
}

GERAN-BSC-Container				::= OCTET STRING
	-- GERAN BSC Container as defined in TS 48.008 [11] --


GERAN-Cell-ID ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC,
	cI		CI,
	iE-Extensions	IE-Extensions			OPTIONAL
}

GERAN-Classmark	 				::= OCTET STRING
	-- GERAN Classmark as defined in TS 48.008 [11] --

GlobalCN-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	cN-ID		CN-ID
}


GlobalRNC-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	rNC-ID		RNC-ID
}

GTP-TEI	::= OCTET STRING (SIZE (4))

GuaranteedBitrate ::= INTEGER (0..16000000)
-- Unit is bits per sec

-- H

HigherBitratesThan16MbpsFlag ::= ENUMERATED{
	allowed,
	not-allowed,
	...
}

HS-DSCH-MAC-d-Flow-ID	::= INTEGER (0.. maxNrOfHSDSCHMACdFlows-1)

-- I


IMEI	::= OCTET STRING (SIZE (8))
-- Reference: 23.003

IMEIGroup	::= SEQUENCE {
	iMEI		IMEI,
	iMEIMask	BIT STRING (SIZE (7)),
	iE-Extensions	IE-Extensions			OPTIONAL
}

IMEIList	::= SEQUENCE (SIZE (1..maxNrOfUEsToBeTraced)) OF IMEI

IMEISV		::= OCTET STRING (SIZE (8))
-- Reference: 23.003

IMEISVGroup	::= SEQUENCE {
	iMEISV		IMEISV,
	iMEISVMask	BIT STRING (SIZE (7)),
	iE-Extensions	IE-Extensions			OPTIONAL
}

IMEISVList	::= SEQUENCE (SIZE (1..maxNrOfUEsToBeTraced)) OF IMEISV

ImmediateMDT	::= SEQUENCE {
	measurementsToActivate	MeasurementsToActivate,
	m1report		M1Report				OPTIONAL,
	-- Included in case of event-triggered reporting for measurement M1
	m2report		M2Report				OPTIONAL,
	-- Included in case of event-triggered reporting for measurement M2
	...,
	iE-Extensions		IE-Extensions			OPTIONAL
}

IMSI	::= OCTET STRING (SIZE (3..8))
-- Reference: 23.003

IncludeVelocity		::= ENUMERATED {
	requested
}

InformationExchangeID ::= INTEGER (0.. 1048575)

InformationExchangeType ::= ENUMERATED {
	transfer,
	request,
	...
}

InformationRequested ::= CHOICE {
	requestedMBMSIPMulticastAddressandAPNRequest	RequestedMBMSIPMulticastAddressandAPNRequest,
	requestedMulticastServiceList			RequestedMulticastServiceList,
	...
}


InformationRequestType ::= CHOICE {
	mBMSIPMulticastAddressandAPNRequest		MBMSIPMulticastAddressandAPNRequest,
	permanentNAS-UE-ID				PermanentNAS-UE-ID,
	...
}

InformationTransferID ::= INTEGER (0.. 1048575)

InformationTransferType ::= CHOICE {
	rNCTraceInformation			RNCTraceInformation,
	...
}

IntegrityProtectionAlgorithm		::= INTEGER {
	standard-UMTS-integrity-algorithm-UIA1 (0), standard-UMTS-integrity-algorithm-UIA2 (1),
	no-value (15)
} (0..15)

IntegrityProtectionInformation ::= SEQUENCE {
	permittedAlgorithms		PermittedIntegrityProtectionAlgorithms,
	key				IntegrityProtectionKey,
	iE-Extensions			IE-Extensions			OPTIONAL
}

IntegrityProtectionKey			::= BIT STRING (SIZE (128))

InterSystemInformationTransferType ::= CHOICE {
	rIM-Transfer			RIM-Transfer,
	...
}

InterSystemInformation-TransparentContainer ::= SEQUENCE {
	downlinkCellLoadInformation	CellLoadInformation		OPTIONAL,
	uplinkCellLoadInformation	CellLoadInformation		OPTIONAL,
	iE-Extensions			IE-Extensions 			OPTIONAL,
	...
}

IPMulticastAddress ::= OCTET STRING (SIZE (4..16))
-- Reference: 23.003

IuSignallingConnectionIdentifier	::= BIT STRING (SIZE (24))

IuTransportAssociation ::= CHOICE {
	gTP-TEI				GTP-TEI,
	bindingID			BindingID,
	...
}

-- J
-- K

KeyStatus	::= ENUMERATED {
	old,
	new,
	...
}
-- L

LA-LIST ::= SEQUENCE (SIZE (1..maxNrOfLAs)) OF
	SEQUENCE {
		lAC			LAC,
		listOF-SNAs		ListOF-SNAs,
		iE-Extensions		IE-Extensions 			OPTIONAL,
		...
	}

LAC					::= OCTET STRING (SIZE (2))

LAI ::= SEQUENCE {
	pLMNidentity			PLMNidentity,
	lAC				LAC,
	iE-Extensions			IE-Extensions 			OPTIONAL
}

LastKnownServiceArea	::= SEQUENCE {
	sAI		SAI,
	ageOfSAI	INTEGER (0..32767),
	iE-Extensions	IE-Extensions 			OPTIONAL,
	...
}

LastVisitedUTRANCell-Item ::= SEQUENCE {
	uTRAN-CellID		UTRAN-CellID,
	cellType		CellType,
	time-UE-StayedInCell	Time-UE-StayedInCell,
	iE-Extensions		IE-Extensions 			OPTIONAL,
	...
}

LHN-ID ::= OCTET STRING (SIZE (32..256))

Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}

ListOF-SNAs ::= SEQUENCE (SIZE (1..maxNrOfSNAs)) OF SNAC

ListOfInterfacesToTrace ::= SEQUENCE (SIZE (1..maxNrOfInterfaces)) OF InterfacesToTraceItem

InterfacesToTraceItem ::= SEQUENCE {
	interface	ENUMERATED {iu-cs, iu-ps, iur, iub, uu, ...},
	iE-Extensions	IE-Extensions 			OPTIONAL,
	...
}

LoadValue	::= INTEGER (0..100)

LocationRelatedDataRequestType	::= SEQUENCE {
	requestedLocationRelatedDataType	RequestedLocationRelatedDataType,
	requestedGPSAssistanceData		RequestedGPSAssistanceData	OPTIONAL,
	-- This IE shall be present if the Requested Location Related Data Type IE is set to ‘Dedicated Assistance Data for Assisted GPS’ or
	-- `Dedicated Assistance Data for Assisted GPS and GANSS’
	...
}

LocationRelatedDataRequestTypeSpecificToGERANIuMode	::= ENUMERATED {
	decipheringKeysEOTD,
	dedicatedMobileAssistedEOTDAssistanceData,
	dedicatedMobileBasedEOTDAssistanceData,
	...
}

LocationReportingTransferInformation	::=	SEQUENCE {
	reportChangeOfSAI		ReportChangeOfSAI		OPTIONAL,
	periodicReportingIndicator	PeriodicReportingIndicator	OPTIONAL,
	directReportingIndicator	DirectReportingIndicator	OPTIONAL,
	verticalAccuracyCode		VerticalAccuracyCode		OPTIONAL,
	positioningPriorityChangeSAI	PositioningPriority		OPTIONAL,
	positioningPriorityDirect	PositioningPriority		OPTIONAL,
	clientTypePeriodic		ClientType			OPTIONAL,
	clientTypeDirect		ClientType			OPTIONAL,
	responseTime			ResponseTime			OPTIONAL,
	includeVelocity			IncludeVelocity			OPTIONAL,
	periodicLocationInfo		PeriodicLocationInfo		OPTIONAL,
	iE-Extensions			IE-Extensions 			OPTIONAL,
	...
}

ReportChangeOfSAI ::=	ENUMERATED {
	requested,
	...
}

PeriodicReportingIndicator ::=	ENUMERATED {
	periodicSAI,
	periodicGeo,
	...
}

DirectReportingIndicator ::=	ENUMERATED {
	directSAI,
	directGeo,
	...
}

L3-Information	::= OCTET STRING

-- M

M1Report	::= CHOICE {
	periodic			MDT-Report-Parameters,
	event1F				Event1F-Parameters,
	...
}

M2Report	::= CHOICE {
	periodic			MDT-Report-Parameters,
	event1I				Event1I-Parameters,
	...
}

M4Report	::= CHOICE {
	all				NULL,
	m4-collection-parameters	M4-Collection-Parameters,
	...
}

M4-Collection-Parameters ::= SEQUENCE {
	m4-period	M4-Period,
	m4-threshold	M4-Threshold	OPTIONAL,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M4-Period  ::= ENUMERATED {ms100, ms250, ms500, ms1000, ms2000, ms3000, ms4000, ms6000, ...}


M4-Threshold ::= INTEGER (0..31)


M5Report	::= CHOICE {
	when-available	NULL,
	m5-period	M5-Period,
	...
}
M5-Period ::= ENUMERATED {ms100, ms250, ms500, ms1000, ms2000, ms3000, ms4000, ms6000, ...}



M6Report ::= SEQUENCE {
	m6-period	M6-Period,
	m6-links-to-log	Links-to-log,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M6-Period ::= ENUMERATED {ms1000, ms2000, ms3000, ms4000, ms6000, ms8000, ms12000, ms16000, ms20000, ms24000, ms28000, ms32000, ms64000, ...}

M7Report ::= SEQUENCE {
	m7-period	M7-Period,
	m7-links-to-log	Links-to-log,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M7-Period ::= ENUMERATED {ms1000, ms2000, ms3000, ms4000, ms6000, ms8000, ms12000, ms16000, ms20000, ms24000, ms28000, ms32000, ms64000, ...}

Management-Based-MDT-Allowed ::= ENUMERATED { 
	allowed, ... }

MaxBitrate				::= INTEGER (1..16000000)
-- Unit is bits per sec

MaxSDU-Size				::= INTEGER (0..32768)
-- MaxSDU-Size
-- Unit isBIT STRING (SIZE (8))

MBMS-PTP-RAB-ID ::= BIT STRING (SIZE (8))

MBMSBearerServiceType ::= ENUMERATED {
	multicast,
	broadcast,
	...
}

MBMSCNDe-Registration ::= ENUMERATED {
	normalsessionstop,
	deregister,
	...
}


MBMSCountingInformation ::= ENUMERATED {
	counting,
	notcounting,
	...
}

MBMSHCIndicator ::= ENUMERATED {
	uncompressed-header,
	compressed-header,
	...
}

MBMSIPMulticastAddressandAPNRequest ::= SEQUENCE (SIZE (1..maxnoofMulticastServicesPerRNC)) OF
	TMGI

MBMSLinkingInformation ::= ENUMERATED {
	uE-has-joined-multicast-services,
	...
}

MBMSRegistrationRequestType ::= ENUMERATED {
	register,
	deregister,
	...
}

MBMSServiceArea ::= OCTET STRING

MBMSSessionDuration ::= OCTET STRING (SIZE (3))



MBMSSessionIdentity ::= OCTET STRING (SIZE (1))

MBMSSessionRepetitionNumber ::= OCTET STRING (SIZE (1))

MDT-Activation	::= ENUMERATED {
	immediateMDTonly,
	loggedMDTonly,
	immediateMDTandTrace,
	...
}

MDTAreaScope ::= CHOICE {
	cellbased	CellBased,
	labased		LABased,
	rabased		RABased,
	plmn-area-based	NULL,
	...
}

MDT-Configuration	::= SEQUENCE {
	mdtActivation		MDT-Activation,
	mdtAreaScope		MDTAreaScope,
	mdtMode			MDTMode,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

MDTMode	::= CHOICE {
	immediateMDT		ImmediateMDT,
	loggedMDT		LoggedMDT,
	...
}

MDT-PLMN-List ::= SEQUENCE (SIZE (1..maxnoofMDTPLMNs)) OF PLMNidentity

MDT-Report-Parameters ::= SEQUENCE {
	reportInterval	ReportInterval,
	reportAmount	ReportAmount,
	...
}

MeasurementQuantity ::= ENUMERATED {
	cpichEcNo,
	cpichRSCP,
	pathloss,
	...
}

MeasurementsToActivate::= BIT STRING (SIZE (8))

MSISDN ::= OCTET STRING (SIZE (1..9))

-- N


NAS-PDU				::= OCTET STRING

NAS-SequenceNumber		::= BIT STRING (SIZE (2))
-- Reference: 24.008

NAS-SynchronisationIndicator	::= BIT STRING (SIZE (4))

NewBSS-To-OldBSS-Information	::= OCTET STRING

NonSearchingIndication ::= ENUMERATED {
	non-searching,
	searching
}

NRTLoadInformationValue	::= INTEGER (0..3)

NumberOfIuInstances	::= INTEGER (1..2)

NumberOfSteps		::= INTEGER (1..16)

-- O

Offload-RAB-Parameters ::= SEQUENCE {
	accessPointName			Offload-RAB-Parameters-APN,
	chargingCharacteristics		Offload-RAB-Parameters-ChargingCharacteristics,
	iE-Extensions			IE-Extensions 	OPTIONAL,
	...
}

Offload-RAB-Parameters-APN ::= OCTET STRING (SIZE (1..255))

Offload-RAB-Parameters-ChargingCharacteristics ::= OCTET STRING (SIZE (2))

OldBSS-ToNewBSS-Information		::= OCTET STRING

OMC-ID					::= OCTET STRING (SIZE (3..22))
-- Reference: GSM TS 12.20 [25]

Out-Of-UTRAN ::= ENUMERATED{
	cell-reselection-to-EUTRAN,
	...
}

-- P

PagingAreaID ::= CHOICE {
	lAI				LAI,
	rAI				RAI,
	...
}

PagingCause ::= ENUMERATED {
	terminating-conversational-call,
	terminating-streaming-call,
	terminating-interactive-call,
	terminating-background-call,
	terminating-low-priority-signalling,
	...,
	terminating-high-priority-signalling
}

PDP-TypeInformation ::= SEQUENCE (SIZE (1..maxNrOfPDPDirections)) OF
	PDP-Type

PDP-Type ::= ENUMERATED {
	empty,
	ppp,
	osp-ihoss	-- this value shall not be used -- ,
	ipv4,
	ipv6,
	...
}

PDP-TypeInformation-extension ::= SEQUENCE (SIZE (1..maxNrOfPDPDirections)) OF
	PDP-Type-extension

PDP-Type-extension ::= ENUMERATED {
	ipv4-and-ipv6,
	...
}

PDUType14FrameSequenceNumber		::=	INTEGER(0..3)

PeriodicLocationInfo ::= SEQUENCE {
	reportingAmount		INTEGER (1..8639999, ...),
	reportingInterval	INTEGER (1..8639999, ...),
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

PermanentNAS-UE-ID ::= CHOICE {
	iMSI			IMSI,
	...
}

PermittedEncryptionAlgorithms ::= SEQUENCE (SIZE (1..16)) OF
	EncryptionAlgorithm

PermittedIntegrityProtectionAlgorithms ::= SEQUENCE (SIZE (1..16)) OF
	IntegrityProtectionAlgorithm

LABased	::= SEQUENCE {
	laiList			LAI-List,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

LAI-List	::= SEQUENCE (SIZE (1..maxNrOfLAIs)) OF
	LAI



LoggedMDT	::=	SEQUENCE {
	loggingInterval		LoggingInterval,
	loggingDuration		LoggingDuration,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

LoggingInterval	::=	ENUMERATED {
	s1d28,
	s2d56,
	s5d12,
	s10d24,
	s20d48,
	s30d72,
	s40d96,
	s61d44,
	...
	}

LoggingDuration	::=	ENUMERATED {
		min10,
		min20,
		min40,
		min60,
		min90,
		min120,
...}



PLMNidentity 				::= OCTET STRING (SIZE (3))

PLMNs-in-shared-network ::= SEQUENCE (SIZE (1..maxNrOfPLMNsSN)) OF
	SEQUENCE {
		pLMNidentity	PLMNidentity,
		lA-LIST		LA-LIST,
		iE-Extensions	IE-Extensions 	OPTIONAL,
		...
	}

Port-Number ::= OCTET STRING (SIZE (2))

PositioningDataDiscriminator ::= BIT STRING (SIZE(4))

PositioningDataSet ::= SEQUENCE(SIZE(1..maxSet)) OF PositioningMethodAndUsage

PositioningMethodAndUsage ::= OCTET STRING (SIZE(1))

PositioningPriority	::= ENUMERATED {
	high-Priority,
	normal-Priority,
...
}

PositionData ::= SEQUENCE {
	positioningDataDiscriminator	PositioningDataDiscriminator,
	positioningDataSet		PositioningDataSet			OPTIONAL,
-- This IE shall be present if the PositioningDataDiscriminator IE is set to the value "0000" --
	iE-Extensions			IE-Extensions 	OPTIONAL,
	...
}

PositionDataSpecificToGERANIuMode ::= OCTET STRING

Pre-emptionCapability ::= ENUMERATED {
	shall-not-trigger-pre-emption,
	may-trigger-pre-emption
}

Pre-emptionVulnerability ::= ENUMERATED {
	not-pre-emptable,
	pre-emptable
}

PriorityLevel	::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)

Priority-Class-Indicator ::= BIT STRING (SIZE(8))

ProvidedData ::= CHOICE {
	shared-network-information	Shared-Network-Information,
	...
}

P-TMSI	::= OCTET STRING (SIZE (4))

-- Q

QueuingAllowed ::= ENUMERATED {
	queueing-not-allowed,
	queueing-allowed
}

-- R
RAB-AsymmetryIndicator::= ENUMERATED {
	symmetric-bidirectional,
	asymmetric-unidirectional-downlink,
	asymmetric-unidirectional-uplink,
	asymmetric-bidirectional,
	...
}

RABased	::= SEQUENCE {
	raiList		RAI-List,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

RAI-List	::= SEQUENCE (SIZE (1..maxNrOfRAIs)) OF
	RAI

RABDataVolumeReport ::= SEQUENCE (SIZE (1..maxNrOfVol)) OF
	SEQUENCE {
		dl-UnsuccessfullyTransmittedDataVolume	UnsuccessfullyTransmittedDataVolume,
		dataVolumeReference			DataVolumeReference	OPTIONAL,
		iE-Extensions				IE-Extensions 		OPTIONAL,
		...
	}

RAB-ID	::= BIT STRING (SIZE (8))

RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

RAB-Parameter-ExtendedMaxBitrateList		::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate


RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate
--This IE shall be ignored if Supported Guaranteed Bit rate is present--

RAB-Parameter-MaxBitrateList		::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate
--This IE shall be ignored if Supported Maximum Bit rate is present--

RAB-Parameters ::= SEQUENCE {
	trafficClass			TrafficClass,
	rAB-AsymmetryIndicator		RAB-AsymmetryIndicator,
	maxBitrate			RAB-Parameter-MaxBitrateList,
	guaranteedBitRate		RAB-Parameter-GuaranteedBitrateList OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	deliveryOrder			DeliveryOrder,
	maxSDU-Size			MaxSDU-Size,
	sDU-Parameters			SDU-Parameters,
	transferDelay			TransferDelay OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	trafficHandlingPriority		TrafficHandlingPriority OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Interactive" --,
	allocationOrRetentionPriority	AllocationOrRetentionPriority OPTIONAL,
	sourceStatisticsDescriptor	SourceStatisticsDescriptor OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	relocationRequirement	RelocationRequirement OPTIONAL,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

RABParametersList	::=	SEQUENCE (SIZE (1.. maxNrOfRABs)) OF SEQUENCE	{
	rab-Id			RAB-ID,
	cn-domain		CN-DomainIndicator,
	rabDataVolumeReport	RABDataVolumeReport	OPTIONAL,
	upInformation		UPInformation	OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RAB-SubflowCombinationBitRate 	::= INTEGER (0..16000000)

RAB-TrCH-Mapping ::=	SEQUENCE ( SIZE (1..maxNrOfRABs)) OF
	RAB-TrCH-MappingItem

RAB-TrCH-MappingItem ::= SEQUENCE {
	rAB-ID		RAB-ID,
	trCH-ID-List	TrCH-ID-List,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

RAC ::= OCTET STRING (SIZE (1))

RAI ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

RAListofIdleModeUEs ::= CHOICE {
	notEmptyRAListofIdleModeUEs	NotEmptyRAListofIdleModeUEs,
	emptyFullRAListofIdleModeUEs	ENUMERATED {emptylist,fulllist,...},
	...
}

NotEmptyRAListofIdleModeUEs ::= SEQUENCE {
	rAofIdleModeUEs	RAofIdleModeUEs,
	iE-Extensions	IE-Extensions OPTIONAL
}

RAofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

LAListofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	LAI

RAT-Type ::= ENUMERATED {
	utran,
	geran,
	...
}

RateControlAllowed ::= ENUMERATED {
	not-allowed,
	allowed
}

RedirectAttemptFlag 	::= NULL

RedirectionCompleted	::= ENUMERATED {
	redirection-completed,
	...
}

RejectCauseValue ::= ENUMERATED {
	pLMN-Not-Allowed,
	location-Area-Not-Allowed,
	roaming-Not-Allowed-In-This-Location-Area,
	no-Suitable-Cell-In-Location-Area,
	gPRS-Services-Not-Allowed-In-This-PLMN,
	cS-PS-coordination-required,
	...,
	network-failure,
	not-authorized-for-this-CSG
}


RelocationRequirement ::= ENUMERATED {
	lossless,
	none,
	...,
	realtime
}

RelocationType ::= ENUMERATED {
	ue-not-involved,
	ue-involved,
	...
}

RepetitionNumber0 ::= INTEGER (0..255)

RepetitionNumber1 ::= INTEGER (1..256)


ReportArea ::= ENUMERATED {
	service-area,
	geographical-area,
	...
}

ReportInterval		::=	ENUMERATED {
	ms250,
	ms500,
	ms1000,
	ms2000,
	ms3000,
	ms4000,
	ms6000,
	ms12000,
	ms16000,
	ms20000,
	ms24000,
	ms32000,
	ms64000,
	...,
	ms8000,
	ms28000
}

ReportAmount		::=	ENUMERATED { n1, n2, n4, n8, n16, n32, n64, infinity, ... }

RequestedGPSAssistanceData 	::= OCTET STRING (SIZE (1 .. 38 ))
	-- gpsAssistanceData as defined in 24.080 --

RequestedGANSSAssistanceData 	::= OCTET STRING (SIZE (1 .. 201 ))
	-- ganssAssistanceData as defined in 24.080 --

RequestedLocationRelatedDataType ::= ENUMERATED {
	decipheringKeysUEBasedOTDOA,
	decipheringKeysAssistedGPS,
	dedicatedAssistanceDataUEBasedOTDOA,
	dedicatedAssistanceDataAssistedGPS,
	...,
-- Release 7 extension elements --
	decipheringKeysAssistedGANSS,
	dedicatedAssistanceDataAssistedGANSS,
	decipheringKeysAssistedGPSandGANSS,
	dedicatedAssistanceDataAssistedGPSandGANSS
}

RequestedMBMSIPMulticastAddressandAPNRequest ::= SEQUENCE (SIZE (1..maxnoofMulticastServicesPerRNC)) OF
	MBMSIPMulticastAddressandAPNlist

MBMSIPMulticastAddressandAPNlist ::= SEQUENCE {
	tMGI			TMGI,
	iPMulticastAddress	IPMulticastAddress,
	aPN			APN,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RequestedMulticastServiceList ::= SEQUENCE (SIZE (1.. maxnoofMulticastServicesPerUE)) OF
	TMGI

Requested-RAB-Parameter-Values ::= SEQUENCE {
	requestedMaxBitrates		Requested-RAB-Parameter-MaxBitrateList			OPTIONAL,
	requestedGuaranteedBitrates	Requested-RAB-Parameter-GuaranteedBitrateList			OPTIONAL,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

Requested-RAB-Parameter-ExtendedMaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate

Requested-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Requested-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate

Requested-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate


RequestType ::= SEQUENCE {
	event		Event,
	reportArea	ReportArea,
	accuracyCode	INTEGER (0..127)	OPTIONAL,
	...
}

ResidualBitErrorRatio ::= SEQUENCE {
	mantissa	INTEGER (1..9),
	exponent	INTEGER (1..8),
	iE-Extensions	IE-Extensions OPTIONAL
}
-- ResidualBitErrorRatio = mantissa * 10^-exponent

ResponseTime	::= ENUMERATED {
	lowdelay,
	delaytolerant,
	...
}

RIMInformation	::= OCTET STRING

RIM-Transfer ::= SEQUENCE {
	rIMInformation		RIMInformation,
	rIMRoutingAddress	RIMRoutingAddress	OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL
}

RIMRoutingAddress ::= CHOICE {
	targetRNC-ID		TargetRNC-ID,
	gERAN-Cell-ID		GERAN-Cell-ID,
	... ,
	targeteNB-ID		TargetENB-ID
}


RNC-ID	::= INTEGER (0..4095)
-- RNC-ID					::= BIT STRING (SIZE (12))
-- Harmonized with RNSAP and NBAP definitions


RNCTraceInformation::= SEQUENCE {
	traceReference			TraceReference,
	traceActivationIndicato		ENUMERATED {activated,deactivated},
	equipmentsToBeTraced		EquipmentsToBeTraced						OPTIONAL,
	-- This IE shall be present if the Trace Activation Indicator IE is set to "Activated".
	iE-Extensions			IE-Extensions OPTIONAL
}

RNSAPRelocationParameters ::=	SEQUENCE {
	rabParmetersList	RABParametersList 			OPTIONAL,
	locationReporting	LocationReportingTransferInformation	OPTIONAL,
	traceInformation	TraceInformation 			OPTIONAL,
	sourceSAI		SAI					OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RRC-Container	::= OCTET STRING

RTLoadValue	::= INTEGER (0..100)

RSRVCC-HO-Indication ::= ENUMERATED {
	ps-only,
	...
}

RSRVCC-Information ::= SEQUENCE {
	nonce		BIT STRING (SIZE (128)),
	iMSInformation	OCTET STRING(SIZE(1.. maxSizeOfIMSInfo)),
	iE-Extensions	IE-Extensions OPTIONAL,
	...

}

RSRVCC-Operation-Possible ::= ENUMERATED {
	rsrvcc-possible,
	...
}

-- S

SAC	::= OCTET STRING (SIZE (2))
SAI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	lAC		LAC,
	sAC		SAC,
	iE-Extensions	IE-Extensions OPTIONAL
}

SAPI ::= ENUMERATED {
	sapi-0,
	sapi-3,
	...
}

SessionUpdateID ::= INTEGER (0.. 1048575)
Shared-Network-Information ::= SEQUENCE {
	pLMNs-in-shared-network		PLMNs-in-shared-network,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

Session-Re-establishment-Indicator	::= ENUMERATED {true, ...}

SignallingIndication ::= ENUMERATED {
	signalling,
	...
}

SDU-ErrorRatio ::= SEQUENCE {
	mantissa	INTEGER (1..9),
	exponent	INTEGER (1..6),
	iE-Extensions	IE-Extensions OPTIONAL
}
-- SDU-ErrorRatio = mantissa * 10^-exponent

SDU-FormatInformationParameters ::= SEQUENCE (SIZE (1..maxRAB-SubflowCombination)) OF SDU-FormatInformationParameterItem
SDU-FormatInformationParameterItem ::=
	SEQUENCE {
		subflowSDU-Size			SubflowSDU-Size 	OPTIONAL,
		rAB-SubflowCombinationBitRate	RAB-SubflowCombinationBitRate 	OPTIONAL,
		iE-Extensions			IE-Extensions 		OPTIONAL,
		...
	}

SDU-Parameters ::= SEQUENCE (SIZE (1..maxRAB-Subflows)) OF SDU-ParameterItem
SDU-ParameterItem ::=
	SEQUENCE {
		sDU-ErrorRatio			SDU-ErrorRatio OPTIONAL
		-- This IE shall be present if the Delivery Of Erroneous SDU IE is set to "Yes" or "No" --,
		residualBitErrorRatio		ResidualBitErrorRatio,
		deliveryOfErroneousSDU		DeliveryOfErroneousSDU,
		sDU-FormatInformationParameters	SDU-FormatInformationParameters OPTIONAL,
		iE-Extensions			IE-Extensions 		OPTIONAL,
		...
	}

SNA-Access-Information ::= SEQUENCE {
		authorisedPLMNs	AuthorisedPLMNs,
		iE-Extensions	IE-Extensions 		OPTIONAL,
		...
	}

SNAC ::= INTEGER (0..65535)

Service-Handover ::= ENUMERATED {
	handover-to-GSM-should-be-performed,
	handover-to-GSM-should-not-be-performed,
	handover-to-GSM-shall-not-be-performed,
	...
}

Source-ToTarget-TransparentContainer ::= OCTET STRING
-- This IE is a transparent container, the IE shall be encoded not as an OCTET STRING but according to the type specifications of the target system.
-- Note: In the current version of this specification, this IE may either carry the Source RNC to
-- Target RNC Transparent Container or the Source eNB to Target eNB Transparent Container IE as
-- defined in TS 36.413 [49]

SourceeNodeB-ToTargeteNodeB-TransparentContainer ::= OCTET STRING


SourceCellID ::= CHOICE {
	sourceUTRANCellID	SourceUTRANCellID,
	sourceGERANCellID	CGI,
	...
}

SourceBSS-ToTargetBSS-TransparentContainer		::= OCTET STRING

SourceID ::= CHOICE {
	sourceRNC-ID	SourceRNC-ID,
	sAI		SAI,
	...
}


SourceRNC-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	rNC-ID		RNC-ID,
	iE-Extensions	IE-Extensions 		OPTIONAL
}

SourceRNC-ToTargetRNC-TransparentContainer ::= SEQUENCE {
	rRC-Container			RRC-Container,
	numberOfIuInstances		NumberOfIuInstances,
	relocationType 			RelocationType,
	chosenIntegrityProtectionAlgorithm ChosenIntegrityProtectionAlgorithm	OPTIONAL,
	integrityProtectionKey		IntegrityProtectionKey			OPTIONAL,
	chosenEncryptionAlgorithForSignalling ChosenEncryptionAlgorithm		OPTIONAL,
	cipheringKey			EncryptionKey				OPTIONAL,
	chosenEncryptionAlgorithForCS	ChosenEncryptionAlgorithm		OPTIONAL,
	chosenEncryptionAlgorithForPS	ChosenEncryptionAlgorithm		OPTIONAL,
	d-RNTI				D-RNTI 					OPTIONAL
	-- This IE shall be present if the Relocation type IE is set to "UE not involved in relocation of SRNS" --,
	targetCellId			TargetCellId				OPTIONAL
	-- This IE shall be present if the Relocation type IE is set to "UE involved in relocation of SRNS" --,
	rAB-TrCH-Mapping		RAB-TrCH-Mapping			OPTIONAL,
	iE-Extensions			IE-Extensions 				OPTIONAL,
	...
}

IRAT-Measurement-Configuration ::= SEQUENCE {
	rSRP				INTEGER (0..97)			OPTIONAL,
	rSRQ				INTEGER (0..34)			OPTIONAL,
	iRATmeasurementParameters	IRATmeasurementParameters,
	iE-Extensions			IE-Extensions OPTIONAL}

IRATmeasurementParameters::= SEQUENCE {
	measurementDuration	INTEGER (1..100),
	eUTRANFrequencies	EUTRANFrequencies		OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL}

RSRQ-Type ::= SEQUENCE {
	allSymbols		BOOLEAN,
	wideBand		BOOLEAN
}

RSRQ-Extension ::= INTEGER (-30..46, ...)

EUTRANFrequencies ::= SEQUENCE (SIZE (1..maxNrOfEUTRAFreqs)) OF SEQUENCE {
	earfcn			INTEGER (0..65535),
	measBand		MeasBand			OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL}

MeasBand ::= ENUMERATED {
	v6,
	v15,
	v25,
	v50,
	v75,
	v100
}

SubscriberProfileIDforRFP ::= INTEGER (1..256)

SourceStatisticsDescriptor ::= ENUMERATED {
	speech,
	unknown,
	...
}

SupportedRAB-ParameterBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF SupportedBitrate

SupportedBitrate ::= INTEGER (1..1000000000, ...)
-- Unit is bits per sec

SourceUTRANCellID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	uTRANcellID	TargetCellId,
	iE-Extensions	IE-Extensions OPTIONAL
}

SRB-ID ::= INTEGER (1..32)

SRB-TrCH-Mapping ::=	SEQUENCE ( SIZE (1..maxNrOfSRBs)) OF
	SRB-TrCH-MappingItem

SRB-TrCH-MappingItem ::= SEQUENCE {
	sRB-ID		SRB-ID,
	trCH-ID		TrCH-ID,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}


SRVCC-HO-Indication ::= ENUMERATED {
	ps-and-cs,
	cs-only,
	...
}

SRVCC-Information ::= SEQUENCE {
	nonce		BIT STRING (SIZE (128)),
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

SRVCC-Operation-Possible ::= ENUMERATED {
	srvcc-possible,
	...
}

SubflowSDU-Size				::= INTEGER (0..4095)
-- Unit is bit


-- T
TAC ::= OCTET STRING (SIZE (2))

TAI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	tAC		TAC,
	iE-Extensions	IE-Extensions OPTIONAL
}

Target-ToSource-TransparentContainer ::= OCTET STRING
-- This IE is a transparent container, the IE shall be encoded not as an OCTET STRING but according to the type specifications of the target system.
-- Note: In the current version of this specification, this IE may either carry the Target RNC to
-- Source RNC Transparent Container or the Target eNB to Source eNB Transparent Container IE as
-- defined in TS 36.413 [49]

TargeteNodeB-ToSourceeNodeB-TransparentContainer ::= OCTET STRING

TargetBSS-ToSourceBSS-TransparentContainer		::= OCTET STRING

TargetCellId		::= INTEGER (0..268435455)

TargetID ::= CHOICE {
	targetRNC-ID	TargetRNC-ID,
	cGI		CGI,
	
	...,
	targeteNB-ID	TargetENB-ID
}

TargetENB-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	eNB-ID		ENB-ID,
	iE-Extensions	IE-Extensions	OPTIONAL,
	selectedTAI	TAI,
	...
}

TargetRNC-ID ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC 		OPTIONAL,
	rNC-ID		RNC-ID,
	iE-Extensions	IE-Extensions	OPTIONAL
}

TargetRNC-ToSourceRNC-TransparentContainer ::= SEQUENCE {
	rRC-Container	RRC-Container,
	d-RNTI		D-RNTI 		OPTIONAL
	-- May be included to allow the triggering of the Relocation Detect procedure from the Iur Interface --,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

TBCD-STRING 		::= OCTET STRING

TemporaryUE-ID ::= CHOICE {
	tMSI		TMSI,
	p-TMSI		P-TMSI,
	...
}

Time-UE-StayedInCell ::= INTEGER (0..4095)

Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950)

TimeToMBMSDataTransfer	::= OCTET STRING(SIZE(1))

TimingDifferenceULDL	::= OCTET STRING (SIZE(1))

TMGI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	serviceID	OCTET STRING (SIZE (3)),
	iE-Extensions	IE-Extensions	OPTIONAL
}

TMSI ::= OCTET STRING (SIZE (4))

TraceDepth ::= ENUMERATED {
	minimum,
	medium,
	maximum,
	...
}

TraceInformation	::= SEQUENCE {
	traceReference			TraceReference,
	ue-identity			UE-ID,
	tracePropagationParameters	TracePropagationParameters OPTIONAL,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TracePropagationParameters ::= SEQUENCE {
	traceRecordingSessionReference	TraceRecordingSessionReference,
	traceDepth			TraceDepth,
	listOfInterfacesToTrace		ListOfInterfacesToTrace		OPTIONAL,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TraceRecordingSessionInformation	::= SEQUENCE {
	traceReference			TraceReference,
	traceRecordingSessionReference	TraceRecordingSessionReference,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TraceRecordingSessionReference		::= INTEGER (0..65535)

TraceReference				::= OCTET STRING (SIZE (2..3))

TraceType				::= OCTET STRING (SIZE (1))
-- Reference: GSM TS 12.08

TrafficClass ::= ENUMERATED {
	conversational,
	streaming,
	interactive,
	background,
	...
}

TrafficHandlingPriority 		::= INTEGER { spare (0), highest (1), lowest (14), no-priority-used (15) } (0..15)

TransferDelay 				::= INTEGER (0..65535)
-- Unit is millisecond

UnsuccessfullyTransmittedDataVolume	::= INTEGER (0..4294967295)

TransportLayerAddress 			::= BIT STRING (SIZE (1..160, ...))

TrCH-ID ::= SEQUENCE {
	dCH-ID		DCH-ID		OPTIONAL,
	dSCH-ID		DSCH-ID		OPTIONAL,
	uSCH-ID		USCH-ID		OPTIONAL,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

TrCH-ID-List ::= SEQUENCE (SIZE (1..maxRAB-Subflows)) OF
	TrCH-ID

TriggerID				::= OCTET STRING (SIZE (3..22))

TunnelInformation ::= SEQUENCE {
	transportLayerAddress	TransportLayerAddress,
	uDP-Port-Number		Port-Number				OPTIONAL,
	iE-Extensions		IE-Extensions				OPTIONAL,
	...
}

TypeOfError ::= ENUMERATED {
	not-understood,
	missing,
	...
}


-- U

UE-AggregateMaximumBitRate ::= SEQUENCE {
	uE-AggregateMaximumBitRateDownlink	UE-AggregateMaximumBitRateDownlink	OPTIONAL,
	uE-AggregateMaximumBitRateUplink	UE-AggregateMaximumBitRateUplink	OPTIONAL,
	...
}

UE-AggregateMaximumBitRateDownlink	::= INTEGER (1..1000000000)
-- Unit is bits per sec

UE-AggregateMaximumBitRateUplink	::= INTEGER (1..1000000000)
-- Unit is bits per sec


UE-History-Information ::= OCTET STRING

UE-ID ::= CHOICE {
	imsi	IMSI,
	imei	IMEI,
	...,
	imeisv	IMEISV

}

UESBI-Iu ::= SEQUENCE {
	uESBI-IuA	UESBI-IuA	OPTIONAL,
	uESBI-IuB	UESBI-IuB	OPTIONAL,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

UESBI-IuA				::= BIT STRING (SIZE(1..128))
-- Reference: TR25.994 --
UESBI-IuB				::= BIT STRING (SIZE(1..128))
-- Reference: TR25.995 --

UL-GTP-PDU-SequenceNumber		::= INTEGER (0..65535)

UL-N-PDU-SequenceNumber 		::= INTEGER (0..65535)

UPInformation		::=		SEQUENCE {
	frameSeqNoUL		FrameSequenceNumber,
	frameSeqNoDL		FrameSequenceNumber,
	pdu14FrameSeqNoUL	PDUType14FrameSequenceNumber,
	pdu14FrameSeqNoDL	PDUType14FrameSequenceNumber,
	dataPDUType		DataPDUType,
	upinitialisationFrame	UPInitialisationFrame,
	iE-Extensions		IE-Extensions	OPTIONAL,
	...
}

UPInitialisationFrame	::= OCTET STRING

UP-ModeVersions		::= BIT STRING (SIZE (16))

USCH-ID			::= INTEGER (0..255)

UserPlaneMode ::= ENUMERATED {
	transparent-mode,
	support-mode-for-predefined-SDU-sizes,
	...
}

UTRAN-CellID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	cellID		TargetCellId,
	iE-Extensions	IE-Extensions	OPTIONAL
}


-- V

VelocityEstimate ::= CHOICE {
	horizontalVelocity			HorizontalVelocity,
	horizontalWithVerticalVelocity		HorizontalWithVerticalVelocity,
	horizontalVelocityWithUncertainty	HorizontalVelocityWithUncertainty,
	horizontalWithVeritcalVelocityAndUncertainty	HorizontalWithVerticalVelocityAndUncertainty,
	...
}

HorizontalVelocity	::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalWithVerticalVelocity ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	veritcalVelocity		VerticalVelocity,
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalVelocityWithUncertainty ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	uncertaintySpeed		INTEGER (0..255),
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalWithVerticalVelocityAndUncertainty ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	veritcalVelocity		VerticalVelocity,
	horizontalUncertaintySpeed	INTEGER (0..255),
	verticalUncertaintySpeed	INTEGER (0..255),
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalSpeedAndBearing ::= SEQUENCE {
	bearing		INTEGER (0..359),
	horizontalSpeed	INTEGER (0..2047)
}

VerticalVelocity ::= SEQUENCE {
	veritcalSpeed		INTEGER (0..255),
	veritcalSpeedDirection	VerticalSpeedDirection
}

VerticalSpeedDirection ::= ENUMERATED {
	upward,
	downward
}

VerticalAccuracyCode	::= INTEGER (0..127)

VoiceSupportMatchIndicator ::= ENUMERATED { 
	supported,
	not-supported,
	...
}

END
