(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
              op: <Id.Redir_DLess '<<'>
              loc: (redir_loc.Fd fd:0)
              arg: 
                (redir_param.MultiLine
                  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'>
                  ]
                )
            )
          ]
          do_fork: T
        )
        (command.WhileUntil
          keyword: <Id.KW_While while>
          cond: [
            (command.Sentence
              child: (C {<read>} {<charset>} {<charmap>})
              terminator: <Id.Op_Semi _>
            )
          ]
          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: <Id.Op_Semi _>
                        )
                      ]
                      action: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<echo>} {(DQ <'This might take a while'>)}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_GreatAnd '1>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      spids: [327 340]
                    )
                  ]
                )
                (command.Case
                  to_match: {(${ Id.VSub_Name charset)}
                  arms: [
                    (case_arm
                      pat_list: [
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\#'>) 
                          <Id.Lit_Star '*'>
                        }
                      ]
                      action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)]
                      spids: [363 365 368 -1]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {<printf>}
                    {<Id.Lit_Other '%'> <s>}
                    {(DQ <'Testing '> (${ Id.VSub_Name charset))}
                  ]
                  redirects: [(redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
                (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
                                  op: <Id.Redir_Less '<'>
                                  loc: (redir_loc.Fd fd:0)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      action: [
                        (command.Simple
                          words: [{<echo>}]
                          redirects: [
                            (redir
                              op: <Id.Redir_GreatAnd '1>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      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
                          op: <Id.Redir_GreatAnd '1>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<2>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{($ Id.VSub_QMark '$?')})
  ]
)