(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:TIMEFORMAT) op:Equal rhs:{(SQ <"%R">)} spids:[34])]
      spids: [32]
    )
    (FuncDef
      name: strace-callback
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(DQ ($ VSub_At "$@"))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[107])]
                )
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
          ]
          spids: [98]
        )
      spids: [94 97]
    )
    (FuncDef
      name: time-callback
      body: 
        (BraceGroup
          children: [
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(DQ ($ VSub_At "$@"))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[132])]
                )
            )
          ]
          spids: [123]
        )
      spids: [119 122]
    )
    (FuncDef
      name: compare
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:callback)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(strace-callback)})
                        spids: [148 152]
                      )
                    }
                  spids: [147]
                )
              ]
              spids: [145]
            )
            (ForEach
              iter_name: sh
              iter_words: [{(bash)} {(dash)} {(mksh)} {(zsh)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name "$sh")})
                    (C {($ VSub_Name "$callback")} {($ VSub_Name "$sh")} {(-c)} 
                      {(SQ <"echo \"hi\" > /dev/null">)}
                    )
                    (C {(echo)})
                  ]
                  spids: [175 197]
                )
              spids: [165 173]
            )
            (ForEach
              iter_name: awk
              iter_words: [{(gawk)} {(mawk)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name "$awk")})
                    (SimpleCommand
                      words: [
                        {($ VSub_Name "$callback")}
                        {($ VSub_Name "$awk")}
                        {(SQ <"{ print \"hi\" } ">)}
                      ]
                      redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{(/dev/null)} spids:[232])]
                    )
                    (C {(echo)})
                  ]
                  spids: [216 240]
                )
              spids: [210 214]
            )
            (If
              arms: [
                (if_arm
                  cond: [(Sentence child:(C {(which)} {(lua)}) terminator:<Op_Semi ";">)]
                  action: [
                    (C {(echo)} {(lua)})
                    (C {($ VSub_Name "$callback")} {(lua)} {(-e)} {(SQ <"print \"hi\"">)})
                    (C {(echo)})
                  ]
                  spids: [-1 251]
                )
              ]
              spids: [-1 273]
            )
            (C {(echo)} {(perl)})
            (C {($ VSub_Name "$callback")} {(perl)} {(-e)} {(SQ <"print \"hi\\n\"">)})
            (C {(echo)})
            (If
              arms: [
                (if_arm
                  cond: [(Sentence child:(C {(which)} {(ruby)}) terminator:<Op_Semi ";">)]
                  action: [
                    (C {(echo)} {(ruby)})
                    (C {($ VSub_Name "$callback")} {(ruby)} {(-e)} {(SQ <"print \"hi\\n\"">)})
                    (C {(echo)})
                  ]
                  spids: [-1 308]
                )
              ]
              spids: [-1 330]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name "$py")} {(-S)})
                    (C {($ VSub_Name "$callback")} {($ VSub_Name "$py")} {(-S)} {(-c)} 
                      {(SQ <"print(\"hi\")">)}
                    )
                    (C {(echo)})
                  ]
                  spids: [349 375]
                )
              spids: [343 347]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name "$py")} {(import)})
                    (C {($ VSub_Name "$callback")} {($ VSub_Name "$py")} {(-S)} {(-c)} 
                      {(SQ <"import json;print(\"hi\")">)}
                    )
                    (C {(echo)})
                  ]
                  spids: [390 416]
                )
              spids: [384 388]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name "$py")} {(import)})
                    (C {($ VSub_Name "$callback")} {($ VSub_Name "$py")} {(-S)} {(-c)} 
                      {(SQ <"import json;print(\"hi\")">)}
                    )
                    (C {(echo)})
                  ]
                  spids: [431 457]
                )
              spids: [425 429]
            )
            (C {(echo)} {(SQ <"Small app.zip">)})
            (C {($ VSub_Name "$callback")} {(python)} {(-S)} {(_tmp/app.zip)})
            (C {(echo)})
            (C {(echo)} {(SQ <"hello app bundle">)})
            (AndOr
              children: [(C {($ VSub_Name "$callback")} {(_bin/hello.ovm)}) (C {(true)})]
              op_id: Op_DPipe
            )
            (C {(echo)})
            (C {(echo)} {(SQ <"OSH app bundle true">)})
            (C {($ VSub_Name "$callback")} {(_bin/true)})
            (C {(echo)})
            (C {(echo)} {(SQ <"OSH app bundle Hello World">)})
            (C {($ VSub_Name "$callback")} {(_bin/osh)} {(-c)} {(SQ <"echo hi">)})
            (C {(echo)})
          ]
          spids: [142]
        )
      spids: [138 141]
    )
    (FuncDef
      name: compare-strace
      body: (BraceGroup children:[(C {(compare)} {(strace-callback)})] spids:[548])
      spids: [544 547]
    )
    (FuncDef
      name: compare-time
      body: (BraceGroup children:[(C {(compare)} {(time-callback)})] spids:[562])
      spids: [558 561]
    )
    (FuncDef
      name: import-stats
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(json)})
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(python)} {(-c)} {(SQ <"import json">)}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[598])]
                )
                (C {(grep)} {(json)})
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
            (C {(echo)} {(nonexistent___)})
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(python)} {(-c)} {(SQ <"import nonexistent___">)}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[630])]
                )
                (C {(grep)} {(nonexistent___)})
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
          ]
          spids: [576]
        )
      spids: [572 575]
    )
    (FuncDef
      name: make-zip
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(_tmp/app)})
            (C {(rm)} {(-f)} {(_tmp/app.zip)})
            (C {(mkdir)} {(-p)} {(_tmp/app)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_tmp/app/lib1.py)}
                  spids: [682]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("print ") (Right_DoubleQuote "\"") ("hi from lib1") (Right_DoubleQuote "\"") 
                        ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [686]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_tmp/app/lib2.py)}
                  spids: [698]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("print ") (Right_DoubleQuote "\"") ("hi from lib2") (Right_DoubleQuote "\"") 
                        ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [702]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_tmp/app/__main__.py)}
                  spids: [714]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("import sys\n") ("sys.path = [sys.argv[0]]\n") ("import lib1\n") 
                        ("import lib2\n") ("print ") (Right_DoubleQuote "\"") ("hi from zip") (Right_DoubleQuote "\"") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [718]
                )
              ]
            )
            (C {(pushd)} {(_tmp/app)})
            (C {(zip)} {(-r)} {(../app.zip)} {(.)})
            (C {(popd)})
          ]
          spids: [652]
        )
      spids: [648 651]
    )
    (FuncDef
      name: test-zip
      body: (BraceGroup children:[(C {(python)} {(-S)} {(_tmp/app.zip)})] spids:[758])
      spids: [754 757]
    )
    (FuncDef
      name: strace-zip
      body: (BraceGroup children:[(C {(strace)} {(python)} {(-S)} {(_tmp/app.zip)})] spids:[777])
      spids: [773 776]
    )
    (C {(DQ ($ VSub_At "$@"))})
  ]
)