/* TM_TrainToTrack::C_P003_train_compr */
void C_P003_train_compr_TM_TrainToTrack(
  inC_C_P003_train_compr_TM_TrainToTrack *inC,
  outC_C_P003_train_compr_TM_TrainToTrack *outC)
{
  kcg_int tmp;
  /* TM_TrainToTrack::C_P003_train_compr::_L87 */ array_int_165 _L87;
  
  outC->meta.start_addr = 0;
  outC->meta.end_addr = DIM_max_elements_P003_TM_TrainToTrack - 1;
  for (tmp = 0; tmp < 165; tmp++) {
    _L87[tmp] = 0;
  }
  tmp = /* 1 */ CAST_NID_PACKET_to_int_TM_conversions(inC->P001_in.nid_packet);
  (&(&outC->P000_int[0])[0])[0] = tmp;
  (&(&outC->P000_int[0])[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions(inC->P001_in.l_packet);
  (&(&outC->P000_int[0])[0])[2] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions(inC->P001_in.n_iter);
  /* 1 */
  C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
    &inC->P001_in.nid_radio,
    (P003_nid_radio_list_int_t_TM_TrainToTrack *) &(&outC->P000_int[0])[3]);
  kcg_copy_array_int_165(&outC->P000_int[35], &_L87);
  tmp = /* 1 */ EncodeMeta_TM_TrainToTrack(inC->P001_in.nid_packet, 0);
  outC->meta.meta_id = tmp;
}
/* TM_TrainToTrack::C_P009_train_compr */
void C_P009_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P009_train_compr::P009_in */ P009_TM_TrainToTrack *P009_in,
  /* TM_TrainToTrack::C_P009_train_compr::P009_int */ P009_TrainTrack_int_TM_TrainToTrack *P009_int)
{
  (*P009_int)[0] = /* 1 */
    Encode_NID_PACKET_TM_TrainToTrack(
      (*P009_in).valid,
      /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P009_in).nid_packet));
  (*P009_int)[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P009_in).l_packet);
  (*P009_int)[2] = /* 1 */
    CAST_NID_LTRBG_to_int_TM_conversions((*P009_in).nid_ltrbg);
}
/* TM_TrainToTrack::C_P005_train_compr */
void C_P005_train_compr_TM_TrainToTrack(
    /* TM_TrainToTrack::C_P005_train_compr::P005_in */P005_TM_TrainToTrack *P005_in,
    /* TM_TrainToTrack::C_P005_train_compr::P005_int */P005_TrainTrack_int_TM_TrainToTrack *P005_int)
{
    (*P005_int)[0] = /* 1 */
        Encode_NID_PACKET_TM_TrainToTrack(
            (*P005_in).valid,
            /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P005_in).nid_packet));
    (*P005_int)[1] = /* 1 */
        CAST_L_PACKET_to_int_TM_conversions((*P005_in).l_packet);
    (*P005_int)[2] = /* 1 */
        CAST_NID_OPERATIONAL_to_int_TM_conversions((*P005_in).nid_opeartional);
}
/* TM_TrainToTrack::C_P004_train_compr */
void C_P004_train_compr_TM_TrainToTrack(
    /* TM_TrainToTrack::C_P004_train_compr::P004_in */P004_TM_TrainToTrack *P004_in,
    /* TM_TrainToTrack::C_P004_train_compr::P004_int */P004_TrainTrack_int_TM_TrainToTrack *P004_int)
{
    (*P004_int)[0] = /* 1 */
        Encode_NID_PACKET_TM_TrainToTrack(
            (*P004_in).valid,
            /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P004_in).nid_packet));
    (*P004_int)[1] = /* 1 */
        CAST_L_PACKET_to_int_TM_conversions((*P004_in).l_packet);
    (*P004_int)[2] = /* 1 */
        CAST_M_ERROR_to_int_TM_conversions((*P004_in).m_error);
}
/* TM_TrainToTrack::C_P003_train_compr */
void C_P003_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P003_train_compr::P003_in */P003_TM_TrainToTrack *P003_in,
  /* TM_TrainToTrack::C_P003_train_compr::P003_int */P003_TrainTrack_int_TM_TrainToTrack *P003_int)
{
  (&(*P003_int)[0])[0] = /* 1 */
    Encode_NID_PACKET_TM_TrainToTrack(
      (*P003_in).valid,
      /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P003_in).nid_packet));
  (&(*P003_int)[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P003_in).l_packet);
  (&(*P003_int)[0])[2] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions((*P003_in).n_iter);
  /* 1 */
  C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
    &(*P003_in).nid_radio,
    (P003_nid_radio_list_int_t_TM_TrainToTrack *) &(*P003_int)[3]);
}
/* TM_TrainToTrack::C_P011_train_compr */
void C_P011_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P011_train_compr::P011_in */ P011_TM_TrainToTrack *P011_in,
  /* TM_TrainToTrack::C_P011_train_compr::P011_int */ P011_TrainTrack_int_TM_TrainToTrack *P011_int)
{
  /* TM_TrainToTrack::C_P011_train_compr */
  static array_int_9 tmp;
  
  (&(&(*P011_int)[0])[0])[0] = /* 1 */
    CAST_NID_PACKET_to_int_TM_conversions((*P011_in).nid_packet);
  (&(&(*P011_int)[0])[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P011_in).l_packet);
  (&(&(*P011_int)[0])[0])[2] = /* 1 */
    CAST_NC_CDTRAIN_to_int_TM_conversions((*P011_in).nc_cdtrain);
  (&(&(*P011_int)[0])[0])[3] = /* 1 */
    CAST_NC_TRAIN_to_int_TM_conversions((*P011_in).nc_train);
  (&(&(*P011_int)[0])[0])[4] = /* 1 */
    CAST_L_TRAIN_to_int_TM_conversions((*P011_in).l_train);
  (&(&(*P011_int)[0])[0])[5] = /* 1 */
    CAST_V_MAXTRAIN_to_int_TM_conversions((*P011_in).v_maxtrain);
  (&(&(*P011_int)[0])[0])[6] = /* 1 */
    CAST_M_LOADINGGAUGE_to_int_TM_conversions((*P011_in).m_loadinggauge);
  (&(&(*P011_int)[0])[0])[7] = /* 1 */
    CAST_M_AXLELOADCAT_to_int_TM_conversions((*P011_in).m_axleloadcat);
  (&(&(*P011_int)[0])[0])[8] = /* 1 */
    CAST_M_AIRTIGHT_to_int_TM_conversions((*P011_in).m_airtight);
  (&(&(*P011_int)[0])[0])[9] = /* 1 */
    CAST_N_AXLE_to_int_TM_conversions((*P011_in).n_axle);
  (&(&(*P011_int)[0])[0])[10] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions((*P011_in).n_iter_voltage);
  /* 1 */
  C_P011_flatten_sections_voltage_TM_TrainToTrack_lib_internal(
    &(*P011_in).voltage_list,
    (P011_voltage_sections_array_flat_t_TM_TrainToTrack *) &tmp[0]);
  (&tmp[8])[0] = /* 2 */
    CAST_N_ITER_to_int_TM_conversions((*P011_in).n_iter_nid_ntc);
  kcg_copy_array_int_9(&(*P011_int)[11], &tmp);
  /* 1 */
  C_P011_flatten_sections_ntc_TM_TrainToTrack_lib_internal(
    &(*P011_in).nid_ntc_list,
    (P011_ntc_list_array_T_TM_TrainToTrack *) &(*P011_int)[20]);
}
/* TM_TrainToTrack::C_P001_train_compr */
void C_P001_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P001_train_compr::P001_in */ P001_TM_TrainToTrack *P001_in,
  /* TM_TrainToTrack::C_P001_train_compr::P001_int */ P001_TrainTrack_int_TM_TrainToTrack *P001_int)
{
  (*P001_int)[0] = /* 1 */
    Encode_NID_PACKET_TM_TrainToTrack(
      (*P001_in).valid,
      /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P001_in).nid_packet));
  (*P001_int)[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P001_in).l_packet);
  (*P001_int)[2] = /* 1 */
    CAST_Q_SCALE_to_int_TM_conversions((*P001_in).q_scale);
  (*P001_int)[3] = /* 1 */
    CAST_NID_LRBG_to_int_TM_conversions((*P001_in).nid_lrbg);
  (*P001_int)[4] = /* 1 */
    CAST_NID_PRVLRBG_to_int_TM_conversions((*P001_in).nid_prvlrbg);
  (*P001_int)[5] = /* 1 */ CAST_D_LRBG_to_int_TM_conversions((*P001_in).d_lrbg);
  (*P001_int)[6] = /* 1 */
    CAST_Q_DIRLRBG_to_int_TM_conversions((*P001_in).q_dirlrbg);
  (*P001_int)[7] = /* 1 */
    CAST_Q_DRLRBG_to_int_TM_conversions((*P001_in).q_dlrbg);
  (*P001_int)[8] = /* 1 */
    CAST_L_DOUBTOVER_to_int_TM_conversions((*P001_in).l_doubtover);
  (*P001_int)[9] = /* 1 */
    CAST_L_DOUBTUNDER_to_int_TM_conversions((*P001_in).l_doubtunder);
  (*P001_int)[10] = /* 1 */
    CAST_Q_LENGTH_to_int_TM_conversions((*P001_in).q_length);
  (*P001_int)[11] = /* 1 */
    CAST_L_TRAININT_to_int_TM_conversions((*P001_in).l_trainint);
  (*P001_int)[12] = /* 1 */
    CAST_V_TRAIN_to_int_TM_conversions((*P001_in).v_train);
  (*P001_int)[13] = /* 1 */
    CAST_Q_DIRTRAIN_to_int_TM_conversions((*P001_in).q_dirtrain);
  (*P001_int)[14] = /* 1 */
    CAST_M_MODE_to_int_TM_conversions((*P001_in).m_mode);
  (*P001_int)[15] = /* 1 */
    CAST_M_LEVEL_to_int_TM_conversions((*P001_in).m_level);
  (*P001_int)[16] = /* 1 */
    CAST_NID_NTC_to_int_TM_conversions((*P001_in).nid_ntc);
}
/* TM_TrainToTrack::C_compr_P003 */
void C_compr_P003_TM_TrainToTrack(
    /* TM_TrainToTrack::C_compr_P003::P003_int */P003_TrainTrack_int_TM_TrainToTrack *P003_int,
    outC_C_compr_P003_TM_TrainToTrack *outC)
{
    /* TM_TrainToTrack::C_compr_P003::_L94 */ array_int_3 _L94;
    /* TM_TrainToTrack::C_compr_P003::_L105 */ kcg_bool _L105;

    kcg_copy_array_int_3(&_L94, (array_int_3 *) &(*P003_int)[0]);
    _L105 = /* 1 */ Decode_NID_PACKET_TM_TrainToTrack(_L94[0], 3);
    outC->P003_out.valid = _L105;
    if (_L105) {
        /* 1 */
        C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
            (P003_nid_radio_list_t_TM_TrainToTrack *) &(*P003_int)[3],
            &outC->_L89);
    }
    else if (outC->init) {
        kcg_copy_P003_nid_radio_list_int_t_TM_TrainToTrack(
            &outC->_L89,
            (P003_nid_radio_list_int_t_TM_TrainToTrack *)
            &DEFAULT_P003_nid_radio_list_TM_TrainToTrack);
    }
    outC->init = kcg_false;
    kcg_copy_P003_nid_radio_list_t_TM_TrainToTrack(
        &outC->P003_out.nid_radio,
        &outC->_L89);
    outC->P003_out.nid_packet = /* 1 */
        CAST_NID_PACKET_to_int_TM_conversions(
            /* 1 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[0]));
    outC->P003_out.l_packet = /* 1 */
        CAST_L_PACKET_to_int_TM_conversions(
            /* 2 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[1]));
    outC->P003_out.n_iter = /* 1 */
        CAST_N_ITER_to_int_TM_conversions(
            /* 3 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[2]));
}
/* TM_TrainToTrack::C_P001_train_compr */
void C_P001_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P001_train_compr::P001_in */P001_TM_TrainToTrack *P001_in,
  outC_C_P001_train_compr_TM_TrainToTrack *outC)
{
  kcg_copy_P001_TM_TrainToTrack(&outC->_L1, P001_in);
  outC->_L73 = outC->_L1.nid_ntc;
  outC->_L16 = outC->_L1.m_level;
  outC->_L15 = outC->_L1.m_mode;
  outC->_L14 = outC->_L1.q_dirtrain;
  outC->_L13 = outC->_L1.v_train;
  outC->_L12 = outC->_L1.l_trainint;
  outC->_L11 = outC->_L1.q_length;
  outC->_L10 = outC->_L1.l_doubtunder;
  outC->_L9 = outC->_L1.l_doubtover;
  outC->_L8 = outC->_L1.q_dlrbg;
  outC->_L7 = outC->_L1.q_dirlrbg;
  outC->_L90 = outC->_L1.d_lrbg;
  outC->_L92 = outC->_L1.nid_prvlrbg;
  outC->_L6 = outC->_L1.nid_lrbg;
  outC->_L5 = outC->_L1.q_scale;
  outC->_L4 = outC->_L1.l_packet;
  outC->_L3 = outC->_L1.nid_packet;
  /* 1 */ CAST_NID_PRVLRBG_to_int_TM_conversions(outC->_L92, &outC->Context_1);
  outC->_L93 = outC->Context_1.nid_prvlrbg_in;
  /* 1 */ CAST_D_LRBG_to_int_TM_conversions(outC->_L90, &outC->_1_Context_1);
  outC->_L91 = outC->_1_Context_1.d_lrbg_int;
  outC->_L2 = outC->_L1.valid;
  /* 1 */ CAST_NID_PACKET_to_int_TM_conversions(outC->_L3, &outC->_2_Context_1);
  outC->_L69 = outC->_2_Context_1.nid_packet_int;
  /* 1 */
  Encode_NID_PACKET_TM_TrainToTrack(outC->_L2, outC->_L69, &outC->_3_Context_1);
  outC->_L89 = outC->_3_Context_1.meta;
  /* 1 */ CAST_NID_NTC_to_int_TM_conversions(outC->_L73, &outC->_4_Context_1);
  outC->_L85 = outC->_4_Context_1.nid_ntc_int;
  /* 1 */ CAST_M_LEVEL_to_int_TM_conversions(outC->_L16, &outC->_5_Context_1);
  outC->_L84 = outC->_5_Context_1.m_level_int;
  /* 1 */ CAST_M_MODE_to_int_TM_conversions(outC->_L15, &outC->_6_Context_1);
  outC->_L83 = outC->_6_Context_1.m_mode_int;
  /* 1 */
  CAST_Q_DIRTRAIN_to_int_TM_conversions(outC->_L14, &outC->_7_Context_1);
  outC->_L82 = outC->_7_Context_1.q_dirltrain_int;
  /* 1 */ CAST_V_TRAIN_to_int_TM_conversions(outC->_L13, &outC->_8_Context_1);
  outC->_L81 = outC->_8_Context_1.v_train_int;
  /* 1 */
  CAST_L_TRAININT_to_int_TM_conversions(outC->_L12, &outC->_9_Context_1);
  outC->_L80 = outC->_9_Context_1.l_trainint_int;
  /* 1 */ CAST_Q_LENGTH_to_int_TM_conversions(outC->_L11, &outC->_10_Context_1);
  outC->_L79 = outC->_10_Context_1.q_length_int;
  /* 1 */
  CAST_L_DOUBTUNDER_to_int_TM_conversions(outC->_L10, &outC->_11_Context_1);
  outC->_L78 = outC->_11_Context_1.l_doubtunder_int;
  /* 1 */
  CAST_L_DOUBTOVER_to_int_TM_conversions(outC->_L9, &outC->_12_Context_1);
  outC->_L77 = outC->_12_Context_1.l_doubtiver_int;
  /* 1 */ CAST_Q_DRLRBG_to_int_TM_conversions(outC->_L8, &outC->_13_Context_1);
  outC->_L75 = outC->_13_Context_1.q_drlrbg_int;
  /* 1 */ CAST_Q_DIRLRBG_to_int_TM_conversions(outC->_L7, &outC->_14_Context_1);
  outC->_L74 = outC->_14_Context_1.q_dirlrbg_int;
  /* 1 */ CAST_NID_LRBG_to_int_TM_conversions(outC->_L6, &outC->_15_Context_1);
  outC->_L72 = outC->_15_Context_1.nid_lrbg_int;
  /* 1 */ CAST_Q_SCALE_to_int_TM_conversions(outC->_L5, &outC->_16_Context_1);
  outC->_L71 = outC->_16_Context_1.d;
  /* 1 */ CAST_L_PACKET_to_int_TM_conversions(outC->_L4, &outC->_17_Context_1);
  outC->_L70 = outC->_17_Context_1.l_packet_int;
  outC->_L68[0] = outC->_L89;
  outC->_L68[1] = outC->_L70;
  outC->_L68[2] = outC->_L71;
  outC->_L68[3] = outC->_L72;
  outC->_L68[4] = outC->_L93;
  outC->_L68[5] = outC->_L91;
  outC->_L68[6] = outC->_L74;
  outC->_L68[7] = outC->_L75;
  outC->_L68[8] = outC->_L77;
  outC->_L68[9] = outC->_L78;
  outC->_L68[10] = outC->_L79;
  outC->_L68[11] = outC->_L80;
  outC->_L68[12] = outC->_L81;
  outC->_L68[13] = outC->_L82;
  outC->_L68[14] = outC->_L83;
  outC->_L68[15] = outC->_L84;
  outC->_L68[16] = outC->_L85;
  kcg_copy_P001_TrainTrack_int_TM_TrainToTrack(&outC->P001_int, &outC->_L68);
}