
/*** <<< INCLUDES [Enum1] >>> ***/

#include <ENUMERATED.h>

/*** <<< DEPS [Enum1] >>> ***/

typedef enum Enum1 {
	Enum1_red	= 0,
	Enum1_green	= 1,
	Enum1_blue	= 4,
	Enum1_alpha	= 5
	/*
	 * Enumeration is extensible
	 */
} e_Enum1;

/*** <<< TYPE-DECLS [Enum1] >>> ***/

typedef ENUMERATED_t	 Enum1_t;

/*** <<< FUNC-DECLS [Enum1] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_Enum1;
asn_struct_free_f Enum1_free;
asn_struct_print_f Enum1_print;
asn_constr_check_f Enum1_constraint;
ber_type_decoder_f Enum1_decode_ber;
der_type_encoder_f Enum1_encode_der;
xer_type_decoder_f Enum1_decode_xer;
xer_type_encoder_f Enum1_encode_xer;

/*** <<< CODE [Enum1] >>> ***/

/*
 * This type is implemented using ENUMERATED,
 * so here we adjust the DEF accordingly.
 */

/*** <<< STAT-DEFS [Enum1] >>> ***/

static const asn_INTEGER_enum_map_t asn_MAP_Enum1_value2enum_1[] = {
	{ 0,	3,	"red" },
	{ 1,	5,	"green" },
	{ 4,	4,	"blue" },
	{ 5,	5,	"alpha" }
	/* This list is extensible */
};
static const unsigned int asn_MAP_Enum1_enum2value_1[] = {
	3,	/* alpha(5) */
	2,	/* blue(4) */
	1,	/* green(1) */
	0	/* red(0) */
	/* This list is extensible */
};
static const asn_INTEGER_specifics_t asn_SPC_Enum1_specs_1 = {
	asn_MAP_Enum1_value2enum_1,	/* "tag" => N; sorted by tag */
	asn_MAP_Enum1_enum2value_1,	/* N => "tag"; sorted by N */
	4,	/* Number of elements in the maps */
	5,	/* Extensions before this member */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_Enum1_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Enum1 = {
	"Enum1",
	"Enum1",
	&asn_OP_ENUMERATED,
	asn_DEF_Enum1_tags_1,
	sizeof(asn_DEF_Enum1_tags_1)
		/sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
	asn_DEF_Enum1_tags_1,	/* Same as above */
	sizeof(asn_DEF_Enum1_tags_1)
		/sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
	{ 0, 0, ENUMERATED_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_Enum1_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [Enum2] >>> ***/

#include <ENUMERATED.h>

/*** <<< DEPS [Enum2] >>> ***/

typedef enum Enum2 {
	Enum2_red	= 0,
	Enum2_green	= 1,
	Enum2_blue	= 45,
	Enum2_orange	= 23,
	Enum2_alpha	= 46,
	/*
	 * Enumeration is extensible
	 */
	Enum2_beta	= 12,
	Enum2_gamma	= 103
} e_Enum2;

/*** <<< TYPE-DECLS [Enum2] >>> ***/

typedef ENUMERATED_t	 Enum2_t;

/*** <<< FUNC-DECLS [Enum2] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_Enum2;
asn_struct_free_f Enum2_free;
asn_struct_print_f Enum2_print;
asn_constr_check_f Enum2_constraint;
ber_type_decoder_f Enum2_decode_ber;
der_type_encoder_f Enum2_encode_der;
xer_type_decoder_f Enum2_decode_xer;
xer_type_encoder_f Enum2_encode_xer;

/*** <<< CODE [Enum2] >>> ***/

/*
 * This type is implemented using ENUMERATED,
 * so here we adjust the DEF accordingly.
 */

/*** <<< STAT-DEFS [Enum2] >>> ***/

static const asn_INTEGER_enum_map_t asn_MAP_Enum2_value2enum_1[] = {
	{ 0,	3,	"red" },
	{ 1,	5,	"green" },
	{ 12,	4,	"beta" },
	{ 23,	6,	"orange" },
	{ 45,	4,	"blue" },
	{ 46,	5,	"alpha" },
	{ 103,	5,	"gamma" }
	/* This list is extensible */
};
static const unsigned int asn_MAP_Enum2_enum2value_1[] = {
	5,	/* alpha(46) */
	2,	/* beta(12) */
	4,	/* blue(45) */
	6,	/* gamma(103) */
	1,	/* green(1) */
	3,	/* orange(23) */
	0	/* red(0) */
	/* This list is extensible */
};
static const asn_INTEGER_specifics_t asn_SPC_Enum2_specs_1 = {
	asn_MAP_Enum2_value2enum_1,	/* "tag" => N; sorted by tag */
	asn_MAP_Enum2_enum2value_1,	/* N => "tag"; sorted by N */
	7,	/* Number of elements in the maps */
	6,	/* Extensions before this member */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_Enum2_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Enum2 = {
	"Enum2",
	"Enum2",
	&asn_OP_ENUMERATED,
	asn_DEF_Enum2_tags_1,
	sizeof(asn_DEF_Enum2_tags_1)
		/sizeof(asn_DEF_Enum2_tags_1[0]), /* 1 */
	asn_DEF_Enum2_tags_1,	/* Same as above */
	sizeof(asn_DEF_Enum2_tags_1)
		/sizeof(asn_DEF_Enum2_tags_1[0]), /* 1 */
	{ 0, 0, ENUMERATED_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_Enum2_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [Enum3] >>> ***/

#include <ENUMERATED.h>

/*** <<< DEPS [Enum3] >>> ***/

typedef enum Enum3 {
	Enum3_a	= 0,
	Enum3_b	= 3,
	/*
	 * Enumeration is extensible
	 */
	Enum3_c	= 1
} e_Enum3;

/*** <<< TYPE-DECLS [Enum3] >>> ***/

typedef ENUMERATED_t	 Enum3_t;

/*** <<< FUNC-DECLS [Enum3] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_Enum3;
asn_struct_free_f Enum3_free;
asn_struct_print_f Enum3_print;
asn_constr_check_f Enum3_constraint;
ber_type_decoder_f Enum3_decode_ber;
der_type_encoder_f Enum3_encode_der;
xer_type_decoder_f Enum3_decode_xer;
xer_type_encoder_f Enum3_encode_xer;

/*** <<< CODE [Enum3] >>> ***/

/*
 * This type is implemented using ENUMERATED,
 * so here we adjust the DEF accordingly.
 */

/*** <<< STAT-DEFS [Enum3] >>> ***/

static const asn_INTEGER_enum_map_t asn_MAP_Enum3_value2enum_1[] = {
	{ 0,	1,	"a" },
	{ 1,	1,	"c" },
	{ 3,	1,	"b" }
	/* This list is extensible */
};
static const unsigned int asn_MAP_Enum3_enum2value_1[] = {
	0,	/* a(0) */
	2,	/* b(3) */
	1	/* c(1) */
	/* This list is extensible */
};
static const asn_INTEGER_specifics_t asn_SPC_Enum3_specs_1 = {
	asn_MAP_Enum3_value2enum_1,	/* "tag" => N; sorted by tag */
	asn_MAP_Enum3_enum2value_1,	/* N => "tag"; sorted by N */
	3,	/* Number of elements in the maps */
	3,	/* Extensions before this member */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_Enum3_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Enum3 = {
	"Enum3",
	"Enum3",
	&asn_OP_ENUMERATED,
	asn_DEF_Enum3_tags_1,
	sizeof(asn_DEF_Enum3_tags_1)
		/sizeof(asn_DEF_Enum3_tags_1[0]), /* 1 */
	asn_DEF_Enum3_tags_1,	/* Same as above */
	sizeof(asn_DEF_Enum3_tags_1)
		/sizeof(asn_DEF_Enum3_tags_1[0]), /* 1 */
	{ 0, 0, ENUMERATED_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_Enum3_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [Enum4] >>> ***/

#include <ENUMERATED.h>

/*** <<< DEPS [Enum4] >>> ***/

typedef enum Enum4 {
	Enum4_a	= 0,
	Enum4_b	= 1,
	/*
	 * Enumeration is extensible
	 */
	Enum4_c	= 3,
	Enum4_d	= 4
} e_Enum4;

/*** <<< TYPE-DECLS [Enum4] >>> ***/

typedef ENUMERATED_t	 Enum4_t;

/*** <<< FUNC-DECLS [Enum4] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_Enum4;
asn_struct_free_f Enum4_free;
asn_struct_print_f Enum4_print;
asn_constr_check_f Enum4_constraint;
ber_type_decoder_f Enum4_decode_ber;
der_type_encoder_f Enum4_encode_der;
xer_type_decoder_f Enum4_decode_xer;
xer_type_encoder_f Enum4_encode_xer;

/*** <<< CODE [Enum4] >>> ***/

/*
 * This type is implemented using ENUMERATED,
 * so here we adjust the DEF accordingly.
 */

/*** <<< STAT-DEFS [Enum4] >>> ***/

static const asn_INTEGER_enum_map_t asn_MAP_Enum4_value2enum_1[] = {
	{ 0,	1,	"a" },
	{ 1,	1,	"b" },
	{ 3,	1,	"c" },
	{ 4,	1,	"d" }
	/* This list is extensible */
};
static const unsigned int asn_MAP_Enum4_enum2value_1[] = {
	0,	/* a(0) */
	1,	/* b(1) */
	2,	/* c(3) */
	3	/* d(4) */
	/* This list is extensible */
};
static const asn_INTEGER_specifics_t asn_SPC_Enum4_specs_1 = {
	asn_MAP_Enum4_value2enum_1,	/* "tag" => N; sorted by tag */
	asn_MAP_Enum4_enum2value_1,	/* N => "tag"; sorted by N */
	4,	/* Number of elements in the maps */
	3,	/* Extensions before this member */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_Enum4_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Enum4 = {
	"Enum4",
	"Enum4",
	&asn_OP_ENUMERATED,
	asn_DEF_Enum4_tags_1,
	sizeof(asn_DEF_Enum4_tags_1)
		/sizeof(asn_DEF_Enum4_tags_1[0]), /* 1 */
	asn_DEF_Enum4_tags_1,	/* Same as above */
	sizeof(asn_DEF_Enum4_tags_1)
		/sizeof(asn_DEF_Enum4_tags_1[0]), /* 1 */
	{ 0, 0, ENUMERATED_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_Enum4_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [Enum5] >>> ***/

#include <ENUMERATED.h>

/*** <<< DEPS [Enum5] >>> ***/

typedef enum Enum5 {
	Enum5_a	= 0,
	Enum5_z	= 25,
	/*
	 * Enumeration is extensible
	 */
	Enum5_d	= 26
} e_Enum5;

/*** <<< TYPE-DECLS [Enum5] >>> ***/

typedef ENUMERATED_t	 Enum5_t;

/*** <<< FUNC-DECLS [Enum5] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_Enum5;
asn_struct_free_f Enum5_free;
asn_struct_print_f Enum5_print;
asn_constr_check_f Enum5_constraint;
ber_type_decoder_f Enum5_decode_ber;
der_type_encoder_f Enum5_encode_der;
xer_type_decoder_f Enum5_decode_xer;
xer_type_encoder_f Enum5_encode_xer;

/*** <<< CODE [Enum5] >>> ***/

/*
 * This type is implemented using ENUMERATED,
 * so here we adjust the DEF accordingly.
 */

/*** <<< STAT-DEFS [Enum5] >>> ***/

static const asn_INTEGER_enum_map_t asn_MAP_Enum5_value2enum_1[] = {
	{ 0,	1,	"a" },
	{ 25,	1,	"z" },
	{ 26,	1,	"d" }
	/* This list is extensible */
};
static const unsigned int asn_MAP_Enum5_enum2value_1[] = {
	0,	/* a(0) */
	2,	/* d(26) */
	1	/* z(25) */
	/* This list is extensible */
};
static const asn_INTEGER_specifics_t asn_SPC_Enum5_specs_1 = {
	asn_MAP_Enum5_value2enum_1,	/* "tag" => N; sorted by tag */
	asn_MAP_Enum5_enum2value_1,	/* N => "tag"; sorted by N */
	3,	/* Number of elements in the maps */
	3,	/* Extensions before this member */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_Enum5_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Enum5 = {
	"Enum5",
	"Enum5",
	&asn_OP_ENUMERATED,
	asn_DEF_Enum5_tags_1,
	sizeof(asn_DEF_Enum5_tags_1)
		/sizeof(asn_DEF_Enum5_tags_1[0]), /* 1 */
	asn_DEF_Enum5_tags_1,	/* Same as above */
	sizeof(asn_DEF_Enum5_tags_1)
		/sizeof(asn_DEF_Enum5_tags_1[0]), /* 1 */
	{ 0, 0, ENUMERATED_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_Enum5_specs_1	/* Additional specs */
};

