(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$FORK'))} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:TIMEOUT)
              op: assign_op.Equal
              rhs: 
                {
                  (braced_var_sub
                    token: <Id.VSub_Name TIMEOUT>
                    suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<180>})
                  )
                }
              spids: [24]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<.>} {<'sources/utility_functions.sh'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.ShFunction
      name: dotest
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$FORK'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<echo>} {<-n>} {(DQ <'Testing '> ($ Id.VSub_Number '$1') <':'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} 
                  {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:VERBOSITY)
                      op: assign_op.Equal
                      rhs: {(DQ <'tee >(cat >&2) |'>)}
                      spids: [89]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (command.Simple
                                  words: [{<'more/smoketest.sh'>} {(DQ ($ Id.VSub_Number '$1'))}]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                                (C {<eval>} 
                                  {
                                    (DQ ($ Id.VSub_DollarName '$VERBOSITY') <' grep \'Hello world!\''>)
                                  }
                                )
                              ]
                              negated: F
                            )
                        )
                      )
                    }
                  spids: [95]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$RESULT'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ <FAIL>)}
                      spids: [131]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ <PASS>)}
                      spids: [138]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$FORK'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<echo>} {(DQ ($ Id.VSub_DollarName '$RESULT'))})
                (C {<echo>} 
                  {(DQ <'Testing '> ($ Id.VSub_Number '$1') <':'> ($ Id.VSub_DollarName '$RESULT'))}
                )
              ]
            )
            (command.Simple
              words: [{<rm>} {<-f>} {<'build/system-image-'> (DQ ($ Id.VSub_Number '$1')) <'/hdb.img'>}]
              redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
          ]
        )
    )
    (command.ForEach
      iter_name: i
      iter_words: [
        {
          (command_sub
            left_token: <Id.Left_DollarParen '$('>
            child: 
              (command.Pipeline
                children: [
                  (C {<ls>} {<-d>} {<'sources/targets/'> <Id.Lit_Star '*'>})
                  (C {<sed>} {(SQ <'s@.*/@@'>)})
                  (C {<grep>} {<-v>} {(DQ <'^hw-'>)})
                ]
                negated: F
              )
          )
        }
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {<-e>} 
                          {(DQ <'build/system-image-'> ($ Id.VSub_DollarName '$i'))} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [(C {<maybe_fork>} {(DQ <'dotest '> ($ Id.VSub_DollarName '$i'))})]
                  spids: [233 247]
                )
              ]
              else_action: [(C {<echo>} {(DQ <'Testing '> ($ Id.VSub_DollarName '$i') <':NONE'>)})]
            )
          ]
        )
    )
    (C {<wait>})
  ]
)