(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [80 88]
              )
            }
          spids: [79]
        )
      ]
      spids: [77]
    )
    (C {(source)} {(${ VSub_Name ROOT) (/config-build.sh)})
    (C {(mkdir)} {(-p)} {(${ VSub_Name RELEASES_DIR)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RELEASES_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Sentence
                        child: (C {(cd)} {(${ VSub_Name RELEASES_DIR)})
                        terminator: <Op_Semi ';'>
                      )
                      (C {(pwd)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [110 119]
              )
            }
          spids: [109]
        )
      ]
      spids: [109]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BINARY_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Sentence
                        child: (C {(cd)} {(${ VSub_Name ROOT)})
                        terminator: <Op_Semi ';'>
                      )
                      (C {(pwd)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [126 135]
              ) (/binaries)
            }
          spids: [125]
        )
      ]
      spids: [125]
    )
    (FuncDef
      name: clean-up
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(${ VSub_Name RELEASES_DIR)})
            (C {(rm)} {(-rf)} {(${ VSub_Name BINARY_DIR)})
          ]
          spids: [145]
        )
      spids: [139 144]
    )
    (FuncDef
      name: download-releases
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(${ VSub_Name RELEASES_DIR)})
            (C {(mkdir)} {(-p)} {(${ VSub_Name RELEASES_DIR)})
            (C {(echo)} {(DQ ('Download flannel release v') (${ VSub_Name FLANNEL_VERSION) (' ...'))})
            (C {(curl)} {(-L)} {(${ VSub_Name FLANNEL_DOWNLOAD_URL)} {(-o)} 
              {(${ VSub_Name RELEASES_DIR) (/flannel.tar.gz)}
            )
            (C {(echo)} {(DQ ('Download etcd release v') (${ VSub_Name ETCD_VERSION) (' ...'))})
            (C {(curl)} {(-L)} {(${ VSub_Name ETCD_DOWNLOAD_URL)} {(-o)} 
              {(${ VSub_Name RELEASES_DIR) (/etcd.tar.gz)}
            )
            (C {(echo)} {(DQ ('Download kubernetes release v') (${ VSub_Name K8S_VERSION) (' ...'))})
            (C {(curl)} {(-L)} {(${ VSub_Name K8S_CLIENT_DOWNLOAD_URL)} {(-o)} 
              {(${ VSub_Name RELEASES_DIR) (/kubernetes-client-linux-amd64.tar.gz)}
            )
            (C {(curl)} {(-L)} {(${ VSub_Name K8S_SERVER_DOWNLOAD_URL)} {(-o)} 
              {(${ VSub_Name RELEASES_DIR) (/kubernetes-server-linux-amd64.tar.gz)}
            )
            (C {(echo)} {(DQ ('Download docker release v') (${ VSub_Name DOCKER_VERSION) (' ...'))})
            (C {(curl)} {(-L)} {(${ VSub_Name DOCKER_DOWNLOAD_URL)} {(-o)} 
              {(${ VSub_Name RELEASES_DIR) (/docker.tar.gz)}
            )
          ]
          spids: [174]
        )
      spids: [168 173]
    )
    (FuncDef
      name: unpack-releases
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(${ VSub_Name BINARY_DIR)})
            (C {(mkdir)} {(-p)} {(${ VSub_Name BINARY_DIR) (/master/bin)})
            (C {(mkdir)} {(-p)} {(${ VSub_Name BINARY_DIR) (/node/bin)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_f
                              child: {(${ VSub_Name RELEASES_DIR) (/flannel.tar.gz)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(tar)} {(xzf)} {(${ VSub_Name RELEASES_DIR) (/flannel.tar.gz)} {(-C)} 
                      {(${ VSub_Name RELEASES_DIR)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/flanneld)} 
                      {(${ VSub_Name BINARY_DIR) (/master/bin)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/flanneld)} 
                      {(${ VSub_Name BINARY_DIR) (/node/bin)}
                    )
                  ]
                  spids: [16777215 383]
                )
              ]
              spids: [16777215 428]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_f
                              child: {(${ VSub_Name RELEASES_DIR) (/etcd.tar.gz)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(tar)} {(xzf)} {(${ VSub_Name RELEASES_DIR) (/etcd.tar.gz)} {(-C)} 
                      {(${ VSub_Name RELEASES_DIR)}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ETCD)
                          op: Equal
                          rhs: {(DQ (etcd-v) (${ VSub_Name ETCD_VERSION) (-linux-amd64))}
                          spids: [470]
                        )
                      ]
                      spids: [470]
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/) ($ VSub_Name '$ETCD') (/etcd)} 
                      {(${ VSub_Name RELEASES_DIR) (/) ($ VSub_Name '$ETCD') (/etcdctl)} {(${ VSub_Name BINARY_DIR) (/master/bin)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/) ($ VSub_Name '$ETCD') (/etcd)} 
                      {(${ VSub_Name RELEASES_DIR) (/) ($ VSub_Name '$ETCD') (/etcdctl)} {(${ VSub_Name BINARY_DIR) (/node/bin)}
                    )
                  ]
                  spids: [16777215 451]
                )
              ]
              spids: [16777215 528]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_f
                              child: 
                                {(${ VSub_Name RELEASES_DIR) (/kubernetes-client-linux-amd64.tar.gz)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(tar)} {(xzf)} 
                      {(${ VSub_Name RELEASES_DIR) (/kubernetes-client-linux-amd64.tar.gz)} {(-C)} {(${ VSub_Name RELEASES_DIR)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/kubernetes/client/bin/kubectl)} 
                      {(${ VSub_Name BINARY_DIR)}
                    )
                  ]
                  spids: [16777215 551]
                )
              ]
              spids: [16777215 582]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_f
                              child: 
                                {(${ VSub_Name RELEASES_DIR) (/kubernetes-server-linux-amd64.tar.gz)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(tar)} {(xzf)} 
                      {(${ VSub_Name RELEASES_DIR) (/kubernetes-server-linux-amd64.tar.gz)} {(-C)} {(${ VSub_Name RELEASES_DIR)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/kubernetes/server/bin/kube-apiserver)} 
                      {(${ VSub_Name RELEASES_DIR) (/kubernetes/server/bin/kube-controller-manager)} {(${ VSub_Name RELEASES_DIR) (/kubernetes/server/bin/kube-scheduler)} 
                      {(${ VSub_Name BINARY_DIR) (/master/bin)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/kubernetes/server/bin/kubelet)} 
                      {(${ VSub_Name RELEASES_DIR) (/kubernetes/server/bin/kube-proxy)} {(${ VSub_Name BINARY_DIR) (/node/bin)}
                    )
                  ]
                  spids: [16777215 601]
                )
              ]
              spids: [16777215 667]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_f
                              child: {(${ VSub_Name RELEASES_DIR) (/docker.tar.gz)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(tar)} {(xzf)} {(${ VSub_Name RELEASES_DIR) (/docker.tar.gz)} {(-C)} 
                      {(${ VSub_Name RELEASES_DIR)}
                    )
                    (C {(cp)} {(${ VSub_Name RELEASES_DIR) (/docker/docker) (Lit_Other '*')} 
                      {(${ VSub_Name BINARY_DIR) (/node/bin)}
                    )
                  ]
                  spids: [16777215 689]
                )
              ]
              spids: [16777215 723]
            )
            (C {(chmod)} {(-R)} {(Lit_Other '+') (x)} {(${ VSub_Name BINARY_DIR)})
            (C {(echo)} {(DQ ('Done! All binaries are stored in ') (${ VSub_Name BINARY_DIR))})
          ]
          spids: [331]
        )
      spids: [325 330]
    )
    (FuncDef
      name: parse-opt
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:opt)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{})
                        spids: [763 766]
                      )
                    }
                  spids: [762]
                )
              ]
              spids: [760]
            )
            (Case
              to_match: {($ VSub_Name '$opt')}
              arms: [
                (case_arm
                  pat_list: [{(download)}]
                  action: [(C {(download-releases)})]
                  spids: [777 778 784 16777215]
                )
                (case_arm
                  pat_list: [{(unpack)}]
                  action: [(C {(unpack-releases)})]
                  spids: [787 788 794 16777215]
                )
                (case_arm
                  pat_list: [{(clean)}]
                  action: [(C {(clean-up)})]
                  spids: [797 798 804 16777215]
                )
                (case_arm
                  pat_list: [{(all)}]
                  action: [(C {(download-releases)}) (C {(unpack-releases)})]
                  spids: [807 808 817 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(echo)} {(DQ ('Usage: '))})
                    (C {(echo)} {(DQ ('   build.sh <command>'))})
                    (C {(echo)} {(DQ ('Commands:'))})
                    (C {(echo)} 
                      {(DQ ('   clean      Clean up downloaded releases and unpacked binaries.'))}
                    )
                    (C {(echo)} 
                      {
                        (DQ ('   download   Download releases to ') 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name RELEASES_DIR) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.)
                        )
                      }
                    )
                    (C {(echo)} 
                      {
                        (DQ ('   unpack     Unpack releases downloaded in ') 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name RELEASES_DIR) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (', and copy binaries to ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name BINARY_DIR) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.)
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('   all        Download releases and unpack them.'))})
                  ]
                  spids: [820 821 891 16777215]
                )
              ]
              spids: [770 774 894]
            )
          ]
          spids: [757]
        )
      spids: [751 756]
    )
    (C {(parse-opt)} {($ VSub_At '$@')})
  ]
)