diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h b/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h
new file mode 100644
index 0000000..09d4f0f
--- /dev/null
+++ b/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h
@@ -0,0 +1,92 @@
+/*****************************************************************************
+#                                                                            *
+# Copyright 2019 AT&T Intellectual Property                                  *
+#                                                                            *
+# Licensed under the Apache License, Version 2.0 (the "License");            *
+# you may not use this file except in compliance with the License.           *
+# You may obtain a copy of the License at                                    *
+#                                                                            *
+#      http://www.apache.org/licenses/LICENSE-2.0                            *
+#                                                                            *
+# Unless required by applicable law or agreed to in writing, software        *
+# distributed under the License is distributed on an "AS IS" BASIS,          *
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *
+# See the License for the specific language governing permissions and        *
+# limitations under the License.                                             *
+#                                                                            *
+******************************************************************************/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asnFiles/X2AP-PDU-Contents.asn"
+ * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.`
+ */
+
+#ifndef	_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_
+#define	_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_
+
+
+#include "asn_application.h"
+
+/* Including external dependencies */
+#include "E-RAB-ID.h"
+#include "EN-DC-ResourceConfiguration.h"
+#include "constr_CHOICE.h"
+#include "constr_SEQUENCE.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR {
+	E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent,
+	E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct ProtocolExtensionContainer;
+struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent;
+struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent;
+
+/* E-RABs-Admitted-ToBeModified-SgNBModAck-Item */
+typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item {
+	E_RAB_ID_t	 e_RAB_ID;
+	EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration {
+		E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR present;
+		union E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_u {
+			struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	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;
+} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_ */
+#include "asn_internal.h"
