/**
 * Copyright 2013-2023 Software Radio Systems Limited
 *
 * This file is part of srsRAN.
 *
 * srsRAN is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * srsRAN is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * A copy of the GNU Affero General Public License can be found in
 * the LICENSE file in the top-level directory of this distribution
 * and at http://www.gnu.org/licenses/.
 *
 */

/*******************************************************************************
 *
 *                      3GPP TS ASN1 RRC v17.4.0 (2023-03)
 *
 ******************************************************************************/

#ifndef SRSASN1_RRC_UECAP_H
#define SRSASN1_RRC_UECAP_H

#include "common.h"

namespace asn1 {
namespace rrc {

/*******************************************************************************
 *                              Struct Definitions
 ******************************************************************************/

// UECapabilityEnquiry-v1710-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1710_ies_s {
  bool sidelink_request_r17_present = false;
  bool non_crit_ext_present         = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry-v1610-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1610_ies_s {
  bool                       rrc_seg_allowed_r16_present = false;
  bool                       non_crit_ext_present        = false;
  ue_cap_enquiry_v1710_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-BandwidthClass-r10 ::= ENUMERATED
struct ca_bw_class_r10_opts {
  enum options { a, b, c, d, e, f, /*...*/ nulltype } value;

  const char* to_string() const;
};
typedef enumerated<ca_bw_class_r10_opts, true> ca_bw_class_r10_e;

// UECapabilityEnquiry-v1560-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1560_ies_s {
  bool                       requested_cap_common_r15_present = false;
  bool                       non_crit_ext_present             = false;
  dyn_octstring              requested_cap_common_r15;
  ue_cap_enquiry_v1610_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandIndication-r14 ::= SEQUENCE
struct band_ind_r14_s {
  bool              ca_bw_class_ul_r14_present = false;
  uint16_t          band_eutra_r14             = 1;
  ca_bw_class_r10_e ca_bw_class_dl_r14;
  ca_bw_class_r10_e ca_bw_class_ul_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry-v1550-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1550_ies_s {
  bool                       requested_cap_nr_r15_present = false;
  bool                       non_crit_ext_present         = false;
  dyn_octstring              requested_cap_nr_r15;
  ue_cap_enquiry_v1560_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombination-r14 ::= SEQUENCE (SIZE (1..64)) OF BandIndication-r14
using band_combination_r14_l = dyn_array<band_ind_r14_s>;

// UECapabilityEnquiry-v1530-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1530_ies_s {
  bool                       request_stti_spt_cap_r15_present = false;
  bool                       eutra_nr_only_r15_present        = false;
  bool                       non_crit_ext_present             = false;
  ue_cap_enquiry_v1550_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationList-r14 ::= SEQUENCE (SIZE (1..384)) OF BandCombination-r14
using band_combination_list_r14_l = dyn_array<band_combination_r14_l>;

// UECapabilityEnquiry-v1510-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1510_ies_s {
  bool                       requested_freq_bands_nr_mrdc_r15_present = false;
  bool                       non_crit_ext_present                     = false;
  dyn_octstring              requested_freq_bands_nr_mrdc_r15;
  ue_cap_enquiry_v1530_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry-v1430-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1430_ies_s {
  bool                        request_diff_fallback_comb_list_r14_present = false;
  bool                        non_crit_ext_present                        = false;
  band_combination_list_r14_l request_diff_fallback_comb_list_r14;
  ue_cap_enquiry_v1510_ies_s  non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry-v1310-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1310_ies_s {
  bool                       request_reduced_format_r13_present            = false;
  bool                       request_skip_fallback_comb_r13_present        = false;
  bool                       requested_max_ccs_dl_r13_present              = false;
  bool                       requested_max_ccs_ul_r13_present              = false;
  bool                       request_reduced_int_non_cont_comb_r13_present = false;
  bool                       non_crit_ext_present                          = false;
  uint8_t                    requested_max_ccs_dl_r13                      = 2;
  uint8_t                    requested_max_ccs_ul_r13                      = 2;
  ue_cap_enquiry_v1430_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RAT-Type ::= ENUMERATED
struct rat_type_opts {
  enum options { eutra, utra, geran_cs, geran_ps, cdma2000_minus1_xrtt, nr, eutra_nr, spare1, /*...*/ nulltype } value;
  typedef uint16_t number_type;

  const char* to_string() const;
  uint16_t    to_number() const;
};
typedef enumerated<rat_type_opts, true> rat_type_e;

// UECapabilityEnquiry-v1180-IEs ::= SEQUENCE
struct ue_cap_enquiry_v1180_ies_s {
  using requested_freq_bands_r11_l_ = bounded_array<uint16_t, 16>;

  // member variables
  bool                        requested_freq_bands_r11_present = false;
  bool                        non_crit_ext_present             = false;
  requested_freq_bands_r11_l_ requested_freq_bands_r11;
  ue_cap_enquiry_v1310_ies_s  non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-CapabilityRequest ::= SEQUENCE (SIZE (1..8)) OF RAT-Type
using ue_cap_request_l = bounded_array<rat_type_e, 8>;

// UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE
struct ue_cap_enquiry_v8a0_ies_s {
  bool                       late_non_crit_ext_present = false;
  bool                       non_crit_ext_present      = false;
  dyn_octstring              late_non_crit_ext;
  ue_cap_enquiry_v1180_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry-r8-IEs ::= SEQUENCE
struct ue_cap_enquiry_r8_ies_s {
  bool                      non_crit_ext_present = false;
  ue_cap_request_l          ue_cap_request;
  ue_cap_enquiry_v8a0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityEnquiry ::= SEQUENCE
struct ue_cap_enquiry_s {
  struct crit_exts_c_ {
    struct c1_c_ {
      struct types_opts {
        enum options { ue_cap_enquiry_r8, spare3, spare2, spare1, nulltype } value;

        const char* to_string() const;
      };
      typedef enumerated<types_opts> types;

      // choice methods
      c1_c_() = default;
      void        set(types::options e = types::nulltype);
      types       type() const { return type_; }
      SRSASN_CODE pack(bit_ref& bref) const;
      SRSASN_CODE unpack(cbit_ref& bref);
      void        to_json(json_writer& j) const;
      // getters
      ue_cap_enquiry_r8_ies_s& ue_cap_enquiry_r8()
      {
        assert_choice_type(types::ue_cap_enquiry_r8, type_, "c1");
        return c;
      }
      const ue_cap_enquiry_r8_ies_s& ue_cap_enquiry_r8() const
      {
        assert_choice_type(types::ue_cap_enquiry_r8, type_, "c1");
        return c;
      }
      ue_cap_enquiry_r8_ies_s& set_ue_cap_enquiry_r8();
      void                     set_spare3();
      void                     set_spare2();
      void                     set_spare1();

    private:
      types                   type_;
      ue_cap_enquiry_r8_ies_s c;
    };
    using types = c1_or_crit_ext_e;

    // choice methods
    crit_exts_c_() = default;
    void        set(types::options e = types::nulltype);
    types       type() const { return type_; }
    SRSASN_CODE pack(bit_ref& bref) const;
    SRSASN_CODE unpack(cbit_ref& bref);
    void        to_json(json_writer& j) const;
    // getters
    c1_c_& c1()
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    const c1_c_& c1() const
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    c1_c_& set_c1();
    void   set_crit_exts_future();

  private:
    types type_;
    c1_c_ c;
  };

  // member variables
  uint8_t      rrc_transaction_id = 0;
  crit_exts_c_ crit_exts;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-RadioPagingInfo-r12 ::= SEQUENCE
struct ue_radio_paging_info_r12_s {
  struct wake_up_signal_min_gap_e_drx_r15_opts {
    enum options { ms40, ms240, ms1000, ms2000, nulltype } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<wake_up_signal_min_gap_e_drx_r15_opts> wake_up_signal_min_gap_e_drx_r15_e_;
  struct wake_up_signal_min_gap_e_drx_tdd_r15_opts {
    enum options { ms40, ms240, ms1000, ms2000, nulltype } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<wake_up_signal_min_gap_e_drx_tdd_r15_opts> wake_up_signal_min_gap_e_drx_tdd_r15_e_;

  // member variables
  bool    ext                       = false;
  bool    ue_category_v1250_present = false;
  uint8_t ue_category_v1250         = 0;
  // ...
  // group 0
  bool ue_category_dl_v1310_present = false;
  bool ce_mode_a_r13_present        = false;
  bool ce_mode_b_r13_present        = false;
  // group 1
  bool                                    wake_up_signal_r15_present                   = false;
  bool                                    wake_up_signal_tdd_r15_present               = false;
  bool                                    wake_up_signal_min_gap_e_drx_r15_present     = false;
  bool                                    wake_up_signal_min_gap_e_drx_tdd_r15_present = false;
  wake_up_signal_min_gap_e_drx_r15_e_     wake_up_signal_min_gap_e_drx_r15;
  wake_up_signal_min_gap_e_drx_tdd_r15_e_ wake_up_signal_min_gap_e_drx_tdd_r15;
  // group 2
  bool ue_category_dl_v1610_present                     = false;
  bool group_wake_up_signal_r16_present                 = false;
  bool group_wake_up_signal_tdd_r16_present             = false;
  bool group_wake_up_signal_alternation_r16_present     = false;
  bool group_wake_up_signal_alternation_tdd_r16_present = false;
  // group 3
  bool inactive_state_po_determination_r17_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-CapabilityRAT-Container ::= SEQUENCE
struct ue_cap_rat_container_s {
  rat_type_e    rat_type;
  dyn_octstring ue_cap_rat_container;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityInformation-v1250-IEs ::= SEQUENCE
struct ue_cap_info_v1250_ies_s {
  bool                       ue_radio_paging_info_r12_present = false;
  bool                       non_crit_ext_present             = false;
  ue_radio_paging_info_r12_s ue_radio_paging_info_r12;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-CapabilityRAT-ContainerList ::= SEQUENCE (SIZE (0..8)) OF UE-CapabilityRAT-Container
using ue_cap_rat_container_list_l = dyn_array<ue_cap_rat_container_s>;

// UECapabilityInformation-v8a0-IEs ::= SEQUENCE
struct ue_cap_info_v8a0_ies_s {
  bool                    late_non_crit_ext_present = false;
  bool                    non_crit_ext_present      = false;
  dyn_octstring           late_non_crit_ext;
  ue_cap_info_v1250_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityInformation-r8-IEs ::= SEQUENCE
struct ue_cap_info_r8_ies_s {
  bool                        non_crit_ext_present = false;
  ue_cap_rat_container_list_l ue_cap_rat_container_list;
  ue_cap_info_v8a0_ies_s      non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UECapabilityInformation ::= SEQUENCE
struct ue_cap_info_s {
  struct crit_exts_c_ {
    struct c1_c_ {
      struct types_opts {
        enum options { ue_cap_info_r8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, nulltype } value;

        const char* to_string() const;
      };
      typedef enumerated<types_opts> types;

      // choice methods
      c1_c_() = default;
      void        set(types::options e = types::nulltype);
      types       type() const { return type_; }
      SRSASN_CODE pack(bit_ref& bref) const;
      SRSASN_CODE unpack(cbit_ref& bref);
      void        to_json(json_writer& j) const;
      // getters
      ue_cap_info_r8_ies_s& ue_cap_info_r8()
      {
        assert_choice_type(types::ue_cap_info_r8, type_, "c1");
        return c;
      }
      const ue_cap_info_r8_ies_s& ue_cap_info_r8() const
      {
        assert_choice_type(types::ue_cap_info_r8, type_, "c1");
        return c;
      }
      ue_cap_info_r8_ies_s& set_ue_cap_info_r8();
      void                  set_spare7();
      void                  set_spare6();
      void                  set_spare5();
      void                  set_spare4();
      void                  set_spare3();
      void                  set_spare2();
      void                  set_spare1();

    private:
      types                type_;
      ue_cap_info_r8_ies_s c;
    };
    using types = c1_or_crit_ext_e;

    // choice methods
    crit_exts_c_() = default;
    void        set(types::options e = types::nulltype);
    types       type() const { return type_; }
    SRSASN_CODE pack(bit_ref& bref) const;
    SRSASN_CODE unpack(cbit_ref& bref);
    void        to_json(json_writer& j) const;
    // getters
    c1_c_& c1()
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    const c1_c_& c1() const
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    c1_c_& set_c1();
    void   set_crit_exts_future();

  private:
    types type_;
    c1_c_ c;
  };

  // member variables
  uint8_t      rrc_transaction_id = 0;
  crit_exts_c_ crit_exts;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// InterFreqBandInfo ::= SEQUENCE
struct inter_freq_band_info_s {
  bool inter_freq_need_for_gaps = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// InterRAT-BandInfo ::= SEQUENCE
struct inter_rat_band_info_s {
  bool inter_rat_need_for_gaps = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// InterFreqBandList ::= SEQUENCE (SIZE (1..64)) OF InterFreqBandInfo
using inter_freq_band_list_l = dyn_array<inter_freq_band_info_s>;

// InterRAT-BandList ::= SEQUENCE (SIZE (1..64)) OF InterRAT-BandInfo
using inter_rat_band_list_l = dyn_array<inter_rat_band_info_s>;

// BandInfoEUTRA ::= SEQUENCE
struct band_info_eutra_s {
  bool                   inter_rat_band_list_present = false;
  inter_freq_band_list_l inter_freq_band_list;
  inter_rat_band_list_l  inter_rat_band_list;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..128)) OF BandInfoEUTRA
using band_combination_list_eutra_r10_l = dyn_array<band_info_eutra_s>;

// MIMO-CapabilityDL-r10 ::= ENUMERATED
struct mimo_cap_dl_r10_opts {
  enum options { two_layers, four_layers, eight_layers, nulltype } value;
  typedef uint8_t number_type;

  const char* to_string() const;
  uint8_t     to_number() const;
};
typedef enumerated<mimo_cap_dl_r10_opts> mimo_cap_dl_r10_e;

// MIMO-CapabilityUL-r10 ::= ENUMERATED
struct mimo_cap_ul_r10_opts {
  enum options { two_layers, four_layers, nulltype } value;
  typedef uint8_t number_type;

  const char* to_string() const;
  uint8_t     to_number() const;
};
typedef enumerated<mimo_cap_ul_r10_opts> mimo_cap_ul_r10_e;

// CA-MIMO-ParametersDL-r10 ::= SEQUENCE
struct ca_mimo_params_dl_r10_s {
  bool              supported_mimo_cap_dl_r10_present = false;
  ca_bw_class_r10_e ca_bw_class_dl_r10;
  mimo_cap_dl_r10_e supported_mimo_cap_dl_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-MIMO-ParametersUL-r10 ::= SEQUENCE
struct ca_mimo_params_ul_r10_s {
  bool              supported_mimo_cap_ul_r10_present = false;
  ca_bw_class_r10_e ca_bw_class_ul_r10;
  mimo_cap_ul_r10_e supported_mimo_cap_ul_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParametersDL-r10 ::= SEQUENCE (SIZE (1..16)) OF CA-MIMO-ParametersDL-r10
using band_params_dl_r10_l = dyn_array<ca_mimo_params_dl_r10_s>;

// BandParametersUL-r10 ::= SEQUENCE (SIZE (1..16)) OF CA-MIMO-ParametersUL-r10
using band_params_ul_r10_l = dyn_array<ca_mimo_params_ul_r10_s>;

// BandParameters-r10 ::= SEQUENCE
struct band_params_r10_s {
  bool                 band_params_ul_r10_present = false;
  bool                 band_params_dl_r10_present = false;
  uint8_t              band_eutra_r10             = 1;
  band_params_ul_r10_l band_params_ul_r10;
  band_params_dl_r10_l band_params_dl_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..64)) OF BandParameters-r10
using band_combination_params_r10_l = dyn_array<band_params_r10_s>;

// BandParameters-r11 ::= SEQUENCE
struct band_params_r11_s {
  struct supported_csi_proc_r11_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<supported_csi_proc_r11_opts> supported_csi_proc_r11_e_;

  // member variables
  bool                      band_params_ul_r11_present     = false;
  bool                      band_params_dl_r11_present     = false;
  bool                      supported_csi_proc_r11_present = false;
  uint16_t                  band_eutra_r11                 = 1;
  band_params_ul_r10_l      band_params_ul_r11;
  band_params_dl_r10_l      band_params_dl_r11;
  supported_csi_proc_r11_e_ supported_csi_proc_r11;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-r11 ::= SEQUENCE
struct band_combination_params_r11_s {
  using band_param_list_r11_l_ = dyn_array<band_params_r11_s>;

  // member variables
  bool                     ext                                      = false;
  bool                     supported_bw_combination_set_r11_present = false;
  bool                     multiple_timing_advance_r11_present      = false;
  bool                     simul_rx_tx_r11_present                  = false;
  band_param_list_r11_l_   band_param_list_r11;
  bounded_bitstring<1, 32> supported_bw_combination_set_r11;
  band_info_eutra_s        band_info_eutra_r11;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IntraBandContiguousCC-Info-r12 ::= SEQUENCE
struct intra_band_contiguous_cc_info_r12_s {
  struct supported_csi_proc_r12_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<supported_csi_proc_r12_opts> supported_csi_proc_r12_e_;

  // member variables
  bool                      four_layer_tm3_tm4_per_cc_r12_present = false;
  bool                      supported_mimo_cap_dl_r12_present     = false;
  bool                      supported_csi_proc_r12_present        = false;
  mimo_cap_dl_r10_e         supported_mimo_cap_dl_r12;
  supported_csi_proc_r12_e_ supported_csi_proc_r12;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-MIMO-ParametersDL-r13 ::= SEQUENCE
struct ca_mimo_params_dl_r13_s {
  using intra_band_contiguous_cc_info_list_r13_l_ = dyn_array<intra_band_contiguous_cc_info_r12_s>;

  // member variables
  bool                                      supported_mimo_cap_dl_r13_present = false;
  bool                                      four_layer_tm3_tm4_r13_present    = false;
  ca_bw_class_r10_e                         ca_bw_class_dl_r13;
  mimo_cap_dl_r10_e                         supported_mimo_cap_dl_r13;
  intra_band_contiguous_cc_info_list_r13_l_ intra_band_contiguous_cc_info_list_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParametersDL-r13 ::= CA-MIMO-ParametersDL-r13
using band_params_dl_r13_s = ca_mimo_params_dl_r13_s;

// BandParametersUL-r13 ::= CA-MIMO-ParametersUL-r10
using band_params_ul_r13_s = ca_mimo_params_ul_r10_s;

// BandParameters-r13 ::= SEQUENCE
struct band_params_r13_s {
  struct supported_csi_proc_r13_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<supported_csi_proc_r13_opts> supported_csi_proc_r13_e_;

  // member variables
  bool                      band_params_ul_r13_present     = false;
  bool                      band_params_dl_r13_present     = false;
  bool                      supported_csi_proc_r13_present = false;
  uint16_t                  band_eutra_r13                 = 1;
  band_params_ul_r13_s      band_params_ul_r13;
  band_params_dl_r13_s      band_params_dl_r13;
  supported_csi_proc_r13_e_ supported_csi_proc_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-r13 ::= SEQUENCE
struct band_combination_params_r13_s {
  using band_param_list_r13_l_ = dyn_array<band_params_r13_s>;
  struct dc_support_r13_s_ {
    struct supported_cell_grouping_r13_c_ {
      struct types_opts {
        enum options { three_entries_r13, four_entries_r13, five_entries_r13, nulltype } value;
        typedef uint8_t number_type;

        const char* to_string() const;
        uint8_t     to_number() const;
      };
      typedef enumerated<types_opts> types;

      // choice methods
      supported_cell_grouping_r13_c_() = default;
      supported_cell_grouping_r13_c_(const supported_cell_grouping_r13_c_& other);
      supported_cell_grouping_r13_c_& operator=(const supported_cell_grouping_r13_c_& other);
      ~supported_cell_grouping_r13_c_() { destroy_(); }
      void        set(types::options e = types::nulltype);
      types       type() const { return type_; }
      SRSASN_CODE pack(bit_ref& bref) const;
      SRSASN_CODE unpack(cbit_ref& bref);
      void        to_json(json_writer& j) const;
      // getters
      fixed_bitstring<3>& three_entries_r13()
      {
        assert_choice_type(types::three_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<3> >();
      }
      fixed_bitstring<7>& four_entries_r13()
      {
        assert_choice_type(types::four_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<7> >();
      }
      fixed_bitstring<15>& five_entries_r13()
      {
        assert_choice_type(types::five_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<15> >();
      }
      const fixed_bitstring<3>& three_entries_r13() const
      {
        assert_choice_type(types::three_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<3> >();
      }
      const fixed_bitstring<7>& four_entries_r13() const
      {
        assert_choice_type(types::four_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<7> >();
      }
      const fixed_bitstring<15>& five_entries_r13() const
      {
        assert_choice_type(types::five_entries_r13, type_, "supportedCellGrouping-r13");
        return c.get<fixed_bitstring<15> >();
      }
      fixed_bitstring<3>&  set_three_entries_r13();
      fixed_bitstring<7>&  set_four_entries_r13();
      fixed_bitstring<15>& set_five_entries_r13();

    private:
      types                                 type_;
      choice_buffer_t<fixed_bitstring<15> > c;

      void destroy_();
    };

    // member variables
    bool                           async_r13_present                   = false;
    bool                           supported_cell_grouping_r13_present = false;
    supported_cell_grouping_r13_c_ supported_cell_grouping_r13;
  };

  // member variables
  bool                     different_fallback_supported_r13_present  = false;
  bool                     supported_bw_combination_set_r13_present  = false;
  bool                     multiple_timing_advance_r13_present       = false;
  bool                     simul_rx_tx_r13_present                   = false;
  bool                     dc_support_r13_present                    = false;
  bool                     supported_naics_minus2_crs_ap_r13_present = false;
  bool                     comm_supported_bands_per_bc_r13_present   = false;
  band_param_list_r13_l_   band_param_list_r13;
  bounded_bitstring<1, 32> supported_bw_combination_set_r13;
  band_info_eutra_s        band_info_eutra_r13;
  dc_support_r13_s_        dc_support_r13;
  bounded_bitstring<1, 8>  supported_naics_minus2_crs_ap_r13;
  bounded_bitstring<1, 64> comm_supported_bands_per_bc_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1090 ::= SEQUENCE
struct band_params_v1090_s {
  bool     ext                      = false;
  bool     band_eutra_v1090_present = false;
  uint16_t band_eutra_v1090         = 65;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..64)) OF BandParameters-v1090
using band_combination_params_v1090_l = dyn_array<band_params_v1090_s>;

// CA-MIMO-ParametersDL-v10i0 ::= SEQUENCE
struct ca_mimo_params_dl_v10i0_s {
  bool four_layer_tm3_tm4_r10_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v10i0 ::= SEQUENCE
struct band_params_v10i0_s {
  using band_params_dl_v10i0_l_ = dyn_array<ca_mimo_params_dl_v10i0_s>;

  // member variables
  band_params_dl_v10i0_l_ band_params_dl_v10i0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v10i0 ::= SEQUENCE
struct band_combination_params_v10i0_s {
  using band_param_list_v10i0_l_ = dyn_array<band_params_v10i0_s>;

  // member variables
  bool                     band_param_list_v10i0_present = false;
  band_param_list_v10i0_l_ band_param_list_v10i0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1130 ::= SEQUENCE
struct band_params_v1130_s {
  struct supported_csi_proc_r11_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<supported_csi_proc_r11_opts> supported_csi_proc_r11_e_;

  // member variables
  supported_csi_proc_r11_e_ supported_csi_proc_r11;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1130 ::= SEQUENCE
struct band_combination_params_v1130_s {
  using band_param_list_r11_l_ = dyn_array<band_params_v1130_s>;

  // member variables
  bool                   ext                                 = false;
  bool                   multiple_timing_advance_r11_present = false;
  bool                   simul_rx_tx_r11_present             = false;
  bool                   band_param_list_r11_present         = false;
  band_param_list_r11_l_ band_param_list_r11;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1250 ::= SEQUENCE
struct band_combination_params_v1250_s {
  struct dc_support_r12_s_ {
    struct supported_cell_grouping_r12_c_ {
      struct types_opts {
        enum options { three_entries_r12, four_entries_r12, five_entries_r12, nulltype } value;
        typedef uint8_t number_type;

        const char* to_string() const;
        uint8_t     to_number() const;
      };
      typedef enumerated<types_opts> types;

      // choice methods
      supported_cell_grouping_r12_c_() = default;
      supported_cell_grouping_r12_c_(const supported_cell_grouping_r12_c_& other);
      supported_cell_grouping_r12_c_& operator=(const supported_cell_grouping_r12_c_& other);
      ~supported_cell_grouping_r12_c_() { destroy_(); }
      void        set(types::options e = types::nulltype);
      types       type() const { return type_; }
      SRSASN_CODE pack(bit_ref& bref) const;
      SRSASN_CODE unpack(cbit_ref& bref);
      void        to_json(json_writer& j) const;
      // getters
      fixed_bitstring<3>& three_entries_r12()
      {
        assert_choice_type(types::three_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<3> >();
      }
      fixed_bitstring<7>& four_entries_r12()
      {
        assert_choice_type(types::four_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<7> >();
      }
      fixed_bitstring<15>& five_entries_r12()
      {
        assert_choice_type(types::five_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<15> >();
      }
      const fixed_bitstring<3>& three_entries_r12() const
      {
        assert_choice_type(types::three_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<3> >();
      }
      const fixed_bitstring<7>& four_entries_r12() const
      {
        assert_choice_type(types::four_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<7> >();
      }
      const fixed_bitstring<15>& five_entries_r12() const
      {
        assert_choice_type(types::five_entries_r12, type_, "supportedCellGrouping-r12");
        return c.get<fixed_bitstring<15> >();
      }
      fixed_bitstring<3>&  set_three_entries_r12();
      fixed_bitstring<7>&  set_four_entries_r12();
      fixed_bitstring<15>& set_five_entries_r12();

    private:
      types                                 type_;
      choice_buffer_t<fixed_bitstring<15> > c;

      void destroy_();
    };

    // member variables
    bool                           async_r12_present                   = false;
    bool                           supported_cell_grouping_r12_present = false;
    supported_cell_grouping_r12_c_ supported_cell_grouping_r12;
  };

  // member variables
  bool                     ext                                       = false;
  bool                     dc_support_r12_present                    = false;
  bool                     supported_naics_minus2_crs_ap_r12_present = false;
  bool                     comm_supported_bands_per_bc_r12_present   = false;
  dc_support_r12_s_        dc_support_r12;
  bounded_bitstring<1, 8>  supported_naics_minus2_crs_ap_r12;
  bounded_bitstring<1, 64> comm_supported_bands_per_bc_r12;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-MIMO-ParametersDL-v1270 ::= SEQUENCE
struct ca_mimo_params_dl_v1270_s {
  using intra_band_contiguous_cc_info_list_r12_l_ = dyn_array<intra_band_contiguous_cc_info_r12_s>;

  // member variables
  intra_band_contiguous_cc_info_list_r12_l_ intra_band_contiguous_cc_info_list_r12;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1270 ::= SEQUENCE
struct band_params_v1270_s {
  using band_params_dl_v1270_l_ = dyn_array<ca_mimo_params_dl_v1270_s>;

  // member variables
  band_params_dl_v1270_l_ band_params_dl_v1270;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1270 ::= SEQUENCE
struct band_combination_params_v1270_s {
  using band_param_list_v1270_l_ = dyn_array<band_params_v1270_s>;

  // member variables
  bool                     band_param_list_v1270_present = false;
  band_param_list_v1270_l_ band_param_list_v1270;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-BeamformedCapabilities-r13 ::= SEQUENCE
struct mimo_bf_cap_r13_s {
  bool                    n_max_list_r13_present = false;
  uint8_t                 k_max_r13              = 1;
  bounded_bitstring<1, 7> n_max_list_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-BeamformedCapabilityList-r13 ::= SEQUENCE (SIZE (1..4)) OF MIMO-BeamformedCapabilities-r13
using mimo_bf_cap_list_r13_l = dyn_array<mimo_bf_cap_r13_s>;

// MIMO-NonPrecodedCapabilities-r13 ::= SEQUENCE
struct mimo_non_precoded_cap_r13_s {
  bool cfg1_r13_present = false;
  bool cfg2_r13_present = false;
  bool cfg3_r13_present = false;
  bool cfg4_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBCPerTM-r13 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_per_tm_r13_s {
  bool                        non_precoded_r13_present = false;
  bool                        bf_r13_present           = false;
  bool                        dmrs_enhance_r13_present = false;
  mimo_non_precoded_cap_r13_s non_precoded_r13;
  mimo_bf_cap_list_r13_l      bf_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBC-r13 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_r13_s {
  bool                                  params_tm9_r13_present  = false;
  bool                                  params_tm10_r13_present = false;
  mimo_ca_params_per_bo_bc_per_tm_r13_s params_tm9_r13;
  mimo_ca_params_per_bo_bc_per_tm_r13_s params_tm10_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1320 ::= SEQUENCE
struct band_params_v1320_s {
  mimo_ca_params_per_bo_bc_r13_s band_params_dl_v1320;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1320 ::= SEQUENCE
struct band_combination_params_v1320_s {
  using band_param_list_v1320_l_ = dyn_array<band_params_v1320_s>;

  // member variables
  bool                     band_param_list_v1320_present         = false;
  bool                     add_rx_tx_performance_req_r13_present = false;
  band_param_list_v1320_l_ band_param_list_v1320;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1380 ::= SEQUENCE
struct band_params_v1380_s {
  bool    tx_ant_switch_dl_r13_present = false;
  bool    tx_ant_switch_ul_r13_present = false;
  uint8_t tx_ant_switch_dl_r13         = 1;
  uint8_t tx_ant_switch_ul_r13         = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1380 ::= SEQUENCE
struct band_combination_params_v1380_s {
  using band_param_list_v1380_l_ = dyn_array<band_params_v1380_s>;

  // member variables
  bool                     band_param_list_v1380_present = false;
  band_param_list_v1380_l_ band_param_list_v1380;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBCPerTM-v1430 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_per_tm_v1430_s {
  bool csi_report_np_r14_present       = false;
  bool csi_report_advanced_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBC-v1430 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_v1430_s {
  bool                                    params_tm9_v1430_present  = false;
  bool                                    params_tm10_v1430_present = false;
  mimo_ca_params_per_bo_bc_per_tm_v1430_s params_tm9_v1430;
  mimo_ca_params_per_bo_bc_per_tm_v1430_s params_tm10_v1430;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SRS-CapabilityPerBandPair-r14 ::= SEQUENCE
struct srs_cap_per_band_pair_r14_s {
  struct retuning_info_s_ {
    struct rf_retuning_time_dl_r14_opts {
      enum options {
        n0,
        n0dot5,
        n1,
        n1dot5,
        n2,
        n2dot5,
        n3,
        n3dot5,
        n4,
        n4dot5,
        n5,
        n5dot5,
        n6,
        n6dot5,
        n7,
        spare1,
        nulltype
      } value;
      typedef float number_type;

      const char* to_string() const;
      float       to_number() const;
      const char* to_number_string() const;
    };
    typedef enumerated<rf_retuning_time_dl_r14_opts> rf_retuning_time_dl_r14_e_;
    struct rf_retuning_time_ul_r14_opts {
      enum options {
        n0,
        n0dot5,
        n1,
        n1dot5,
        n2,
        n2dot5,
        n3,
        n3dot5,
        n4,
        n4dot5,
        n5,
        n5dot5,
        n6,
        n6dot5,
        n7,
        spare1,
        nulltype
      } value;
      typedef float number_type;

      const char* to_string() const;
      float       to_number() const;
      const char* to_number_string() const;
    };
    typedef enumerated<rf_retuning_time_ul_r14_opts> rf_retuning_time_ul_r14_e_;

    // member variables
    bool                       rf_retuning_time_dl_r14_present = false;
    bool                       rf_retuning_time_ul_r14_present = false;
    rf_retuning_time_dl_r14_e_ rf_retuning_time_dl_r14;
    rf_retuning_time_ul_r14_e_ rf_retuning_time_ul_r14;
  };

  // member variables
  retuning_info_s_ retuning_info;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UL-256QAM-perCC-Info-r14 ::= SEQUENCE
struct ul_minus256_qam_per_cc_info_r14_s {
  bool ul_minus256_qam_per_cc_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1430 ::= SEQUENCE
struct band_params_v1430_s {
  using ul_minus256_qam_per_cc_info_list_r14_l_ = dyn_array<ul_minus256_qam_per_cc_info_r14_s>;
  using srs_cap_per_band_pair_list_r14_l_       = dyn_array<srs_cap_per_band_pair_r14_s>;

  // member variables
  bool                                    band_params_dl_v1430_present                 = false;
  bool                                    ul_minus256_qam_r14_present                  = false;
  bool                                    ul_minus256_qam_per_cc_info_list_r14_present = false;
  bool                                    srs_cap_per_band_pair_list_r14_present       = false;
  mimo_ca_params_per_bo_bc_v1430_s        band_params_dl_v1430;
  ul_minus256_qam_per_cc_info_list_r14_l_ ul_minus256_qam_per_cc_info_list_r14;
  srs_cap_per_band_pair_list_r14_l_       srs_cap_per_band_pair_list_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1430 ::= SEQUENCE
struct band_combination_params_v1430_s {
  using band_param_list_v1430_l_ = dyn_array<band_params_v1430_s>;

  // member variables
  bool                      band_param_list_v1430_present                      = false;
  bool                      v2x_supported_tx_band_comb_list_per_bc_r14_present = false;
  bool                      v2x_supported_rx_band_comb_list_per_bc_r14_present = false;
  band_param_list_v1430_l_  band_param_list_v1430;
  bounded_bitstring<1, 384> v2x_supported_tx_band_comb_list_per_bc_r14;
  bounded_bitstring<1, 384> v2x_supported_rx_band_comb_list_per_bc_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MUST-Parameters-r14 ::= SEQUENCE
struct must_params_r14_s {
  bool must_tm234_up_to2_tx_r14_present                     = false;
  bool must_tm89_up_to_one_interfering_layer_r14_present    = false;
  bool must_tm10_up_to_one_interfering_layer_r14_present    = false;
  bool must_tm89_up_to_three_interfering_layers_r14_present = false;
  bool must_tm10_up_to_three_interfering_layers_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1450 ::= SEQUENCE
struct band_params_v1450_s {
  bool              must_cap_per_band_r14_present = false;
  must_params_r14_s must_cap_per_band_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1450 ::= SEQUENCE
struct band_combination_params_v1450_s {
  using band_param_list_v1450_l_ = dyn_array<band_params_v1450_s>;

  // member variables
  bool                     band_param_list_v1450_present = false;
  band_param_list_v1450_l_ band_param_list_v1450;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBCPerTM-v1470 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_per_tm_v1470_s {
  struct csi_report_advanced_max_ports_r14_opts {
    enum options { n8, n12, n16, n20, n24, n28, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<csi_report_advanced_max_ports_r14_opts> csi_report_advanced_max_ports_r14_e_;

  // member variables
  bool                                 csi_report_advanced_max_ports_r14_present = false;
  csi_report_advanced_max_ports_r14_e_ csi_report_advanced_max_ports_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBC-v1470 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_v1470_s {
  mimo_ca_params_per_bo_bc_per_tm_v1470_s params_tm9_v1470;
  mimo_ca_params_per_bo_bc_per_tm_v1470_s params_tm10_v1470;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1470 ::= SEQUENCE
struct band_params_v1470_s {
  bool                             band_params_dl_v1470_present = false;
  mimo_ca_params_per_bo_bc_v1470_s band_params_dl_v1470;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1470 ::= SEQUENCE
struct band_combination_params_v1470_s {
  using band_param_list_v1470_l_ = dyn_array<band_params_v1470_s>;

  // member variables
  bool                     band_param_list_v1470_present = false;
  bool                     srs_max_simul_ccs_r14_present = false;
  band_param_list_v1470_l_ band_param_list_v1470;
  uint8_t                  srs_max_simul_ccs_r14 = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SRS-CapabilityPerBandPair-v14b0 ::= SEQUENCE
struct srs_cap_per_band_pair_v14b0_s {
  bool srs_flex_timing_r14_present  = false;
  bool srs_harq_ref_cfg_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v14b0 ::= SEQUENCE
struct band_params_v14b0_s {
  using srs_cap_per_band_pair_list_v14b0_l_ = dyn_array<srs_cap_per_band_pair_v14b0_s>;

  // member variables
  bool                                srs_cap_per_band_pair_list_v14b0_present = false;
  srs_cap_per_band_pair_list_v14b0_l_ srs_cap_per_band_pair_list_v14b0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v14b0 ::= SEQUENCE
struct band_combination_params_v14b0_s {
  using band_param_list_v14b0_l_ = dyn_array<band_params_v14b0_s>;

  // member variables
  bool                     band_param_list_v14b0_present = false;
  band_param_list_v14b0_l_ band_param_list_v14b0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// DL-UL-CCs-r15 ::= SEQUENCE
struct dl_ul_ccs_r15_s {
  bool    max_num_dl_ccs_r15_present = false;
  bool    max_num_ul_ccs_r15_present = false;
  uint8_t max_num_dl_ccs_r15         = 1;
  uint8_t max_num_ul_ccs_r15         = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-MIMO-ParametersDL-r15 ::= SEQUENCE
struct ca_mimo_params_dl_r15_s {
  using intra_band_contiguous_cc_info_list_r15_l_ = dyn_array<intra_band_contiguous_cc_info_r12_s>;

  // member variables
  bool                                      supported_mimo_cap_dl_r15_present              = false;
  bool                                      four_layer_tm3_tm4_r15_present                 = false;
  bool                                      intra_band_contiguous_cc_info_list_r15_present = false;
  mimo_cap_dl_r10_e                         supported_mimo_cap_dl_r15;
  intra_band_contiguous_cc_info_list_r15_l_ intra_band_contiguous_cc_info_list_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CA-MIMO-ParametersUL-r15 ::= SEQUENCE
struct ca_mimo_params_ul_r15_s {
  bool              supported_mimo_cap_ul_r15_present = false;
  mimo_cap_ul_r10_e supported_mimo_cap_ul_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// STTI-SupportedCombinations-r15 ::= SEQUENCE
struct stti_supported_combinations_r15_s {
  using combination_minus22_minus27_r15_l_ = dyn_array<dl_ul_ccs_r15_s>;
  using combination_minus77_minus22_r15_l_ = dyn_array<dl_ul_ccs_r15_s>;
  using combination_minus77_minus27_r15_l_ = dyn_array<dl_ul_ccs_r15_s>;

  // member variables
  bool                               combination_minus22_r15_present         = false;
  bool                               combination_minus77_r15_present         = false;
  bool                               combination_minus27_r15_present         = false;
  bool                               combination_minus22_minus27_r15_present = false;
  bool                               combination_minus77_minus22_r15_present = false;
  bool                               combination_minus77_minus27_r15_present = false;
  dl_ul_ccs_r15_s                    combination_minus22_r15;
  dl_ul_ccs_r15_s                    combination_minus77_r15;
  dl_ul_ccs_r15_s                    combination_minus27_r15;
  combination_minus22_minus27_r15_l_ combination_minus22_minus27_r15;
  combination_minus77_minus22_r15_l_ combination_minus77_minus22_r15;
  combination_minus77_minus27_r15_l_ combination_minus77_minus27_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// STTI-SPT-BandParameters-r15 ::= SEQUENCE
struct stti_spt_band_params_r15_s {
  struct stti_supported_csi_proc_r15_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<stti_supported_csi_proc_r15_opts> stti_supported_csi_proc_r15_e_;

  // member variables
  bool                              ext                                            = false;
  bool                              dl_minus1024_qam_slot_r15_present              = false;
  bool                              dl_minus1024_qam_subslot_ta_minus1_r15_present = false;
  bool                              dl_minus1024_qam_subslot_ta_minus2_r15_present = false;
  bool                              simul_tx_different_tx_dur_r15_present          = false;
  bool                              stti_ca_mimo_params_dl_r15_present             = false;
  bool                              stti_fd_mimo_coexistence_present               = false;
  bool                              stti_mimo_ca_params_per_bo_bcs_r15_present     = false;
  bool                              stti_mimo_ca_params_per_bo_bcs_v1530_present   = false;
  bool                              stti_supported_combinations_r15_present        = false;
  bool                              stti_supported_csi_proc_r15_present            = false;
  bool                              ul_minus256_qam_slot_r15_present               = false;
  bool                              ul_minus256_qam_subslot_r15_present            = false;
  ca_mimo_params_dl_r15_s           stti_ca_mimo_params_dl_r15;
  ca_mimo_params_ul_r15_s           stti_ca_mimo_params_ul_r15;
  mimo_ca_params_per_bo_bc_r13_s    stti_mimo_ca_params_per_bo_bcs_r15;
  mimo_ca_params_per_bo_bc_v1430_s  stti_mimo_ca_params_per_bo_bcs_v1530;
  stti_supported_combinations_r15_s stti_supported_combinations_r15;
  stti_supported_csi_proc_r15_e_    stti_supported_csi_proc_r15;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1530 ::= SEQUENCE
struct band_params_v1530_s {
  bool                       ue_tx_ant_sel_srs_minus1_t4_r_r15_present              = false;
  bool                       ue_tx_ant_sel_srs_minus2_t4_r_minus2_pairs_r15_present = false;
  bool                       ue_tx_ant_sel_srs_minus2_t4_r_minus3_pairs_r15_present = false;
  bool                       dl_minus1024_qam_r15_present                           = false;
  bool                       qcl_type_c_operation_r15_present                       = false;
  bool                       qcl_cri_based_csi_report_r15_present                   = false;
  bool                       stti_spt_band_params_r15_present                       = false;
  stti_spt_band_params_r15_s stti_spt_band_params_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SPT-Parameters-r15 ::= SEQUENCE
struct spt_params_r15_s {
  bool               frame_structure_type_spt_r15_present = false;
  bool               max_num_ccs_spt_r15_present          = false;
  fixed_bitstring<3> frame_structure_type_spt_r15;
  uint8_t            max_num_ccs_spt_r15 = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1530 ::= SEQUENCE
struct band_combination_params_v1530_s {
  using band_param_list_v1530_l_ = dyn_array<band_params_v1530_s>;

  // member variables
  bool                     band_param_list_v1530_present = false;
  bool                     spt_params_r15_present        = false;
  band_param_list_v1530_l_ band_param_list_v1530;
  spt_params_r15_s         spt_params_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// InterRAT-BandInfoNR-r16 ::= SEQUENCE
struct inter_rat_band_info_nr_r16_s {
  bool inter_rat_need_for_gaps_nr_r16 = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// InterRAT-BandListNR-r16 ::= SEQUENCE (SIZE (1..1024)) OF InterRAT-BandInfoNR-r16
using inter_rat_band_list_nr_r16_l = dyn_array<inter_rat_band_info_nr_r16_s>;

// SRS-CapabilityPerBandPair-v1610 ::= SEQUENCE
struct srs_cap_per_band_pair_v1610_s {
  bool add_srs_carrier_switching_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParameters-v1610 ::= SEQUENCE
struct band_params_v1610_s {
  struct intra_freq_daps_r16_s_ {
    bool intra_freq_async_daps_r16_present    = false;
    bool dummy_present                        = false;
    bool intra_freq_two_tags_daps_r16_present = false;
  };
  struct add_srs_ant_switching_r16_s_ {
    bool add_srs_minus1_t2_r_r16_present             = false;
    bool add_srs_minus1_t4_r_r16_present             = false;
    bool add_srs_minus2_t4_r_minus2pairs_r16_present = false;
    bool add_srs_minus2_t4_r_minus3pairs_r16_present = false;
  };
  using srs_cap_per_band_pair_list_v1610_l_ = dyn_array<srs_cap_per_band_pair_v1610_s>;

  // member variables
  bool                                intra_freq_daps_r16_present              = false;
  bool                                add_srs_freq_hop_r16_present             = false;
  bool                                add_srs_ant_switching_r16_present        = false;
  bool                                srs_cap_per_band_pair_list_v1610_present = false;
  intra_freq_daps_r16_s_              intra_freq_daps_r16;
  add_srs_ant_switching_r16_s_        add_srs_ant_switching_r16;
  srs_cap_per_band_pair_list_v1610_l_ srs_cap_per_band_pair_list_v1610;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasGapInfoNR-r16 ::= SEQUENCE
struct meas_gap_info_nr_r16_s {
  bool                         inter_rat_band_list_nr_en_dc_r16_present = false;
  bool                         inter_rat_band_list_nr_sa_r16_present    = false;
  inter_rat_band_list_nr_r16_l inter_rat_band_list_nr_en_dc_r16;
  inter_rat_band_list_nr_r16_l inter_rat_band_list_nr_sa_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1610 ::= SEQUENCE
struct band_combination_params_v1610_s {
  using band_param_list_v1610_l_ = dyn_array<band_params_v1610_s>;
  struct inter_freq_daps_r16_s_ {
    bool inter_freq_async_daps_r16_present       = false;
    bool inter_freq_multi_ul_tx_daps_r16_present = false;
  };

  // member variables
  bool                     meas_gap_info_nr_r16_present  = false;
  bool                     band_param_list_v1610_present = false;
  bool                     inter_freq_daps_r16_present   = false;
  meas_gap_info_nr_r16_s   meas_gap_info_nr_r16;
  band_param_list_v1610_l_ band_param_list_v1610;
  inter_freq_daps_r16_s_   inter_freq_daps_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// ScalingFactorSidelink-r16 ::= ENUMERATED
struct scaling_factor_sidelink_r16_opts {
  enum options { f0p4, f0p75, f0p8, f1, nulltype } value;

  const char* to_string() const;
};
typedef enumerated<scaling_factor_sidelink_r16_opts> scaling_factor_sidelink_r16_e;

// BandCombinationParameters-v1630 ::= SEQUENCE
struct band_combination_params_v1630_s {
  using scaling_factor_tx_sidelink_r16_l_ = dyn_array<scaling_factor_sidelink_r16_e>;
  using scaling_factor_rx_sidelink_r16_l_ = dyn_array<scaling_factor_sidelink_r16_e>;

  // member variables
  bool                              v2x_supported_tx_band_comb_list_per_bc_v1630_present = false;
  bool                              v2x_supported_rx_band_comb_list_per_bc_v1630_present = false;
  bool                              scaling_factor_tx_sidelink_r16_present               = false;
  bool                              scaling_factor_rx_sidelink_r16_present               = false;
  bool                              inter_band_pwr_sharing_sync_daps_r16_present         = false;
  bool                              inter_band_pwr_sharing_async_daps_r16_present        = false;
  bounded_bitstring<1, 512>         v2x_supported_tx_band_comb_list_per_bc_v1630;
  bounded_bitstring<1, 512>         v2x_supported_rx_band_comb_list_per_bc_v1630;
  scaling_factor_tx_sidelink_r16_l_ scaling_factor_tx_sidelink_r16;
  scaling_factor_rx_sidelink_r16_l_ scaling_factor_rx_sidelink_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParametersExt-r10 ::= SEQUENCE
struct band_combination_params_ext_r10_s {
  bool                     supported_bw_combination_set_r10_present = false;
  bounded_bitstring<1, 32> supported_bw_combination_set_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandListEUTRA ::= SEQUENCE (SIZE (1..64)) OF BandInfoEUTRA
using band_list_eutra_l = dyn_array<band_info_eutra_s>;

// V2X-BandwidthClass-r14 ::= ENUMERATED
struct v2x_bw_class_r14_opts {
  enum options { a, b, c, d, e, f, /*...*/ c1_v1530, nulltype } value;
  typedef uint8_t number_type;

  const char* to_string() const;
  uint8_t     to_number() const;
};
typedef enumerated<v2x_bw_class_r14_opts, true, 1> v2x_bw_class_r14_e;

// V2X-BandwidthClassSL-r14 ::= SEQUENCE (SIZE (1..16)) OF V2X-BandwidthClass-r14
using v2x_bw_class_sl_r14_l = bounded_array<v2x_bw_class_r14_e, 16>;

// BandParametersRxSL-r14 ::= SEQUENCE
struct band_params_rx_sl_r14_s {
  bool                  v2x_high_reception_r14_present = false;
  v2x_bw_class_sl_r14_l v2x_bw_class_rx_sl_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandParametersTxSL-r14 ::= SEQUENCE
struct band_params_tx_sl_r14_s {
  bool                  v2x_enb_sched_r14_present = false;
  bool                  v2x_high_pwr_r14_present  = false;
  v2x_bw_class_sl_r14_l v2x_bw_class_tx_sl_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetDL-PerCC-r15 ::= SEQUENCE
struct feature_set_dl_per_cc_r15_s {
  struct supported_csi_proc_r15_opts {
    enum options { n1, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<supported_csi_proc_r15_opts> supported_csi_proc_r15_e_;

  // member variables
  bool                      four_layer_tm3_tm4_r15_present         = false;
  bool                      supported_mimo_cap_dl_mrdc_r15_present = false;
  bool                      supported_csi_proc_r15_present         = false;
  mimo_cap_dl_r10_e         supported_mimo_cap_dl_mrdc_r15;
  supported_csi_proc_r15_e_ supported_csi_proc_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBCPerTM-r15 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_per_tm_r15_s {
  bool                        non_precoded_r13_present        = false;
  bool                        bf_r13_present                  = false;
  bool                        dmrs_enhance_r13_present        = false;
  bool                        csi_report_np_r14_present       = false;
  bool                        csi_report_advanced_r14_present = false;
  mimo_non_precoded_cap_r13_s non_precoded_r13;
  mimo_bf_cap_list_r13_l      bf_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-CA-ParametersPerBoBC-r15 ::= SEQUENCE
struct mimo_ca_params_per_bo_bc_r15_s {
  bool                                  params_tm9_r15_present  = false;
  bool                                  params_tm10_r15_present = false;
  mimo_ca_params_per_bo_bc_per_tm_r15_s params_tm9_r15;
  mimo_ca_params_per_bo_bc_per_tm_r15_s params_tm10_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetDL-r15 ::= SEQUENCE
struct feature_set_dl_r15_s {
  using feature_set_per_cc_list_dl_r15_l_ = bounded_array<uint8_t, 32>;

  // member variables
  bool                              mimo_ca_params_per_bo_bc_r15_present = false;
  mimo_ca_params_per_bo_bc_r15_s    mimo_ca_params_per_bo_bc_r15;
  feature_set_per_cc_list_dl_r15_l_ feature_set_per_cc_list_dl_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetUL-PerCC-r15 ::= SEQUENCE
struct feature_set_ul_per_cc_r15_s {
  bool              supported_mimo_cap_ul_r15_present = false;
  bool              ul_minus256_qam_r15_present       = false;
  mimo_cap_ul_r10_e supported_mimo_cap_ul_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetUL-r15 ::= SEQUENCE
struct feature_set_ul_r15_s {
  using feature_set_per_cc_list_ul_r15_l_ = bounded_array<uint8_t, 32>;

  // member variables
  feature_set_per_cc_list_ul_r15_l_ feature_set_per_cc_list_ul_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetDL-v1550 ::= SEQUENCE
struct feature_set_dl_v1550_s {
  bool dl_minus1024_qam_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeatureSetsEUTRA-r15 ::= SEQUENCE
struct feature_sets_eutra_r15_s {
  using feature_sets_dl_r15_l_        = dyn_array<feature_set_dl_r15_s>;
  using feature_sets_dl_per_cc_r15_l_ = dyn_array<feature_set_dl_per_cc_r15_s>;
  using feature_sets_ul_r15_l_        = dyn_array<feature_set_ul_r15_s>;
  using feature_sets_ul_per_cc_r15_l_ = dyn_array<feature_set_ul_per_cc_r15_s>;
  using feature_sets_dl_v1550_l_      = dyn_array<feature_set_dl_v1550_s>;

  // member variables
  bool                          ext                                = false;
  bool                          feature_sets_dl_r15_present        = false;
  bool                          feature_sets_dl_per_cc_r15_present = false;
  bool                          feature_sets_ul_r15_present        = false;
  bool                          feature_sets_ul_per_cc_r15_present = false;
  feature_sets_dl_r15_l_        feature_sets_dl_r15;
  feature_sets_dl_per_cc_r15_l_ feature_sets_dl_per_cc_r15;
  feature_sets_ul_r15_l_        feature_sets_ul_r15;
  feature_sets_ul_per_cc_r15_l_ feature_sets_ul_per_cc_r15;
  // ...
  // group 0
  copy_ptr<feature_sets_dl_v1550_l_> feature_sets_dl_v1550;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FreqBandIndicatorListEUTRA-r12 ::= SEQUENCE (SIZE (1..64)) OF INTEGER (1..256)
using freq_band_ind_list_eutra_r12_l = dyn_array<uint16_t>;

// SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..32)) OF BandclassCDMA2000
using supported_band_list1_xrtt_l = bounded_array<bandclass_cdma2000_e, 32>;

// IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE
struct irat_params_cdma2000_minus1_xrtt_s {
  struct tx_cfg1_xrtt_opts {
    enum options { single, dual, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<tx_cfg1_xrtt_opts> tx_cfg1_xrtt_e_;
  struct rx_cfg1_xrtt_opts {
    enum options { single, dual, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<rx_cfg1_xrtt_opts> rx_cfg1_xrtt_e_;

  // member variables
  supported_band_list1_xrtt_l supported_band_list1_xrtt;
  tx_cfg1_xrtt_e_             tx_cfg1_xrtt;
  rx_cfg1_xrtt_e_             rx_cfg1_xrtt;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandListHRPD ::= SEQUENCE (SIZE (1..32)) OF BandclassCDMA2000
using supported_band_list_hrpd_l = bounded_array<bandclass_cdma2000_e, 32>;

// IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE
struct irat_params_cdma2000_hrpd_s {
  struct tx_cfg_hrpd_opts {
    enum options { single, dual, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<tx_cfg_hrpd_opts> tx_cfg_hrpd_e_;
  struct rx_cfg_hrpd_opts {
    enum options { single, dual, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<rx_cfg_hrpd_opts> rx_cfg_hrpd_e_;

  // member variables
  supported_band_list_hrpd_l supported_band_list_hrpd;
  tx_cfg_hrpd_e_             tx_cfg_hrpd;
  rx_cfg_hrpd_e_             rx_cfg_hrpd;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandGERAN ::= ENUMERATED
struct supported_band_geran_opts {
  enum options {
    gsm450,
    gsm480,
    gsm710,
    gsm750,
    gsm810,
    gsm850,
    gsm900_p,
    gsm900_e,
    gsm900_r,
    gsm1800,
    gsm1900,
    spare5,
    spare4,
    spare3,
    spare2,
    spare1,
    // ...
    nulltype
  } value;

  const char* to_string() const;
};
typedef enumerated<supported_band_geran_opts, true> supported_band_geran_e;

// SupportedBandListGERAN ::= SEQUENCE (SIZE (1..64)) OF SupportedBandGERAN
using supported_band_list_geran_l = dyn_array<supported_band_geran_e>;

// IRAT-ParametersGERAN ::= SEQUENCE
struct irat_params_geran_s {
  supported_band_list_geran_l supported_band_list_geran;
  bool                        inter_rat_ps_ho_to_geran = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandNR-r15 ::= SEQUENCE
struct supported_band_nr_r15_s {
  uint16_t band_nr_r15 = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandListNR-r15 ::= SEQUENCE (SIZE (1..1024)) OF SupportedBandNR-r15
using supported_band_list_nr_r15_l = dyn_array<supported_band_nr_r15_s>;

// IRAT-ParametersNR-r15 ::= SEQUENCE
struct irat_params_nr_r15_s {
  bool                         en_dc_r15_present                     = false;
  bool                         event_b2_r15_present                  = false;
  bool                         supported_band_list_en_dc_r15_present = false;
  supported_band_list_nr_r15_l supported_band_list_en_dc_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1540 ::= SEQUENCE
struct irat_params_nr_v1540_s {
  bool                         eutra_minus5_gc_ho_to_nr_fdd_fr1_r15_present = false;
  bool                         eutra_minus5_gc_ho_to_nr_tdd_fr1_r15_present = false;
  bool                         eutra_minus5_gc_ho_to_nr_fdd_fr2_r15_present = false;
  bool                         eutra_minus5_gc_ho_to_nr_tdd_fr2_r15_present = false;
  bool                         eutra_epc_ho_to_nr_fdd_fr1_r15_present       = false;
  bool                         eutra_epc_ho_to_nr_tdd_fr1_r15_present       = false;
  bool                         eutra_epc_ho_to_nr_fdd_fr2_r15_present       = false;
  bool                         eutra_epc_ho_to_nr_tdd_fr2_r15_present       = false;
  bool                         ims_voice_over_nr_fr1_r15_present            = false;
  bool                         ims_voice_over_nr_fr2_r15_present            = false;
  bool                         sa_nr_r15_present                            = false;
  bool                         supported_band_list_nr_sa_r15_present        = false;
  supported_band_list_nr_r15_l supported_band_list_nr_sa_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandUTRA-FDD ::= ENUMERATED
struct supported_band_utra_fdd_opts {
  enum options {
    band_i,
    band_ii,
    band_iii,
    band_iv,
    band_v,
    band_vi,
    band_vii,
    band_viii,
    band_ix,
    band_x,
    band_xi,
    band_xii,
    band_xiii,
    band_xiv,
    band_xv,
    band_xvi,
    // ...
    band_xvii_minus8a0,
    band_xviii_minus8a0,
    band_xix_minus8a0,
    band_xx_minus8a0,
    band_xxi_minus8a0,
    band_xxii_minus8a0,
    band_xxiii_minus8a0,
    band_xxiv_minus8a0,
    band_xxv_minus8a0,
    band_xxvi_minus8a0,
    band_xxvii_minus8a0,
    band_xxviii_minus8a0,
    band_xxix_minus8a0,
    band_xxx_minus8a0,
    band_xxxi_minus8a0,
    band_xxxii_minus8a0,
    nulltype
  } value;

  const char* to_string() const;
};
typedef enumerated<supported_band_utra_fdd_opts, true, 16> supported_band_utra_fdd_e;

// SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..64)) OF SupportedBandUTRA-FDD
using supported_band_list_utra_fdd_l = dyn_array<supported_band_utra_fdd_e>;

// IRAT-ParametersUTRA-FDD ::= SEQUENCE
struct irat_params_utra_fdd_s {
  supported_band_list_utra_fdd_l supported_band_list_utra_fdd;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandUTRA-TDD128 ::= ENUMERATED
struct supported_band_utra_tdd128_opts {
  enum options { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, /*...*/ nulltype } value;

  const char* to_string() const;
};
typedef enumerated<supported_band_utra_tdd128_opts, true> supported_band_utra_tdd128_e;

// SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandUTRA-TDD128
using supported_band_list_utra_tdd128_l = dyn_array<supported_band_utra_tdd128_e>;

// IRAT-ParametersUTRA-TDD128 ::= SEQUENCE
struct irat_params_utra_tdd128_s {
  supported_band_list_utra_tdd128_l supported_band_list_utra_tdd128;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandUTRA-TDD384 ::= ENUMERATED
struct supported_band_utra_tdd384_opts {
  enum options { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, /*...*/ nulltype } value;

  const char* to_string() const;
};
typedef enumerated<supported_band_utra_tdd384_opts, true> supported_band_utra_tdd384_e;

// SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandUTRA-TDD384
using supported_band_list_utra_tdd384_l = dyn_array<supported_band_utra_tdd384_e>;

// IRAT-ParametersUTRA-TDD384 ::= SEQUENCE
struct irat_params_utra_tdd384_s {
  supported_band_list_utra_tdd384_l supported_band_list_utra_tdd384;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandUTRA-TDD768 ::= ENUMERATED
struct supported_band_utra_tdd768_opts {
  enum options { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, /*...*/ nulltype } value;

  const char* to_string() const;
};
typedef enumerated<supported_band_utra_tdd768_opts, true> supported_band_utra_tdd768_e;

// SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandUTRA-TDD768
using supported_band_list_utra_tdd768_l = dyn_array<supported_band_utra_tdd768_e>;

// IRAT-ParametersUTRA-TDD768 ::= SEQUENCE
struct irat_params_utra_tdd768_s {
  supported_band_list_utra_tdd768_l supported_band_list_utra_tdd768;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersWLAN-r13 ::= SEQUENCE
struct irat_params_wlan_r13_s {
  using supported_band_list_wlan_r13_l_ = bounded_array<wlan_band_ind_r13_e, 8>;

  // member variables
  bool                            supported_band_list_wlan_r13_present = false;
  supported_band_list_wlan_r13_l_ supported_band_list_wlan_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// ProcessingTimelineSet-r15 ::= ENUMERATED
struct processing_timeline_set_r15_opts {
  enum options { set1, set2, nulltype } value;
  typedef uint8_t number_type;

  const char* to_string() const;
  uint8_t     to_number() const;
};
typedef enumerated<processing_timeline_set_r15_opts> processing_timeline_set_r15_e;

// SkipSubframeProcessing-r15 ::= SEQUENCE
struct skip_sf_processing_r15_s {
  bool    skip_processing_dl_slot_r15_present     = false;
  bool    skip_processing_dl_sub_slot_r15_present = false;
  bool    skip_processing_ul_slot_r15_present     = false;
  bool    skip_processing_ul_sub_slot_r15_present = false;
  uint8_t skip_processing_dl_slot_r15             = 0;
  uint8_t skip_processing_dl_sub_slot_r15         = 0;
  uint8_t skip_processing_ul_slot_r15             = 0;
  uint8_t skip_processing_ul_sub_slot_r15         = 0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1530 ::= SEQUENCE
struct mac_params_v1530_s {
  using min_proc_timeline_subslot_r15_l_ = bounded_array<processing_timeline_set_r15_e, 3>;

  // member variables
  bool                             min_proc_timeline_subslot_r15_present = false;
  bool                             skip_sf_processing_r15_present        = false;
  bool                             early_data_up_r15_present             = false;
  bool                             dormant_scell_state_r15_present       = false;
  bool                             direct_scell_activation_r15_present   = false;
  bool                             direct_scell_hibernation_r15_present  = false;
  bool                             extended_lcid_dupl_r15_present        = false;
  bool                             sps_serving_cell_r15_present          = false;
  min_proc_timeline_subslot_r15_l_ min_proc_timeline_subslot_r15;
  skip_sf_processing_r15_s         skip_sf_processing_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-SupportedBandInfo-r16 ::= SEQUENCE
struct mbms_supported_band_info_r16_s {
  struct subcarrier_spacing_mbms_khz0dot37_r16_s_ {
    bool time_separation_slot2_r16_present = false;
    bool time_separation_slot4_r16_present = false;
  };

  // member variables
  bool                                     subcarrier_spacing_mbms_khz2dot5_r16_present  = false;
  bool                                     subcarrier_spacing_mbms_khz0dot37_r16_present = false;
  subcarrier_spacing_mbms_khz0dot37_r16_s_ subcarrier_spacing_mbms_khz0dot37_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-v1610 ::= SEQUENCE
struct mbms_params_v1610_s {
  struct mbms_scaling_factor2dot5_r16_opts {
    enum options { n2, n4, n6, n8, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<mbms_scaling_factor2dot5_r16_opts> mbms_scaling_factor2dot5_r16_e_;
  struct mbms_scaling_factor0dot37_r16_opts {
    enum options { n12, n16, n20, n24, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<mbms_scaling_factor0dot37_r16_opts> mbms_scaling_factor0dot37_r16_e_;
  using mbms_supported_band_info_list_r16_l_ = dyn_array<mbms_supported_band_info_r16_s>;

  // member variables
  bool                                 mbms_scaling_factor2dot5_r16_present  = false;
  bool                                 mbms_scaling_factor0dot37_r16_present = false;
  mbms_scaling_factor2dot5_r16_e_      mbms_scaling_factor2dot5_r16;
  mbms_scaling_factor0dot37_r16_e_     mbms_scaling_factor0dot37_r16;
  mbms_supported_band_info_list_r16_l_ mbms_supported_band_info_list_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-SupportedBandInfo-v1700 ::= SEQUENCE
struct mbms_supported_band_info_v1700_s {
  bool pmch_bw_n40_r17_present = false;
  bool pmch_bw_n35_r17_present = false;
  bool pmch_bw_n30_r17_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-v1700 ::= SEQUENCE
struct mbms_params_v1700_s {
  using mbms_supported_band_info_list_v1700_l_ = dyn_array<mbms_supported_band_info_v1700_s>;

  // member variables
  bool                                   mbms_supported_band_info_list_v1700_present = false;
  mbms_supported_band_info_list_v1700_l_ mbms_supported_band_info_list_v1700;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-BeamformedCapabilities-r13 ::= SEQUENCE
struct mimo_ue_bf_cap_r13_s {
  bool                   alt_codebook_r13_present = false;
  mimo_bf_cap_list_r13_l mimo_bf_cap_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-ParametersPerTM-r13 ::= SEQUENCE
struct mimo_ue_params_per_tm_r13_s {
  bool                        non_precoded_r13_present       = false;
  bool                        bf_r13_present                 = false;
  bool                        ch_meas_restrict_r13_present   = false;
  bool                        dmrs_enhance_r13_present       = false;
  bool                        csi_rs_enhance_tdd_r13_present = false;
  mimo_non_precoded_cap_r13_s non_precoded_r13;
  mimo_ue_bf_cap_r13_s        bf_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-Parameters-r13 ::= SEQUENCE
struct mimo_ue_params_r13_s {
  bool                        params_tm9_r13_present                 = false;
  bool                        params_tm10_r13_present                = false;
  bool                        srs_enhance_tdd_r13_present            = false;
  bool                        srs_enhance_r13_present                = false;
  bool                        interference_meas_restrict_r13_present = false;
  mimo_ue_params_per_tm_r13_s params_tm9_r13;
  mimo_ue_params_per_tm_r13_s params_tm10_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-ParametersPerTM-v1430 ::= SEQUENCE
struct mimo_ue_params_per_tm_v1430_s {
  struct nzp_csi_rs_aperiodic_info_r14_s_ {
    struct nmax_res_r14_opts {
      enum options { n1, n2, n4, n8, nulltype } value;
      typedef uint8_t number_type;

      const char* to_string() const;
      uint8_t     to_number() const;
    };
    typedef enumerated<nmax_res_r14_opts> nmax_res_r14_e_;

    // member variables
    uint8_t         nmax_proc_r14 = 5;
    nmax_res_r14_e_ nmax_res_r14;
  };
  struct nzp_csi_rs_periodic_info_r14_s_ {
    struct nmax_res_r14_opts {
      enum options { n1, n2, n4, n8, nulltype } value;
      typedef uint8_t number_type;

      const char* to_string() const;
      uint8_t     to_number() const;
    };
    typedef enumerated<nmax_res_r14_opts> nmax_res_r14_e_;

    // member variables
    nmax_res_r14_e_ nmax_res_r14;
  };

  // member variables
  bool                             nzp_csi_rs_aperiodic_info_r14_present = false;
  bool                             nzp_csi_rs_periodic_info_r14_present  = false;
  bool                             zp_csi_rs_aperiodic_info_r14_present  = false;
  bool                             ul_dmrs_enhance_r14_present           = false;
  bool                             density_reduction_np_r14_present      = false;
  bool                             density_reduction_bf_r14_present      = false;
  bool                             hybrid_csi_r14_present                = false;
  bool                             semi_ol_r14_present                   = false;
  bool                             csi_report_np_r14_present             = false;
  bool                             csi_report_advanced_r14_present       = false;
  nzp_csi_rs_aperiodic_info_r14_s_ nzp_csi_rs_aperiodic_info_r14;
  nzp_csi_rs_periodic_info_r14_s_  nzp_csi_rs_periodic_info_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-Parameters-v1430 ::= SEQUENCE
struct mimo_ue_params_v1430_s {
  bool                          params_tm9_v1430_present  = false;
  bool                          params_tm10_v1430_present = false;
  mimo_ue_params_per_tm_v1430_s params_tm9_v1430;
  mimo_ue_params_per_tm_v1430_s params_tm10_v1430;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-ParametersPerTM-v1470 ::= SEQUENCE
struct mimo_ue_params_per_tm_v1470_s {
  struct csi_report_advanced_max_ports_r14_opts {
    enum options { n8, n12, n16, n20, n24, n28, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<csi_report_advanced_max_ports_r14_opts> csi_report_advanced_max_ports_r14_e_;

  // member variables
  bool                                 csi_report_advanced_max_ports_r14_present = false;
  csi_report_advanced_max_ports_r14_e_ csi_report_advanced_max_ports_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MIMO-UE-Parameters-v1470 ::= SEQUENCE
struct mimo_ue_params_v1470_s {
  mimo_ue_params_per_tm_v1470_s params_tm9_v1470;
  mimo_ue_params_per_tm_v1470_s params_tm10_v1470;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters ::= SEQUENCE
struct meas_params_s {
  band_list_eutra_l band_list_eutra;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1020 ::= SEQUENCE
struct meas_params_v1020_s {
  band_combination_list_eutra_r10_l band_combination_list_eutra_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1610 ::= SEQUENCE
struct meas_params_v1610_s {
  using band_info_nr_v1610_l_ = dyn_array<meas_gap_info_nr_r16_s>;

  // member variables
  bool                  band_info_nr_v1610_present                   = false;
  bool                  alt_freq_prio_r16_present                    = false;
  bool                  ce_dl_ch_quality_report_r16_present          = false;
  bool                  ce_meas_rss_ded_r16_present                  = false;
  bool                  eutra_idle_inactive_meass_r16_present        = false;
  bool                  nr_idle_inactive_meas_fr1_r16_present        = false;
  bool                  nr_idle_inactive_meas_fr2_r16_present        = false;
  bool                  idle_inactive_validity_area_list_r16_present = false;
  bool                  meas_gap_patterns_nronly_r16_present         = false;
  bool                  meas_gap_patterns_nronly_endc_r16_present    = false;
  band_info_nr_v1610_l_ band_info_nr_v1610;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SharedSpectrumMeasNR-r17 ::= SEQUENCE
struct shared_spec_meas_nr_r17_s {
  bool nr_rssi_ch_occupancy_report_r17 = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1700 ::= SEQUENCE
struct meas_params_v1700_s {
  using shared_spec_meas_nr_en_dc_r17_l_ = dyn_array<shared_spec_meas_nr_r17_s>;
  using shared_spec_meas_nr_sa_r17_l_    = dyn_array<shared_spec_meas_nr_r17_s>;

  // member variables
  bool                             shared_spec_meas_nr_en_dc_r17_present = false;
  bool                             shared_spec_meas_nr_sa_r17_present    = false;
  shared_spec_meas_nr_en_dc_r17_l_ shared_spec_meas_nr_en_dc_r17;
  shared_spec_meas_nr_sa_r17_l_    shared_spec_meas_nr_sa_r17;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NAICS-Capability-Entry-r12 ::= SEQUENCE
struct naics_cap_entry_r12_s {
  struct nof_aggregated_prb_r12_opts {
    enum options {
      n50,
      n75,
      n100,
      n125,
      n150,
      n175,
      n200,
      n225,
      n250,
      n275,
      n300,
      n350,
      n400,
      n450,
      n500,
      spare,
      nulltype
    } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<nof_aggregated_prb_r12_opts> nof_aggregated_prb_r12_e_;

  // member variables
  bool                      ext                      = false;
  uint8_t                   nof_naics_capable_cc_r12 = 1;
  nof_aggregated_prb_r12_e_ nof_aggregated_prb_r12;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NAICS-Capability-List-r12 ::= SEQUENCE (SIZE (1..8)) OF NAICS-Capability-Entry-r12
using naics_cap_list_r12_l = dyn_array<naics_cap_entry_r12_s>;

// NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE
struct non_contiguous_ul_ra_within_cc_r10_s {
  bool non_contiguous_ul_ra_within_cc_info_r10_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..64)) OF NonContiguousUL-RA-WithinCC-r10
using non_contiguous_ul_ra_within_cc_list_r10_l = dyn_array<non_contiguous_ul_ra_within_cc_r10_s>;

// ROHC-ProfileSupportList-r15 ::= SEQUENCE
struct rohc_profile_support_list_r15_s {
  bool profile0x0001_r15 = false;
  bool profile0x0002_r15 = false;
  bool profile0x0003_r15 = false;
  bool profile0x0004_r15 = false;
  bool profile0x0006_r15 = false;
  bool profile0x0101_r15 = false;
  bool profile0x0102_r15 = false;
  bool profile0x0103_r15 = false;
  bool profile0x0104_r15 = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters ::= SEQUENCE
struct pdcp_params_s {
  struct max_num_rohc_context_sessions_opts {
    enum options {
      cs2,
      cs4,
      cs8,
      cs12,
      cs16,
      cs24,
      cs32,
      cs48,
      cs64,
      cs128,
      cs256,
      cs512,
      cs1024,
      cs16384,
      spare2,
      spare1,
      nulltype
    } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<max_num_rohc_context_sessions_opts> max_num_rohc_context_sessions_e_;

  // member variables
  bool                             ext                                   = false;
  bool                             max_num_rohc_context_sessions_present = false;
  rohc_profile_support_list_r15_s  supported_rohc_profiles;
  max_num_rohc_context_sessions_e_ max_num_rohc_context_sessions;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedOperatorDic-r15 ::= SEQUENCE
struct supported_operator_dic_r15_s {
  uint8_t   version_of_dictionary_r15 = 0;
  plmn_id_s associated_plmn_id_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedUDC-r15 ::= SEQUENCE
struct supported_udc_r15_s {
  bool                         supported_standard_dic_r15_present = false;
  bool                         supported_operator_dic_r15_present = false;
  supported_operator_dic_r15_s supported_operator_dic_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters-v1530 ::= SEQUENCE
struct pdcp_params_v1530_s {
  bool                supported_udc_r15_present = false;
  bool                pdcp_dupl_r15_present     = false;
  supported_udc_r15_s supported_udc_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-ParametersNR-r15 ::= SEQUENCE
struct pdcp_params_nr_r15_s {
  struct rohc_context_max_sessions_r15_opts {
    enum options {
      cs2,
      cs4,
      cs8,
      cs12,
      cs16,
      cs24,
      cs32,
      cs48,
      cs64,
      cs128,
      cs256,
      cs512,
      cs1024,
      cs16384,
      spare2,
      spare1,
      nulltype
    } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<rohc_context_max_sessions_r15_opts> rohc_context_max_sessions_r15_e_;
  struct rohc_profiles_ul_only_r15_s_ {
    bool profile0x0006_r15 = false;
  };

  // member variables
  bool                             rohc_context_max_sessions_r15_present         = false;
  bool                             rohc_context_continue_r15_present             = false;
  bool                             out_of_order_delivery_r15_present             = false;
  bool                             sn_size_lo_r15_present                        = false;
  bool                             ims_voice_over_nr_pdcp_mcg_bearer_r15_present = false;
  bool                             ims_voice_over_nr_pdcp_scg_bearer_r15_present = false;
  rohc_profile_support_list_r15_s  rohc_profiles_r15;
  rohc_context_max_sessions_r15_e_ rohc_context_max_sessions_r15;
  rohc_profiles_ul_only_r15_s_     rohc_profiles_ul_only_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1020 ::= SEQUENCE
struct phy_layer_params_v1020_s {
  bool                                      two_ant_ports_for_pucch_r10_present             = false;
  bool                                      tm9_with_minus8_tx_fdd_r10_present              = false;
  bool                                      pmi_disabling_r10_present                       = false;
  bool                                      cross_carrier_sched_r10_present                 = false;
  bool                                      simul_pucch_pusch_r10_present                   = false;
  bool                                      multi_cluster_pusch_within_cc_r10_present       = false;
  bool                                      non_contiguous_ul_ra_within_cc_list_r10_present = false;
  non_contiguous_ul_ra_within_cc_list_r10_l non_contiguous_ul_ra_within_cc_list_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1250 ::= SEQUENCE
struct phy_layer_params_v1250_s {
  bool                 e_harq_pattern_fdd_r12_present               = false;
  bool                 enhanced_minus4_tx_codebook_r12_present      = false;
  bool                 tdd_fdd_ca_pcell_duplex_r12_present          = false;
  bool                 phy_tdd_re_cfg_tdd_pcell_r12_present         = false;
  bool                 phy_tdd_re_cfg_fdd_pcell_r12_present         = false;
  bool                 pusch_feedback_mode_r12_present              = false;
  bool                 pusch_srs_pwr_ctrl_sf_set_r12_present        = false;
  bool                 csi_sf_set_r12_present                       = false;
  bool                 no_res_restrict_for_tti_bundling_r12_present = false;
  bool                 discovery_signals_in_deact_scell_r12_present = false;
  bool                 naics_cap_list_r12_present                   = false;
  fixed_bitstring<2>   tdd_fdd_ca_pcell_duplex_r12;
  naics_cap_list_r12_l naics_cap_list_r12;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1320 ::= SEQUENCE
struct phy_layer_params_v1320_s {
  bool                 mimo_ue_params_r13_present = false;
  mimo_ue_params_r13_s mimo_ue_params_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1330 ::= SEQUENCE
struct phy_layer_params_v1330_s {
  bool    cch_interf_mitigation_ref_rec_type_a_r13_present = false;
  bool    cch_interf_mitigation_ref_rec_type_b_r13_present = false;
  bool    cch_interf_mitigation_max_num_ccs_r13_present    = false;
  bool    crs_interf_mitigation_tm1to_tm9_r13_present      = false;
  uint8_t cch_interf_mitigation_max_num_ccs_r13            = 1;
  uint8_t crs_interf_mitigation_tm1to_tm9_r13              = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// FeMBMS-Unicast-Parameters-r14 ::= SEQUENCE
struct fe_mbms_unicast_params_r14_s {
  bool unicast_fembms_mixed_scell_r14_present = false;
  bool empty_unicast_region_r14_present       = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1430 ::= SEQUENCE
struct phy_layer_params_v1430_s {
  struct ce_pdsch_pusch_max_bw_r14_opts {
    enum options { bw5, bw20, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ce_pdsch_pusch_max_bw_r14_opts> ce_pdsch_pusch_max_bw_r14_e_;
  struct ce_retuning_symbols_r14_opts {
    enum options { n0, n1, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ce_retuning_symbols_r14_opts> ce_retuning_symbols_r14_e_;

  // member variables
  bool                         ce_pusch_nb_max_tbs_r14_present        = false;
  bool                         ce_pdsch_pusch_max_bw_r14_present      = false;
  bool                         ce_harq_ack_bundling_r14_present       = false;
  bool                         ce_pdsch_ten_processes_r14_present     = false;
  bool                         ce_retuning_symbols_r14_present        = false;
  bool                         ce_pdsch_pusch_enhancement_r14_present = false;
  bool                         ce_sched_enhancement_r14_present       = false;
  bool                         ce_srs_enhancement_r14_present         = false;
  bool                         ce_pucch_enhancement_r14_present       = false;
  bool                         ce_closed_loop_tx_ant_sel_r14_present  = false;
  bool                         tdd_special_sf_r14_present             = false;
  bool                         tdd_tti_bundling_r14_present           = false;
  bool                         dmrs_less_up_pts_r14_present           = false;
  bool                         mimo_ue_params_v1430_present           = false;
  bool                         alt_tbs_idx_r14_present                = false;
  bool                         fe_mbms_unicast_params_r14_present     = false;
  ce_pdsch_pusch_max_bw_r14_e_ ce_pdsch_pusch_max_bw_r14;
  ce_retuning_symbols_r14_e_   ce_retuning_symbols_r14;
  mimo_ue_params_v1430_s       mimo_ue_params_v1430;
  fe_mbms_unicast_params_r14_s fe_mbms_unicast_params_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1470 ::= SEQUENCE
struct phy_layer_params_v1470_s {
  bool                   mimo_ue_params_v1470_present     = false;
  bool                   srs_up_pts_minus6sym_r14_present = false;
  mimo_ue_params_v1470_s mimo_ue_params_v1470;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1530 ::= SEQUENCE
struct phy_layer_params_v1530_s {
  struct stti_spt_cap_r15_s_ {
    struct max_layers_slot_or_subslot_pusch_r15_opts {
      enum options { one_layer, two_layers, four_layers, nulltype } value;
      typedef uint8_t number_type;

      const char* to_string() const;
      uint8_t     to_number() const;
    };
    typedef enumerated<max_layers_slot_or_subslot_pusch_r15_opts> max_layers_slot_or_subslot_pusch_r15_e_;
    struct sps_stti_r15_opts {
      enum options { slot, subslot, slot_and_subslot, nulltype } value;

      const char* to_string() const;
    };
    typedef enumerated<sps_stti_r15_opts> sps_stti_r15_e_;

    // member variables
    bool                                    aperiodic_csi_report_stti_r15_present             = false;
    bool                                    dmrs_based_spdcch_mbsfn_r15_present               = false;
    bool                                    dmrs_based_spdcch_non_mbsfn_r15_present           = false;
    bool                                    dmrs_position_pattern_r15_present                 = false;
    bool                                    dmrs_sharing_subslot_pdsch_r15_present            = false;
    bool                                    dmrs_repeat_subslot_pdsch_r15_present             = false;
    bool                                    epdcch_spt_different_cells_r15_present            = false;
    bool                                    epdcch_stti_different_cells_r15_present           = false;
    bool                                    max_layers_slot_or_subslot_pusch_r15_present      = false;
    bool                                    max_num_upd_csi_proc_spt_r15_present              = false;
    bool                                    max_num_upd_csi_proc_stti_comb77_r15_present      = false;
    bool                                    max_num_upd_csi_proc_stti_comb27_r15_present      = false;
    bool                                    max_num_upd_csi_proc_stti_comb22_set1_r15_present = false;
    bool                                    max_num_upd_csi_proc_stti_comb22_set2_r15_present = false;
    bool                                    mimo_ue_params_stti_r15_present                   = false;
    bool                                    mimo_ue_params_stti_v1530_present                 = false;
    bool                                    nof_blind_decodes_uss_r15_present                 = false;
    bool                                    pdsch_slot_subslot_pdsch_decoding_r15_present     = false;
    bool                                    pwr_uci_slot_pusch_present                        = false;
    bool                                    pwr_uci_subslot_pusch_present                     = false;
    bool                                    slot_pdsch_tx_div_tm9and10_present                = false;
    bool                                    subslot_pdsch_tx_div_tm9and10_present             = false;
    bool                                    spdcch_different_rs_types_r15_present             = false;
    bool                                    srs_dci7_trigger_fs2_r15_present                  = false;
    bool                                    sps_cyclic_shift_r15_present                      = false;
    bool                                    spdcch_reuse_r15_present                          = false;
    bool                                    sps_stti_r15_present                              = false;
    bool                                    tm8_slot_pdsch_r15_present                        = false;
    bool                                    tm9_slot_subslot_r15_present                      = false;
    bool                                    tm9_slot_subslot_mbsfn_r15_present                = false;
    bool                                    tm10_slot_subslot_r15_present                     = false;
    bool                                    tm10_slot_subslot_mbsfn_r15_present               = false;
    bool                                    tx_div_spucch_r15_present                         = false;
    bool                                    ul_async_harq_sharing_diff_tti_lens_r15_present   = false;
    max_layers_slot_or_subslot_pusch_r15_e_ max_layers_slot_or_subslot_pusch_r15;
    uint8_t                                 max_num_upd_csi_proc_spt_r15              = 5;
    uint8_t                                 max_num_upd_csi_proc_stti_comb77_r15      = 1;
    uint8_t                                 max_num_upd_csi_proc_stti_comb27_r15      = 1;
    uint8_t                                 max_num_upd_csi_proc_stti_comb22_set1_r15 = 1;
    uint8_t                                 max_num_upd_csi_proc_stti_comb22_set2_r15 = 1;
    mimo_ue_params_r13_s                    mimo_ue_params_stti_r15;
    mimo_ue_params_v1430_s                  mimo_ue_params_stti_v1530;
    uint8_t                                 nof_blind_decodes_uss_r15 = 4;
    sps_stti_r15_e_                         sps_stti_r15;
  };
  struct ce_cap_r15_s_ {
    bool ce_crs_intf_mitig_r15_present                 = false;
    bool ce_cqi_alt_table_r15_present                  = false;
    bool ce_pdsch_flex_start_prb_ce_mode_a_r15_present = false;
    bool ce_pdsch_flex_start_prb_ce_mode_b_r15_present = false;
    bool ce_pdsch_minus64_qam_r15_present              = false;
    bool ce_pusch_flex_start_prb_ce_mode_a_r15_present = false;
    bool ce_pusch_flex_start_prb_ce_mode_b_r15_present = false;
    bool ce_pusch_sub_prb_alloc_r15_present            = false;
    bool ce_ul_harq_ack_feedback_r15_present           = false;
  };
  struct urllc_cap_r15_s_ {
    bool    pdsch_rep_sf_r15_present                  = false;
    bool    pdsch_rep_slot_r15_present                = false;
    bool    pdsch_rep_subslot_r15_present             = false;
    bool    pusch_sps_multi_cfg_sf_r15_present        = false;
    bool    pusch_sps_max_cfg_sf_r15_present          = false;
    bool    pusch_sps_multi_cfg_slot_r15_present      = false;
    bool    pusch_sps_max_cfg_slot_r15_present        = false;
    bool    pusch_sps_multi_cfg_subslot_r15_present   = false;
    bool    pusch_sps_max_cfg_subslot_r15_present     = false;
    bool    pusch_sps_slot_rep_pcell_r15_present      = false;
    bool    pusch_sps_slot_rep_ps_cell_r15_present    = false;
    bool    pusch_sps_slot_rep_scell_r15_present      = false;
    bool    pusch_sps_sf_rep_pcell_r15_present        = false;
    bool    pusch_sps_sf_rep_ps_cell_r15_present      = false;
    bool    pusch_sps_sf_rep_scell_r15_present        = false;
    bool    pusch_sps_subslot_rep_pcell_r15_present   = false;
    bool    pusch_sps_subslot_rep_ps_cell_r15_present = false;
    bool    pusch_sps_subslot_rep_scell_r15_present   = false;
    bool    semi_static_cfi_r15_present               = false;
    bool    semi_static_cfi_pattern_r15_present       = false;
    uint8_t pusch_sps_multi_cfg_sf_r15                = 0;
    uint8_t pusch_sps_max_cfg_sf_r15                  = 0;
    uint8_t pusch_sps_multi_cfg_slot_r15              = 0;
    uint8_t pusch_sps_max_cfg_slot_r15                = 0;
    uint8_t pusch_sps_multi_cfg_subslot_r15           = 0;
    uint8_t pusch_sps_max_cfg_subslot_r15             = 0;
  };

  // member variables
  bool                stti_spt_cap_r15_present                   = false;
  bool                ce_cap_r15_present                         = false;
  bool                short_cqi_for_scell_activation_r15_present = false;
  bool                mimo_cbsr_advanced_csi_r15_present         = false;
  bool                crs_intf_mitig_r15_present                 = false;
  bool                ul_pwr_ctrl_enhance_r15_present            = false;
  bool                urllc_cap_r15_present                      = false;
  bool                alt_mcs_table_r15_present                  = false;
  stti_spt_cap_r15_s_ stti_spt_cap_r15;
  ce_cap_r15_s_       ce_cap_r15;
  urllc_cap_r15_s_    urllc_cap_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-MultiTB-Parameters-r16 ::= SEQUENCE
struct ce_multi_tb_params_r16_s {
  bool pdsch_multi_tb_ce_mode_a_r16_present      = false;
  bool pdsch_multi_tb_ce_mode_b_r16_present      = false;
  bool pusch_multi_tb_ce_mode_a_r16_present      = false;
  bool pusch_multi_tb_ce_mode_b_r16_present      = false;
  bool ce_multi_tb_minus64_qam_r16_present       = false;
  bool ce_multi_tb_early_termination_r16_present = false;
  bool ce_multi_tb_freq_hop_r16_present          = false;
  bool ce_multi_tb_harq_ack_bundling_r16_present = false;
  bool ce_multi_tb_interleaving_r16_present      = false;
  bool ce_multi_tb_sub_prb_r16_present           = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-ResourceResvParameters-r16 ::= SEQUENCE
struct ce_res_resv_params_r16_s {
  bool sf_res_resv_dl_ce_mode_a_r16_present          = false;
  bool sf_res_resv_dl_ce_mode_b_r16_present          = false;
  bool sf_res_resv_ul_ce_mode_a_r16_present          = false;
  bool sf_res_resv_ul_ce_mode_b_r16_present          = false;
  bool slot_symbol_res_resv_dl_ce_mode_a_r16_present = false;
  bool slot_symbol_res_resv_dl_ce_mode_b_r16_present = false;
  bool slot_symbol_res_resv_ul_ce_mode_a_r16_present = false;
  bool slot_symbol_res_resv_ul_ce_mode_b_r16_present = false;
  bool subcarrier_puncturing_ce_mode_a_r16_present   = false;
  bool subcarrier_puncturing_ce_mode_b_r16_present   = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1610 ::= SEQUENCE
struct phy_layer_params_v1610_s {
  struct ce_cap_v1610_s_ {
    bool                     ce_csi_rs_feedback_r16_present                   = false;
    bool                     ce_csi_rs_feedback_codebook_restrict_r16_present = false;
    bool                     crs_ch_est_mpdcch_ce_mode_a_r16_present          = false;
    bool                     crs_ch_est_mpdcch_ce_mode_b_r16_present          = false;
    bool                     crs_ch_est_mpdcch_csi_r16_present                = false;
    bool                     crs_ch_est_mpdcch_reciprocity_tdd_r16_present    = false;
    bool                     etws_cmas_rx_in_conn_ce_mode_a_r16_present       = false;
    bool                     etws_cmas_rx_in_conn_ce_mode_b_r16_present       = false;
    bool                     mpdcch_in_lte_ctrl_region_ce_mode_a_r16_present  = false;
    bool                     mpdcch_in_lte_ctrl_region_ce_mode_b_r16_present  = false;
    bool                     pdsch_in_lte_ctrl_region_ce_mode_a_r16_present   = false;
    bool                     pdsch_in_lte_ctrl_region_ce_mode_b_r16_present   = false;
    bool                     multi_tb_params_r16_present                      = false;
    bool                     res_resv_params_r16_present                      = false;
    ce_multi_tb_params_r16_s multi_tb_params_r16;
    ce_res_resv_params_r16_s res_resv_params_r16;
  };
  struct add_srs_r16_s_ {
    bool add_srs_freq_hop_r16_present          = false;
    bool add_srs_ant_switching_r16_present     = false;
    bool add_srs_carrier_switching_r16_present = false;
  };

  // member variables
  bool            ce_cap_v1610_present                  = false;
  bool            wideband_prg_slot_r16_present         = false;
  bool            wideband_prg_subslot_r16_present      = false;
  bool            wideband_prg_sf_r16_present           = false;
  bool            add_srs_r16_present                   = false;
  bool            virtual_cell_id_basic_srs_r16_present = false;
  bool            virtual_cell_id_add_srs_r16_present   = false;
  ce_cap_v1610_s_ ce_cap_v1610;
  add_srs_r16_s_  add_srs_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandEUTRA ::= SEQUENCE
struct supported_band_eutra_s {
  uint8_t band_eutra  = 1;
  bool    half_duplex = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..64)) OF SupportedBandEUTRA
using supported_band_list_eutra_l = dyn_array<supported_band_eutra_s>;

// RF-Parameters ::= SEQUENCE
struct rf_params_s {
  supported_band_list_eutra_l supported_band_list_eutra;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-r10
using supported_band_combination_r10_l = dyn_array<band_combination_params_r10_l>;

// RF-Parameters-v1020 ::= SEQUENCE
struct rf_params_v1020_s {
  supported_band_combination_r10_l supported_band_combination_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParametersExt-r10
using supported_band_combination_ext_r10_l = dyn_array<band_combination_params_ext_r10_s>;

// RF-Parameters-v1060 ::= SEQUENCE
struct rf_params_v1060_s {
  supported_band_combination_ext_r10_l supported_band_combination_ext_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1090
using supported_band_combination_v1090_l = dyn_array<band_combination_params_v1090_l>;

// RF-Parameters-v1090 ::= SEQUENCE
struct rf_params_v1090_s {
  bool                               supported_band_combination_v1090_present = false;
  supported_band_combination_v1090_l supported_band_combination_v1090;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v10i0 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v10i0
using supported_band_combination_v10i0_l = dyn_array<band_combination_params_v10i0_s>;

// RF-Parameters-v10i0 ::= SEQUENCE
struct rf_params_v10i0_s {
  bool                               supported_band_combination_v10i0_present = false;
  supported_band_combination_v10i0_l supported_band_combination_v10i0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1130 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1130
using supported_band_combination_v1130_l = dyn_array<band_combination_params_v1130_s>;

// RF-Parameters-v1130 ::= SEQUENCE
struct rf_params_v1130_s {
  bool                               supported_band_combination_v1130_present = false;
  supported_band_combination_v1130_l supported_band_combination_v1130;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombinationAdd-r11 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-r11
using supported_band_combination_add_r11_l = dyn_array<band_combination_params_r11_s>;

// RF-Parameters-v1180 ::= SEQUENCE
struct rf_params_v1180_s {
  using requested_bands_r11_l_ = dyn_array<uint16_t>;

  // member variables
  bool                                 freq_band_retrieval_r11_present            = false;
  bool                                 requested_bands_r11_present                = false;
  bool                                 supported_band_combination_add_r11_present = false;
  requested_bands_r11_l_               requested_bands_r11;
  supported_band_combination_add_r11_l supported_band_combination_add_r11;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombinationAdd-v11d0 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v10i0
using supported_band_combination_add_v11d0_l = dyn_array<band_combination_params_v10i0_s>;

// RF-Parameters-v11d0 ::= SEQUENCE
struct rf_params_v11d0_s {
  bool                                   supported_band_combination_add_v11d0_present = false;
  supported_band_combination_add_v11d0_l supported_band_combination_add_v11d0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandEUTRA-v1250 ::= SEQUENCE
struct supported_band_eutra_v1250_s {
  bool dl_minus256_qam_r12_present = false;
  bool ul_minus64_qam_r12_present  = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1250 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1250
using supported_band_combination_v1250_l = dyn_array<band_combination_params_v1250_s>;

// SupportedBandCombinationAdd-v1250 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1250
using supported_band_combination_add_v1250_l = dyn_array<band_combination_params_v1250_s>;

// SupportedBandListEUTRA-v1250 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandEUTRA-v1250
using supported_band_list_eutra_v1250_l = dyn_array<supported_band_eutra_v1250_s>;

// RF-Parameters-v1250 ::= SEQUENCE
struct rf_params_v1250_s {
  bool                                   supported_band_list_eutra_v1250_present      = false;
  bool                                   supported_band_combination_v1250_present     = false;
  bool                                   supported_band_combination_add_v1250_present = false;
  bool                                   freq_band_prio_adjustment_r12_present        = false;
  supported_band_list_eutra_v1250_l      supported_band_list_eutra_v1250;
  supported_band_combination_v1250_l     supported_band_combination_v1250;
  supported_band_combination_add_v1250_l supported_band_combination_add_v1250;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1270 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1270
using supported_band_combination_v1270_l = dyn_array<band_combination_params_v1270_s>;

// SupportedBandCombinationAdd-v1270 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1270
using supported_band_combination_add_v1270_l = dyn_array<band_combination_params_v1270_s>;

// RF-Parameters-v1270 ::= SEQUENCE
struct rf_params_v1270_s {
  bool                                   supported_band_combination_v1270_present     = false;
  bool                                   supported_band_combination_add_v1270_present = false;
  supported_band_combination_v1270_l     supported_band_combination_v1270;
  supported_band_combination_add_v1270_l supported_band_combination_add_v1270;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandEUTRA-v1310 ::= SEQUENCE
struct supported_band_eutra_v1310_s {
  bool ue_pwr_class_minus5_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombinationReduced-r13 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-r13
using supported_band_combination_reduced_r13_l = dyn_array<band_combination_params_r13_s>;

// SupportedBandListEUTRA-v1310 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandEUTRA-v1310
using supported_band_list_eutra_v1310_l = dyn_array<supported_band_eutra_v1310_s>;

// RF-Parameters-v1310 ::= SEQUENCE
struct rf_params_v1310_s {
  struct enb_requested_params_r13_s_ {
    bool    reduced_int_non_cont_comb_requested_r13_present = false;
    bool    requested_ccs_dl_r13_present                    = false;
    bool    requested_ccs_ul_r13_present                    = false;
    bool    skip_fallback_comb_requested_r13_present        = false;
    uint8_t requested_ccs_dl_r13                            = 2;
    uint8_t requested_ccs_ul_r13                            = 2;
  };

  // member variables
  bool                                     enb_requested_params_r13_present               = false;
  bool                                     maximum_ccs_retrieval_r13_present              = false;
  bool                                     skip_fallback_combinations_r13_present         = false;
  bool                                     reduced_int_non_cont_comb_r13_present          = false;
  bool                                     supported_band_list_eutra_v1310_present        = false;
  bool                                     supported_band_combination_reduced_r13_present = false;
  enb_requested_params_r13_s_              enb_requested_params_r13;
  supported_band_list_eutra_v1310_l        supported_band_list_eutra_v1310;
  supported_band_combination_reduced_r13_l supported_band_combination_reduced_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandEUTRA-v1320 ::= SEQUENCE
struct supported_band_eutra_v1320_s {
  struct ue_pwr_class_n_r13_opts {
    enum options { class1, class2, class4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ue_pwr_class_n_r13_opts> ue_pwr_class_n_r13_e_;

  // member variables
  bool                  intra_freq_ce_need_for_gaps_r13_present = false;
  bool                  ue_pwr_class_n_r13_present              = false;
  ue_pwr_class_n_r13_e_ ue_pwr_class_n_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1320 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1320
using supported_band_combination_v1320_l = dyn_array<band_combination_params_v1320_s>;

// SupportedBandCombinationAdd-v1320 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1320
using supported_band_combination_add_v1320_l = dyn_array<band_combination_params_v1320_s>;

// SupportedBandCombinationReduced-v1320 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1320
using supported_band_combination_reduced_v1320_l = dyn_array<band_combination_params_v1320_s>;

// SupportedBandListEUTRA-v1320 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandEUTRA-v1320
using supported_band_list_eutra_v1320_l = dyn_array<supported_band_eutra_v1320_s>;

// RF-Parameters-v1320 ::= SEQUENCE
struct rf_params_v1320_s {
  bool                                       supported_band_list_eutra_v1320_present          = false;
  bool                                       supported_band_combination_v1320_present         = false;
  bool                                       supported_band_combination_add_v1320_present     = false;
  bool                                       supported_band_combination_reduced_v1320_present = false;
  supported_band_list_eutra_v1320_l          supported_band_list_eutra_v1320;
  supported_band_combination_v1320_l         supported_band_combination_v1320;
  supported_band_combination_add_v1320_l     supported_band_combination_add_v1320;
  supported_band_combination_reduced_v1320_l supported_band_combination_reduced_v1320;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1380 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1380
using supported_band_combination_v1380_l = dyn_array<band_combination_params_v1380_s>;

// SupportedBandCombinationAdd-v1380 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1380
using supported_band_combination_add_v1380_l = dyn_array<band_combination_params_v1380_s>;

// SupportedBandCombinationReduced-v1380 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1380
using supported_band_combination_reduced_v1380_l = dyn_array<band_combination_params_v1380_s>;

// RF-Parameters-v1380 ::= SEQUENCE
struct rf_params_v1380_s {
  bool                                       supported_band_combination_v1380_present         = false;
  bool                                       supported_band_combination_add_v1380_present     = false;
  bool                                       supported_band_combination_reduced_v1380_present = false;
  supported_band_combination_v1380_l         supported_band_combination_v1380;
  supported_band_combination_add_v1380_l     supported_band_combination_add_v1380;
  supported_band_combination_reduced_v1380_l supported_band_combination_reduced_v1380;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// BandCombinationParameters-v1390 ::= SEQUENCE
struct band_combination_params_v1390_s {
  bool ue_ca_pwr_class_n_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1390 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1390
using supported_band_combination_v1390_l = dyn_array<band_combination_params_v1390_s>;

// SupportedBandCombinationAdd-v1390 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1390
using supported_band_combination_add_v1390_l = dyn_array<band_combination_params_v1390_s>;

// SupportedBandCombinationReduced-v1390 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1390
using supported_band_combination_reduced_v1390_l = dyn_array<band_combination_params_v1390_s>;

// RF-Parameters-v1390 ::= SEQUENCE
struct rf_params_v1390_s {
  bool                                       supported_band_combination_v1390_present         = false;
  bool                                       supported_band_combination_add_v1390_present     = false;
  bool                                       supported_band_combination_reduced_v1390_present = false;
  supported_band_combination_v1390_l         supported_band_combination_v1390;
  supported_band_combination_add_v1390_l     supported_band_combination_add_v1390;
  supported_band_combination_reduced_v1390_l supported_band_combination_reduced_v1390;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1430 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1430
using supported_band_combination_v1430_l = dyn_array<band_combination_params_v1430_s>;

// SupportedBandCombinationAdd-v1430 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1430
using supported_band_combination_add_v1430_l = dyn_array<band_combination_params_v1430_s>;

// SupportedBandCombinationReduced-v1430 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1430
using supported_band_combination_reduced_v1430_l = dyn_array<band_combination_params_v1430_s>;

// RF-Parameters-v1430 ::= SEQUENCE
struct rf_params_v1430_s {
  struct enb_requested_params_v1430_s_ {
    band_combination_list_r14_l requested_diff_fallback_comb_list_r14;
  };

  // member variables
  bool                                       supported_band_combination_v1430_present         = false;
  bool                                       supported_band_combination_add_v1430_present     = false;
  bool                                       supported_band_combination_reduced_v1430_present = false;
  bool                                       enb_requested_params_v1430_present               = false;
  bool                                       diff_fallback_comb_report_r14_present            = false;
  supported_band_combination_v1430_l         supported_band_combination_v1430;
  supported_band_combination_add_v1430_l     supported_band_combination_add_v1430;
  supported_band_combination_reduced_v1430_l supported_band_combination_reduced_v1430;
  enb_requested_params_v1430_s_              enb_requested_params_v1430;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1450 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1450
using supported_band_combination_v1450_l = dyn_array<band_combination_params_v1450_s>;

// SupportedBandCombinationAdd-v1450 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1450
using supported_band_combination_add_v1450_l = dyn_array<band_combination_params_v1450_s>;

// SupportedBandCombinationReduced-v1450 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1450
using supported_band_combination_reduced_v1450_l = dyn_array<band_combination_params_v1450_s>;

// RF-Parameters-v1450 ::= SEQUENCE
struct rf_params_v1450_s {
  bool                                       supported_band_combination_v1450_present         = false;
  bool                                       supported_band_combination_add_v1450_present     = false;
  bool                                       supported_band_combination_reduced_v1450_present = false;
  supported_band_combination_v1450_l         supported_band_combination_v1450;
  supported_band_combination_add_v1450_l     supported_band_combination_add_v1450;
  supported_band_combination_reduced_v1450_l supported_band_combination_reduced_v1450;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1470 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1470
using supported_band_combination_v1470_l = dyn_array<band_combination_params_v1470_s>;

// SupportedBandCombinationAdd-v1470 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1470
using supported_band_combination_add_v1470_l = dyn_array<band_combination_params_v1470_s>;

// SupportedBandCombinationReduced-v1470 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1470
using supported_band_combination_reduced_v1470_l = dyn_array<band_combination_params_v1470_s>;

// RF-Parameters-v1470 ::= SEQUENCE
struct rf_params_v1470_s {
  bool                                       supported_band_combination_v1470_present         = false;
  bool                                       supported_band_combination_add_v1470_present     = false;
  bool                                       supported_band_combination_reduced_v1470_present = false;
  supported_band_combination_v1470_l         supported_band_combination_v1470;
  supported_band_combination_add_v1470_l     supported_band_combination_add_v1470;
  supported_band_combination_reduced_v1470_l supported_band_combination_reduced_v1470;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v14b0 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v14b0
using supported_band_combination_v14b0_l = dyn_array<band_combination_params_v14b0_s>;

// SupportedBandCombinationAdd-v14b0 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v14b0
using supported_band_combination_add_v14b0_l = dyn_array<band_combination_params_v14b0_s>;

// SupportedBandCombinationReduced-v14b0 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v14b0
using supported_band_combination_reduced_v14b0_l = dyn_array<band_combination_params_v14b0_s>;

// RF-Parameters-v14b0 ::= SEQUENCE
struct rf_params_v14b0_s {
  bool                                       supported_band_combination_v14b0_present         = false;
  bool                                       supported_band_combination_add_v14b0_present     = false;
  bool                                       supported_band_combination_reduced_v14b0_present = false;
  supported_band_combination_v14b0_l         supported_band_combination_v14b0;
  supported_band_combination_add_v14b0_l     supported_band_combination_add_v14b0;
  supported_band_combination_reduced_v14b0_l supported_band_combination_reduced_v14b0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1530 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1530
using supported_band_combination_v1530_l = dyn_array<band_combination_params_v1530_s>;

// SupportedBandCombinationAdd-v1530 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1530
using supported_band_combination_add_v1530_l = dyn_array<band_combination_params_v1530_s>;

// SupportedBandCombinationReduced-v1530 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1530
using supported_band_combination_reduced_v1530_l = dyn_array<band_combination_params_v1530_s>;

// RF-Parameters-v1530 ::= SEQUENCE
struct rf_params_v1530_s {
  bool                                       stti_spt_supported_r15_present                   = false;
  bool                                       supported_band_combination_v1530_present         = false;
  bool                                       supported_band_combination_add_v1530_present     = false;
  bool                                       supported_band_combination_reduced_v1530_present = false;
  bool                                       pwr_class_minus14dbm_r15_present                 = false;
  supported_band_combination_v1530_l         supported_band_combination_v1530;
  supported_band_combination_add_v1530_l     supported_band_combination_add_v1530;
  supported_band_combination_reduced_v1530_l supported_band_combination_reduced_v1530;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1610 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1610
using supported_band_combination_v1610_l = dyn_array<band_combination_params_v1610_s>;

// SupportedBandCombinationAdd-v1610 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1610
using supported_band_combination_add_v1610_l = dyn_array<band_combination_params_v1610_s>;

// SupportedBandCombinationReduced-v1610 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1610
using supported_band_combination_reduced_v1610_l = dyn_array<band_combination_params_v1610_s>;

// RF-Parameters-v1610 ::= SEQUENCE
struct rf_params_v1610_s {
  bool                                       supported_band_combination_v1610_present         = false;
  bool                                       supported_band_combination_add_v1610_present     = false;
  bool                                       supported_band_combination_reduced_v1610_present = false;
  supported_band_combination_v1610_l         supported_band_combination_v1610;
  supported_band_combination_add_v1610_l     supported_band_combination_add_v1610;
  supported_band_combination_reduced_v1610_l supported_band_combination_reduced_v1610;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandCombination-v1630 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1630
using supported_band_combination_v1630_l = dyn_array<band_combination_params_v1630_s>;

// SupportedBandCombinationAdd-v1630 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1630
using supported_band_combination_add_v1630_l = dyn_array<band_combination_params_v1630_s>;

// SupportedBandCombinationReduced-v1630 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1630
using supported_band_combination_reduced_v1630_l = dyn_array<band_combination_params_v1630_s>;

// RF-Parameters-v1630 ::= SEQUENCE
struct rf_params_v1630_s {
  bool                                       supported_band_combination_v1630_present         = false;
  bool                                       supported_band_combination_add_v1630_present     = false;
  bool                                       supported_band_combination_reduced_v1630_present = false;
  supported_band_combination_v1630_l         supported_band_combination_v1630;
  supported_band_combination_add_v1630_l     supported_band_combination_add_v1630;
  supported_band_combination_reduced_v1630_l supported_band_combination_reduced_v1630;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandEUTRA-v9e0 ::= SEQUENCE
struct supported_band_eutra_v9e0_s {
  bool     band_eutra_v9e0_present = false;
  uint16_t band_eutra_v9e0         = 65;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandListEUTRA-v9e0 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandEUTRA-v9e0
using supported_band_list_eutra_v9e0_l = dyn_array<supported_band_eutra_v9e0_s>;

// RF-Parameters-v9e0 ::= SEQUENCE
struct rf_params_v9e0_s {
  bool                             supported_band_list_eutra_v9e0_present = false;
  supported_band_list_eutra_v9e0_l supported_band_list_eutra_v9e0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandInfo-r12 ::= SEQUENCE
struct supported_band_info_r12_s {
  bool support_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SupportedBandInfoList-r12 ::= SEQUENCE (SIZE (1..64)) OF SupportedBandInfo-r12
using supported_band_info_list_r12_l = dyn_array<supported_band_info_r12_s>;

// SL-Parameters-r12 ::= SEQUENCE
struct sl_params_r12_s {
  struct disc_supported_proc_r12_opts {
    enum options { n50, n400, nulltype } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<disc_supported_proc_r12_opts> disc_supported_proc_r12_e_;

  // member variables
  bool                           comm_simul_tx_r12_present         = false;
  bool                           comm_supported_bands_r12_present  = false;
  bool                           disc_supported_bands_r12_present  = false;
  bool                           disc_sched_res_alloc_r12_present  = false;
  bool                           disc_ue_sel_res_alloc_r12_present = false;
  bool                           disc_slss_r12_present             = false;
  bool                           disc_supported_proc_r12_present   = false;
  freq_band_ind_list_eutra_r12_l comm_supported_bands_r12;
  supported_band_info_list_r12_l disc_supported_bands_r12;
  disc_supported_proc_r12_e_     disc_supported_proc_r12;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandParameters-r14 ::= SEQUENCE
struct v2x_band_params_r14_s {
  bool                    band_params_tx_sl_r14_present = false;
  bool                    band_params_rx_sl_r14_present = false;
  uint16_t                v2x_freq_band_eutra_r14       = 1;
  band_params_tx_sl_r14_s band_params_tx_sl_r14;
  band_params_rx_sl_r14_s band_params_rx_sl_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandCombinationParameters-r14 ::= SEQUENCE (SIZE (1..64)) OF V2X-BandParameters-r14
using v2x_band_combination_params_r14_l = dyn_array<v2x_band_params_r14_s>;

// V2X-SupportedBandCombination-r14 ::= SEQUENCE (SIZE (1..384)) OF V2X-BandCombinationParameters-r14
using v2x_supported_band_combination_r14_l = dyn_array<v2x_band_combination_params_r14_l>;

// SL-Parameters-v1430 ::= SEQUENCE
struct sl_params_v1430_s {
  bool                                 zone_based_pool_sel_r14_present                 = false;
  bool                                 ue_autonomous_with_full_sensing_r14_present     = false;
  bool                                 ue_autonomous_with_partial_sensing_r14_present  = false;
  bool                                 sl_congestion_ctrl_r14_present                  = false;
  bool                                 v2x_tx_with_short_resv_interv_r14_present       = false;
  bool                                 v2x_num_tx_rx_timing_r14_present                = false;
  bool                                 v2x_non_adjacent_pscch_pssch_r14_present        = false;
  bool                                 slss_tx_rx_r14_present                          = false;
  bool                                 v2x_supported_band_combination_list_r14_present = false;
  uint8_t                              v2x_num_tx_rx_timing_r14                        = 1;
  v2x_supported_band_combination_r14_l v2x_supported_band_combination_list_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandParameters-v1530 ::= SEQUENCE
struct v2x_band_params_v1530_s {
  bool v2x_enhanced_high_reception_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandCombinationParameters-v1530 ::= SEQUENCE (SIZE (1..64)) OF V2X-BandParameters-v1530
using v2x_band_combination_params_v1530_l = dyn_array<v2x_band_params_v1530_s>;

// UE-CategorySL-r15 ::= SEQUENCE
struct ue_category_sl_r15_s {
  uint8_t ue_category_sl_c_tx_r15 = 1;
  uint8_t ue_category_sl_c_rx_r15 = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-SupportedBandCombination-v1530 ::= SEQUENCE (SIZE (1..384)) OF V2X-BandCombinationParameters-v1530
using v2x_supported_band_combination_v1530_l = dyn_array<v2x_band_combination_params_v1530_l>;

// SL-Parameters-v1530 ::= SEQUENCE
struct sl_params_v1530_s {
  struct slss_supported_tx_freq_r15_opts {
    enum options { single, multiple, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<slss_supported_tx_freq_r15_opts> slss_supported_tx_freq_r15_e_;

  // member variables
  bool                                   slss_supported_tx_freq_r15_present                = false;
  bool                                   sl_minus64_qam_tx_r15_present                     = false;
  bool                                   sl_tx_diversity_r15_present                       = false;
  bool                                   ue_category_sl_r15_present                        = false;
  bool                                   v2x_supported_band_combination_list_v1530_present = false;
  slss_supported_tx_freq_r15_e_          slss_supported_tx_freq_r15;
  ue_category_sl_r15_s                   ue_category_sl_r15;
  v2x_supported_band_combination_v1530_l v2x_supported_band_combination_list_v1530;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandParametersEUTRA-NR-r16 ::= CHOICE
struct v2x_band_params_eutra_nr_r16_c {
  struct eutra_s_ {
    bool                    v2x_band_params1_r16_present = false;
    bool                    v2x_band_params2_r16_present = false;
    v2x_band_params_r14_s   v2x_band_params1_r16;
    v2x_band_params_v1530_s v2x_band_params2_r16;
  };
  struct nr_s_ {
    bool          v2x_band_params_nr_r16_present = false;
    dyn_octstring v2x_band_params_nr_r16;
  };
  struct types_opts {
    enum options { eutra, nr, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<types_opts> types;

  // choice methods
  v2x_band_params_eutra_nr_r16_c() = default;
  v2x_band_params_eutra_nr_r16_c(const v2x_band_params_eutra_nr_r16_c& other);
  v2x_band_params_eutra_nr_r16_c& operator=(const v2x_band_params_eutra_nr_r16_c& other);
  ~v2x_band_params_eutra_nr_r16_c() { destroy_(); }
  void        set(types::options e = types::nulltype);
  types       type() const { return type_; }
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
  // getters
  eutra_s_& eutra()
  {
    assert_choice_type(types::eutra, type_, "V2X-BandParametersEUTRA-NR-r16");
    return c.get<eutra_s_>();
  }
  nr_s_& nr()
  {
    assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-r16");
    return c.get<nr_s_>();
  }
  const eutra_s_& eutra() const
  {
    assert_choice_type(types::eutra, type_, "V2X-BandParametersEUTRA-NR-r16");
    return c.get<eutra_s_>();
  }
  const nr_s_& nr() const
  {
    assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-r16");
    return c.get<nr_s_>();
  }
  eutra_s_& set_eutra();
  nr_s_&    set_nr();

private:
  types                            type_;
  choice_buffer_t<eutra_s_, nr_s_> c;

  void destroy_();
};

// V2X-SupportedBandCombinationEUTRA-NR-r16 ::= SEQUENCE (SIZE (1..512)) OF V2X-BandParametersEUTRA-NR-r16
using v2x_supported_band_combination_eutra_nr_r16_l = dyn_array<v2x_band_params_eutra_nr_r16_c>;

// SL-Parameters-v1610 ::= SEQUENCE
struct sl_params_v1610_s {
  bool                                          sl_param_nr_r16_present = false;
  bool                                          dummy_present           = false;
  dyn_octstring                                 sl_param_nr_r16;
  v2x_supported_band_combination_eutra_nr_r16_l dummy;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandParametersEUTRA-NR-v1630 ::= CHOICE
struct v2x_band_params_eutra_nr_v1630_c {
  struct nr_s_ {
    bool tx_sidelink_r16_present = false;
    bool rx_sidelink_r16_present = false;
  };
  struct types_opts {
    enum options { eutra, nr, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<types_opts> types;

  // choice methods
  v2x_band_params_eutra_nr_v1630_c() = default;
  void        set(types::options e = types::nulltype);
  types       type() const { return type_; }
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
  // getters
  nr_s_& nr()
  {
    assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-v1630");
    return c;
  }
  const nr_s_& nr() const
  {
    assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-v1630");
    return c;
  }
  void   set_eutra();
  nr_s_& set_nr();

private:
  types type_;
  nr_s_ c;
};

// V2X-BandCombinationParametersEUTRA-NR-v1630 ::= SEQUENCE
struct v2x_band_combination_params_eutra_nr_v1630_s {
  using band_list_sidelink_eutra_nr_r16_l_   = dyn_array<v2x_band_params_eutra_nr_r16_c>;
  using band_list_sidelink_eutra_nr_v1630_l_ = dyn_array<v2x_band_params_eutra_nr_v1630_c>;

  // member variables
  band_list_sidelink_eutra_nr_r16_l_   band_list_sidelink_eutra_nr_r16;
  band_list_sidelink_eutra_nr_v1630_l_ band_list_sidelink_eutra_nr_v1630;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-SupportedBandCombinationEUTRA-NR-v1630 ::= SEQUENCE (SIZE (1..512)) OF
// V2X-BandCombinationParametersEUTRA-NR-v1630
using v2x_supported_band_combination_eutra_nr_v1630_l = dyn_array<v2x_band_combination_params_eutra_nr_v1630_s>;

// SL-Parameters-v1630 ::= SEQUENCE
struct sl_params_v1630_s {
  bool                                            v2x_supported_band_combination_list_eutra_nr_r16_present = false;
  v2x_supported_band_combination_eutra_nr_v1630_l v2x_supported_band_combination_list_eutra_nr_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandParametersEUTRA-NR-v1710 ::= SEQUENCE
struct v2x_band_params_eutra_nr_v1710_s {
  bool          v2x_band_params_eutra_nr_v1710_present = false;
  dyn_octstring v2x_band_params_eutra_nr_v1710;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// V2X-BandCombinationParametersEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..64)) OF V2X-BandParametersEUTRA-NR-v1710
using v2x_band_combination_params_eutra_nr_v1710_l = dyn_array<v2x_band_params_eutra_nr_v1710_s>;

// V2X-SupportedBandCombinationEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..512)) OF
// V2X-BandCombinationParametersEUTRA-NR-v1710
using v2x_supported_band_combination_eutra_nr_v1710_l = dyn_array<v2x_band_combination_params_eutra_nr_v1710_l>;

// SL-Parameters-v1710 ::= SEQUENCE
struct sl_params_v1710_s {
  bool                                            v2x_supported_band_combination_list_eutra_nr_v1710_present = false;
  v2x_supported_band_combination_eutra_nr_v1710_l v2x_supported_band_combination_list_eutra_nr_v1710;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1730 ::= SEQUENCE
struct phy_layer_params_v1730_s {
  bool csi_sf_set2_for_dormant_scell_r17_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NTN-Parameters-v1720 ::= SEQUENCE
struct ntn_params_v1720_s {
  struct ntn_segmented_precompensation_gaps_r17_opts {
    enum options { sym1, sl1, sf1, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<ntn_segmented_precompensation_gaps_r17_opts> ntn_segmented_precompensation_gaps_r17_e_;

  // member variables
  bool                                      ntn_segmented_precompensation_gaps_r17_present = false;
  ntn_segmented_precompensation_gaps_r17_e_ ntn_segmented_precompensation_gaps_r17;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1730-IEs ::= SEQUENCE
struct ue_eutra_cap_v1730_ies_s {
  bool                     non_crit_ext_present = false;
  phy_layer_params_v1730_s phy_layer_params_v1730;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1710 ::= SEQUENCE
struct irat_params_nr_v1710_s {
  bool extended_band_n77_minus2_r17_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-v1710 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_v1710_s {
  bool gnb_id_len_report_nr_en_dc_r17_present    = false;
  bool gnb_id_len_report_nr_no_en_dc_r17_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1720-IEs ::= SEQUENCE
struct ue_eutra_cap_v1720_ies_s {
  bool                     non_crit_ext_present = false;
  ntn_params_v1720_s       ntn_params_v1720;
  ue_eutra_cap_v1730_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1700 ::= SEQUENCE
struct irat_params_nr_v1700_s {
  bool eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present    = false;
  bool eutra_epc_ho_to_nr_tdd_fr2_minus2_r17_present          = false;
  bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present = false;
  bool ims_voice_over_nr_fr2_minus2_r17_present               = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NTN-Parameters-r17 ::= SEQUENCE
struct ntn_params_r17_s {
  struct ntn_scenario_support_r17_opts {
    enum options { ngso, gso, nulltype } value;

    const char* to_string() const;
  };
  typedef enumerated<ntn_scenario_support_r17_opts> ntn_scenario_support_r17_e_;

  // member variables
  bool                        ntn_connect_epc_r17_present       = false;
  bool                        ntn_ta_report_r17_present         = false;
  bool                        ntn_pur_timer_delay_r17_present   = false;
  bool                        ntn_offset_timing_enh_r17_present = false;
  bool                        ntn_scenario_support_r17_present  = false;
  ntn_scenario_support_r17_e_ ntn_scenario_support_r17;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1700 ::= SEQUENCE
struct phy_layer_params_v1700_s {
  struct ce_cap_v1700_s_ {
    bool ce_pdsch_minus14_harq_processes_r17_present      = false;
    bool ce_pdsch_minus14_harq_processes_alt2_r17_present = false;
    bool ce_pdsch_max_tbs_r17_present                     = false;
  };

  // member variables
  bool            ce_cap_v1700_present = false;
  ce_cap_v1700_s_ ce_cap_v1700;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-v1700 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_v1700_s {
  bool logged_meas_idle_event_l1_r17_present              = false;
  bool logged_meas_idle_event_out_of_coverage_r17_present = false;
  bool logged_meas_uncom_bar_pre_r17_present              = false;
  bool imm_meas_uncom_bar_pre_r17_present                 = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1710-IEs ::= SEQUENCE
struct ue_eutra_cap_v1710_ies_s {
  bool                                     neigh_cell_si_acquisition_params_v1710_present = false;
  bool                                     sl_params_v1710_present                        = false;
  bool                                     sidelink_requested_r17_present                 = false;
  bool                                     non_crit_ext_present                           = false;
  irat_params_nr_v1710_s                   irat_params_nr_v1710;
  neigh_cell_si_acquisition_params_v1710_s neigh_cell_si_acquisition_params_v1710;
  sl_params_v1710_s                        sl_params_v1710;
  ue_eutra_cap_v1720_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1690 ::= SEQUENCE
struct other_params_v1690_s {
  bool ul_rrc_segmentation_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1700-IEs ::= SEQUENCE
struct ue_eutra_cap_v1700_ies_s {
  bool                                   meas_params_v1700_present                    = false;
  bool                                   ue_based_netw_perf_meas_params_v1700_present = false;
  bool                                   ntn_params_r17_present                       = false;
  bool                                   irat_params_nr_v1700_present                 = false;
  bool                                   non_crit_ext_present                         = false;
  meas_params_v1700_s                    meas_params_v1700;
  ue_based_netw_perf_meas_params_v1700_s ue_based_netw_perf_meas_params_v1700;
  phy_layer_params_v1700_s               phy_layer_params_v1700;
  ntn_params_r17_s                       ntn_params_r17;
  irat_params_nr_v1700_s                 irat_params_nr_v1700;
  mbms_params_v1700_s                    mbms_params_v1700;
  ue_eutra_cap_v1710_ies_s               non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1660 ::= SEQUENCE
struct irat_params_nr_v1660_s {
  bool extended_band_n77_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1690-IEs ::= SEQUENCE
struct ue_eutra_cap_v1690_ies_s {
  bool                     non_crit_ext_present = false;
  other_params_v1690_s     other_params_v1690;
  ue_eutra_cap_v1700_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1630 ::= SEQUENCE
struct meas_params_v1630_s {
  bool nr_idle_inactive_beam_meas_fr1_r16_present = false;
  bool nr_idle_inactive_beam_meas_fr2_r16_present = false;
  bool ce_meas_rss_ded_same_rbs_r16_present       = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1650 ::= SEQUENCE
struct other_params_v1650_s {
  bool mps_prio_ind_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1660-IEs ::= SEQUENCE
struct ue_eutra_cap_v1660_ies_s {
  bool                     non_crit_ext_present = false;
  irat_params_nr_v1660_s   irat_params_nr_v1660;
  ue_eutra_cap_v1690_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// EUTRA-5GC-Parameters-v1610 ::= SEQUENCE
struct eutra_minus5_gc_params_v1610_s {
  bool ce_inactive_state_r16_present  = false;
  bool ce_eutra_minus5_gc_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1610 ::= SEQUENCE
struct irat_params_nr_v1610_s {
  bool nr_ho_to_en_dc_r16_present                      = false;
  bool ce_eutra_minus5_gc_ho_to_nr_fdd_fr1_r16_present = false;
  bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr1_r16_present = false;
  bool ce_eutra_minus5_gc_ho_to_nr_fdd_fr2_r16_present = false;
  bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1630 ::= SEQUENCE
struct mac_params_v1630_s {
  bool direct_scg_scell_activation_nedc_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MobilityParameters-v1610 ::= SEQUENCE
struct mob_params_v1610_s {
  bool cho_r16_present                    = false;
  bool cho_fdd_tdd_r16_present            = false;
  bool cho_fail_r16_present               = false;
  bool cho_two_trigger_events_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-v1610 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_v1610_s {
  bool eutra_si_acquisition_for_ho_endc_r16_present = false;
  bool nr_autonomous_gaps_endc_fr1_r16_present      = false;
  bool nr_autonomous_gaps_endc_fr2_r16_present      = false;
  bool nr_autonomous_gaps_fr1_r16_present           = false;
  bool nr_autonomous_gaps_fr2_r16_present           = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PUR-Parameters-r16 ::= SEQUENCE
struct pur_params_r16_s {
  bool pur_cp_minus5_gc_ce_mode_a_r16_present = false;
  bool pur_cp_minus5_gc_ce_mode_b_r16_present = false;
  bool pur_up_minus5_gc_ce_mode_a_r16_present = false;
  bool pur_up_minus5_gc_ce_mode_b_r16_present = false;
  bool pur_cp_epc_ce_mode_a_r16_present       = false;
  bool pur_cp_epc_ce_mode_b_r16_present       = false;
  bool pur_up_epc_ce_mode_a_r16_present       = false;
  bool pur_up_epc_ce_mode_b_r16_present       = false;
  bool pur_cp_l1_ack_r16_present              = false;
  bool pur_freq_hop_r16_present               = false;
  bool pur_pusch_nb_max_tbs_r16_present       = false;
  bool pur_rsrp_validation_r16_present        = false;
  bool pur_sub_prb_ce_mode_a_r16_present      = false;
  bool pur_sub_prb_ce_mode_b_r16_present      = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1650-IEs ::= SEQUENCE
struct ue_eutra_cap_v1650_ies_s {
  bool                     other_params_v1650_present = false;
  bool                     non_crit_ext_present       = false;
  other_params_v1650_s     other_params_v1650;
  ue_eutra_cap_v1660_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1630 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1630_s {
  meas_params_v1630_s meas_params_v1630;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// HighSpeedEnhParameters-v1610 ::= SEQUENCE
struct high_speed_enh_params_v1610_s {
  bool meas_enhance_scell_r16_present       = false;
  bool meas_enhance2_r16_present            = false;
  bool demod_enhance2_r16_present           = false;
  bool inter_rat_enhancement_nr_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1610 ::= SEQUENCE
struct mac_params_v1610_s {
  bool direct_mcg_scell_activation_resume_r16_present = false;
  bool direct_scg_scell_activation_resume_r16_present = false;
  bool early_data_up_minus5_gc_r16_present            = false;
  bool rai_support_enh_r16_present                    = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MMTEL-Parameters-v1610 ::= SEQUENCE
struct mmtel_params_v1610_s {
  bool recommended_bit_rate_multiplier_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-v15a0 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_v15a0_s {
  bool eutra_cgi_report_nedc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1610 ::= SEQUENCE
struct other_params_v1610_s {
  bool resume_with_stored_mcg_scells_r16_present = false;
  bool resume_with_mcg_scell_cfg_r16_present     = false;
  bool resume_with_stored_scg_r16_present        = false;
  bool resume_with_scg_cfg_r16_present           = false;
  bool mcg_rlf_recovery_via_scg_r16_present      = false;
  bool overheat_ind_for_scg_r16_present          = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters-v1610 ::= SEQUENCE
struct pdcp_params_v1610_s {
  struct max_num_ehc_contexts_r16_opts {
    enum options {
      cs2,
      cs4,
      cs8,
      cs16,
      cs32,
      cs64,
      cs128,
      cs256,
      cs512,
      cs1024,
      cs2048,
      cs4096,
      cs8192,
      cs16384,
      cs32768,
      cs65536,
      nulltype
    } value;
    typedef uint32_t number_type;

    const char* to_string() const;
    uint32_t    to_number() const;
  };
  typedef enumerated<max_num_ehc_contexts_r16_opts> max_num_ehc_contexts_r16_e_;

  // member variables
  bool                        pdcp_version_change_without_ho_r16_present = false;
  bool                        ehc_r16_present                            = false;
  bool                        continue_ehc_context_r16_present           = false;
  bool                        max_num_ehc_contexts_r16_present           = false;
  bool                        joint_ehc_rohc_cfg_r16_present             = false;
  max_num_ehc_contexts_r16_e_ max_num_ehc_contexts_r16;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1540 ::= SEQUENCE
struct phy_layer_params_v1540_s {
  struct stti_spt_cap_v1540_s_ {};

  // member variables
  bool stti_spt_cap_v1540_present                      = false;
  bool crs_im_tm1_to_tm9_one_rx_port_v1540_present     = false;
  bool cch_im_ref_rec_type_a_one_rx_port_v1540_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1550 ::= SEQUENCE
struct phy_layer_params_v1550_s {
  bool dmrs_overhead_reduction_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-v1610 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_v1610_s {
  bool ul_pdcp_avg_delay_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1630-IEs ::= SEQUENCE
struct ue_eutra_cap_v1630_ies_s {
  bool                              rf_params_v1630_present                 = false;
  bool                              sl_params_v1630_present                 = false;
  bool                              early_security_reactivation_r16_present = false;
  bool                              meas_params_v1630_present               = false;
  bool                              non_crit_ext_present                    = false;
  rf_params_v1630_s                 rf_params_v1630;
  sl_params_v1630_s                 sl_params_v1630;
  mac_params_v1630_s                mac_params_v1630;
  meas_params_v1630_s               meas_params_v1630;
  ue_eutra_cap_add_xdd_mode_v1630_s fdd_add_ue_eutra_cap_v1630;
  ue_eutra_cap_add_xdd_mode_v1630_s tdd_add_ue_eutra_cap_v1630;
  ue_eutra_cap_v1650_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1610 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1610_s {
  bool                                     phy_layer_params_v1610_present                 = false;
  bool                                     pur_params_r16_present                         = false;
  bool                                     meas_params_v1610_present                      = false;
  bool                                     eutra_minus5_gc_params_v1610_present           = false;
  bool                                     irat_params_nr_v1610_present                   = false;
  bool                                     neigh_cell_si_acquisition_params_v1610_present = false;
  bool                                     mob_params_v1610_present                       = false;
  phy_layer_params_v1610_s                 phy_layer_params_v1610;
  pur_params_r16_s                         pur_params_r16;
  meas_params_v1610_s                      meas_params_v1610;
  eutra_minus5_gc_params_v1610_s           eutra_minus5_gc_params_v1610;
  irat_params_nr_v1610_s                   irat_params_nr_v1610;
  neigh_cell_si_acquisition_params_v1610_s neigh_cell_si_acquisition_params_v1610;
  mob_params_v1610_s                       mob_params_v1610;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// EUTRA-5GC-Parameters-r15 ::= SEQUENCE
struct eutra_minus5_gc_params_r15_s {
  bool eutra_minus5_gc_r15_present                           = false;
  bool eutra_epc_ho_eutra_minus5_gc_r15_present              = false;
  bool ho_eutra_minus5_gc_fdd_tdd_r15_present                = false;
  bool ho_interfreq_eutra_minus5_gc_r15_present              = false;
  bool ims_voice_over_mcg_bearer_eutra_minus5_gc_r15_present = false;
  bool inactive_state_r15_present                            = false;
  bool reflective_qos_r15_present                            = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1610-IEs ::= SEQUENCE
struct ue_eutra_cap_v1610_ies_s {
  bool                                     high_speed_enh_params_v1610_present            = false;
  bool                                     neigh_cell_si_acquisition_params_v1610_present = false;
  bool                                     mbms_params_v1610_present                      = false;
  bool                                     pdcp_params_v1610_present                      = false;
  bool                                     mac_params_v1610_present                       = false;
  bool                                     phy_layer_params_v1610_present                 = false;
  bool                                     meas_params_v1610_present                      = false;
  bool                                     pur_params_r16_present                         = false;
  bool                                     eutra_minus5_gc_params_v1610_present           = false;
  bool                                     other_params_v1610_present                     = false;
  bool                                     dl_ded_msg_segmentation_r16_present            = false;
  bool                                     irat_params_nr_v1610_present                   = false;
  bool                                     rf_params_v1610_present                        = false;
  bool                                     mob_params_v1610_present                       = false;
  bool                                     sl_params_v1610_present                        = false;
  bool                                     fdd_add_ue_eutra_cap_v1610_present             = false;
  bool                                     tdd_add_ue_eutra_cap_v1610_present             = false;
  bool                                     non_crit_ext_present                           = false;
  high_speed_enh_params_v1610_s            high_speed_enh_params_v1610;
  neigh_cell_si_acquisition_params_v1610_s neigh_cell_si_acquisition_params_v1610;
  mbms_params_v1610_s                      mbms_params_v1610;
  pdcp_params_v1610_s                      pdcp_params_v1610;
  mac_params_v1610_s                       mac_params_v1610;
  phy_layer_params_v1610_s                 phy_layer_params_v1610;
  meas_params_v1610_s                      meas_params_v1610;
  pur_params_r16_s                         pur_params_r16;
  eutra_minus5_gc_params_v1610_s           eutra_minus5_gc_params_v1610;
  other_params_v1610_s                     other_params_v1610;
  mmtel_params_v1610_s                     mmtel_params_v1610;
  irat_params_nr_v1610_s                   irat_params_nr_v1610;
  rf_params_v1610_s                        rf_params_v1610;
  mob_params_v1610_s                       mob_params_v1610;
  ue_based_netw_perf_meas_params_v1610_s   ue_based_netw_perf_meas_params_v1610;
  sl_params_v1610_s                        sl_params_v1610;
  ue_eutra_cap_add_xdd_mode_v1610_s        fdd_add_ue_eutra_cap_v1610;
  ue_eutra_cap_add_xdd_mode_v1610_s        tdd_add_ue_eutra_cap_v1610;
  ue_eutra_cap_v1630_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v15a0 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v15a0_s {
  bool                                     phy_layer_params_v1530_present = false;
  bool                                     phy_layer_params_v1540_present = false;
  bool                                     phy_layer_params_v1550_present = false;
  phy_layer_params_v1530_s                 phy_layer_params_v1530;
  phy_layer_params_v1540_s                 phy_layer_params_v1540;
  phy_layer_params_v1550_s                 phy_layer_params_v1550;
  neigh_cell_si_acquisition_params_v15a0_s neigh_cell_si_acquisition_params_v15a0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1570 ::= SEQUENCE
struct irat_params_nr_v1570_s {
  bool ss_sinr_meas_nr_fr1_r15_present = false;
  bool ss_sinr_meas_nr_fr2_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-ParametersNR-v1560 ::= SEQUENCE
struct pdcp_params_nr_v1560_s {
  bool ims_vo_nr_pdcp_scg_ngendc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RF-Parameters-v1570 ::= SEQUENCE
struct rf_params_v1570_s {
  struct dl_minus1024_qam_scaling_factor_r15_opts {
    enum options { v1, v1dot2, v1dot25, nulltype } value;
    typedef float number_type;

    const char* to_string() const;
    float       to_number() const;
    const char* to_number_string() const;
  };
  typedef enumerated<dl_minus1024_qam_scaling_factor_r15_opts> dl_minus1024_qam_scaling_factor_r15_e_;

  // member variables
  dl_minus1024_qam_scaling_factor_r15_e_ dl_minus1024_qam_scaling_factor_r15;
  uint8_t                                dl_minus1024_qam_total_weighted_layers_r15 = 0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v15a0-IEs ::= SEQUENCE
struct ue_eutra_cap_v15a0_ies_s {
  bool                                     eutra_minus5_gc_params_r15_present = false;
  bool                                     fdd_add_ue_eutra_cap_v15a0_present = false;
  bool                                     tdd_add_ue_eutra_cap_v15a0_present = false;
  bool                                     non_crit_ext_present               = false;
  neigh_cell_si_acquisition_params_v15a0_s neigh_cell_si_acquisition_params_v15a0;
  eutra_minus5_gc_params_r15_s             eutra_minus5_gc_params_r15;
  ue_eutra_cap_add_xdd_mode_v15a0_s        fdd_add_ue_eutra_cap_v15a0;
  ue_eutra_cap_add_xdd_mode_v15a0_s        tdd_add_ue_eutra_cap_v15a0;
  ue_eutra_cap_v1610_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersNR-v1560 ::= SEQUENCE
struct irat_params_nr_v1560_s {
  bool ng_en_dc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-v1550 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_v1550_s {
  bool eutra_cgi_report_endc_r15_present      = false;
  bool utra_geran_cgi_report_endc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1570-IEs ::= SEQUENCE
struct ue_eutra_cap_v1570_ies_s {
  bool                     rf_params_v1570_present      = false;
  bool                     irat_params_nr_v1570_present = false;
  bool                     non_crit_ext_present         = false;
  rf_params_v1570_s        rf_params_v1570;
  irat_params_nr_v1570_s   irat_params_nr_v1570;
  ue_eutra_cap_v15a0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1560 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1560_s {
  pdcp_params_nr_v1560_s pdcp_params_nr_v1560;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1550 ::= SEQUENCE
struct mac_params_v1550_s {
  bool elcid_support_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1560-IEs ::= SEQUENCE
struct ue_eutra_cap_v1560_ies_s {
  bool                              applied_cap_filt_common_r15_present = false;
  bool                              non_crit_ext_present                = false;
  pdcp_params_nr_v1560_s            pdcp_params_nr_v1560;
  irat_params_nr_v1560_s            irat_params_nr_v1560;
  dyn_octstring                     applied_cap_filt_common_r15;
  ue_eutra_cap_add_xdd_mode_v1560_s fdd_add_ue_eutra_cap_v1560;
  ue_eutra_cap_add_xdd_mode_v1560_s tdd_add_ue_eutra_cap_v1560;
  ue_eutra_cap_v1570_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1550 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1550_s {
  bool                                     neigh_cell_si_acquisition_params_v1550_present = false;
  neigh_cell_si_acquisition_params_v1550_s neigh_cell_si_acquisition_params_v1550;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-v1530 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_v1530_s {
  bool report_cgi_nr_en_dc_r15_present    = false;
  bool report_cgi_nr_no_en_dc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1540 ::= SEQUENCE
struct other_params_v1540_s {
  bool in_dev_coex_ind_endc_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SL-Parameters-v1540 ::= SEQUENCE
struct sl_params_v1540_s {
  bool sl_minus64_qam_rx_r15_present            = false;
  bool sl_rate_matching_tbs_scaling_r15_present = false;
  bool sl_low_t2min_r15_present                 = false;
  bool v2x_sensing_report_mode3_r15_present     = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1550-IEs ::= SEQUENCE
struct ue_eutra_cap_v1550_ies_s {
  bool                                     neigh_cell_si_acquisition_params_v1550_present = false;
  bool                                     non_crit_ext_present                           = false;
  neigh_cell_si_acquisition_params_v1550_s neigh_cell_si_acquisition_params_v1550;
  phy_layer_params_v1550_s                 phy_layer_params_v1550;
  mac_params_v1550_s                       mac_params_v1550;
  ue_eutra_cap_add_xdd_mode_v1550_s        fdd_add_ue_eutra_cap_v1550;
  ue_eutra_cap_add_xdd_mode_v1550_s        tdd_add_ue_eutra_cap_v1550;
  ue_eutra_cap_v1560_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1540 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1540_s {
  bool                         eutra_minus5_gc_params_r15_present = false;
  bool                         irat_params_nr_v1540_present       = false;
  eutra_minus5_gc_params_r15_s eutra_minus5_gc_params_r15;
  irat_params_nr_v1540_s       irat_params_nr_v1540;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LAA-Parameters-v1530 ::= SEQUENCE
struct laa_params_v1530_s {
  bool aul_r15_present             = false;
  bool laa_pusch_mode1_r15_present = false;
  bool laa_pusch_mode2_r15_present = false;
  bool laa_pusch_mode3_r15_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1530 ::= SEQUENCE
struct meas_params_v1530_s {
  bool qoe_meas_report_r15_present            = false;
  bool qoe_mtsi_meas_report_r15_present       = false;
  bool ca_idle_mode_meass_r15_present         = false;
  bool ca_idle_mode_validity_area_r15_present = false;
  bool height_meas_r15_present                = false;
  bool multiple_cells_meas_ext_r15_present    = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1530 ::= SEQUENCE
struct other_params_v1530_s {
  bool assist_info_bit_for_lc_r15_present = false;
  bool time_ref_provision_r15_present     = false;
  bool flight_path_plan_r15_present       = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RLC-Parameters-v1530 ::= SEQUENCE
struct rlc_params_v1530_s {
  bool flex_um_am_combinations_r15_present = false;
  bool rlc_am_ooo_delivery_r15_present     = false;
  bool rlc_um_ooo_delivery_r15_present     = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-v1530 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_v1530_s {
  bool logged_meas_bt_r15_present   = false;
  bool logged_meas_wlan_r15_present = false;
  bool imm_meas_bt_r15_present      = false;
  bool imm_meas_wlan_r15_present    = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1540-IEs ::= SEQUENCE
struct ue_eutra_cap_v1540_ies_s {
  bool                              phy_layer_params_v1540_present     = false;
  bool                              fdd_add_ue_eutra_cap_v1540_present = false;
  bool                              tdd_add_ue_eutra_cap_v1540_present = false;
  bool                              sl_params_v1540_present            = false;
  bool                              irat_params_nr_v1540_present       = false;
  bool                              non_crit_ext_present               = false;
  phy_layer_params_v1540_s          phy_layer_params_v1540;
  other_params_v1540_s              other_params_v1540;
  ue_eutra_cap_add_xdd_mode_v1540_s fdd_add_ue_eutra_cap_v1540;
  ue_eutra_cap_add_xdd_mode_v1540_s tdd_add_ue_eutra_cap_v1540;
  sl_params_v1540_s                 sl_params_v1540;
  irat_params_nr_v1540_s            irat_params_nr_v1540;
  ue_eutra_cap_v1550_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1530 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1530_s {
  bool                                     neigh_cell_si_acquisition_params_v1530_present = false;
  bool                                     reduced_cp_latency_r15_present                 = false;
  neigh_cell_si_acquisition_params_v1530_s neigh_cell_si_acquisition_params_v1530;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1520 ::= SEQUENCE
struct meas_params_v1520_s {
  bool               meas_gap_patterns_r15_present = false;
  fixed_bitstring<8> meas_gap_patterns_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1530-IEs ::= SEQUENCE
struct ue_eutra_cap_v1530_ies_s {
  bool                                     meas_params_v1530_present                      = false;
  bool                                     other_params_v1530_present                     = false;
  bool                                     neigh_cell_si_acquisition_params_v1530_present = false;
  bool                                     mac_params_v1530_present                       = false;
  bool                                     phy_layer_params_v1530_present                 = false;
  bool                                     rf_params_v1530_present                        = false;
  bool                                     pdcp_params_v1530_present                      = false;
  bool                                     ue_category_dl_v1530_present                   = false;
  bool                                     ue_based_netw_perf_meas_params_v1530_present   = false;
  bool                                     rlc_params_v1530_present                       = false;
  bool                                     sl_params_v1530_present                        = false;
  bool                                     extended_nof_drbs_r15_present                  = false;
  bool                                     reduced_cp_latency_r15_present                 = false;
  bool                                     laa_params_v1530_present                       = false;
  bool                                     ue_category_ul_v1530_present                   = false;
  bool                                     fdd_add_ue_eutra_cap_v1530_present             = false;
  bool                                     tdd_add_ue_eutra_cap_v1530_present             = false;
  bool                                     non_crit_ext_present                           = false;
  meas_params_v1530_s                      meas_params_v1530;
  other_params_v1530_s                     other_params_v1530;
  neigh_cell_si_acquisition_params_v1530_s neigh_cell_si_acquisition_params_v1530;
  mac_params_v1530_s                       mac_params_v1530;
  phy_layer_params_v1530_s                 phy_layer_params_v1530;
  rf_params_v1530_s                        rf_params_v1530;
  pdcp_params_v1530_s                      pdcp_params_v1530;
  uint8_t                                  ue_category_dl_v1530 = 22;
  ue_based_netw_perf_meas_params_v1530_s   ue_based_netw_perf_meas_params_v1530;
  rlc_params_v1530_s                       rlc_params_v1530;
  sl_params_v1530_s                        sl_params_v1530;
  laa_params_v1530_s                       laa_params_v1530;
  uint8_t                                  ue_category_ul_v1530 = 22;
  ue_eutra_cap_add_xdd_mode_v1530_s        fdd_add_ue_eutra_cap_v1530;
  ue_eutra_cap_add_xdd_mode_v1530_s        tdd_add_ue_eutra_cap_v1530;
  ue_eutra_cap_v1540_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1520-IEs ::= SEQUENCE
struct ue_eutra_cap_v1520_ies_s {
  bool                     non_crit_ext_present = false;
  meas_params_v1520_s      meas_params_v1520;
  ue_eutra_cap_v1530_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1510 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1510_s {
  bool                 pdcp_params_nr_r15_present = false;
  pdcp_params_nr_r15_s pdcp_params_nr_r15;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1460 ::= SEQUENCE
struct other_params_v1460_s {
  bool non_csg_si_report_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1510-IEs ::= SEQUENCE
struct ue_eutra_cap_v1510_ies_s {
  bool                              irat_params_nr_r15_present         = false;
  bool                              feature_sets_eutra_r15_present     = false;
  bool                              pdcp_params_nr_r15_present         = false;
  bool                              fdd_add_ue_eutra_cap_v1510_present = false;
  bool                              tdd_add_ue_eutra_cap_v1510_present = false;
  bool                              non_crit_ext_present               = false;
  irat_params_nr_r15_s              irat_params_nr_r15;
  feature_sets_eutra_r15_s          feature_sets_eutra_r15;
  pdcp_params_nr_r15_s              pdcp_params_nr_r15;
  ue_eutra_cap_add_xdd_mode_v1510_s fdd_add_ue_eutra_cap_v1510;
  ue_eutra_cap_add_xdd_mode_v1510_s tdd_add_ue_eutra_cap_v1510;
  ue_eutra_cap_v1520_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// OtherParameters-v1450 ::= SEQUENCE
struct other_params_v1450_s {
  bool overheat_ind_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1450 ::= SEQUENCE
struct phy_layer_params_v1450_s {
  bool ce_srs_enhancement_without_comb4_r14_present = false;
  bool crs_less_dw_pts_r14_present                  = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1460-IEs ::= SEQUENCE
struct ue_eutra_cap_v1460_ies_s {
  bool                     ue_category_dl_v1460_present = false;
  bool                     non_crit_ext_present         = false;
  uint8_t                  ue_category_dl_v1460         = 21;
  other_params_v1460_s     other_params_v1460;
  ue_eutra_cap_v1510_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LWA-Parameters-v1440 ::= SEQUENCE
struct lwa_params_v1440_s {
  bool lwa_rlc_um_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1440 ::= SEQUENCE
struct mac_params_v1440_s {
  bool rai_support_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MMTEL-Parameters-r14 ::= SEQUENCE
struct mmtel_params_r14_s {
  bool delay_budget_report_r14_present        = false;
  bool pusch_enhance_r14_present              = false;
  bool recommended_bit_rate_r14_present       = false;
  bool recommended_bit_rate_query_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1450-IEs ::= SEQUENCE
struct ue_eutra_cap_v1450_ies_s {
  bool                     phy_layer_params_v1450_present = false;
  bool                     rf_params_v1450_present        = false;
  bool                     ue_category_dl_v1450_present   = false;
  bool                     non_crit_ext_present           = false;
  phy_layer_params_v1450_s phy_layer_params_v1450;
  rf_params_v1450_s        rf_params_v1450;
  other_params_v1450_s     other_params_v1450;
  uint8_t                  ue_category_dl_v1450 = 20;
  ue_eutra_cap_v1460_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-v1430 ::= SEQUENCE
struct ce_params_v1430_s {
  bool ce_switch_without_ho_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// HighSpeedEnhParameters-r14 ::= SEQUENCE
struct high_speed_enh_params_r14_s {
  bool meas_enhance_r14_present  = false;
  bool demod_enhance_r14_present = false;
  bool prach_enhance_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LAA-Parameters-v1430 ::= SEQUENCE
struct laa_params_v1430_s {
  struct two_step_sched_timing_info_r14_opts {
    enum options { nplus1, nplus2, nplus3, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<two_step_sched_timing_info_r14_opts> two_step_sched_timing_info_r14_e_;

  // member variables
  bool                              cross_carrier_sched_laa_ul_r14_present    = false;
  bool                              ul_laa_r14_present                        = false;
  bool                              two_step_sched_timing_info_r14_present    = false;
  bool                              uss_blind_decoding_adjustment_r14_present = false;
  bool                              uss_blind_decoding_reduction_r14_present  = false;
  bool                              out_of_seq_grant_handling_r14_present     = false;
  two_step_sched_timing_info_r14_e_ two_step_sched_timing_info_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LWA-Parameters-v1430 ::= SEQUENCE
struct lwa_params_v1430_s {
  bool     lwa_ho_without_wt_change_r14_present = false;
  bool     lwa_ul_r14_present                   = false;
  bool     wlan_periodic_meas_r14_present       = false;
  bool     wlan_report_any_wlan_r14_present     = false;
  bool     wlan_supported_data_rate_r14_present = false;
  uint16_t wlan_supported_data_rate_r14         = 1;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LWIP-Parameters-v1430 ::= SEQUENCE
struct lwip_params_v1430_s {
  bool lwip_aggregation_dl_r14_present = false;
  bool lwip_aggregation_ul_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1430 ::= SEQUENCE
struct mac_params_v1430_s {
  bool short_sps_interv_fdd_r14_present = false;
  bool short_sps_interv_tdd_r14_present = false;
  bool skip_ul_dynamic_r14_present      = false;
  bool skip_ul_sps_r14_present          = false;
  bool multiple_ul_sps_r14_present      = false;
  bool data_inact_mon_r14_present       = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-v1430 ::= SEQUENCE
struct mbms_params_v1430_s {
  bool fembms_ded_cell_r14_present                   = false;
  bool fembms_mixed_cell_r14_present                 = false;
  bool subcarrier_spacing_mbms_khz7dot5_r14_present  = false;
  bool subcarrier_spacing_mbms_khz1dot25_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1430 ::= SEQUENCE
struct meas_params_v1430_s {
  bool ce_meass_r14_present                  = false;
  bool ncsg_r14_present                      = false;
  bool short_meas_gap_r14_present            = false;
  bool per_serving_cell_meas_gap_r14_present = false;
  bool non_uniform_gap_r14_present           = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MobilityParameters-r14 ::= SEQUENCE
struct mob_params_r14_s {
  bool make_before_break_r14_present = false;
  bool rach_less_r14_present         = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1430 ::= SEQUENCE
struct other_params_v1430_s {
  bool bw_pref_ind_r14_present        = false;
  bool rlm_report_support_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters-v1430 ::= SEQUENCE
struct pdcp_params_v1430_s {
  struct supported_ul_only_rohc_profiles_r14_s_ {
    bool profile0x0006_r14 = false;
  };
  struct max_num_rohc_context_sessions_r14_opts {
    enum options {
      cs2,
      cs4,
      cs8,
      cs12,
      cs16,
      cs24,
      cs32,
      cs48,
      cs64,
      cs128,
      cs256,
      cs512,
      cs1024,
      cs16384,
      spare2,
      spare1,
      nulltype
    } value;
    typedef uint16_t number_type;

    const char* to_string() const;
    uint16_t    to_number() const;
  };
  typedef enumerated<max_num_rohc_context_sessions_r14_opts> max_num_rohc_context_sessions_r14_e_;

  // member variables
  bool                                   max_num_rohc_context_sessions_r14_present = false;
  supported_ul_only_rohc_profiles_r14_s_ supported_ul_only_rohc_profiles_r14;
  max_num_rohc_context_sessions_r14_e_   max_num_rohc_context_sessions_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RLC-Parameters-v1430 ::= SEQUENCE
struct rlc_params_v1430_s {
  bool extended_poll_byte_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-v1430 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_v1430_s {
  bool location_report_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1440-IEs ::= SEQUENCE
struct ue_eutra_cap_v1440_ies_s {
  bool                     non_crit_ext_present = false;
  lwa_params_v1440_s       lwa_params_v1440;
  mac_params_v1440_s       mac_params_v1440;
  ue_eutra_cap_v1450_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1430 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1430_s {
  bool                     phy_layer_params_v1430_present = false;
  bool                     mmtel_params_r14_present       = false;
  phy_layer_params_v1430_s phy_layer_params_v1430;
  mmtel_params_r14_s       mmtel_params_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v1360 ::= SEQUENCE
struct other_params_v1360_s {
  bool in_dev_coex_ind_hardware_sharing_ind_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1430-IEs ::= SEQUENCE
struct ue_eutra_cap_v1430_ies_s {
  struct ue_category_ul_v1430_opts {
    enum options { n16, n17, n18, n19, n20, m2, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ue_category_ul_v1430_opts> ue_category_ul_v1430_e_;

  // member variables
  bool                                   ue_category_dl_v1430_present                 = false;
  bool                                   ue_category_ul_v1430_present                 = false;
  bool                                   ue_category_ul_v1430b_present                = false;
  bool                                   mac_params_v1430_present                     = false;
  bool                                   meas_params_v1430_present                    = false;
  bool                                   pdcp_params_v1430_present                    = false;
  bool                                   rf_params_v1430_present                      = false;
  bool                                   laa_params_v1430_present                     = false;
  bool                                   lwa_params_v1430_present                     = false;
  bool                                   lwip_params_v1430_present                    = false;
  bool                                   mmtel_params_r14_present                     = false;
  bool                                   mob_params_r14_present                       = false;
  bool                                   fdd_add_ue_eutra_cap_v1430_present           = false;
  bool                                   tdd_add_ue_eutra_cap_v1430_present           = false;
  bool                                   mbms_params_v1430_present                    = false;
  bool                                   sl_params_v1430_present                      = false;
  bool                                   ue_based_netw_perf_meas_params_v1430_present = false;
  bool                                   high_speed_enh_params_r14_present            = false;
  bool                                   non_crit_ext_present                         = false;
  phy_layer_params_v1430_s               phy_layer_params_v1430;
  ue_category_ul_v1430_e_                ue_category_ul_v1430;
  mac_params_v1430_s                     mac_params_v1430;
  meas_params_v1430_s                    meas_params_v1430;
  pdcp_params_v1430_s                    pdcp_params_v1430;
  rlc_params_v1430_s                     rlc_params_v1430;
  rf_params_v1430_s                      rf_params_v1430;
  laa_params_v1430_s                     laa_params_v1430;
  lwa_params_v1430_s                     lwa_params_v1430;
  lwip_params_v1430_s                    lwip_params_v1430;
  other_params_v1430_s                   other_params_v1430;
  mmtel_params_r14_s                     mmtel_params_r14;
  mob_params_r14_s                       mob_params_r14;
  ce_params_v1430_s                      ce_params_v1430;
  ue_eutra_cap_add_xdd_mode_v1430_s      fdd_add_ue_eutra_cap_v1430;
  ue_eutra_cap_add_xdd_mode_v1430_s      tdd_add_ue_eutra_cap_v1430;
  mbms_params_v1430_s                    mbms_params_v1430;
  sl_params_v1430_s                      sl_params_v1430;
  ue_based_netw_perf_meas_params_v1430_s ue_based_netw_perf_meas_params_v1430;
  high_speed_enh_params_r14_s            high_speed_enh_params_r14;
  ue_eutra_cap_v1440_ies_s               non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-v1350 ::= SEQUENCE
struct ce_params_v1350_s {
  bool unicast_freq_hop_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1360-IEs ::= SEQUENCE
struct ue_eutra_cap_v1360_ies_s {
  bool                     other_params_v1360_present = false;
  bool                     non_crit_ext_present       = false;
  other_params_v1360_s     other_params_v1360;
  ue_eutra_cap_v1430_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1350-IEs ::= SEQUENCE
struct ue_eutra_cap_v1350_ies_s {
  bool                     ue_category_dl_v1350_present = false;
  bool                     ue_category_ul_v1350_present = false;
  bool                     non_crit_ext_present         = false;
  ce_params_v1350_s        ce_params_v1350;
  ue_eutra_cap_v1360_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SCPTM-Parameters-r13 ::= SEQUENCE
struct scptm_params_r13_s {
  bool scptm_parallel_reception_r13_present = false;
  bool scptm_scell_r13_present              = false;
  bool scptm_non_serving_cell_r13_present   = false;
  bool scptm_async_dc_r13_present           = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1340-IEs ::= SEQUENCE
struct ue_eutra_cap_v1340_ies_s {
  bool                     ue_category_ul_v1340_present = false;
  bool                     non_crit_ext_present         = false;
  uint8_t                  ue_category_ul_v1340         = 15;
  ue_eutra_cap_v1350_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-v1320 ::= SEQUENCE
struct ce_params_v1320_s {
  bool intra_freq_a3_ce_mode_a_r13_present = false;
  bool intra_freq_a3_ce_mode_b_r13_present = false;
  bool intra_freq_ho_ce_mode_a_r13_present = false;
  bool intra_freq_ho_ce_mode_b_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1310 ::= SEQUENCE
struct phy_layer_params_v1310_s {
  struct supported_blind_decoding_r13_s_ {
    bool    max_num_decoding_r13_present                     = false;
    bool    pdcch_candidate_reductions_r13_present           = false;
    bool    skip_monitoring_dci_format0_minus1_a_r13_present = false;
    uint8_t max_num_decoding_r13                             = 1;
  };

  // member variables
  bool                            aperiodic_csi_report_r13_present       = false;
  bool                            codebook_harq_ack_r13_present          = false;
  bool                            cross_carrier_sched_b5_c_r13_present   = false;
  bool                            fdd_harq_timing_tdd_r13_present        = false;
  bool                            max_num_upd_csi_proc_r13_present       = false;
  bool                            pucch_format4_r13_present              = false;
  bool                            pucch_format5_r13_present              = false;
  bool                            pucch_scell_r13_present                = false;
  bool                            spatial_bundling_harq_ack_r13_present  = false;
  bool                            supported_blind_decoding_r13_present   = false;
  bool                            uci_pusch_ext_r13_present              = false;
  bool                            crs_interf_mitigation_tm10_r13_present = false;
  bool                            pdsch_collision_handling_r13_present   = false;
  fixed_bitstring<2>              aperiodic_csi_report_r13;
  fixed_bitstring<2>              codebook_harq_ack_r13;
  uint8_t                         max_num_upd_csi_proc_r13 = 5;
  supported_blind_decoding_r13_s_ supported_blind_decoding_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1330-IEs ::= SEQUENCE
struct ue_eutra_cap_v1330_ies_s {
  bool                     ue_category_dl_v1330_present   = false;
  bool                     phy_layer_params_v1330_present = false;
  bool                     ue_ce_need_ul_gaps_r13_present = false;
  bool                     non_crit_ext_present           = false;
  uint8_t                  ue_category_dl_v1330           = 18;
  phy_layer_params_v1330_s phy_layer_params_v1330;
  ue_eutra_cap_v1340_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1320 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1320_s {
  bool                     phy_layer_params_v1320_present = false;
  bool                     scptm_params_r13_present       = false;
  phy_layer_params_v1320_s phy_layer_params_v1320;
  scptm_params_r13_s       scptm_params_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-r13 ::= SEQUENCE
struct ce_params_r13_s {
  bool ce_mode_a_r13_present = false;
  bool ce_mode_b_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// DC-Parameters-v1310 ::= SEQUENCE
struct dc_params_v1310_s {
  bool pdcp_transfer_split_ul_r13_present = false;
  bool ue_sstd_meas_r13_present           = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LAA-Parameters-r13 ::= SEQUENCE
struct laa_params_r13_s {
  bool cross_carrier_sched_laa_dl_r13_present = false;
  bool csi_rs_drs_rrm_meass_laa_r13_present   = false;
  bool dl_laa_r13_present                     = false;
  bool ending_dw_pts_r13_present              = false;
  bool second_slot_start_position_r13_present = false;
  bool tm9_laa_r13_present                    = false;
  bool tm10_laa_r13_present                   = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LWA-Parameters-r13 ::= SEQUENCE
struct lwa_params_r13_s {
  bool               lwa_r13_present              = false;
  bool               lwa_split_bearer_r13_present = false;
  bool               wlan_mac_address_r13_present = false;
  bool               lwa_buffer_size_r13_present  = false;
  fixed_octstring<6> wlan_mac_address_r13;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// LWIP-Parameters-r13 ::= SEQUENCE
struct lwip_params_r13_s {
  bool lwip_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-v1310 ::= SEQUENCE
struct mac_params_v1310_s {
  bool extended_mac_len_field_r13_present = false;
  bool extended_long_drx_r13_present      = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1310 ::= SEQUENCE
struct meas_params_v1310_s {
  bool rs_sinr_meas_r13_present                 = false;
  bool allowed_cell_list_r13_present            = false;
  bool extended_max_obj_id_r13_present          = false;
  bool ul_pdcp_delay_r13_present                = false;
  bool extended_freq_priorities_r13_present     = false;
  bool multi_band_info_report_r13_present       = false;
  bool rssi_and_ch_occupancy_report_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters-v1310 ::= SEQUENCE
struct pdcp_params_v1310_s {
  bool pdcp_sn_ext_minus18bits_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RLC-Parameters-v1310 ::= SEQUENCE
struct rlc_params_v1310_s {
  bool extended_rlc_sn_so_field_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SL-Parameters-v1310 ::= SEQUENCE
struct sl_params_v1310_s {
  bool disc_sys_info_report_r13_present = false;
  bool comm_multiple_tx_r13_present     = false;
  bool disc_inter_freq_tx_r13_present   = false;
  bool disc_periodic_slss_r13_present   = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1320-IEs ::= SEQUENCE
struct ue_eutra_cap_v1320_ies_s {
  bool                              ce_params_v1320_present            = false;
  bool                              phy_layer_params_v1320_present     = false;
  bool                              rf_params_v1320_present            = false;
  bool                              fdd_add_ue_eutra_cap_v1320_present = false;
  bool                              tdd_add_ue_eutra_cap_v1320_present = false;
  bool                              non_crit_ext_present               = false;
  ce_params_v1320_s                 ce_params_v1320;
  phy_layer_params_v1320_s          phy_layer_params_v1320;
  rf_params_v1320_s                 rf_params_v1320;
  ue_eutra_cap_add_xdd_mode_v1320_s fdd_add_ue_eutra_cap_v1320;
  ue_eutra_cap_add_xdd_mode_v1320_s tdd_add_ue_eutra_cap_v1320;
  ue_eutra_cap_v1330_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1310 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1310_s {
  bool                     phy_layer_params_v1310_present = false;
  phy_layer_params_v1310_s phy_layer_params_v1310;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// WLAN-IW-Parameters-v1310 ::= SEQUENCE
struct wlan_iw_params_v1310_s {
  bool rclwi_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1280 ::= SEQUENCE
struct phy_layer_params_v1280_s {
  bool alt_tbs_indices_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1310-IEs ::= SEQUENCE
struct ue_eutra_cap_v1310_ies_s {
  struct ue_category_dl_v1310_opts {
    enum options { n17, m1, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ue_category_dl_v1310_opts> ue_category_dl_v1310_e_;
  struct ue_category_ul_v1310_opts {
    enum options { n14, m1, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<ue_category_ul_v1310_opts> ue_category_ul_v1310_e_;

  // member variables
  bool                              ue_category_dl_v1310_present       = false;
  bool                              ue_category_ul_v1310_present       = false;
  bool                              mac_params_v1310_present           = false;
  bool                              phy_layer_params_v1310_present     = false;
  bool                              rf_params_v1310_present            = false;
  bool                              meas_params_v1310_present          = false;
  bool                              dc_params_v1310_present            = false;
  bool                              sl_params_v1310_present            = false;
  bool                              scptm_params_r13_present           = false;
  bool                              ce_params_r13_present              = false;
  bool                              laa_params_r13_present             = false;
  bool                              lwa_params_r13_present             = false;
  bool                              fdd_add_ue_eutra_cap_v1310_present = false;
  bool                              tdd_add_ue_eutra_cap_v1310_present = false;
  bool                              non_crit_ext_present               = false;
  ue_category_dl_v1310_e_           ue_category_dl_v1310;
  ue_category_ul_v1310_e_           ue_category_ul_v1310;
  pdcp_params_v1310_s               pdcp_params_v1310;
  rlc_params_v1310_s                rlc_params_v1310;
  mac_params_v1310_s                mac_params_v1310;
  phy_layer_params_v1310_s          phy_layer_params_v1310;
  rf_params_v1310_s                 rf_params_v1310;
  meas_params_v1310_s               meas_params_v1310;
  dc_params_v1310_s                 dc_params_v1310;
  sl_params_v1310_s                 sl_params_v1310;
  scptm_params_r13_s                scptm_params_r13;
  ce_params_r13_s                   ce_params_r13;
  irat_params_wlan_r13_s            inter_rat_params_wlan_r13;
  laa_params_r13_s                  laa_params_r13;
  lwa_params_r13_s                  lwa_params_r13;
  wlan_iw_params_v1310_s            wlan_iw_params_v1310;
  lwip_params_r13_s                 lwip_params_r13;
  ue_eutra_cap_add_xdd_mode_v1310_s fdd_add_ue_eutra_cap_v1310;
  ue_eutra_cap_add_xdd_mode_v1310_s tdd_add_ue_eutra_cap_v1310;
  ue_eutra_cap_v1320_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1280-IEs ::= SEQUENCE
struct ue_eutra_cap_v1280_ies_s {
  bool                     phy_layer_params_v1280_present = false;
  bool                     non_crit_ext_present           = false;
  phy_layer_params_v1280_s phy_layer_params_v1280;
  ue_eutra_cap_v1310_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1250 ::= SEQUENCE
struct meas_params_v1250_s {
  bool timer_t312_r12_present                    = false;
  bool alt_time_to_trigger_r12_present           = false;
  bool inc_mon_eutra_r12_present                 = false;
  bool inc_mon_utra_r12_present                  = false;
  bool extended_max_meas_id_r12_present          = false;
  bool extended_rsrq_lower_range_r12_present     = false;
  bool rsrq_on_all_symbols_r12_present           = false;
  bool crs_discovery_signals_meas_r12_present    = false;
  bool csi_rs_discovery_signals_meas_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1270-IEs ::= SEQUENCE
struct ue_eutra_cap_v1270_ies_s {
  bool                     rf_params_v1270_present = false;
  bool                     non_crit_ext_present    = false;
  rf_params_v1270_s        rf_params_v1270;
  ue_eutra_cap_v1280_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// DC-Parameters-r12 ::= SEQUENCE
struct dc_params_r12_s {
  bool drb_type_split_r12_present = false;
  bool drb_type_scg_r12_present   = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MAC-Parameters-r12 ::= SEQUENCE
struct mac_params_r12_s {
  bool lc_ch_sr_prohibit_timer_r12_present = false;
  bool long_drx_cmd_r12_present            = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-v1250 ::= SEQUENCE
struct mbms_params_v1250_s {
  bool mbms_async_dc_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RLC-Parameters-r12 ::= SEQUENCE
struct rlc_params_r12_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-v1250 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_v1250_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1260-IEs ::= SEQUENCE
struct ue_eutra_cap_v1260_ies_s {
  bool                     ue_category_dl_v1260_present = false;
  bool                     non_crit_ext_present         = false;
  uint8_t                  ue_category_dl_v1260         = 15;
  ue_eutra_cap_v1270_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1250 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1250_s {
  bool                     phy_layer_params_v1250_present = false;
  bool                     meas_params_v1250_present      = false;
  phy_layer_params_v1250_s phy_layer_params_v1250;
  meas_params_v1250_s      meas_params_v1250;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// WLAN-IW-Parameters-r12 ::= SEQUENCE
struct wlan_iw_params_r12_s {
  bool wlan_iw_ran_rules_r12_present      = false;
  bool wlan_iw_andsf_policies_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-r11 ::= SEQUENCE
struct mbms_params_r11_s {
  bool mbms_scell_r11_present            = false;
  bool mbms_non_serving_cell_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v11a0 ::= SEQUENCE
struct meas_params_v11a0_s {
  bool benefits_from_interruption_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1250-IEs ::= SEQUENCE
struct ue_eutra_cap_v1250_ies_s {
  bool                                   phy_layer_params_v1250_present               = false;
  bool                                   rf_params_v1250_present                      = false;
  bool                                   rlc_params_r12_present                       = false;
  bool                                   ue_based_netw_perf_meas_params_v1250_present = false;
  bool                                   ue_category_dl_r12_present                   = false;
  bool                                   ue_category_ul_r12_present                   = false;
  bool                                   wlan_iw_params_r12_present                   = false;
  bool                                   meas_params_v1250_present                    = false;
  bool                                   dc_params_r12_present                        = false;
  bool                                   mbms_params_v1250_present                    = false;
  bool                                   mac_params_r12_present                       = false;
  bool                                   fdd_add_ue_eutra_cap_v1250_present           = false;
  bool                                   tdd_add_ue_eutra_cap_v1250_present           = false;
  bool                                   sl_params_r12_present                        = false;
  bool                                   non_crit_ext_present                         = false;
  phy_layer_params_v1250_s               phy_layer_params_v1250;
  rf_params_v1250_s                      rf_params_v1250;
  rlc_params_r12_s                       rlc_params_r12;
  ue_based_netw_perf_meas_params_v1250_s ue_based_netw_perf_meas_params_v1250;
  uint8_t                                ue_category_dl_r12 = 0;
  uint8_t                                ue_category_ul_r12 = 0;
  wlan_iw_params_r12_s                   wlan_iw_params_r12;
  meas_params_v1250_s                    meas_params_v1250;
  dc_params_r12_s                        dc_params_r12;
  mbms_params_v1250_s                    mbms_params_v1250;
  mac_params_r12_s                       mac_params_r12;
  ue_eutra_cap_add_xdd_mode_v1250_s      fdd_add_ue_eutra_cap_v1250;
  ue_eutra_cap_add_xdd_mode_v1250_s      tdd_add_ue_eutra_cap_v1250;
  sl_params_r12_s                        sl_params_r12;
  ue_eutra_cap_v1260_ies_s               non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v11a0-IEs ::= SEQUENCE
struct ue_eutra_cap_v11a0_ies_s {
  bool                     ue_category_v11a0_present = false;
  bool                     meas_params_v11a0_present = false;
  bool                     non_crit_ext_present      = false;
  uint8_t                  ue_category_v11a0         = 11;
  meas_params_v11a0_s      meas_params_v11a0;
  ue_eutra_cap_v1250_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1180 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1180_s {
  mbms_params_r11_s mbms_params_r11;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v1130 ::= SEQUENCE
struct meas_params_v1130_s {
  bool rsrq_meas_wideband_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-r11 ::= SEQUENCE
struct other_params_r11_s {
  bool in_dev_coex_ind_r11_present          = false;
  bool pwr_pref_ind_r11_present             = false;
  bool ue_rx_tx_time_diff_meass_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1130 ::= SEQUENCE
struct phy_layer_params_v1130_s {
  bool crs_interf_handl_r11_present         = false;
  bool epdcch_r11_present                   = false;
  bool multi_ack_csi_report_r11_present     = false;
  bool ss_cch_interf_handl_r11_present      = false;
  bool tdd_special_sf_r11_present           = false;
  bool tx_div_pucch1b_ch_select_r11_present = false;
  bool ul_co_mp_r11_present                 = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v1170 ::= SEQUENCE
struct phy_layer_params_v1170_s {
  bool               inter_band_tdd_ca_with_different_cfg_r11_present = false;
  fixed_bitstring<2> inter_band_tdd_ca_with_different_cfg_r11;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1180-IEs ::= SEQUENCE
struct ue_eutra_cap_v1180_ies_s {
  bool                              rf_params_v1180_present            = false;
  bool                              mbms_params_r11_present            = false;
  bool                              fdd_add_ue_eutra_cap_v1180_present = false;
  bool                              tdd_add_ue_eutra_cap_v1180_present = false;
  bool                              non_crit_ext_present               = false;
  rf_params_v1180_s                 rf_params_v1180;
  mbms_params_r11_s                 mbms_params_r11;
  ue_eutra_cap_add_xdd_mode_v1180_s fdd_add_ue_eutra_cap_v1180;
  ue_eutra_cap_add_xdd_mode_v1180_s tdd_add_ue_eutra_cap_v1180;
  ue_eutra_cap_v11a0_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersCDMA2000-v1130 ::= SEQUENCE
struct irat_params_cdma2000_v1130_s {
  bool cdma2000_nw_sharing_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PDCP-Parameters-v1130 ::= SEQUENCE
struct pdcp_params_v1130_s {
  bool pdcp_sn_ext_r11_present                   = false;
  bool support_rohc_context_continue_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1170-IEs ::= SEQUENCE
struct ue_eutra_cap_v1170_ies_s {
  bool                     phy_layer_params_v1170_present = false;
  bool                     ue_category_v1170_present      = false;
  bool                     non_crit_ext_present           = false;
  phy_layer_params_v1170_s phy_layer_params_v1170;
  uint8_t                  ue_category_v1170 = 9;
  ue_eutra_cap_v1180_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1130 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1130_s {
  bool                     ext                            = false;
  bool                     phy_layer_params_v1130_present = false;
  bool                     meas_params_v1130_present      = false;
  bool                     other_params_r11_present       = false;
  phy_layer_params_v1130_s phy_layer_params_v1130;
  meas_params_v1130_s      meas_params_v1130;
  other_params_r11_s       other_params_r11;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE
struct irat_params_cdma2000_minus1_xrtt_v1020_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE
struct irat_params_utra_tdd_v1020_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// OTDOA-PositioningCapabilities-r10 ::= SEQUENCE
struct otdoa_positioning_cap_r10_s {
  bool inter_freq_rstd_meas_r10_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1130-IEs ::= SEQUENCE
struct ue_eutra_cap_v1130_ies_s {
  bool                              phy_layer_params_v1130_present     = false;
  bool                              fdd_add_ue_eutra_cap_v1130_present = false;
  bool                              tdd_add_ue_eutra_cap_v1130_present = false;
  bool                              non_crit_ext_present               = false;
  pdcp_params_v1130_s               pdcp_params_v1130;
  phy_layer_params_v1130_s          phy_layer_params_v1130;
  rf_params_v1130_s                 rf_params_v1130;
  meas_params_v1130_s               meas_params_v1130;
  irat_params_cdma2000_v1130_s      inter_rat_params_cdma2000_v1130;
  other_params_r11_s                other_params_r11;
  ue_eutra_cap_add_xdd_mode_v1130_s fdd_add_ue_eutra_cap_v1130;
  ue_eutra_cap_add_xdd_mode_v1130_s tdd_add_ue_eutra_cap_v1130;
  ue_eutra_cap_v1170_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE
struct ue_eutra_cap_v1090_ies_s {
  bool                     rf_params_v1090_present = false;
  bool                     non_crit_ext_present    = false;
  rf_params_v1090_s        rf_params_v1090;
  ue_eutra_cap_v1130_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1060_s {
  bool                                     ext                                     = false;
  bool                                     phy_layer_params_v1060_present          = false;
  bool                                     feature_group_ind_rel10_v1060_present   = false;
  bool                                     inter_rat_params_cdma2000_v1060_present = false;
  bool                                     inter_rat_params_utra_tdd_v1060_present = false;
  phy_layer_params_v1020_s                 phy_layer_params_v1060;
  fixed_bitstring<32>                      feature_group_ind_rel10_v1060;
  irat_params_cdma2000_minus1_xrtt_v1020_s inter_rat_params_cdma2000_v1060;
  irat_params_utra_tdd_v1020_s             inter_rat_params_utra_tdd_v1060;
  // ...
  // group 0
  copy_ptr<otdoa_positioning_cap_r10_s> otdoa_positioning_cap_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE
struct ue_based_netw_perf_meas_params_r10_s {
  bool logged_meass_idle_r10_present        = false;
  bool standalone_gnss_location_r10_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE
struct ue_eutra_cap_v1060_ies_s {
  bool                              fdd_add_ue_eutra_cap_v1060_present = false;
  bool                              tdd_add_ue_eutra_cap_v1060_present = false;
  bool                              rf_params_v1060_present            = false;
  bool                              non_crit_ext_present               = false;
  ue_eutra_cap_add_xdd_mode_v1060_s fdd_add_ue_eutra_cap_v1060;
  ue_eutra_cap_add_xdd_mode_v1060_s tdd_add_ue_eutra_cap_v1060;
  rf_params_v1060_s                 rf_params_v1060;
  ue_eutra_cap_v1090_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE
struct ue_eutra_cap_v1020_ies_s {
  bool                                     ue_category_v1020_present                  = false;
  bool                                     phy_layer_params_v1020_present             = false;
  bool                                     rf_params_v1020_present                    = false;
  bool                                     meas_params_v1020_present                  = false;
  bool                                     feature_group_ind_rel10_r10_present        = false;
  bool                                     inter_rat_params_cdma2000_v1020_present    = false;
  bool                                     ue_based_netw_perf_meas_params_r10_present = false;
  bool                                     inter_rat_params_utra_tdd_v1020_present    = false;
  bool                                     non_crit_ext_present                       = false;
  uint8_t                                  ue_category_v1020                          = 6;
  phy_layer_params_v1020_s                 phy_layer_params_v1020;
  rf_params_v1020_s                        rf_params_v1020;
  meas_params_v1020_s                      meas_params_v1020;
  fixed_bitstring<32>                      feature_group_ind_rel10_r10;
  irat_params_cdma2000_minus1_xrtt_v1020_s inter_rat_params_cdma2000_v1020;
  ue_based_netw_perf_meas_params_r10_s     ue_based_netw_perf_meas_params_r10;
  irat_params_utra_tdd_v1020_s             inter_rat_params_utra_tdd_v1020;
  ue_eutra_cap_v1060_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CSG-ProximityIndicationParameters-r9 ::= SEQUENCE
struct csg_proximity_ind_params_r9_s {
  bool intra_freq_proximity_ind_r9_present = false;
  bool inter_freq_proximity_ind_r9_present = false;
  bool utran_proximity_ind_r9_present      = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE
struct irat_params_cdma2000_minus1_xrtt_v920_s {
  bool e_csfb_conc_ps_mob1_xrtt_r9_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersGERAN-v920 ::= SEQUENCE
struct irat_params_geran_v920_s {
  bool dtm_r9_present                 = false;
  bool e_redirection_geran_r9_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersUTRA-v920 ::= SEQUENCE
struct irat_params_utra_v920_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE
struct neigh_cell_si_acquisition_params_r9_s {
  bool intra_freq_si_acquisition_for_ho_r9_present = false;
  bool inter_freq_si_acquisition_for_ho_r9_present = false;
  bool utran_si_acquisition_for_ho_r9_present      = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v920 ::= SEQUENCE
struct phy_layer_params_v920_s {
  bool enhanced_dual_layer_fdd_r9_present = false;
  bool enhanced_dual_layer_tdd_r9_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// SON-Parameters-r9 ::= SEQUENCE
struct son_params_r9_s {
  bool rach_report_r9_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v940-IEs ::= SEQUENCE
struct ue_eutra_cap_v940_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v1020_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// AccessStratumRelease ::= ENUMERATED
struct access_stratum_release_opts {
  enum options { rel8, rel9, rel10, rel11, rel12, rel13, rel14, rel15, /*...*/ rel16, rel17, nulltype } value;
  typedef uint8_t number_type;

  const char* to_string() const;
  uint8_t     to_number() const;
};
typedef enumerated<access_stratum_release_opts, true, 2> access_stratum_release_e;

// PhyLayerParameters ::= SEQUENCE
struct phy_layer_params_s {
  bool ue_tx_ant_sel_supported        = false;
  bool ue_specific_ref_sigs_supported = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v920-IEs ::= SEQUENCE
struct ue_eutra_cap_v920_ies_s {
  bool                                    inter_rat_params_utra_v920_present     = false;
  bool                                    inter_rat_params_cdma2000_v920_present = false;
  bool                                    dev_type_r9_present                    = false;
  bool                                    non_crit_ext_present                   = false;
  phy_layer_params_v920_s                 phy_layer_params_v920;
  irat_params_geran_v920_s                inter_rat_params_geran_v920;
  irat_params_utra_v920_s                 inter_rat_params_utra_v920;
  irat_params_cdma2000_minus1_xrtt_v920_s inter_rat_params_cdma2000_v920;
  csg_proximity_ind_params_r9_s           csg_proximity_ind_params_r9;
  neigh_cell_si_acquisition_params_r9_s   neigh_cell_si_acquisition_params_r9;
  son_params_r9_s                         son_params_r9;
  ue_eutra_cap_v940_ies_s                 non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability ::= SEQUENCE
struct ue_eutra_cap_s {
  struct inter_rat_params_s_ {
    bool                               utra_fdd_present             = false;
    bool                               utra_tdd128_present          = false;
    bool                               utra_tdd384_present          = false;
    bool                               utra_tdd768_present          = false;
    bool                               geran_present                = false;
    bool                               cdma2000_hrpd_present        = false;
    bool                               cdma2000_minus1x_rtt_present = false;
    irat_params_utra_fdd_s             utra_fdd;
    irat_params_utra_tdd128_s          utra_tdd128;
    irat_params_utra_tdd384_s          utra_tdd384;
    irat_params_utra_tdd768_s          utra_tdd768;
    irat_params_geran_s                geran;
    irat_params_cdma2000_hrpd_s        cdma2000_hrpd;
    irat_params_cdma2000_minus1_xrtt_s cdma2000_minus1x_rtt;
  };

  // member variables
  bool                     feature_group_inds_present = false;
  bool                     non_crit_ext_present       = false;
  access_stratum_release_e access_stratum_release;
  uint8_t                  ue_category = 1;
  pdcp_params_s            pdcp_params;
  phy_layer_params_s       phy_layer_params;
  rf_params_s              rf_params;
  meas_params_s            meas_params;
  fixed_bitstring<32>      feature_group_inds;
  inter_rat_params_s_      inter_rat_params;
  ue_eutra_cap_v920_ies_s  non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MeasParameters-v16c0 ::= SEQUENCE
struct meas_params_v16c0_s {
  bool nr_cell_individual_offset_r16_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v16c0-IEs ::= SEQUENCE
struct ue_eutra_cap_v16c0_ies_s {
  bool                late_non_crit_ext_present = false;
  bool                non_crit_ext_present      = false;
  meas_params_v16c0_s meas_params_v16c0;
  dyn_octstring       late_non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v15x0-IEs ::= SEQUENCE
struct ue_eutra_cap_v15x0_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v16c0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v14x0-IEs ::= SEQUENCE
struct ue_eutra_cap_v14x0_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v15x0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v14a0 ::= SEQUENCE
struct phy_layer_params_v14a0_s {
  bool ssp10_tdd_only_r14_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v14b0-IEs ::= SEQUENCE
struct ue_eutra_cap_v14b0_ies_s {
  bool                     rf_params_v14b0_present = false;
  bool                     non_crit_ext_present    = false;
  rf_params_v14b0_s        rf_params_v14b0;
  ue_eutra_cap_v14x0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// MBMS-Parameters-v1470 ::= SEQUENCE
struct mbms_params_v1470_s {
  struct mbms_max_bw_r14_c_ {
    struct types_opts {
      enum options { implicit_value, explicit_value, nulltype } value;

      const char* to_string() const;
    };
    typedef enumerated<types_opts> types;

    // choice methods
    mbms_max_bw_r14_c_() = default;
    void        set(types::options e = types::nulltype);
    types       type() const { return type_; }
    SRSASN_CODE pack(bit_ref& bref) const;
    SRSASN_CODE unpack(cbit_ref& bref);
    void        to_json(json_writer& j) const;
    // getters
    uint8_t& explicit_value()
    {
      assert_choice_type(types::explicit_value, type_, "mbms-MaxBW-r14");
      return c;
    }
    const uint8_t& explicit_value() const
    {
      assert_choice_type(types::explicit_value, type_, "mbms-MaxBW-r14");
      return c;
    }
    void     set_implicit_value();
    uint8_t& set_explicit_value();

  private:
    types   type_;
    uint8_t c;
  };
  struct mbms_scaling_factor1dot25_r14_opts {
    enum options { n3, n6, n9, n12, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<mbms_scaling_factor1dot25_r14_opts> mbms_scaling_factor1dot25_r14_e_;
  struct mbms_scaling_factor7dot5_r14_opts {
    enum options { n1, n2, n3, n4, nulltype } value;
    typedef uint8_t number_type;

    const char* to_string() const;
    uint8_t     to_number() const;
  };
  typedef enumerated<mbms_scaling_factor7dot5_r14_opts> mbms_scaling_factor7dot5_r14_e_;

  // member variables
  bool                             mbms_scaling_factor1dot25_r14_present = false;
  bool                             mbms_scaling_factor7dot5_r14_present  = false;
  mbms_max_bw_r14_c_               mbms_max_bw_r14;
  mbms_scaling_factor1dot25_r14_e_ mbms_scaling_factor1dot25_r14;
  mbms_scaling_factor7dot5_r14_e_  mbms_scaling_factor7dot5_r14;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v14a0-IEs ::= SEQUENCE
struct ue_eutra_cap_v14a0_ies_s {
  bool                     non_crit_ext_present = false;
  phy_layer_params_v14a0_s phy_layer_params_v14a0;
  ue_eutra_cap_v14b0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1470-IEs ::= SEQUENCE
struct ue_eutra_cap_v1470_ies_s {
  bool                     mbms_params_v1470_present      = false;
  bool                     phy_layer_params_v1470_present = false;
  bool                     rf_params_v1470_present        = false;
  bool                     non_crit_ext_present           = false;
  mbms_params_v1470_s      mbms_params_v1470;
  phy_layer_params_v1470_s phy_layer_params_v1470;
  rf_params_v1470_s        rf_params_v1470;
  ue_eutra_cap_v14a0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-v1380 ::= SEQUENCE
struct ce_params_v1380_s {
  bool tm6_ce_mode_a_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v13e0a-IEs ::= SEQUENCE
struct ue_eutra_cap_v13e0a_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v1470_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// CE-Parameters-v1370 ::= SEQUENCE
struct ce_params_v1370_s {
  bool tm9_ce_mode_a_r13_present = false;
  bool tm9_ce_mode_b_r13_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1390-IEs ::= SEQUENCE
struct ue_eutra_cap_v1390_ies_s {
  bool                      rf_params_v1390_present = false;
  bool                      non_crit_ext_present    = false;
  rf_params_v1390_s         rf_params_v1390;
  ue_eutra_cap_v13e0a_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1380 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1380_s {
  ce_params_v1380_s ce_params_v1380;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1380-IEs ::= SEQUENCE
struct ue_eutra_cap_v1380_ies_s {
  bool                              rf_params_v1380_present = false;
  bool                              non_crit_ext_present    = false;
  rf_params_v1380_s                 rf_params_v1380;
  ce_params_v1380_s                 ce_params_v1380;
  ue_eutra_cap_add_xdd_mode_v1380_s fdd_add_ue_eutra_cap_v1380;
  ue_eutra_cap_add_xdd_mode_v1380_s tdd_add_ue_eutra_cap_v1380;
  ue_eutra_cap_v1390_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-v1370 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_v1370_s {
  bool              ce_params_v1370_present = false;
  ce_params_v1370_s ce_params_v1370;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v1370-IEs ::= SEQUENCE
struct ue_eutra_cap_v1370_ies_s {
  bool                              ce_params_v1370_present            = false;
  bool                              fdd_add_ue_eutra_cap_v1370_present = false;
  bool                              tdd_add_ue_eutra_cap_v1370_present = false;
  bool                              non_crit_ext_present               = false;
  ce_params_v1370_s                 ce_params_v1370;
  ue_eutra_cap_add_xdd_mode_v1370_s fdd_add_ue_eutra_cap_v1370;
  ue_eutra_cap_add_xdd_mode_v1370_s tdd_add_ue_eutra_cap_v1370;
  ue_eutra_cap_v1380_ies_s          non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RF-Parameters-v12b0 ::= SEQUENCE
struct rf_params_v12b0_s {
  bool max_layers_mimo_ind_r12_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v12x0-IEs ::= SEQUENCE
struct ue_eutra_cap_v12x0_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v1370_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v12b0-IEs ::= SEQUENCE
struct ue_eutra_cap_v12b0_ies_s {
  bool                     rf_params_v12b0_present = false;
  bool                     non_crit_ext_present    = false;
  rf_params_v12b0_s        rf_params_v12b0;
  ue_eutra_cap_v12x0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// Other-Parameters-v11d0 ::= SEQUENCE
struct other_params_v11d0_s {
  bool in_dev_coex_ind_ul_ca_r11_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v11x0-IEs ::= SEQUENCE
struct ue_eutra_cap_v11x0_ies_s {
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v12b0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v11d0-IEs ::= SEQUENCE
struct ue_eutra_cap_v11d0_ies_s {
  bool                     rf_params_v11d0_present    = false;
  bool                     other_params_v11d0_present = false;
  bool                     non_crit_ext_present       = false;
  rf_params_v11d0_s        rf_params_v11d0;
  other_params_v11d0_s     other_params_v11d0;
  ue_eutra_cap_v11x0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RF-Parameters-v10f0 ::= SEQUENCE
struct rf_params_v10f0_s {
  bool                modified_mpr_behavior_r10_present = false;
  fixed_bitstring<32> modified_mpr_behavior_r10;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v10i0-IEs ::= SEQUENCE
struct ue_eutra_cap_v10i0_ies_s {
  bool                     rf_params_v10i0_present   = false;
  bool                     late_non_crit_ext_present = false;
  bool                     non_crit_ext_present      = false;
  rf_params_v10i0_s        rf_params_v10i0;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v11d0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE
struct ue_eutra_cap_v10f0_ies_s {
  bool                     rf_params_v10f0_present = false;
  bool                     non_crit_ext_present    = false;
  rf_params_v10f0_s        rf_params_v10f0;
  ue_eutra_cap_v10i0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE
struct ue_eutra_cap_v10c0_ies_s {
  bool                        otdoa_positioning_cap_r10_present = false;
  bool                        non_crit_ext_present              = false;
  otdoa_positioning_cap_r10_s otdoa_positioning_cap_r10;
  ue_eutra_cap_v10f0_ies_s    non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// RF-Parameters-v10j0 ::= SEQUENCE
struct rf_params_v10j0_s {
  bool multi_ns_pmax_r10_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v10j0-IEs ::= SEQUENCE
struct ue_eutra_cap_v10j0_ies_s {
  bool              rf_params_v10j0_present = false;
  bool              non_crit_ext_present    = false;
  rf_params_v10j0_s rf_params_v10j0;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersUTRA-v9h0 ::= SEQUENCE
struct irat_params_utra_v9h0_s {
  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE
struct ue_eutra_cap_v9h0_ies_s {
  bool                     inter_rat_params_utra_v9h0_present = false;
  bool                     late_non_crit_ext_present          = false;
  bool                     non_crit_ext_present               = false;
  irat_params_utra_v9h0_s  inter_rat_params_utra_v9h0;
  dyn_octstring            late_non_crit_ext;
  ue_eutra_cap_v10c0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// PhyLayerParameters-v9d0 ::= SEQUENCE
struct phy_layer_params_v9d0_s {
  bool tm5_fdd_r9_present = false;
  bool tm5_tdd_r9_present = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE
struct ue_eutra_cap_v9e0_ies_s {
  bool                    rf_params_v9e0_present = false;
  bool                    non_crit_ext_present   = false;
  rf_params_v9e0_s        rf_params_v9e0;
  ue_eutra_cap_v9h0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// IRAT-ParametersUTRA-v9c0 ::= SEQUENCE
struct irat_params_utra_v9c0_s {
  bool voice_over_ps_hs_utra_fdd_r9_present             = false;
  bool voice_over_ps_hs_utra_tdd128_r9_present          = false;
  bool srvcc_from_utra_fdd_to_utra_fdd_r9_present       = false;
  bool srvcc_from_utra_fdd_to_geran_r9_present          = false;
  bool srvcc_from_utra_tdd128_to_utra_tdd128_r9_present = false;
  bool srvcc_from_utra_tdd128_to_geran_r9_present       = false;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE
struct ue_eutra_cap_v9d0_ies_s {
  bool                    phy_layer_params_v9d0_present = false;
  bool                    non_crit_ext_present          = false;
  phy_layer_params_v9d0_s phy_layer_params_v9d0;
  ue_eutra_cap_v9e0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE
struct ue_eutra_cap_v9c0_ies_s {
  bool                    inter_rat_params_utra_v9c0_present = false;
  bool                    non_crit_ext_present               = false;
  irat_params_utra_v9c0_s inter_rat_params_utra_v9c0;
  ue_eutra_cap_v9d0_ies_s non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE
struct ue_eutra_cap_add_xdd_mode_r9_s {
  bool                                    ext                                         = false;
  bool                                    phy_layer_params_r9_present                 = false;
  bool                                    feature_group_inds_r9_present               = false;
  bool                                    feature_group_ind_rel9_add_r9_present       = false;
  bool                                    inter_rat_params_geran_r9_present           = false;
  bool                                    inter_rat_params_utra_r9_present            = false;
  bool                                    inter_rat_params_cdma2000_r9_present        = false;
  bool                                    neigh_cell_si_acquisition_params_r9_present = false;
  phy_layer_params_s                      phy_layer_params_r9;
  fixed_bitstring<32>                     feature_group_inds_r9;
  fixed_bitstring<32>                     feature_group_ind_rel9_add_r9;
  irat_params_geran_s                     inter_rat_params_geran_r9;
  irat_params_utra_v920_s                 inter_rat_params_utra_r9;
  irat_params_cdma2000_minus1_xrtt_v920_s inter_rat_params_cdma2000_r9;
  neigh_cell_si_acquisition_params_r9_s   neigh_cell_si_acquisition_params_r9;
  // ...

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE
struct ue_eutra_cap_v9a0_ies_s {
  bool                           feature_group_ind_rel9_add_r9_present = false;
  bool                           fdd_add_ue_eutra_cap_r9_present       = false;
  bool                           tdd_add_ue_eutra_cap_r9_present       = false;
  bool                           non_crit_ext_present                  = false;
  fixed_bitstring<32>            feature_group_ind_rel9_add_r9;
  ue_eutra_cap_add_xdd_mode_r9_s fdd_add_ue_eutra_cap_r9;
  ue_eutra_cap_add_xdd_mode_r9_s tdd_add_ue_eutra_cap_r9;
  ue_eutra_cap_v9c0_ies_s        non_crit_ext;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE
struct ue_radio_access_cap_info_r8_ies_s {
  bool          non_crit_ext_present = false;
  dyn_octstring ue_radio_access_cap_info;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

// UERadioAccessCapabilityInformation ::= SEQUENCE
struct ue_radio_access_cap_info_s {
  struct crit_exts_c_ {
    struct c1_c_ {
      struct types_opts {
        enum options {
          ue_radio_access_cap_info_r8,
          spare7,
          spare6,
          spare5,
          spare4,
          spare3,
          spare2,
          spare1,
          nulltype
        } value;

        const char* to_string() const;
      };
      typedef enumerated<types_opts> types;

      // choice methods
      c1_c_() = default;
      void        set(types::options e = types::nulltype);
      types       type() const { return type_; }
      SRSASN_CODE pack(bit_ref& bref) const;
      SRSASN_CODE unpack(cbit_ref& bref);
      void        to_json(json_writer& j) const;
      // getters
      ue_radio_access_cap_info_r8_ies_s& ue_radio_access_cap_info_r8()
      {
        assert_choice_type(types::ue_radio_access_cap_info_r8, type_, "c1");
        return c;
      }
      const ue_radio_access_cap_info_r8_ies_s& ue_radio_access_cap_info_r8() const
      {
        assert_choice_type(types::ue_radio_access_cap_info_r8, type_, "c1");
        return c;
      }
      ue_radio_access_cap_info_r8_ies_s& set_ue_radio_access_cap_info_r8();
      void                               set_spare7();
      void                               set_spare6();
      void                               set_spare5();
      void                               set_spare4();
      void                               set_spare3();
      void                               set_spare2();
      void                               set_spare1();

    private:
      types                             type_;
      ue_radio_access_cap_info_r8_ies_s c;
    };
    using types = c1_or_crit_ext_e;

    // choice methods
    crit_exts_c_() = default;
    void        set(types::options e = types::nulltype);
    types       type() const { return type_; }
    SRSASN_CODE pack(bit_ref& bref) const;
    SRSASN_CODE unpack(cbit_ref& bref);
    void        to_json(json_writer& j) const;
    // getters
    c1_c_& c1()
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    const c1_c_& c1() const
    {
      assert_choice_type(types::c1, type_, "criticalExtensions");
      return c;
    }
    c1_c_& set_c1();
    void   set_crit_exts_future();

  private:
    types type_;
    c1_c_ c;
  };

  // member variables
  crit_exts_c_ crit_exts;

  // sequence methods
  SRSASN_CODE pack(bit_ref& bref) const;
  SRSASN_CODE unpack(cbit_ref& bref);
  void        to_json(json_writer& j) const;
};

} // namespace rrc
} // namespace asn1

#endif // SRSASN1_RRC_UECAP_H
