(CommandList
  children: [
    (C {(set)} {(-euo)} {(pipefail)})
    (C {(shopt)} {(-s)} {(extglob)})
    (C {(rm)} {(-rf)} {(bundle)})
    (FuncDef
      name: fail
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ("make-bundle.sh: FAILED at line ") ($ VSub_Number "$1"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[86])]
            )
            (C {(rm)} {(-rf)} {(bundle)})
            (C {(exit)} {(1)})
          ]
          spids: [76]
        )
      spids: [72 75]
    )
    (C {(trap)} {(SQ <"fail ${LINENO}">)} {(ERR)})
    (FuncDef
      name: copyDep
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:FILE)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [127]
                )
              ]
              spids: [125]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:DST)
                  op: Equal
                  rhs: 
                    {(bundle) 
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name FILE>
                          suffix_op: 
                            (PatSub
                              pat: 
                                {(EscapedLiteralPart token:<Lit_EscapedChar "\\/">) (usr) 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar "\\/">
                                  ) (local)
                                }
                              replace: {(EscapedLiteralPart token:<Lit_EscapedChar "\\/">) (usr)}
                              do_all: False
                              do_prefix: True
                              do_suffix: False
                            )
                          spids: [136 147]
                        )
                      )
                    }
                  spids: [133]
                )
              ]
              spids: [131]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other "[")} {(-e)} {(DQ ($ VSub_Name "$DST"))} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(Lit_Other ":")})]
                  spids: [-1 165]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name "$FILE"))}
                              right: {(/etc/) (Lit_Other "*")}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-f)} {(DQ ($ VSub_Name "$FILE"))} 
                                  {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ($ VSub_Name "$FILE"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: -1
                                  arg_word: {(tmp/host.list)}
                                  spids: [220]
                                )
                              ]
                            )
                          ]
                          spids: [-1 211]
                        )
                      ]
                      spids: [-1 225]
                    )
                  ]
                  spids: [175 191]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(-h)} {(DQ ($ VSub_Name "$FILE"))} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(mkdir)} {(-p)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {(DQ ($ VSub_Name "$DST"))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [272 278]
                        )
                      }
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:LINK)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(readlink)} {(-f)} {(DQ ($ VSub_Name "$FILE"))})]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [284 292]
                              )
                            }
                          spids: [283]
                        )
                      ]
                      spids: [281]
                    )
                    (C {(ln)} {(-sf)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name LINK>
                            suffix_op: 
                              (PatSub
                                pat: 
                                  {(EscapedLiteralPart token:<Lit_EscapedChar "\\/">) (usr) 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar "\\/">
                                    ) (local)
                                  }
                                replace: {(EscapedLiteralPart token:<Lit_EscapedChar "\\/">) (usr)}
                                do_all: False
                                do_prefix: True
                                do_suffix: False
                              )
                            spids: [300 311]
                          )
                        )
                      } {(DQ ($ VSub_Name "$DST"))}
                    )
                    (C {(copyDep)} {(DQ ($ VSub_Name "$LINK"))})
                  ]
                  spids: [228 241]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(-d)} {(DQ ($ VSub_Name "$FILE"))} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$DST"))})]
                  spids: [326 339]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(-f)} {(DQ ($ VSub_Name "$FILE"))} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(mkdir)} {(-p)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {(DQ ($ VSub_Name "$DST"))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [379 385]
                        )
                      }
                    )
                    (C {(cp)} {(DQ ($ VSub_Name "$FILE"))} {(DQ ($ VSub_Name "$DST"))})
                  ]
                  spids: [355 368]
                )
              ]
              spids: [-1 399]
            )
          ]
          spids: [117]
        )
      spids: [113 116]
    )
    (FuncDef
      name: copyDeps
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(Sentence child:(C {(read)} {(FILE)}) terminator:<Op_Semi ";">)]
              body: (DoGroup children:[(C {(copyDep)} {(DQ ($ VSub_Name "$FILE"))})] spids:[423433])
            )
          ]
          spids: [408]
        )
      spids: [404 407]
    )
    (ForEach
      iter_name: CMD
      iter_words: [{(zip)} {(unzip)} {(xz)} {(gpg)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(which)} {(DQ ($ VSub_Name "$CMD"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [469]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Please install ") ($ VSub_Name "$CMD"))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[484])]
                    )
                    (C {(fail)} {(${ VSub_Name LINENO)})
                  ]
                  spids: [-1 474]
                )
              ]
              spids: [-1 495]
            )
          ]
          spids: [456 497]
        )
      spids: [446 454]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:METEOR_DEV_BUNDLE)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(./find-meteor-dev-bundle.sh)})])
                left_token: <Left_CommandSub "$(">
                spids: [501 503]
              )
            }
          spids: [500]
        )
      ]
      spids: [500]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NODE_BUILD_ROOT)
          op: Equal
          rhs: {(/var/tmp/sandstorm-node-build-dir)}
          spids: [530]
        )
      ]
      spids: [530]
    )
    (C {(echo)} {(DQ ("Building node out-of-tree"))})
    (C {(rm)} {(-rf)} {(DQ ($ VSub_Name "$NODE_BUILD_ROOT"))})
    (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$NODE_BUILD_ROOT"))})
    (C {(cp)} {(-a)} {(deps/node)} {(DQ ($ VSub_Name "$NODE_BUILD_ROOT"))})
    (C {(pushd)} {(DQ ($ VSub_Name "$NODE_BUILD_ROOT") (/node))})
    (C {(./configure)} {(--partly-static)})
    (C {(make)} 
      {(-j) 
        (CommandSubPart
          command_list: (CommandList children:[(C {(nproc)})])
          left_token: <Left_CommandSub "$(">
          spids: [582 584]
        )
      }
    )
    (C {(popd)})
    (C {(mkdir)} {(-p)} {(deps/node/out)})
    (C {(rm)} {(-rf)} {(deps/node/out/) (Lit_Other "*")})
    (C {(mv)} {(DQ ($ VSub_Name "$NODE_BUILD_ROOT") (/node/out)) (/) (Lit_Other "*")} {(deps/node/out/)})
    (C {(cp)} {(-r)} {(shell-build/bundle)} {(bundle)})
    (C {(rm)} {(-f)} {(bundle/README)})
    (C {(cp)} {(meteor-bundle-main.js)} {(bundle/sandstorm-main.js)})
    (Subshell
      child: 
        (AndOr
          children: [
            (C {(cd)} {(bundle/programs/server)})
            (SimpleCommand
              words: [{(DQ ($ VSub_Name "$METEOR_DEV_BUNDLE") (/bin/npm))} {(install)}]
              more_env: [
                (env_pair
                  name: PATH
                  val: 
                    {($ VSub_Name "$PWD") (/deps/node/out/Release) (Lit_Other ":") 
                      ($ VSub_Name "$METEOR_DEV_BUNDLE") (/lib/node_modules/.bin) (Lit_Other ":") ($ VSub_Name "$METEOR_DEV_BUNDLE") (/bin) (Lit_Other ":") 
                      ($ VSub_Name "$PATH")
                    }
                  spids: [670]
                )
              ]
            )
          ]
          op_id: Op_DAmp
        )
      spids: [661 688]
    )
    (C {(mkdir)} {(-p)} {(bundle/bin)})
    (C {(cp)} {(bin/sandstorm-http-bridge)} {(bundle/bin/sandstorm-http-bridge)})
    (C {(cp)} {(bin/sandstorm)} {(bundle/sandstorm)})
    (C {(cp)} {(deps/node/out/Release/node)} {(bundle/bin)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_BUNDLE_BASE)
          op: Equal
          rhs: {(sandstorm-171)}
          spids: [735]
        )
      ]
      spids: [735]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_BUNDLE_FILENAME)
          op: Equal
          rhs: {($ VSub_Name "$OLD_BUNDLE_BASE") (.tar.xz)}
          spids: [738]
        )
      ]
      spids: [738]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_BUNDLE_PATH)
          op: Equal
          rhs: {(hack/) ($ VSub_Name "$OLD_BUNDLE_FILENAME")}
          spids: [742]
        )
      ]
      spids: [742]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_BUNDLE_SHA256)
          op: Equal
          rhs: {(ebffd643dffeba349f139bee34e4ce33fd9b1298fafc1d6a31eb35a191059a99)}
          spids: [746]
        )
      ]
      spids: [746]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OLD_MONGO_FILES)
          op: Equal
          rhs: 
            {
              (DQ ($ VSub_Name "$OLD_BUNDLE_BASE") ("/bin/mongo ") ($ VSub_Name "$OLD_BUNDLE_BASE") 
                (/bin/mongod)
              )
            }
          spids: [749]
        )
      ]
      spids: [749]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(KW_Bang "!")} {(-e)} {(DQ ($ VSub_Name "$OLD_BUNDLE_PATH"))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ("Fetching ") ($ VSub_Name "$OLD_BUNDLE_FILENAME") (" to extract a mongo 2.6..."))
              }
            )
            (C {(curl)} {(--output)} {(DQ ($ VSub_Name "$OLD_BUNDLE_PATH"))} 
              {(https) (Lit_Other ":") (//dl.sandstorm.io/) ($ VSub_Name "$OLD_BUNDLE_FILENAME")}
            )
          ]
          spids: [-1 773]
        )
      ]
      spids: [-1 798]
    )
    (SimpleCommand
      words: [{(sha256sum)} {(--check)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {(DQ ($ VSub_Name "$OLD_BUNDLE_SHA256") ("  ") ($ VSub_Name "$OLD_BUNDLE_PATH") ("\n"))}
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [808]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:rc) op:Equal rhs:{($ VSub_QMark "$?")} spids:[818])]
      spids: [818]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {($ VSub_Name "$rc")} {(-ne)} {(0)} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("Old bundle did not match expected checksum.  Aborting."))})
            (C {(exit)} {(1)})
          ]
          spids: [-1 834]
        )
      ]
      spids: [-1 848]
    )
    (C {(tar)} {(xf)} {($ VSub_Name "$OLD_BUNDLE_PATH")} 
      {(--transform) (Lit_Other "=") (s/) (Lit_Other "^") (${ VSub_Name OLD_BUNDLE_BASE) (/bundle/)} {($ VSub_Name "$OLD_MONGO_FILES")}
    )
    (C {(cp)} 
      {
        (CommandSubPart
          command_list: (CommandList children:[(C {(which)} {(zip)} {(unzip)} {(xz)} {(gpg)})])
          left_token: <Left_CommandSub "$(">
          spids: [874 884]
        )
      } {(bundle/bin)}
    )
    (C {(ln)} {(-s)} {(../sandstorm)} {(bundle/bin/spk)})
    (C {(chmod)} {(u) (Lit_Other "+") (w)} {(bundle/bin/) (Lit_Other "*")})
    (C {(mkdir)} {(-p)} 
      (BracedWordTree
        parts: [(bundle/usr/include/) (BracedAltPart words:[{(capnp)}{(sandstorm)}])]
      )
    )
    (C {(cp)} {(src/capnp/) (KW_Bang "!")})
    (Subshell child:(C {(Lit_Other "*") (test) (Lit_Other "*")}) spids:[941945])
    (C {(.capnp)} {(bundle/usr/include/capnp)})
    (C {(cp)} {(src/sandstorm/) (Lit_Other "*") (.capnp)} {(bundle/usr/include/sandstorm)})
    (C {(cp)} {(-r)} {(node_modules)} {(bundle)})
    (Pipeline
      children: [
        (Subshell
          child: 
            (AndOr
              children: [
                (C {(ldd)} {(bundle/bin/) (Lit_Other "*")} 
                  {
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [(C {(find)} {(bundle)} {(-name)} {(SQ <"*.node">)})]
                        )
                      left_token: <Left_CommandSub "$(">
                      spids: [980 990]
                    )
                  }
                )
                (C {(true)})
              ]
              op_id: Op_DPipe
            )
          spids: [974 995]
        )
        (C {(grep)} {(-o)} {(SQ <"[[:space:]]/[^ ]*">)})
        (C {(copyDeps)})
      ]
      negated: False
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(tmp/dnstest.c)} spids:[1023])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("#include <sys/types.h>\n") ("#include <sys/socket.h>\n") ("#include <netdb.h>\n") 
              ("#include <stdlib.h>\n") ("\n") ("int main() {\n") ("  struct addrinfo* result;\n") 
              ("  getaddrinfo(\"example.com\", \"http\", NULL, &result);\n") ("  return 0;\n") ("}\n")
            }
          do_expansion: False
          here_end: __EOF__
          was_filled: True
          spids: [1027]
        )
      ]
    )
    (C {(gcc)} {(tmp/dnstest.c)} {(-o)} {(tmp/dnstest)})
    (Pipeline
      children: [
        (SimpleCommand
          words: [{(strace)} {(tmp/dnstest)}]
          redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[1046])]
        )
        (C {(grep)} {(-o)} {(SQ <"\"/[^\"]*\"">)})
        (C {(tr)} {(-d)} {(SQ <"\"">)})
        (C {(copyDeps)})
      ]
      negated: False
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_DGreat fd:-1 arg_word:{(tmp/host.list)} spids:[1091])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("/etc/gai.conf\n") ("/etc/host.conf\n") ("/etc/hosts\n") ("/etc/nsswitch.conf\n") 
              ("/etc/resolvconf\n") ("/etc/resolv.conf\n") ("/etc/services\n") ("/run/resolvconf\n") ("/run/systemd/resolve/resolv.conf\n")
            }
          do_expansion: False
          here_end: __EOF__
          was_filled: True
          spids: [1095]
        )
      ]
    )
    (Pipeline
      children: [
        (C {(cat)} {(tmp/host.list)})
        (C {(grep)} {(-v)} {(SQ <"/ld[.]so[.]">)})
        (C {(sort)})
        (SimpleCommand
          words: [{(uniq)}]
          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(bundle/host.list)} spids:[1127])]
        )
      ]
      negated: False
    )
    (C {(mkdir)} {(-p)} 
      (BracedWordTree
        parts: [
          (bundle/)
          (BracedAltPart
            words: [{(dev)} {(proc)} {(tmp)} {(etc)} {(etc.host)} {(run)} {(run.host)} {(var)}]
          )
        ]
      )
    )
    (C {(touch)} 
      (BracedWordTree
        parts: [(bundle/dev/) (BracedAltPart words:[{(null)}{(zero)}{(random)}{(urandom)}{(fuse)}])]
      )
    )
    (C {(mkdir)} {(-p)} {(bundle/usr/lib/locale)})
    (C {(localedef)} {(--no-archive)} {(--inputfile) (Lit_Other "=") (./localedata-C)} 
      {(--charmap) (Lit_Other "=") (UTF-8)} {(bundle/usr/lib/locale/C.UTF-8)}
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {(-e)} {(.git)} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (SimpleCommand
              words: [{(git)} {(rev-parse)} {(HEAD)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(bundle/git-revision)}
                  spids: [1228]
                )
              ]
            )
          ]
          spids: [-1 1219]
        )
      ]
      else_action: [
        (SimpleCommand
          words: [{(echo)} {(DQ (unknown))}]
          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(bundle/git-revision)} spids:[1241])]
        )
      ]
      spids: [1232 1245]
    )
    (SimpleCommand
      words: [
        {(echo)}
        {
          (DQ ($ VSub_Name "$USER") ("@") ($ VSub_Name "$HOSTNAME") (" ") 
            (CommandSubPart
              command_list: (CommandList children:[(C {(date)})])
              left_token: <Left_CommandSub "$(">
              spids: [1254 1256]
            )
          )
        }
      ]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(bundle/buildstamp)} spids:[1259])]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(bundle/README.md)} spids:[1266])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("# Sandstorm Bundle\n") ("\n") ("See: http://sandstorm.io\n") ("\n") 
              ("This is a self-contained, batteries-included Sandstorm server. It should\n") ("work on any Linux kernel whose version is 3.13 or newer. The rest of your\n") 
              ("filesystem is not touched and may as well be empty; everything will run in\n") ("a chroot.\n") ("\n") ("This bundle is intended to be installed using the Sandstorm installer or\n") 
              ("updater. To install Sandstorm, please run:\n") ("\n") ("    curl https://install.sandstorm.io | bash\n") ("\n") 
              ("If you have already installed Sandstorm, you can update your installation to\n") ("this version by running:\n") ("\n") ("    service sandstorm update <filename>.tar.xz\n")
            }
          do_expansion: False
          here_end: __EOF__
          was_filled: True
          spids: [1270]
        )
      ]
    )
  ]
)