(command.CommandList
  children: [
    (C {<set>} {<-euo>} {<pipefail>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C 
                          {
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  words: [{<which>} {(DQ <spacejam>)}]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (redir
                                      op: <Id.Redir_Great '2>'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                            )
                          }
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ 
                  <
'Couldn\'t find executable \'spacejam\' - try installing the package from npm with \'sudo -H npm install -g spacejam\'?'
                  >
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [15 35]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SCRIPT_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.AndOr
                    ops: [Id.Op_DAmp]
                    children: [
                      (C {<cd>} 
                        {
                          (DQ 
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (C {<dirname>} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: <Id.VSub_Name BASH_SOURCE>
                                        bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                                      )
                                    )
                                  }
                                )
                            )
                          )
                        }
                      )
                      (C {<pwd>})
                    ]
                  )
              )
            }
          spids: [52]
        )
      ]
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$SCRIPT_DIR'))})
    (command.ShFunction
      name: run_build
      body: 
        (BraceGroup
          children: [
            (command.Subshell
              child: 
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$SCRIPT_DIR') <'/..'>)})
                    (C {<make>} {<shell-env>})
                  ]
                )
            )
            (C {<cd>} {(DQ ($ Id.VSub_DollarName '$SCRIPT_DIR'))})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SKIP_BUILD)
          op: assign_op.Equal
          rhs: {(DQ <no>)}
          spids: [115]
        )
      ]
    )
    (command.ShFunction
      name: handle_args
      body: 
        (BraceGroup
          children: [
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: (C {<getopts>} {(DQ <f>)} {<opt>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {($ Id.VSub_DollarName '$opt')}
                      arms: [
                        (case_arm
                          pat_list: [{<f>}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SKIP_BUILD)
                                  op: assign_op.Equal
                                  rhs: {(DQ <yes>)}
                                  spids: [152]
                                )
                              ]
                            )
                          ]
                          spids: [148 149 158 -1]
                        )
                        (case_arm
                          pat_list: [{<Id.Lit_Star '*'>}]
                          action: [
                            (C {<echo>} {(DQ <'You can add \'-f\' to skip the build step'>)})
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [161 162 177 -1]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {<handle_args>} {(DQ ($ Id.VSub_At '$@'))})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ <yes>)} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} 
                      {(DQ ($ Id.VSub_DollarName '$SKIP_BUILD'))} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<run_build>})]
          spids: [194 212]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SETTINGS)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<mktemp>}))}
          spids: [220]
        )
      ]
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$SETTINGS')}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<__EOF__>}
              here_end_span_id: 289
              stdin_parts: [
                <'{\n'>
                <'  '>
                <Id.Right_DoubleQuote '"'>
                <public>
                <Id.Right_DoubleQuote '"'>
                <': {\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <buildstamp>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'[local dev front-end]'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <allowDemoAccounts>
                <Id.Right_DoubleQuote '"'>
                <': true,\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <allowDevAccounts>
                <Id.Right_DoubleQuote '"'>
                <': true,\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <allowUninvited>
                <Id.Right_DoubleQuote '"'>
                <': '>
                (braced_var_sub
                  token: <Id.VSub_Name ALLOW_UNINVITED>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<false>})
                )
                <',\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <isTesting>
                <Id.Right_DoubleQuote '"'>
                <': true,\n'>
                <'    '>
                <Id.Right_DoubleQuote '"'>
                <wildcardHost>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'*.local.sandstorm.io'>
                <Id.Right_DoubleQuote '"'>
                <'\n'>
                <'  }\n'>
                <'}\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'PYTHONPATH='> 
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: (C {(DQ ($ Id.VSub_DollarName '$SCRIPT_DIR') <'/../find-meteor-dev-bundle.sh'>)})
        ) <'/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib'>
      }
    )
    (C {<exec>} {<spacejam>} {<test-packages>} {<--settings>} {($ Id.VSub_DollarName '$SETTINGS')} 
      {<'./packages/sandstorm-permissions'>}
    )
  ]
)