(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:common_objpfx)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [59]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:objpfx)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [62]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_program_prefix)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$3')}
          spids: [65]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:status)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [69]
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.Simple
          words: [{(cat)}]
          redirects: [
            (redir.HereDoc
              op: (Token id:Id.Redir_DLess val:'<<' span_id:75)
              fd: -1
              here_begin: {(EOF)}
              here_end_span_id: 314
              stdin_parts: [
                ('  # Single-byte and other ')
                (Id.Right_DoubleQuote '"')
                (small)
                (Id.Right_DoubleQuote '"')
                (' encodings come here.\n')
                ('  # Keep this list in the same order as gconv-modules.\n')
                ('  #\n')
                ('  # charset name    table name          comment\n')
                ('  ASCII             ANSI_X3.4-1968\n')
                ('  ISO646-GB         BS_4730\n')
                ('  ISO646-CA         CSA_Z243.4-1985-1\n')
                ('  ISO646-CA2        CSA_Z243.4-1985-2\n')
                ('  ISO646-DE         DIN_66003\n')
                ('  ISO646-DK         DS_2089\n')
                ('  ISO646-ES         ES\n')
                ('  ISO646-ES2        ES2\n')
                ('  ISO646-CN         GB_1988-80\n')
                ('  ISO646-IT         IT\n')
                ('  ISO646-JP         JIS_C6220-1969-RO\n')
                ('  ISO646-JP-OCR-B   JIS_C6229-1984-B\n')
                ('  ISO646-YU         JUS_I.B1.002\n')
                ('  ISO646-KR         KSC5636\n')
                ('  ISO646-HU         MSZ_7795.3\n')
                ('  ISO646-CU         NC_NC00-10\n')
                ('  ISO646-FR         NF_Z_62-010\n')
                ('  ISO646-FR1        NF_Z_62-010_1973\n')
                ('  ISO646-NO         NS_4551-1\n')
                ('  ISO646-NO2        NS_4551-2\n')
                ('  ISO646-PT         PT\n')
                ('  ISO646-PT2        PT2\n')
                ('  ISO646-SE         SEN_850200_B\n')
                ('  ISO646-SE2        SEN_850200_C\n')
                ('  ISO-8859-1\n')
                ('  ISO-8859-2\n')
                ('  ISO-8859-3\n')
                ('  ISO-8859-4\n')
                ('  ISO-8859-5\n')
                ('  ISO-8859-6\n')
                ('  ISO-8859-7\n')
                ('  ISO-8859-8\n')
                ('  ISO-8859-9\n')
                ('  ISO-8859-9E\n')
                ('  ISO-8859-10\n')
                ('  ISO-8859-11\n')
                ('  ISO-8859-13\n')
                ('  ISO-8859-14\n')
                ('  ISO-8859-15\n')
                ('  ISO-8859-16\n')
                ('  T.61-8BIT\n')
                ('  ISO_6937\n')
                ('  #ISO_6937-2        ISO-IR-90          Handling of combining marks is broken\n')
                ('  KOI-8\n')
                ('  KOI8-R\n')
                ('  LATIN-GREEK\n')
                ('  LATIN-GREEK-1\n')
                ('  HP-ROMAN8\n')
                ('  HP-ROMAN9\n')
                ('  HP-TURKISH8\n')
                ('  HP-THAI8\n')
                ('  HP-GREEK8\n')
                ('  EBCDIC-AT-DE\n')
                ('  EBCDIC-AT-DE-A\n')
                ('  EBCDIC-CA-FR\n')
                ('  EBCDIC-DK-NO\n')
                ('  EBCDIC-DK-NO-A\n')
                ('  EBCDIC-ES\n')
                ('  EBCDIC-ES-A\n')
                ('  EBCDIC-ES-S\n')
                ('  EBCDIC-FI-SE\n')
                ('  EBCDIC-FI-SE-A\n')
                ('  EBCDIC-FR\n')
                ('  EBCDIC-IS-FRISS\n')
                ('  EBCDIC-IT\n')
                ('  EBCDIC-PT\n')
                ('  EBCDIC-UK\n')
                ('  EBCDIC-US\n')
                ('  IBM037\n')
                ('  IBM038\n')
                ('  IBM256\n')
                ('  IBM273\n')
                ('  IBM274\n')
                ('  IBM275\n')
                ('  IBM277\n')
                ('  IBM278\n')
                ('  IBM280\n')
                ('  IBM281\n')
                ('  IBM284\n')
                ('  IBM285\n')
                ('  IBM290\n')
                ('  IBM297\n')
                ('  IBM420\n')
                ('  IBM423\n')
                ('  IBM424\n')
                ('  IBM437\n')
                ('  IBM500\n')
                ('  IBM850\n')
                ('  IBM851\n')
                ('  IBM852\n')
                ('  IBM855\n')
                ('  IBM856\n')
                ('  IBM857\n')
                ('  IBM860\n')
                ('  IBM861\n')
                ('  IBM862\n')
                ('  IBM863\n')
                ('  IBM864\n')
                ('  IBM865\n')
                ('  IBM866\n')
                ('  IBM866NAV\n')
                ('  IBM868\n')
                ('  IBM869\n')
                ('  IBM870\n')
                ('  IBM871\n')
                ('  IBM875\n')
                ('  IBM880\n')
                ('  IBM891\n')
                ('  IBM903\n')
                ('  IBM904\n')
                ('  IBM905\n')
                ('  IBM918\n')
                ('  IBM922\n')
                ('  IBM1004\n')
                ('  IBM1026\n')
                (
'  #IBM1046                              Differs from the AIX and JDK converters\n'
                )
                ('  IBM1047\n')
                ('  IBM1124\n')
                ('  IBM1129\n')
                ('  IBM1160\n')
                ('  IBM1161\n')
                ('  IBM1132\n')
                ('  IBM1133\n')
                ('  IBM1162\n')
                ('  IBM1163\n')
                ('  IBM1164\n')
                ('  CP1125\n')
                ('  CP1250\n')
                ('  CP1251\n')
                ('  CP1252\n')
                ('  CP1253\n')
                ('  CP1254\n')
                ('  CP1255\n')
                ('  CP1256\n')
                ('  CP1257\n')
                ('  CP1258\n')
                ('  IBM874\n')
                ('  CP737\n')
                ('  CP770\n')
                ('  CP771\n')
                ('  CP772\n')
                ('  CP773\n')
                ('  CP774\n')
                ('  CP775\n')
                ('  MACINTOSH\n')
                ('  IEC_P27-1\n')
                ('  ASMO_449\n')
                ('  ISO-IR-99         ANSI_X3.110-1983\n')
                ('  ISO-IR-139        CSN_369103\n')
                ('  CWI\n')
                ('  DEC-MCS\n')
                ('  ECMA-CYRILLIC\n')
                ('  ISO-IR-153        GOST_19768-74\n')
                ('  GREEK-CCITT\n')
                ('  GREEK7\n')
                ('  GREEK7-OLD\n')
                ('  INIS\n')
                ('  INIS-8\n')
                ('  INIS-CYRILLIC\n')
                ('  ISO_2033          ISO_2033-1983\n')
                ('  ISO_5427\n')
                ('  ISO_5427-EXT\n')
                ('  #ISO_5428                             Handling of combining marks is broken\n')
                ('  ISO_10367-BOX\n')
                ('  MAC-IS\n')
                ('  MAC-UK\n')
                ('  CP10007\n')
                ('  NATS-DANO\n')
                ('  NATS-SEFI\n')
                ('  WIN-SAMI-2        SAMI-WS2\n')
                ('  ISO-IR-197\n')
                ('  TIS-620\n')
                ('  KOI8-U\n')
                (
'  #ISIRI-3342                         This charset concept is completely broken\n'
                )
                ('  VISCII\n')
                ('  KOI8-T\n')
                ('  GEORGIAN-PS\n')
                ('  GEORGIAN-ACADEMY\n')
                ('  ISO-IR-209\n')
                ('  MAC-SAMI\n')
                ('  ARMSCII-8\n')
                ('  TCVN5712-1\n')
                ('  TSCII\n')
                ('  PT154\n')
                ('  RK1048\n')
                ('  MIK\n')
                ('  BRF\n')
                ('  MAC-CENTRALEUROPE\n')
                ('  KOI8-RU\n')
                ('  #\n')
                ('  # Multibyte encodings come here\n')
                ('  #\n')
                ('  SJIS              SHIFT_JIS\n')
                ('  CP932             WINDOWS-31J\n')
                ('  #IBM932                               This converter looks quite strange\n')
                ('  #IBM943                               This converter looks quite strange\n')
                ('  EUC-KR\n')
                ('  CP949\n')
                ('  JOHAB\n')
                ('  BIG5\n')
                ('  BIG5HKSCS         BIG5-HKSCS\n')
                ('  EUC-JP\n')
                ('  EUC-JP-MS\n')
                ('  EUC-CN            GB2312\n')
                ('  GBK\n')
                ('  EUC-TW\n')
                ('  GB18030\n')
                ('  EUC-JISX0213\n')
                ('  SHIFT_JISX0213\n')
                ('  #\n')
                ('  # Stateful encodings not testable this way\n')
                ('  #\n')
                ('  #IBM930\n')
                ('  #IBM933\n')
                ('  #IBM935\n')
                ('  #IBM937\n')
                ('  #IBM939\n')
                ('  #ISO-2022-JP\n')
                ('  #ISO-2022-JP-2\n')
                ('  #ISO-2022-JP-3\n')
                ('  #ISO-2022-KR\n')
                ('  #ISO-2022-CN\n')
                ('  #ISO-2022-CN-EXT\n')
                ('  #UTF-7\n')
                ('  #\n')
              ]
            )
          ]
        )
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:315)
          cond: [
            (command.Sentence
              child: (C {(read)} {(charset)} {(charmap)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:322)
            )
          ]
          body: 
            (command.DoGroup
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(test)} {(DQ ($ Id.VSub_DollarName '$charset'))} {(Id.Lit_Equals '=')} 
                              {(GB18030)}
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:338)
                        )
                      ]
                      action: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{(echo)} {(DQ ('This might take a while'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:348)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:350)
                        )
                      ]
                      spids: [327 340]
                    )
                  ]
                )
                (command.Case
                  to_match: {(${ Id.VSub_Name charset)}
                  arms: [
                    (case_arm
                      pat_list: [
                        {
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\#' span_id:363)
                          ) (Id.Lit_Star '*')
                        }
                      ]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Continue val:continue span_id:367)
                        )
                      ]
                      spids: [363 365 368 -1]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(printf)}
                    {(Id.Lit_Other '%') (s)}
                    {(DQ ('Testing ') (${ Id.VSub_Name charset))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:385)
                      fd: 1
                      arg_word: {(2)}
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [
                                {(./tst-table.sh)}
                                {(${ Id.VSub_Name common_objpfx)}
                                {(${ Id.VSub_Name objpfx)}
                                {(DQ (${ Id.VSub_Name test_program_prefix))}
                                {(${ Id.VSub_Name charset)}
                                {(${ Id.VSub_Name charmap)}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:417)
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                )
                              ]
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:420)
                        )
                      ]
                      action: [
                        (command.Simple
                          words: [{(echo)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:427)
                              fd: 1
                              arg_word: {(2)}
                            )
                          ]
                        )
                      ]
                      spids: [389 422]
                    )
                  ]
                  else_action: [
                    (C {(echo)} 
                      {
                        (DQ ('failed: ./tst-table.sh ') (${ Id.VSub_Name common_objpfx) (' ') 
                          (${ Id.VSub_Name objpfx) (' ') (${ Id.VSub_Name charset) (' ') (${ Id.VSub_Name charmap)
                        )
                      }
                    )
                    (command.Simple
                      words: [{(echo)} {(DQ (' *** FAILED ***'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:462)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:466)
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.ControlFlow
      token: (Token id:Id.ControlFlow_Exit val:exit span_id:476)
      arg_word: {($ Id.VSub_QMark '$?')}
    )
  ]
)