initial chekin of code received by Ericsson on 20170410
diff --git a/M3UA_CNL113536/M3UA_CNL113536.tpd b/M3UA_CNL113536/M3UA_CNL113536.tpd
new file mode 100644
index 0000000..c672902
--- /dev/null
+++ b/M3UA_CNL113536/M3UA_CNL113536.tpd
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               M3UA_CNL113536.tpd
+   Description:        tpd project file
+   Rev:                R2A
+   Prodnr:             CNL 113 536
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>M3UA_CNL113536</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/M3UA_Types.ttcn" relativeURI="src/M3UA_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/M3UA_CNL113536</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/M3UA_CNL113536/doc/documentation_note.txt b/M3UA_CNL113536/doc/documentation_note.txt
new file mode 100644
index 0000000..eb68bfb
--- /dev/null
+++ b/M3UA_CNL113536/doc/documentation_note.txt
@@ -0,0 +1,13 @@
+Please note that the storage of the documentation of the product has been 
+moved to the eridoc.ericsson.se from the ClearCase.
+
+You can access the documentation of the product via the following links:
+
+The documentation belongs to the R2A revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=C&Lang=EN&PRev=Y
+
+The documentation belongs to the latest revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=HIGHEST&Lang=EN&Status=FREE&PRev=Y
+
diff --git a/M3UA_CNL113536/src/M3UA_Types.ttcn b/M3UA_CNL113536/src/M3UA_Types.ttcn
new file mode 100644
index 0000000..d79d832
--- /dev/null
+++ b/M3UA_CNL113536/src/M3UA_Types.ttcn
@@ -0,0 +1,805 @@
+/******************************************************************************
+* Copyright (c) 2004, 2015  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Ferenc Kovacs
+* Gabor Bettesch
+* Gabor Szalai
+******************************************************************************/
+//
+//  File:               M3UA_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 536
+//  Reference:
+
+module M3UA_Types {
+
+import from General_Types all; 
+
+external function enc_PDU_M3UA(in PDU_M3UA pdu) return octetstring
+with { extension "prototype(convert)"
+       extension "encode(RAW)"
+     }
+
+external function dec_PDU_M3UA(in octetstring stream) return PDU_M3UA
+with { extension "prototype(convert)"
+       extension "decode(RAW)"
+     }
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++      
+// M3UA PARAMETERS
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type octetstring M3UA_OCT0_255 length (0..255);
+
+type record M3UA_Point_Code
+{
+  OCT1 mask,
+  OCT3 affected_Point_Code
+}
+
+type record of M3UA_Point_Code M3UA_Point_Codes;
+
+type record M3UA_Error_Code
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT4      errorCode
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,errorCode)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Routing_Context
+{
+  OCT2            tag,
+  integer         lengthInd,
+  octetstring     routingContext
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,routingContext)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Affected_Point_Codes
+{
+  OCT2             tag,
+  integer          lengthInd,
+  M3UA_Point_Codes pointCodes
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,pointCodes)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Network_Appearance
+{
+  OCT2         tag,
+  integer      lengthInd,
+  OCT4         networkAppearance
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,networkAppearance)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Diagnostic_information
+{
+  OCT2         tag,
+  integer      lengthInd,
+  octetstring  diagnosticInformation
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,diagnosticInformation)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Correlation_ID
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT4      correlationID
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,correlationID)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+      
+type record M3UA_Protocol_Data
+{
+  OCT2        tag,
+  integer     lengthInd,
+  OCT4        oPC,
+  OCT4        dPC,
+  OCT1        sI,
+  OCT1        nI,
+  OCT1        mP,
+  OCT1        sLS,
+  octetstring userProtocolData
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,oPC,dPC,sI,nI,mP,sLS,
+                                       userProtocolData)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Info_String
+{
+  OCT2          tag,
+  integer       lengthInd,
+  M3UA_OCT0_255 infoString 
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,infoString)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record  M3UA_Concerned_Destination 
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT1      reserved,
+  OCT3      concernedDestination
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,
+                                       concernedDestination)"; 
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record  M3UA_Congestion_Indicators
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT1       reserved,
+  OCT3       congestionLevel
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,congestionLevel)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_User_Cause
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT2       cause,
+  OCT2       user
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,cause,user)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+        }    
+
+type record M3UA_ASP_Identifier
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT4       aSPIdentifier
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,aSPIdentifier)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }    
+
+type record M3UA_Heartbeat_Data
+{
+  OCT2        tag,
+  integer     lengthInd,
+  octetstring heartbeat_Data
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,heartbeat_Data)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Traffic_Mode_Type
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT4       trafficModeType
+} with { variant (lengthInd) "LENGTHTO (tag,lengthInd,trafficModeType)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+//PDUs
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// M3UA_ERR PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ERR
+{
+  OCT1                       version,
+  OCT1                       reserved,
+  OCT2                       messageClassAndType,
+  integer                    messageLength,
+  M3UA_ERR_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ERR_MessageParameters
+{
+  M3UA_Error_Code             error_Code,
+  M3UA_Routing_Context        routing_Context optional,
+  M3UA_Affected_Point_Codes   affected_Point_Codes optional,
+  M3UA_Network_Appearance     network_Appearance optional,
+  M3UA_Diagnostic_information diagnostic_information optional
+} with { variant "TAG(error_Code,             tag = '000C'O;
+                      routing_Context,        tag = '0006'O; 
+                      affected_Point_Codes,   tag = '0012'O; 
+                      network_Appearance,     tag = '0200'O; 
+                      diagnostic_information, tag = '0007'O; )"
+       }
+
+
+// M3UA_NOTIFY
+//  NOTE1 : NOTIFY should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_NOTIFY
+{
+  OCT1                       version,
+  OCT1                       reserved,
+  OCT2                       messageClassAndType,
+  integer                    messageLength,
+  octetstring                messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+
+//  M3UA_DATA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DATA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DATA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";   
+       }
+
+type set M3UA_DATA_MessageParameters
+{
+  M3UA_Network_Appearance  network_Appearance optional,
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Protocol_Data       protocol_Data,
+  M3UA_Correlation_ID      correlation_ID optional
+} with { variant "TAG(network_Appearance,   tag = '0200'O;
+                      routing_Context,      tag = '0006'O; 
+                      protocol_Data,        tag = '0210'O; 
+                      correlation_ID,       tag = '0013'O; )"        
+       }
+
+
+//  M3UA_DUNA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DUNA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DUNA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";  
+       }
+
+type set M3UA_DUNA_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,    tag = '0200'O;
+                      routing_Context,       tag = '0006'O; 
+                      affected_Point_Codes,  tag = '0012'O;
+                      info_String,           tag = '0004'O )"
+       }
+
+
+//  M3UA_DAVA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DAVA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DAVA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";  
+       }
+
+type set M3UA_DAVA_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_DAUD PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DAUD
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DAUD_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_DAUD_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_SCON PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_SCON
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_SCON_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_SCON_MessageParameters
+{
+  M3UA_Network_Appearance    network_Appearance optional,
+  M3UA_Routing_Context       routing_Context optional,
+  M3UA_Affected_Point_Codes  affected_Point_Codes,
+  M3UA_Concerned_Destination concerned_Destination optional,
+  M3UA_Congestion_Indicators congestion_Indicators optional,
+  M3UA_Info_String           info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      concerned_Destination,    tag = '0206'O;
+                      congestion_Indicators,    tag = '0205'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_DUPU PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DUPU
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DUPU_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_DUPU_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_User_Cause           user_Cause,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      user_Cause,               tag = '0204'O;
+                      info_String,              tag = '0004'O )"
+       }
+ 
+ 
+//  M3UA_DRST PDU
+//  NOTE1 : DRST should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DRST 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+     
+//  M3UA_ASPUP
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ASPUP
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPUP_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPUP_MessageParameters 
+{
+  M3UA_ASP_Identifier aSP_Identifier optional,
+  M3UA_Info_String    info_String optional
+} with { variant "TAG(aSP_Identifier,      tag = '0011'O;
+                      info_String,         tag = '0004'O; )"
+       }
+  
+  
+//M3UA_ASPUP_Ack  
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPUP_Ack  
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPUP_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPUP_Ack_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O; )"
+       }
+     
+     
+//M3UA_ASPDN
+//++++++++++++++++++++++++++++++++++++++++++++++++++   
+type record M3UA_ASPDN 
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPDN_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPDN_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O; )"
+       }
+
+
+//M3UA_ASPDN_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ASPDN_Ack 
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPDN_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPDN_Ack_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O;)"
+       }
+
+ 
+// M3UA_BEAT
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_BEAT 
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_BEAT_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_BEAT_MessageParameters
+{
+  M3UA_Heartbeat_Data  heartbeat_Data optional
+} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
+       }
+
+
+// M3UA_BEAT_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_BEAT_Ack 
+{
+  OCT1                            version,
+  OCT1                            reserved,
+  OCT2                            messageClassAndType,
+  integer                         messageLength,
+  M3UA_BEAT_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_BEAT_Ack_MessageParameters
+{
+  M3UA_Heartbeat_Data  heartbeat_Data optional
+} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
+       }
+
+
+// M3UA_ASPAC
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_ASPAC
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPAC_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPAC_MessageParameters
+{
+  M3UA_Traffic_Mode_Type    traffic_Mode_Type optional, 
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O; 
+                      routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+
+
+// M3UA_ASPAC_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_ASPAC_Ack
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPAC_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPAC_Ack_MessageParameters
+{
+  M3UA_Traffic_Mode_Type   traffic_Mode_Type optional, 
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Info_String         info_String optional
+} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O;
+                      routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+ 
+
+// M3UA_ASPIA
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPIA
+{ 
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPIA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+type set M3UA_ASPIA_MessageParameters 
+{
+  M3UA_Routing_Context    routing_Context optional,
+  M3UA_Info_String        info_String optional
+} with { variant "TAG(routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+
+ 
+// M3UA_ASPIA_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPIA_Ack
+{ 
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPIA_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPIA_Ack_MessageParameters 
+{
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Info_String         info_String optional
+} with { variant "TAG(routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+ 
+ 
+//  M3UA_REG_REQ
+//  NOTE1 : REG REQ should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_REG_REQ 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+ 
+//  M3UA_REG_RSP
+//  NOTE1 : REG RSP should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_REG_RSP 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+ 
+//  M3UA_DEREG_REQ
+//  NOTE1 : DEREG REQ should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DEREG_REQ 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+  
+ 
+//  M3UA_DEREG_RSP
+//  NOTE1 : DEREG RSP should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DEREG_RSP 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+
+// Top level PDU
+//************************************************************************
+type union PDU_M3UA
+{
+  M3UA_ERR        m3UA_ERR,        // Error
+  M3UA_NOTIFY     m3UA_NOTIFY,     // Notify - should not come
+  M3UA_DATA       m3UA_DATA,       // Payload data
+  M3UA_DUNA       m3UA_DUNA,       // Destination Unavailable
+  M3UA_DAVA       m3UA_DAVA,       // Destination Available
+  M3UA_DAUD       m3UA_DAUD,       // Destination State Audit
+  M3UA_SCON       m3UA_SCON,       // Signaling Congestion
+  M3UA_DUPU       m3UA_DUPU,       // Destination User Part Unavailable
+  M3UA_DRST       m3UA_DRST,       // DRST - should not come
+  M3UA_ASPUP      m3UA_ASPUP,      // ASP up
+  M3UA_ASPDN      m3UA_ASPDN,      // ASP down
+  M3UA_BEAT       m3UA_BEAT,       // Heartbeat
+  M3UA_BEAT_Ack   m3UA_BEAT_Ack,   // Heartbeat Ack
+  M3UA_ASPUP_Ack  m3UA_ASPUP_Ack,  // ASP up ack
+  M3UA_ASPDN_Ack  m3UA_ASPDN_Ack,  // ASP down ack
+  M3UA_ASPAC      m3UA_ASPAC,      // ASP Active
+  M3UA_ASPIA      m3UA_ASPIA,      // ASP Inactive
+  M3UA_ASPAC_Ack  m3UA_ASPAC_Ack,  // ASP Active Ack
+  M3UA_ASPIA_Ack  m3UA_ASPIA_Ack,  // ASP Inactive
+  M3UA_REG_REQ    m3UA_REG_REQ,    // REG REQ - should not come
+  M3UA_REG_RSP    m3UA_REG_RSP,    // REG RSP - should not come
+  M3UA_DEREG_REQ  m3UA_DEREG_REQ,  // DEREG REQ - should not come
+  M3UA_DEREG_RSP  m3UA_DEREG_RSP   // DEREG RSP - should not come
+} with { variant "TAG(
+          m3UA_ERR,        messageClassAndType = '0000'O;    //MGMT Class (0),
+          m3UA_NOTIFY,     messageClassAndType = '0001'O;    //MGMT Class (0),
+          m3UA_DATA,       messageClassAndType = '0101'O;    //Transf msg Class(1),
+          m3UA_DUNA,       messageClassAndType = '0201'O;    //SSNM Class(2),
+          m3UA_DAVA,       messageClassAndType = '0202'O;    //SSNM Class(2),
+          m3UA_DAUD,       messageClassAndType = '0203'O;    //SSNM Class(2),
+          m3UA_SCON,       messageClassAndType = '0204'O;    //SSNM Class(2),
+          m3UA_DUPU,       messageClassAndType = '0205'O;    //SSNM Class(2),
+          m3UA_DRST,       messageClassAndType = '0206'O;    //SSNM Class(2),
+          m3UA_ASPUP,      messageClassAndType = '0301'O;    //ASPSM Class(3),
+          m3UA_ASPDN,      messageClassAndType = '0302'O;    //ASPSM Class(3),
+          m3UA_BEAT,       messageClassAndType = '0303'O;    //ASPSM Class(3),
+          m3UA_ASPUP_Ack,  messageClassAndType = '0304'O;    //ASPSM Class(3),
+          m3UA_ASPDN_Ack,  messageClassAndType = '0305'O;    //ASPSM Class(3),
+          m3UA_BEAT_Ack,   messageClassAndType = '0306'O;    //ASPSM Class(3),
+          m3UA_ASPAC,      messageClassAndType = '0401'O;    //ASPTM Class(4),
+          m3UA_ASPIA,      messageClassAndType = '0402'O;    //ASPTM Class(4),
+          m3UA_ASPAC_Ack,  messageClassAndType = '0403'O;    //ASPTM Class(4),
+          m3UA_ASPIA_Ack,  messageClassAndType = '0404'O;    //ASPTM Class(4),
+          m3UA_REG_REQ,    messageClassAndType = '0901'O;    //RKM Class(9),
+          m3UA_REG_RSP,    messageClassAndType = '0902'O;    //RKM Class(9),
+          m3UA_DEREG_REQ,  messageClassAndType = '0903'O;    //RKM Class(9),
+          m3UA_DEREG_RSP,  messageClassAndType = '0904'O; )" //RKM Class(9),
+       }
+} with { encode "RAW"}