(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'TEST_NO_CREATE_REPO='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'TEST_NO_CREATE_REPO='>
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'TEST_NO_CREATE_REPO='>
              name: TEST_NO_CREATE_REPO
            )
          op: assign_op.Equal
          rhs: {<NoThanks>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'RETRY_TIMEOUT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'RETRY_TIMEOUT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RETRY_TIMEOUT='> name:RETRY_TIMEOUT)
          op: assign_op.Equal
          rhs: {<60>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4D_TIMEOUT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4D_TIMEOUT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4D_TIMEOUT='> name:P4D_TIMEOUT)
          op: assign_op.Equal
          rhs: {<300>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Pipeline
                  negated: <Id.KW_Bang '!'>
                  children: [
                    (command.Simple
                      blame_tok: <test_have_prereq>
                      more_env: []
                      words: [{<test_have_prereq>} {<PYTHON>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  ops: []
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git p4 tests; python not available'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [45 53]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.AndOr
      children: [
        (command.Subshell
          left: <Id.Op_LParen _>
          child: 
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <p4>
                  more_env: []
                  words: [{<p4>} {<-h>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <p4d>
                  more_env: []
                  words: [{<p4d>} {<-h>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          right: <Id.Right_Subshell _>
          redirects: [
            (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
            (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
        )
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git p4 tests; no p4 or p4d'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.ShFunction
      name_tok: <native_path>
      name: native_path
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'path='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'path='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'path='> name:path)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number 1))}
                    )
                  ]
                  redirects: []
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <test_have_prereq>
                                  more_env: []
                                  words: [{<test_have_prereq>} {<CYGWIN>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Pipeline
                                  negated: <Id.KW_Bang '!'>
                                  children: [
                                    (command.Simple
                                      blame_tok: <p4>
                                      more_env: []
                                      words: [{<p4>} {<-V>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <grep>
                                      more_env: []
                                      words: [{<grep>} {<-q>} {<CYGWIN>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_Pipe _>]
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'path='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'path='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'path='> name:path)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (CommandSub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (command.Simple
                                        blame_tok: <cygpath>
                                        more_env: []
                                        words: [
                                          {<cygpath>}
                                          {<--windows>}
                                          {(DQ ($ Id.VSub_DollarName path))}
                                        ]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [139 162]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'path='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'path='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'path='> name:path)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <test-path-utils>
                                    more_env: []
                                    words: [
                                      {<test-path-utils>}
                                      {<real_path>}
                                      {(DQ ($ Id.VSub_DollarName path))}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ ($ Id.VSub_DollarName path))}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <time_in_seconds>
      name: time_in_seconds
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Subshell
              left: <Id.Op_LParen _>
              child: 
                (command.AndOr
                  children: [
                    (command.Simple
                      blame_tok: <cd>
                      more_env: []
                      words: [{<cd>} {<'/'>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <Id.Left_DoubleQuote '"'>
                      more_env: []
                      words: [
                        {(DQ ($ Id.VSub_DollarName PYTHON_PATH))}
                        {<-c>}
                        {(SQ <'import time; print(int(time.time()))'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  ops: [<Id.Op_DAmp _>]
                )
              right: <Id.Right_Subshell _>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'testid='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'testid='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'testid='> name:testid)
          op: assign_op.Equal
          rhs: 
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name this_test>
                var_name: this_test
                suffix_op: (suffix_op.Unary op:<Id.VOp1_Pound '#'> arg_word:{<t>})
                right: <Id.Right_DollarBrace '}'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'git_p4_test_start='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'git_p4_test_start='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'git_p4_test_start='> name:git_p4_test_start)
          op: assign_op.Equal
          rhs: {<9800>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4DPORT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4DPORT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4DPORT='> name:P4DPORT)
          op: assign_op.Equal
          rhs: 
            {
              (word_part.ArithSub
                left: <Id.Left_DollarDParen '$(('>
                anode: 
                  (arith_expr.Binary
                    op_id: Id.Arith_Plus
                    left: {<Id.Lit_Digits 10669>}
                    right: 
                      (arith_expr.Binary
                        op_id: Id.Arith_Minus
                        left: {($ Id.VSub_DollarName testid)}
                        right: {($ Id.VSub_DollarName git_p4_test_start)}
                      )
                  )
                right: <Id.Right_DollarDParen _>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4PORT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4PORT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4PORT='> name:P4PORT)
          op: assign_op.Equal
          rhs: {<localhost> <Id.Lit_Colon ':'> ($ Id.VSub_DollarName P4DPORT)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4CLIENT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4CLIENT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4CLIENT='> name:P4CLIENT)
          op: assign_op.Equal
          rhs: {<client>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4USER='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4USER='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4USER='> name:P4USER)
          op: assign_op.Equal
          rhs: {<author>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'P4EDITOR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'P4EDITOR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'P4EDITOR='> name:P4EDITOR)
          op: assign_op.Equal
          rhs: {<true>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <unset>
      more_env: []
      words: [{<unset>} {<P4CHARSET>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<P4PORT>} {<P4CLIENT>} {<P4USER>} {<P4EDITOR>} {<P4CHARSET>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'db='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'db='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'db='> name:db)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/db'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'cli='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'cli='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cli='> name:cli)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/cli'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'git='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'git='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'git='> name:git)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/git'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'pidfile='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'pidfile='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pidfile='> name:pidfile)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/p4d.pid'>)}
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name_tok: <cleanup>
      name: cleanup
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName pidfile))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <kill>
                          more_env: []
                          words: [
                            {<kill>}
                            {<-9>}
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <cat>
                                    more_env: []
                                    words: [{<cat>} {(DQ ($ Id.VSub_DollarName pidfile))}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<255>}
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  ]
                  spids: [359 370]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <trap>
      more_env: []
      words: [{<trap>} {<cleanup>} {<EXIT>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'TMPDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'TMPDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TMPDIR='> name:TMPDIR)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY))}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<TMPDIR>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <start_p4d>
      name: start_p4d
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <mkdir>
                  more_env: []
                  words: [
                    {<mkdir>}
                    {<-p>}
                    {(DQ ($ Id.VSub_DollarName db))}
                    {(DQ ($ Id.VSub_DollarName cli))}
                    {(DQ ($ Id.VSub_DollarName git))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName pidfile))}]
                  redirects: []
                  do_fork: T
                )
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <cd>
                          more_env: []
                          words: [{<cd>} {(DQ ($ Id.VSub_DollarName db))}]
                          redirects: []
                          do_fork: T
                        )
                        (BraceGroup
                          left: <Id.Lit_LBrace '{'>
                          children: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <p4d>
                                  more_env: []
                                  words: [
                                    {<p4d>}
                                    {<-q>}
                                    {<-p>}
                                    {($ Id.VSub_DollarName P4DPORT)}
                                    {(DQ ($ Id.VSub_At '@'))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Amp _>
                            )
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {($ Id.VSub_Bang '!')}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName pidfile))}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          redirects: []
                          right: <Id.Lit_RBrace '}'>
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'i='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'i='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name P4D_START_PATIENCE>
                            var_name: P4D_START_PATIENCE
                            suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<300>})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'pid='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'pid='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {(DQ ($ Id.VSub_DollarName pidfile))}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'timeout='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'timeout='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: 
                              {
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <time_in_seconds>
                                      more_env: []
                                      words: [{<time_in_seconds>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              }
                            right: {($ Id.VSub_DollarName P4D_TIMEOUT)}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Sentence
              child: 
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <true>
                          more_env: []
                          words: [{<true>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.If
                          if_kw: <Id.KW_If if>
                          arms: [
                            (IfArm
                              keyword: <Id.KW_If if>
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {
                                          (CommandSub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: 
                                              (command.Simple
                                                blame_tok: <time_in_seconds>
                                                more_env: []
                                                words: [{<time_in_seconds>}]
                                                redirects: []
                                                do_fork: T
                                              )
                                            right: <Id.Eof_RParen _>
                                          )
                                        }
                                        {<-gt>}
                                        {($ Id.VSub_DollarName timeout)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                )
                              then_kw: <Id.KW_Then then>
                              action: [
                                (command.Simple
                                  blame_tok: <kill>
                                  more_env: []
                                  words: [{<kill>} {<-9>} {($ Id.VSub_DollarName pid)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Exit exit>
                                  arg_word: {<1>}
                                )
                              ]
                              spids: [572 585]
                            )
                          ]
                          else_action: []
                          fi_kw: <Id.KW_Fi fi>
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <sleep>
                          more_env: []
                          words: [{<sleep>} {<1>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              terminator: <Id.Op_Amp _>
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'watchdog_pid='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'watchdog_pid='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'watchdog_pid='> name:watchdog_pid)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Bang '!')}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'ready='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'ready='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ready='> name:ready)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [{<test>} {($ Id.VSub_DollarName i)} {<-gt>} {<0>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <p4>
                                  more_env: []
                                  words: [{<p4>} {<info>}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ready='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ready='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ready='> name:ready)
                                  op: assign_op.Equal
                                  rhs: {<true>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Break break>
                            )
                          ]
                          spids: [639 652]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <kill>
                          more_env: []
                          words: [{<kill>} {<-0>} {($ Id.VSub_DollarName pid)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Break break>
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {<waiting>} {<Id.KW_For for>} {<p4d>} {<to>} {<start>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<1>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'i='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'i='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                left: <Id.Left_DollarDParen '$(('>
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: {($ Id.VSub_DollarName i)}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                                right: <Id.Right_DollarDParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName ready))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [718 729]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <p4_add_user>
              more_env: []
              words: [{<p4_add_user>} {<author>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <client_view>
                  more_env: []
                  words: [{<client_view>} {(DQ <'//depot/... //client/...'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<0>}
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <p4_add_user>
      name: p4_add_user
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'name='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'name='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number 1)}
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  blame_tok: <p4>
                  more_env: []
                  words: [{<p4>} {<user>} {<-f>} {<-i>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DLessDash '<<-'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {<EOF>}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'User: '>
                            ($ Id.VSub_DollarName name)
                            <'\n'>
                            <'Email: '>
                            ($ Id.VSub_DollarName name)
                            <'@example.com\n'>
                            <'FullName: Dr. '>
                            ($ Id.VSub_DollarName name)
                            <'\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <p4_add_job>
      name: p4_add_job
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <p4>
              more_env: []
              words: [{<p4>} {<job>} {<-f>} {<-i>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLessDash '<<-'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'Job: '>
                        ($ Id.VSub_Number 1)
                        <'\n'>
                        <'Status: open\n'>
                        <'User: dummy\n'>
                        <'Description:\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <retry_until_success>
      name: retry_until_success
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'timeout='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'timeout='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: 
                              {
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <time_in_seconds>
                                      more_env: []
                                      words: [{<time_in_seconds>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              }
                            right: {($ Id.VSub_DollarName RETRY_TIMEOUT)}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_Until until>
              cond: 
                (condition.Shell
                  commands: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <Id.Left_DoubleQuote '"'>
                          more_env: []
                          words: [{(DQ ($ Id.VSub_At '@'))}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <time_in_seconds>
                                    more_env: []
                                    words: [{<time_in_seconds>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                            {<-gt>}
                            {($ Id.VSub_DollarName timeout)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<1>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <retry_until_fail>
      name: retry_until_fail
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'timeout='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'timeout='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: 
                              {
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <time_in_seconds>
                                      more_env: []
                                      words: [{<time_in_seconds>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              }
                            right: {($ Id.VSub_DollarName RETRY_TIMEOUT)}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_Until until>
              cond: 
                (condition.Shell
                  commands: [
                    (command.AndOr
                      children: [
                        (command.Pipeline
                          negated: <Id.KW_Bang '!'>
                          children: [
                            (command.Simple
                              blame_tok: <Id.Left_DoubleQuote '"'>
                              more_env: []
                              words: [{(DQ ($ Id.VSub_At '@'))}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '2>'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          ops: []
                        )
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <time_in_seconds>
                                    more_env: []
                                    words: [{<time_in_seconds>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                            {<-gt>}
                            {($ Id.VSub_DollarName timeout)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<1>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <kill_p4d>
      name: kill_p4d
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'pid='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'pid='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {(DQ ($ Id.VSub_DollarName pidfile))}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <retry_until_fail>
              more_env: []
              words: [{<retry_until_fail>} {<kill>} {($ Id.VSub_DollarName pid)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <retry_until_fail>
              more_env: []
              words: [{<retry_until_fail>} {<kill>} {<-9>} {($ Id.VSub_DollarName pid)}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test_must_fail>
                  more_env: []
                  words: [{<test_must_fail>} {<kill>} {($ Id.VSub_DollarName pid)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [
                    {<rm>}
                    {<-rf>}
                    {(DQ ($ Id.VSub_DollarName db))}
                    {(DQ ($ Id.VSub_DollarName cli))}
                    {(DQ ($ Id.VSub_DollarName pidfile))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <retry_until_fail>
                  more_env: []
                  words: [{<retry_until_fail>} {<kill>} {<-9>} {($ Id.VSub_DollarName watchdog_pid)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <cleanup_git>
      name: cleanup_git
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <retry_until_success>
              more_env: []
              words: [{<retry_until_success>} {<rm>} {<-r>} {(DQ ($ Id.VSub_DollarName git))}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test_must_fail>
                  more_env: []
                  words: [{<test_must_fail>} {<test>} {<-d>} {(DQ ($ Id.VSub_DollarName git))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <retry_until_success>
                  more_env: []
                  words: [{<retry_until_success>} {<mkdir>} {(DQ ($ Id.VSub_DollarName git))}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <marshal_dump>
      name: marshal_dump
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'what='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'what='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'what='> name:what)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number 1)}
                    )
                  ]
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'line='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'line='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'line='> name:line)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Number 2>
                            var_name: 2
                            suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<1>})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/marshal-dump.py'>)}
                    )
                    (Redir
                      op: <Id.Redir_DLessDash '<<-'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {<EOF>}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'import marshal\n'>
                            <'import sys\n'>
                            <'instream = getattr(sys.stdin, \'buffer\', sys.stdin)\n'>
                            <'for i in range('>
                            ($ Id.VSub_DollarName line)
                            <'):\n'>
                            <'    d = marshal.load(instream)\n'>
                            <'print(d[b\''>
                            ($ Id.VSub_DollarName what)
                            <'\'].decode(\'utf-8\'))\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Left_DoubleQuote '"'>
                  more_env: []
                  words: [
                    {(DQ ($ Id.VSub_DollarName PYTHON_PATH))}
                    {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/marshal-dump.py'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <client_view>
      name: client_view
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <cat>
                          more_env: []
                          words: [{<cat>}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_DLessDash '<<-'>
                              loc: (redir_loc.Fd fd:0)
                              arg: 
                                (redir_param.HereDoc
                                  here_begin: {<EOF>}
                                  here_end_tok: <Id.Undefined_Tok ''>
                                  stdin_parts: [
                                    <'Client: '>
                                    ($ Id.VSub_DollarName P4CLIENT)
                                    <'\n'>
                                    <'Description: '>
                                    ($ Id.VSub_DollarName P4CLIENT)
                                    <'\n'>
                                    <'Root: '>
                                    ($ Id.VSub_DollarName cli)
                                    <'\n'>
                                    <'AltRoots: '>
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <native_path>
                                          more_env: []
                                          words: [{<native_path>} {(DQ ($ Id.VSub_DollarName cli))}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                    <'\n'>
                                    <'LineEnd: unix\n'>
                                    <'View:\n'>
                                  ]
                                )
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <printf>
                          more_env: []
                          words: [
                            {<printf>}
                            {(DQ <Id.Lit_BadBackslash '\\'> <'t%s'> <Id.Lit_BadBackslash '\\'> <n>)}
                            {(DQ ($ Id.VSub_At '@'))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <p4>
                  more_env: []
                  words: [{<p4>} {<client>} {<-i>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <is_cli_file_writeable>
      name: is_cli_file_writeable
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'file='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'file='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number 1))}
                    )
                  ]
                  redirects: []
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <test_have_prereq>
                                  more_env: []
                                  words: [{<test_have_prereq>} {<CYGWIN>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Pipeline
                                  children: [
                                    (command.Simple
                                      blame_tok: <p4>
                                      more_env: []
                                      words: [{<p4>} {<-V>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <grep>
                                      more_env: []
                                      words: [{<grep>} {<-q>} {<CYGWIN>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_Pipe _>]
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.AndOr
                          children: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'stat='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'stat='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'stat='> name:stat)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Simple
                                            blame_tok: <stat>
                                            more_env: []
                                            words: [
                                              {<stat>}
                                              {<--format> <Id.Lit_Equals '='> <Id.Lit_Other '%'> <a>}
                                              {(DQ ($ Id.VSub_DollarName file))}
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [
                                {<test>}
                                {($ Id.VSub_DollarName stat)}
                                {<Id.Lit_Equals '='>}
                                {<644>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                      ]
                      spids: [1248 1269]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [{<test>} {<-w>} {(DQ ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)