(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [64 72]
              ) (/../..)
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (C {(kube) (Lit_Other ":") (Lit_Other ":") (golang) (Lit_Other ":") (Lit_Other ":") (setup_env)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_CACHE_MUTATION_DETECTOR)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_CACHE_MUTATION_DETECTOR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                  spids: [99 103]
                )
              )
            }
          spids: [97]
        )
      ]
      spids: [97]
    )
    (C {(export)} {(KUBE_CACHE_MUTATION_DETECTOR)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_PANIC_WATCH_DECODE_ERROR)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_PANIC_WATCH_DECODE_ERROR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                  spids: [116 120]
                )
              )
            }
          spids: [114]
        )
      ]
      spids: [114]
    )
    (C {(export)} {(KUBE_PANIC_WATCH_DECODE_ERROR)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(which)} {(shasum)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(/dev/null)}
                      spids: [137]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[140])
                  ]
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:SHA1SUM)
                  op: Equal
                  rhs: {(DQ ("shasum -a1"))}
                  spids: [147]
                )
              ]
              spids: [147]
            )
          ]
          spids: [-1 144]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(which)} {(sha1sum)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(/dev/null)}
                      spids: [158]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[161])
                  ]
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:SHA1SUM)
                  op: Equal
                  rhs: {(DQ (sha1sum))}
                  spids: [168]
                )
              ]
              spids: [168]
            )
          ]
          spids: [152 165]
        )
      ]
      else_action: [
        (SimpleCommand
          words: [{(echo)} {(DQ ("Failed to find shasum or sha1sum utility."))}]
          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[182])]
        )
        (C {(exit)} {(1)})
      ]
      spids: [173 190]
    )
    (FuncDef
      name: "kube::test::find_dirs"
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(cd)} {(${ VSub_Name KUBE_ROOT)})
                    (Pipeline
                      children: [
                        (C {(find)} {(-L)} {(.)} {(-not)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} {(-path)} {(SQ <"./_artifacts/*">)} {(-o)} {(-path)} 
                          {(SQ <"./bazel-*/*">)} {(-o)} {(-path)} {(SQ <"./_output/*">)} {(-o)} {(-path)} {(SQ <"./_gopath/*">)} {(-o)} {(-path)} 
                          {(SQ <"./cmd/kubeadm/test/*">)} {(-o)} {(-path)} {(SQ <"./contrib/podex/*">)} {(-o)} {(-path)} {(SQ <"./output/*">)} {(-o)} {(-path)} 
                          {(SQ <"./release/*">)} {(-o)} {(-path)} {(SQ <"./target/*">)} {(-o)} {(-path)} {(SQ <"./test/e2e/*">)} {(-o)} {(-path)} 
                          {(SQ <"./test/e2e_node/*">)} {(-o)} {(-path)} {(SQ <"./test/integration/*">)} {(-o)} {(-path)} {(SQ <"./third_party/*">)} {(-o)} {(-path)} 
                          {(SQ <"./staging/*">)} {(-o)} {(-path)} {(SQ <"./vendor/*">)} {(-o)} {(-path)} {(SQ <"./federation/test/*">)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)} {(-prune)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)} {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} 
                          {
                            (DQ ("s|^") (EscapedLiteralPart token:<Lit_EscapedChar "\\.">) ("/|") 
                              (${ VSub_Name KUBE_GO_PACKAGE) ("/|")
                            )
                          }
                        )
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[430])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(-L)} {(.)} {(-path)} {(SQ <./_output>)} {(-prune)} {(-o)} {(-path)} 
                          {(SQ <"./vendor/k8s.io/client-go/*">)} {(-o)} {(-path)} {(SQ <"./vendor/k8s.io/apiserver/*">)} {(-o)} {(-path)} {(SQ <"./test/e2e_node/system/*">)} 
                          {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} 
                          {
                            (DQ ("s|^") (EscapedLiteralPart token:<Lit_EscapedChar "\\.">) ("/|") 
                              (${ VSub_Name KUBE_GO_PACKAGE) ("/|")
                            )
                          }
                        )
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[519])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/client-go)} {(-name)} {(SQ <"*_test.go">)} 
                          {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[570])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apiserver)} {(-name)} {(SQ <"*_test.go">)} 
                          {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[621])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apimachinery)} {(-name)} {(SQ <"*_test.go">)} 
                          {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[672])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/kube-aggregator)} {(-name)} 
                          {(SQ <"*_test.go">)} {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[719])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apiextensions-apiserver)} {(-not)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} {(-path)} {(SQ <"*/test/integration/*">)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)} {(-prune)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)} {(-name)} {(SQ <"*_test.go">)} {(-name)} 
                          {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[792])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/sample-apiserver)} {(-name)} 
                          {(SQ <"*_test.go">)} {(-name)} {(SQ <"*_test.go">)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <"s|^\\./staging/src/|./vendor/|">)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[839])]
                        )
                      ]
                      negated: False
                    )
                  ]
                )
              spids: [206 847]
            )
          ]
          spids: [203]
        )
      spids: [193 202]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TIMEOUT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_TIMEOUT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{("-timeout 120s")})
                spids: [853 857]
              )
            }
          spids: [852]
        )
      ]
      spids: [852]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVER)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVER>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(n)})
                spids: [860 864]
              )
            }
          spids: [859]
        )
      ]
      spids: [859]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVERMODE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVERMODE>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(atomic)})
                spids: [870 874]
              )
            }
          spids: [869]
        )
      ]
      spids: [869]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVERPROCS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVERPROCS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(4)})
                spids: [883 887]
              )
            }
          spids: [882]
        )
      ]
      spids: [882]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_RACE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_RACE>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [890 893]
              )
            }
          spids: [889]
        )
      ]
      spids: [889]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_GOVERALLS_BIN)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_GOVERALLS_BIN>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [902 905]
              )
            }
          spids: [901]
        )
      ]
      spids: [901]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ALL_VERSIONS_CSV)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Sentence
                        child: 
                          (Assignment
                            keyword: Assign_None
                            pairs: [
                              (assign_pair
                                lhs: (LhsName name:IFS)
                                op: Equal
                                rhs: {(SQ <",">)}
                                spids: [924]
                              )
                            ]
                            spids: [924]
                          )
                        terminator: <Op_Semi ";">
                      )
                      (Sentence
                        child: 
                          (C {(echo)} 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name KUBE_AVAILABLE_GROUP_VERSIONS>
                                  bracket_op: (WholeArray op_id:Arith_Star)
                                  suffix_op: 
                                    (PatSub
                                      pat: {(" ")}
                                      replace: {(",")}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [932 942]
                                )
                              )
                            }
                          )
                        terminator: <Op_Semi ";">
                      )
                      (Assignment
                        keyword: Assign_None
                        pairs: [
                          (assign_pair
                            lhs: (LhsName name:IFS)
                            op: Equal
                            rhs: {(Lit_Other "$")}
                            spids: [945]
                          )
                        ]
                        spids: [945]
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [923 947]
              ) (Lit_Comma ",") (federation/v1beta1)
            }
          spids: [922]
        )
      ]
      spids: [922]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TEST_API_VERSIONS)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_TEST_API_VERSIONS>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(${ VSub_Name ALL_VERSIONS_CSV)}
                    )
                  spids: [953 959]
                )
              )
            }
          spids: [951]
        )
      ]
      spids: [951]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_JUNIT_REPORT_DIR)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_JUNIT_REPORT_DIR>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [969 972]
              )
            }
          spids: [968]
        )
      ]
      spids: [968]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_KEEP_VERBOSE_TEST_OUTPUT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_KEEP_VERBOSE_TEST_OUTPUT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(n)})
                spids: [981 985]
              )
            }
          spids: [980]
        )
      ]
      spids: [980]
    )
    (FuncDef
      name: "kube::test::usage"
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                  (usage_from_stdin)
                }
              ]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("usage: ") ($ VSub_Number "$0") (" [OPTIONS] [TARGETS]\n") ("\n") 
                        ("OPTIONS:\n") ("  -p <number>   : number of parallel workers, must be >= 1\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1009]
                )
              ]
            )
          ]
          spids: [998]
        )
      spids: [988 997]
    )
    (FuncDef
      name: isnum
      body: 
        (BraceGroup
          children: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_EqualTilde
                  left: {(DQ ($ VSub_Number "$1"))}
                  right: 
                    {(Lit_Other "^") (Lit_Other "[") (0-9) (Lit_Other "]") (Lit_Other "+") 
                      (Lit_Other "$")
                    }
                )
            )
          ]
          spids: [1025]
        )
      spids: [1021 1024]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PARALLEL)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name PARALLEL>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                  spids: [1050 1054]
                )
              )
            }
          spids: [1048]
        )
      ]
      spids: [1048]
    )
    (While
      cond: [(Sentence child:(C {(getopts)} {(DQ ("hp:i:"))} {(opt)}) terminator:<Op_Semi ";">)]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name "$opt")}
              arms: [
                (case_arm
                  pat_list: [{(h)}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      }
                    )
                    (C {(exit)} {(0)})
                  ]
                  spids: [1079 1080 1097 -1]
                )
                (case_arm
                  pat_list: [{(p)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PARALLEL)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$OPTARG"))}
                          spids: [1104]
                        )
                      ]
                      spids: [1104]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (AndOr
                                  children: [
                                    (Pipeline
                                      children: [(C {(isnum)} {(DQ (${ VSub_Name PARALLEL))})]
                                      negated: True
                                    )
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_le
                                          left: {(DQ (${ VSub_Name PARALLEL))}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  op_id: Op_DPipe
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") 
                                (Lit_Other ":") (usage)
                              } {(DQ ("'") ($ VSub_Number "$0") ("': argument to -p must be numeric and greater than 0"))}
                            )
                            (C 
                              {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") 
                                (Lit_Other ":") (usage)
                              }
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [-1 1139]
                        )
                      ]
                      spids: [-1 1171]
                    )
                  ]
                  spids: [1100 1101 1174 -1]
                )
                (case_arm
                  pat_list: [{(i)}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      } {(DQ ("'") ($ VSub_Number "$0") ("': use GOFLAGS='-count <num-iterations>'"))}
                    )
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1177 1178 1210 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "?")}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1213 1214 1231 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other ":")}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      } {(DQ ("Option -") ($ VSub_Name "$OPTARG") (" <value>"))}
                    )
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") (Lit_Other ":") 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1234 1235 1267 -1]
                )
              ]
              spids: [1072 1076 1270]
            )
          ]
          spids: [1069 1272]
        )
    )
    (C {(shift)} 
      {
        (ArithSubPart
          anode: 
            (ArithBinary
              op_id: Arith_Minus
              left: (ArithVarRef name:OPTIND)
              right: (ArithWord w:{(Lit_Digits 1)})
            )
          spids: [1276 1283]
        )
      }
    )
    (C {(eval)} 
      {
        (DQ ("goflags=(") 
          (BracedVarSub
            token: <VSub_Name GOFLAGS>
            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
            spids: [1293 1296]
          ) (")")
        )
      }
    )
    (C {(eval)} 
      {
        (DQ ("testargs=(") 
          (BracedVarSub
            token: <VSub_Name KUBE_TEST_ARGS>
            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
            spids: [1304 1307]
          ) (")")
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:go_test_grep_pattern)
          op: Equal
          rhs: {(DQ (".*"))}
          spids: [1315]
        )
      ]
      spids: [1315]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))})
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:goflags)
                  op: PlusEqual
                  rhs: {(ArrayLiteralPart words:[{(-v)}])}
                  spids: [1346]
                )
              ]
              spids: [1346]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:go_test_grep_pattern)
                  op: Equal
                  rhs: 
                    {
                      (DQ ("^[^[:space:]]") (EscapedLiteralPart token:<Lit_EscapedChar "\\+">) 
                        ("[[:space:]]") (EscapedLiteralPart token:<Lit_EscapedChar "\\+">) ("[^[:space:]]") 
                        (EscapedLiteralPart token:<Lit_EscapedChar "\\+">) ("/[^[[:space:]]") (EscapedLiteralPart token:<Lit_EscapedChar "\\+">)
                      )
                    }
                  spids: [1356]
                )
              ]
              spids: [1356]
            )
          ]
          spids: [-1 1343]
        )
      ]
      spids: [-1 1368]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:testcases)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [1374]
        )
      ]
      spids: [1374]
    )
    (ForEach
      iter_name: arg
      do_arg_iter: True
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name arg))}
                              right: {(-) (Lit_Other "*")}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:goflags)
                          op: PlusEqual
                          rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name arg))}])}
                          spids: [1407]
                        )
                      ]
                      spids: [1407]
                    )
                  ]
                  spids: [-1 1404]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:testcases)
                      op: PlusEqual
                      rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name arg))}])}
                      spids: [1420]
                    )
                  ]
                  spids: [1420]
                )
              ]
              spids: [1417 1430]
            )
          ]
          spids: [1383 1432]
        )
      spids: [-1 -1]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_eq
                      left: 
                        {
                          (BracedVarSub
                            token: <VSub_Name testcases>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1438 1444]
                          )
                        }
                      right: {(0)}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:testcases)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C 
                                      {(kube) (Lit_Other ":") (Lit_Other ":") (test) (Lit_Other ":") 
                                        (Lit_Other ":") (find_dirs)
                                      }
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [1458 1466]
                            )
                          }
                        ]
                      )
                    }
                  spids: [1456]
                )
              ]
              spids: [1456]
            )
          ]
          spids: [-1 1453]
        )
      ]
      spids: [-1 1469]
    )
    (C {(set)} {(--)} 
      {
        (DQ 
          (BracedVarSub
            token: <VSub_Name testcases>
            bracket_op: (WholeArray op_id:Lit_At)
            suffix_op: 
              (StringUnary
                op_id: VTest_Plus
                arg_word: 
                  {
                    (BracedVarSub
                      token: <VSub_Name testcases>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1482 1487]
                    )
                  }
              )
            spids: [1476 1488]
          )
        )
      }
    )
    (FuncDef
      name: junitFilenamePrefix
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ )}) (ControlFlow token:<ControlFlow_Return return>)]
                  spids: [-1 1514]
                )
              ]
              spids: [-1 1526]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_TEST_API_HASH)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            token: <VSub_Name KUBE_TEST_API>
                                            suffix_op: 
                                              (PatSub
                                                pat: 
                                                  {
                                                    (EscapedLiteralPart
                                                      token: <Lit_EscapedChar "\\/">
                                                    )
                                                  }
                                                replace: {(-)}
                                                do_all: True
                                                do_prefix: False
                                                do_suffix: False
                                              )
                                            spids: [1570 1577]
                                          )
                                        )
                                      }
                                    )
                                    (C {(${ VSub_Name SHA1SUM)})
                                    (C {(awk)} {(SQ <"{print $1}">)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1564 1591]
                        )
                      )
                    }
                  spids: [1562]
                )
              ]
              spids: [1560]
            )
            (C {(echo)} 
              {
                (DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR) (/junit_) (${ VSub_Name KUBE_TEST_API_HASH) (_) 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C 
                            {(kube) (Lit_Other ":") (Lit_Other ":") (util) (Lit_Other ":") 
                              (Lit_Other ":") (sortable_date)
                            }
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [1606 1614]
                  )
                )
              }
            )
          ]
          spids: [1496]
        )
      spids: [1492 1495]
    )
    (FuncDef
      name: verifyAndSuggestPackagePath
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:specified_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1629]
                )
              ]
              spids: [1627]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:alternative_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [1637]
                )
              ]
              spids: [1635]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:original_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [1645]
                )
              ]
              spids: [1643]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:suggestion_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$4"))}
                  spids: [1653]
                )
              ]
              spids: [1651]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(Lit_Other "[")} {(-d)} {(DQ ($ VSub_Name "$specified_package_path"))} 
                              {(Lit_Other "]")}
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:printable_package_path)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ ($ VSub_Name "$specified_package_path"))})
                                          (C {(sed)} 
                                            {
                                              (DQ ("s|") ($ VSub_Name "$GOPATH") ("|") 
                                                (EscapedLiteralPart
                                                  token: <Lit_EscapedChar "\\$">
                                                ) ("GOPATH|")
                                              )
                                            }
                                          )
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1693 1711]
                              )
                            }
                          spids: [1692]
                        )
                      ]
                      spids: [1690]
                    )
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (error)
                      } {(DQ ("specified test path '") ($ VSub_Name "$printable_package_path") ("' does not exist"))}
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-d)} 
                                  {(DQ ($ VSub_Name "$alternative_package_path"))} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") 
                                (Lit_Other ":") (info)
                              } 
                              {
                                (DQ ("try changing ") 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar "\\\"">
                                  ) ($ VSub_Name "$original_package_path") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" to ") 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar "\\\"">
                                  ) ($ VSub_Name "$suggestion_package_path") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                                )
                              }
                            )
                          ]
                          spids: [-1 1743]
                        )
                      ]
                      spids: [-1 1766]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 1675]
                )
              ]
              spids: [-1 1774]
            )
          ]
          spids: [1624]
        )
      spids: [1620 1623]
    )
    (FuncDef
      name: verifyPathsToPackagesUnderTest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:packages_under_test)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{($ VSub_At "$@")}])}
                  spids: [1788]
                )
              ]
              spids: [1786]
            )
            (ForEach
              iter_name: package_path
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name packages_under_test>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1802 1807]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:local_package_path)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$package_path"))}
                          spids: [1816]
                        )
                      ]
                      spids: [1814]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:go_package_path)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$GOPATH") (/src/) ($ VSub_Name "$package_path"))}
                          spids: [1824]
                        )
                      ]
                      spids: [1822]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              token: <VSub_Name package_path>
                                              suffix_op: 
                                                (Slice
                                                  begin: (ArithWord w:{(Lit_Digits 0)})
                                                  length: (ArithWord w:{(Lit_Digits 2)})
                                                )
                                              spids: [1838 1844]
                                            )
                                          )
                                        }
                                      right: {(DQ (./))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(verifyAndSuggestPackagePath)} 
                              {(DQ ($ VSub_Name "$local_package_path"))} {(DQ ($ VSub_Name "$go_package_path"))} {(DQ ($ VSub_Name "$package_path"))} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name package_path>
                                    suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)}))
                                    spids: [1875 1879]
                                  )
                                )
                              }
                            )
                          ]
                          spids: [-1 1857]
                        )
                      ]
                      else_action: [
                        (C {(verifyAndSuggestPackagePath)} {(DQ ($ VSub_Name "$go_package_path"))} 
                          {(DQ ($ VSub_Name "$local_package_path"))} {(DQ ($ VSub_Name "$package_path"))} {(DQ (./) ($ VSub_Name "$package_path"))}
                        )
                      ]
                      spids: [1883 1906]
                    )
                  ]
                  spids: [1811 1909]
                )
              spids: [1800 1809]
            )
          ]
          spids: [1783]
        )
      spids: [1779 1782]
    )
    (FuncDef
      name: produceJUnitXMLReport
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_filename_prefix)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [1925]
                )
              ]
              spids: [1921]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name junit_filename_prefix))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [-1 1944]
                )
              ]
              spids: [-1 1950]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:test_stdout_filenames) op:Equal spids:[1956])]
              spids: [1954]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:junit_xml_filename) op:Equal spids:[1961])]
              spids: [1959]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_stdout_filenames)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(ls)} 
                                {(${ VSub_Name junit_filename_prefix) (Lit_Other "*") (.stdout)}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1965 1973]
                      )
                    }
                  spids: [1964]
                )
              ]
              spids: [1964]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_xml_filename)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name junit_filename_prefix) (.xml))}
                  spids: [1976]
                )
              ]
              spids: [1976]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(command)} {(-v)} {(go-junit-report)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [1995]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [1998]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (error)
                      } {(DQ ("go-junit-report not found; please install with "))} 
                      {(DQ ("go get -u github.com/jstemmer/go-junit-report"))}
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [-1 2002]
                )
              ]
              spids: [-1 2027]
            )
            (Pipeline
              children: [
                (C {(cat)} {(${ VSub_Name test_stdout_filenames)})
                (SimpleCommand
                  words: [{(go-junit-report)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(DQ (${ VSub_Name junit_xml_filename))}
                      spids: [2040]
                    )
                  ]
                )
              ]
              negated: False
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_KEEP_VERBOSE_TEST_OUTPUT)}
                                  right: 
                                    {(Lit_Other "^") (Lit_Other "[") (yY) (Lit_Other "]") 
                                      (Lit_Other "$")
                                    }
                                )
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(rm)} {(${ VSub_Name test_stdout_filenames)})]
                  spids: [-1 2070]
                )
              ]
              spids: [-1 2080]
            )
            (C {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") (status)} 
              {(DQ ("Saved JUnit XML test report to ") (${ VSub_Name junit_xml_filename))}
            )
          ]
          spids: [1918]
        )
      spids: [1914 1917]
    )
    (FuncDef
      name: runTests
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:junit_filename_prefix) op:Equal spids:[2110])]
              spids: [2108]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_filename_prefix)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(junitFilenamePrefix)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [2114 2116]
                      )
                    }
                  spids: [2113]
                )
              ]
              spids: [2113]
            )
            (C {(verifyPathsToPackagesUnderTest)} {(DQ ($ VSub_At "$@"))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_COVER)}
                                  right: 
                                    {(Lit_Other "^") (Lit_Other "[") (yY) (Lit_Other "]") 
                                      (Lit_Other "$")
                                    }
                                )
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (status)
                      } {(DQ ("Running tests without code coverage"))}
                    )
                    (C {(go)} {(test)} {(-i)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2198 2203]
                                    )
                                  }
                              )
                            spids: [2192 2204]
                          )
                        )
                      } {(${ VSub_Name KUBE_RACE)} {(${ VSub_Name KUBE_TIMEOUT)} {(DQ (${ VSub_At "@"))} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2232 2237]
                                    )
                                  }
                              )
                            spids: [2226 2238]
                          )
                        )
                      }
                    )
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (C {(go)} {(test)} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name goflags>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: 
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name goflags>
                                              bracket_op: (WholeArray op_id:Lit_At)
                                              spids: [2253 2258]
                                            )
                                          }
                                      )
                                    spids: [2247 2259]
                                  )
                                )
                              } {(${ VSub_Name KUBE_RACE)} {(${ VSub_Name KUBE_TIMEOUT)} {(DQ (${ VSub_At "@"))} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name testargs>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: 
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name testargs>
                                              bracket_op: (WholeArray op_id:Lit_At)
                                              spids: [2287 2292]
                                            )
                                          }
                                      )
                                    spids: [2281 2293]
                                  )
                                )
                              }
                            )
                            (C {(tee)} 
                              {
                                (BracedVarSub
                                  token: <VSub_Name junit_filename_prefix>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VTest_ColonPlus
                                      arg_word: {(DQ (${ VSub_Name junit_filename_prefix) (.stdout))}
                                    )
                                  spids: [2302 2311]
                                )
                              }
                            )
                            (C {(grep)} {(DQ (${ VSub_Name go_test_grep_pattern))})
                          ]
                          negated: False
                        )
                        (AndOr
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:rc)
                                  op: Equal
                                  rhs: {($ VSub_QMark "$?")}
                                  spids: [2327]
                                )
                              ]
                              spids: [2327]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:rc)
                                  op: Equal
                                  rhs: {($ VSub_QMark "$?")}
                                  spids: [2332]
                                )
                              ]
                              spids: [2332]
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      op_id: Op_DAmp
                    )
                    (C {(produceJUnitXMLReport)} {(DQ (${ VSub_Name junit_filename_prefix))})
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(${ VSub_Name rc)}
                    )
                  ]
                  spids: [-1 2157]
                )
              ]
              spids: [-1 2352]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_TEST_API_HASH)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            token: <VSub_Name KUBE_TEST_API>
                                            suffix_op: 
                                              (PatSub
                                                pat: 
                                                  {
                                                    (EscapedLiteralPart
                                                      token: <Lit_EscapedChar "\\/">
                                                    )
                                                  }
                                                replace: {(-)}
                                                do_all: True
                                                do_prefix: False
                                                do_suffix: False
                                              )
                                            spids: [2368 2375]
                                          )
                                        )
                                      }
                                    )
                                    (C {(${ VSub_Name SHA1SUM)})
                                    (C {(awk)} {(SQ <"{print $1}">)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [2362 2389]
                        )
                      )
                    }
                  spids: [2360]
                )
              ]
              spids: [2360]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_report_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ (/tmp/k8s_coverage/) (${ VSub_Name KUBE_TEST_API_HASH) (/) 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C 
                                  {(kube) (Lit_Other ":") (Lit_Other ":") (util) (Lit_Other ":") 
                                    (Lit_Other ":") (sortable_date)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [2400 2408]
                        )
                      )
                    }
                  spids: [2393]
                )
              ]
              spids: [2393]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_profile)
                  op: Equal
                  rhs: {(DQ (coverage.out))}
                  spids: [2412]
                )
              ]
              spids: [2412]
            )
            (C {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") (status)} 
              {(DQ ("Saving coverage output in '") (${ VSub_Name cover_report_dir) ("'"))}
            )
            (C {(mkdir)} {(-p)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_At "@">
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_Plus
                        arg_word: 
                          {
                            (BracedVarSub
                              token: <VSub_At "@">
                              suffix_op: 
                                (PatSub
                                  pat: {}
                                  replace: {(${ VSub_Name cover_report_dir) (Lit_Slash /)}
                                  do_all: False
                                  do_prefix: True
                                  do_suffix: False
                                )
                              spids: [2446 2455]
                            )
                          }
                      )
                    spids: [2443 2456]
                  )
                )
              }
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_ignore_dirs)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (
"vendor/k8s.io/code-generator/cmd/generator|vendor/k8s.io/client-go/1.4/rest"
                        )
                      )
                    }
                  spids: [2518]
                )
              ]
              spids: [2518]
            )
            (ForEach
              iter_name: path
              iter_words: [
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(echo)} {($ VSub_Name "$cover_ignore_dirs")})
                              (C {(sed)} {(SQ <"s/|/ /g">)})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2530 2542]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-e)} 
                      {
                        (DQ (skipped) (EscapedLiteralPart token:<Lit_EscapedChar "\\t">) 
                          (k8s.io/kubernetes/) ($ VSub_Name "$path")
                        )
                      }
                    )
                  ]
                  spids: [2545 2560]
                )
              spids: [2529 2543]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(printf)} {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
                      {(DQ (${ VSub_At "@"))}
                    )
                    (C {(grep)} {(-Ev)} {($ VSub_Name "$cover_ignore_dirs")})
                    (C {(xargs)} {(-I) (Lit_LBrace "{") (Lit_RBrace "}")} {(-n)} {(1)} {(-P)} 
                      {(${ VSub_Name KUBE_COVERPROCS)} {(bash)} {(-c)} 
                      {
                        (DQ ("set -o pipefail; _pkg=") 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) (0) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) ("; _pkg_out=") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{_pkg//") 
                          (EscapedLiteralPart token:<Lit_EscapedChar "\\/">) ("/_}; ") ("      go test -i ") 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2647 2652]
                                    )
                                  }
                              )
                            spids: [2641 2653]
                          ) (" ") ("        ") (${ VSub_Name KUBE_RACE) (" ") ("        ") (${ VSub_Name KUBE_TIMEOUT) (" ") 
                          ("        -cover -covermode=") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name KUBE_COVERMODE) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) (" ") ("        -coverprofile=") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (${ VSub_Name cover_report_dir) (/) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{_pkg}/") (${ VSub_Name cover_profile) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) (" ") ("        ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{_pkg}") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" ") ("        ") 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2704 2709]
                                    )
                                  }
                              )
                            spids: [2698 2710]
                          ) ("\n") ("      go test ") 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2719 2724]
                                    )
                                  }
                              )
                            spids: [2713 2725]
                          ) (" ") ("        ") (${ VSub_Name KUBE_RACE) (" ") ("        ") (${ VSub_Name KUBE_TIMEOUT) (" ") 
                          ("        -cover -covermode=") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name KUBE_COVERMODE) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) (" ") ("        -coverprofile=") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (${ VSub_Name cover_report_dir) (/) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{_pkg}/") (${ VSub_Name cover_profile) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          ) (" ") ("        ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{_pkg}") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" ") ("        ") 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2776 2781]
                                    )
                                  }
                              )
                            spids: [2770 2782]
                          ) (" ") ("      | tee ") 
                          (BracedVarSub
                            token: <VSub_Name junit_filename_prefix>
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {(EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                                    (${ VSub_Name junit_filename_prefix) (-) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) (_pkg_out.stdout) 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar "\\\"">
                                    )
                                  }
                              )
                            spids: [2786 2797]
                          ) (" ") ("      | grep ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (${ VSub_Name go_test_grep_pattern) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                        )
                      } {(Lit_LBrace "{") (Lit_RBrace "}")}
                    )
                  ]
                  negated: False
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:test_result)
                          op: Equal
                          rhs: {($ VSub_QMark "$?")}
                          spids: [2817]
                        )
                      ]
                      spids: [2817]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:test_result)
                          op: Equal
                          rhs: {($ VSub_QMark "$?")}
                          spids: [2822]
                        )
                      ]
                      spids: [2822]
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
            (C {(produceJUnitXMLReport)} {(DQ (${ VSub_Name junit_filename_prefix))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:COMBINED_COVER_PROFILE)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cover_report_dir) (/combined-coverage.out))}
                  spids: [2837]
                )
              ]
              spids: [2837]
            )
            (BraceGroup
              children: [
                (C {(echo)} {(DQ ("mode: ") (${ VSub_Name KUBE_COVERMODE))})
                (ForEach
                  iter_name: x
                  iter_words: [
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(find)} {(DQ (${ VSub_Name cover_report_dir))} {(-name)} 
                                {(DQ (${ VSub_Name cover_profile))}
                              )
                            ]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [2890 2906]
                      )
                    }
                  ]
                  do_arg_iter: False
                  body: 
                    (DoGroup
                      children: [
                        (AndOr
                          children: [
                            (Pipeline
                              children: [
                                (C {(cat)} {($ VSub_Name "$x")})
                                (C {(grep)} {(-h)} {(-v)} {(DQ ("^mode:"))})
                              ]
                              negated: False
                            )
                            (C {(true)})
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      spids: [2909 2933]
                    )
                  spids: [2889 2907]
                )
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name COMBINED_COVER_PROFILE))}
                  spids: [2938]
                )
              ]
              spids: [2846]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:coverage_html_file)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cover_report_dir) (/combined-coverage.html))}
                  spids: [2947]
                )
              ]
              spids: [2947]
            )
            (C {(go)} {(tool)} {(cover)} 
              {(-html) (Lit_Other "=") (DQ (${ VSub_Name COMBINED_COVER_PROFILE))} {(-o) (Lit_Other "=") (DQ (${ VSub_Name coverage_html_file))}
            )
            (C {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") (status)} 
              {(DQ ("Combined coverage report: ") (${ VSub_Name coverage_html_file))}
            )
            (ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {(${ VSub_Name test_result)}
            )
          ]
          spids: [2105]
        )
      spids: [2101 2104]
    )
    (FuncDef
      name: reportCoverageToCoveralls
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (DBracket
                              expr: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_COVER)}
                                  right: 
                                    {(Lit_Other "^") (Lit_Other "[") (yY) (Lit_Other "]") 
                                      (Lit_Other "$")
                                    }
                                )
                            )
                            (DBracket
                              expr: 
                                (BoolUnary
                                  op_id: BoolUnary_x
                                  child: {(DQ (${ VSub_Name KUBE_GOVERALLS_BIN))}
                                )
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ":") (Lit_Other ":") (log) (Lit_Other ":") (Lit_Other ":") 
                        (status)
                      } 
                      {
                        (DQ ("Reporting coverage results to Coveralls for service ") 
                          (BracedVarSub
                            token: <VSub_Name CI_NAME>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                            spids: [3058 3061]
                          )
                        )
                      }
                    )
                    (AndOr
                      children: [
                        (C {(${ VSub_Name KUBE_GOVERALLS_BIN)} 
                          {(-coverprofile) (Lit_Other "=") (DQ (${ VSub_Name COMBINED_COVER_PROFILE))} 
                          {
                            (BracedVarSub
                              token: <VSub_Name CI_NAME>
                              suffix_op: 
                                (StringUnary
                                  op_id: VTest_ColonPlus
                                  arg_word: {(DQ ("-service=") (${ VSub_Name CI_NAME))}
                                )
                              spids: [3079 3088]
                            )
                          } 
                          {
                            (BracedVarSub
                              token: <VSub_Name COVERALLS_REPO_TOKEN>
                              suffix_op: 
                                (StringUnary
                                  op_id: VTest_ColonPlus
                                  arg_word: {(DQ ("-repotoken=") (${ VSub_Name COVERALLS_REPO_TOKEN))}
                                )
                              spids: [3092 3101]
                            )
                          }
                        )
                        (C {(true)})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 3045]
                )
              ]
              spids: [-1 3110]
            )
          ]
          spids: [3009]
        )
      spids: [3005 3008]
    )
    (FuncDef
      name: checkFDs
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:fileslimit)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(ulimit)} {(-n)})])
                          left_token: <Left_CommandSub "$(">
                          spids: [3134 3138]
                        )
                      )
                    }
                  spids: [3132]
                )
              ]
              spids: [3130]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_lt
                              left: {($ VSub_Name "$fileslimit")}
                              right: {(1000)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Sentence
                      child: 
                        (C {(echo)} 
                          {
                            (DQ ("WARNING: ulimit -n (files) should be at least 1000, is ") 
                              ($ VSub_Name "$fileslimit") (", may cause test failure")
                            )
                          }
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  spids: [-1 3155]
                )
              ]
              spids: [-1 3168]
            )
          ]
          spids: [3119]
        )
      spids: [3115 3118]
    )
    (C {(checkFDs)})
    (SimpleCommand
      words: [{(read)} {(-a)} {(apiVersions)}]
      redirects: [
        (Redir
          op_id: Redir_TLess
          fd: -1
          arg_word: {(DQ (${ VSub_Name KUBE_TEST_API_VERSIONS))}
          spids: [3191]
        )
      ]
      more_env: [(env_pair name:IFS val:{(SQ <";">)} spids:[3180])]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:apiVersionsCount)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name apiVersions>
                prefix_op: VSub_Pound
                bracket_op: (WholeArray op_id:Lit_At)
                spids: [3200 3206]
              )
            }
          spids: [3199]
        )
      ]
      spids: [3199]
    )
    (ForExpr
      init: (BinaryAssign op_id:Arith_Equal left:(LhsName name:i) right:(ArithWord w:{(Lit_Digits 0)}))
      cond: 
        (ArithBinary
          op_id: Arith_Less
          left: (ArithVarRef name:i)
          right: (ArithWord w:{(${ VSub_Name apiVersionsCount)})
        )
      update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:apiVersion)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name apiVersions>
                        bracket_op: (ArrayIndex expr:(ArithVarRef name:i))
                        spids: [3235 3240]
                      )
                    }
                  spids: [3234]
                )
              ]
              spids: [3234]
            )
            (C {(echo)} {(DQ ("Running tests for APIVersion: ") ($ VSub_Name "$apiVersion"))})
            (SimpleCommand
              words: [{(runTests)} {(DQ ($ VSub_At "$@"))}]
              more_env: [
                (env_pair
                  name: KUBE_TEST_API
                  val: {(DQ (${ VSub_Name apiVersion))}
                  spids: [3255]
                )
              ]
            )
          ]
          spids: [3231 3268]
        )
    )
    (C {(reportCoverageToCoveralls)})
  ]
)